SYMBOL INDEX (1969 symbols across 435 files) FILE: applications/web/plugins/blog.ts type BlogPostMetadata (line 18) | type BlogPostMetadata = typeof blogPostMetadataSchema.infer; type ProcessedBlogPost (line 20) | interface ProcessedBlogPost { function toIsoDate (line 26) | function toIsoDate(value: string): string { function normalizeMetadataInput (line 30) | function normalizeMetadataInput(value: unknown): unknown { function splitFrontmatter (line 44) | function splitFrontmatter( function parseMetadata (line 72) | function parseMetadata(value: unknown, filePath: string): BlogPostMetada... function createSlug (line 93) | function createSlug(title: string): string { function removeRedundantLeadingHeading (line 102) | function removeRedundantLeadingHeading( function processBlogDirectory (line 122) | function processBlogDirectory(blogDir: string): ProcessedBlogPost[] { constant VIRTUAL_MODULE_ID (line 155) | const VIRTUAL_MODULE_ID = "virtual:blog-posts"; constant RESOLVED_ID (line 156) | const RESOLVED_ID = `\0${VIRTUAL_MODULE_ID}`; function blogPlugin (line 158) | function blogPlugin(): Plugin { FILE: applications/web/plugins/sitemap.ts constant SITE_URL (line 7) | const SITE_URL = "https://keeper.sh"; constant FRONTMATTER_PATTERN (line 8) | const FRONTMATTER_PATTERN = /^---\r?\n([\s\S]*?)\r?\n---/; type SitemapEntry (line 10) | interface SitemapEntry { function parseFrontmatter (line 22) | function parseFrontmatter(raw: string): Record { function discoverBlogEntries (line 28) | function discoverBlogEntries(blogDir: string): SitemapEntry[] { function buildSitemapXml (line 56) | function buildSitemapXml(entries: SitemapEntry[]): string { function sitemapPlugin (line 71) | function sitemapPlugin(): Plugin { FILE: applications/web/src/components/analytics-scripts.tsx function resolveConsentLabel (line 18) | function resolveConsentLabel(hasConsent: boolean): "granted" | "denied" { function AnalyticsScripts (line 23) | function AnalyticsScripts({ runtimeConfig }: { runtimeConfig: PublicRunt... FILE: applications/web/src/components/cookie-consent.tsx constant CARD_ENTER (line 11) | const CARD_ENTER = { opacity: 0, y: 10, filter: "blur(4px)" }; constant CARD_VISIBLE (line 12) | const CARD_VISIBLE = { opacity: 1, y: 0, filter: "blur(0px)" }; constant CARD_EXIT (line 13) | const CARD_EXIT = { opacity: 0, y: 10, filter: "blur(4px)" }; constant COLLAPSE_ANIMATE (line 14) | const COLLAPSE_ANIMATE = { height: "auto" }; constant COLLAPSE_EXIT (line 15) | const COLLAPSE_EXIT = { height: 0 }; constant CARD_TRANSITION (line 16) | const CARD_TRANSITION = { duration: 0.2 }; constant COLLAPSE_TRANSITION (line 17) | const COLLAPSE_TRANSITION = { duration: 0.2, delay: 0.15 }; function resolveConsentEventName (line 19) | function resolveConsentEventName(consent: boolean): string { function ConsentBannerContent (line 24) | function ConsentBannerContent({ children }: PropsWithChildren) { function ConsentBannerActions (line 32) | function ConsentBannerActions({ children }: PropsWithChildren) { function ConsentBannerCard (line 40) | function ConsentBannerCard({ children }: PropsWithChildren) { function CookieConsent (line 48) | function CookieConsent() { FILE: applications/web/src/components/ui/composites/navigation-menu/navigation-menu-editable.tsx type NavigationMenuEditableItemProps (line 14) | type NavigationMenuEditableItemProps = { function NavigationMenuEditableItem (line 23) | function NavigationMenuEditableItem(props: NavigationMenuEditableItemPro... type NavigationMenuEditableTemplateItemProps (line 67) | type NavigationMenuEditableTemplateItemProps = { function NavigationMenuEditableTemplateItem (line 78) | function NavigationMenuEditableTemplateItem(props: NavigationMenuEditabl... function useEditableCommit (line 125) | function useEditableCommit( function EditableItemInput (line 176) | function EditableItemInput({ function EditableTemplateItemInput (line 206) | function EditableTemplateItemInput({ function TemplateInputOverlay (line 252) | function TemplateInputOverlay({ function EditableItemDefaultValue (line 296) | function EditableItemDefaultValue({ value, label }: { value: ReactNode; ... function EditableItemDisplay (line 311) | function EditableItemDisplay({ FILE: applications/web/src/components/ui/composites/navigation-menu/navigation-menu-items.tsx type NavigationMenuProps (line 25) | type NavigationMenuProps = PropsWithChildren<{ function NavigationMenu (line 30) | function NavigationMenu({ type NavigationMenuItemProps (line 42) | type NavigationMenuItemProps = PropsWithChildren<{ type NavigationMenuLinkItemProps (line 46) | type NavigationMenuLinkItemProps = PropsWithChildren<{ type NavigationMenuButtonItemProps (line 53) | type NavigationMenuButtonItemProps = PropsWithChildren<{ type NavigationMenuItemLabelProps (line 59) | type NavigationMenuItemLabelProps = PropsWithChildren<{ type NavigationMenuItemTrailingProps (line 63) | type NavigationMenuItemTrailingProps = PropsWithChildren<{ function NavigationMenuItem (line 67) | function NavigationMenuItem({ function NavigationMenuLinkItem (line 84) | function NavigationMenuLinkItem({ function NavigationMenuButtonItem (line 120) | function NavigationMenuButtonItem({ function NavigationMenuItemIcon (line 144) | function NavigationMenuItemIcon({ children }: PropsWithChildren) { function NavigationMenuItemLabel (line 151) | function NavigationMenuItemLabel({ function NavigationMenuEmptyItem (line 171) | function NavigationMenuEmptyItem({ children }: PropsWithChildren) { function NavigationMenuItemTrailing (line 190) | function NavigationMenuItemTrailing({ type NavigationMenuToggleableItemProps (line 210) | type NavigationMenuToggleableItemProps = PropsWithChildren<{ function NavigationMenuCheckboxItem (line 217) | function NavigationMenuCheckboxItem({ function NavigationMenuToggleItem (line 245) | function NavigationMenuToggleItem({ FILE: applications/web/src/components/ui/composites/navigation-menu/navigation-menu-popover.tsx constant POPOVER_INITIAL (line 22) | const POPOVER_INITIAL = { opacity: 1 } as const; constant SHADOW_HIDDEN (line 23) | const SHADOW_HIDDEN = { boxShadow: "0 0 0 0 rgba(0,0,0,0)" } as const; constant SHADOW_VISIBLE (line 24) | const SHADOW_VISIBLE = { constant TRIGGER_INITIAL (line 27) | const TRIGGER_INITIAL = { height: "fit-content" as const, filter: "blur(... constant TRIGGER_ANIMATE (line 28) | const TRIGGER_ANIMATE = { height: 0, filter: "blur(0)", opacity: 0 }; constant TRIGGER_EXIT (line 29) | const TRIGGER_EXIT = { height: "fit-content" as const, filter: "blur(0)"... constant CONTENT_INITIAL (line 30) | const CONTENT_INITIAL = { height: 0, filter: "blur(0)", opacity: 0 }; constant CONTENT_ANIMATE (line 31) | const CONTENT_ANIMATE = { height: "fit-content" as const, filter: "blur(... constant CONTENT_EXIT (line 32) | const CONTENT_EXIT = { height: 0, filter: "blur(4px)", opacity: 0 }; constant POPOVER_CONTENT_STYLE (line 33) | const POPOVER_CONTENT_STYLE = { maxHeight: "16rem" } as const; type NavigationMenuPopoverProps (line 35) | type NavigationMenuPopoverProps = { function NavigationMenuPopover (line 41) | function NavigationMenuPopover({ function NavigationMenuPopoverPanel (line 142) | function NavigationMenuPopoverPanel({ children }: PropsWithChildren) { FILE: applications/web/src/components/ui/composites/navigation-menu/navigation-menu.contexts.ts type PopoverContextValue (line 9) | type PopoverContextValue = { function usePopover (line 18) | function usePopover() { FILE: applications/web/src/components/ui/composites/navigation-menu/navigation-menu.styles.ts type MenuVariant (line 16) | type MenuVariant = VariantProps["variant"]; constant LABEL_TONE (line 139) | const LABEL_TONE: Record, "muted" | "inverse" |... constant DISABLED_LABEL_TONE (line 144) | const DISABLED_LABEL_TONE: Record< FILE: applications/web/src/components/ui/primitives/animated-reveal.tsx constant HIDDEN (line 6) | const HIDDEN = { height: 0, opacity: 0, filter: "blur(4px)" }; constant VISIBLE (line 7) | const VISIBLE = { height: "fit-content", opacity: 1, filter: "blur(0)" }; constant CLIP_STYLE (line 8) | const CLIP_STYLE = { overflow: "clip" as const, overflowClipMargin: 4 }; type AnimatedRevealProps (line 10) | interface AnimatedRevealProps { function AnimatedReveal (line 16) | function AnimatedReveal({ show, skipInitial, children }: AnimatedRevealP... FILE: applications/web/src/components/ui/primitives/back-button.tsx type BackButtonProps (line 5) | interface BackButtonProps { function BackButton (line 12) | function BackButton({ FILE: applications/web/src/components/ui/primitives/button.tsx type ButtonProps (line 28) | type ButtonProps = VariantProps; type ButtonOptions (line 29) | type ButtonOptions = ComponentPropsWithoutRef<"button"> & ButtonProps; type LinkButtonOptions (line 30) | type LinkButtonOptions = Omit, "ch... type ExternalLinkButtonOptions (line 32) | type ExternalLinkButtonOptions = ComponentPropsWithoutRef<"a"> & Variant... function Button (line 34) | function Button({ children, size, variant, className, ...props }: Button... function LinkButton (line 40) | function LinkButton({ children, size, variant, className, ...props }: Li... function ExternalLinkButton (line 46) | function ExternalLinkButton({ children, size, variant, className, ...pro... function ButtonText (line 52) | function ButtonText({ children }: PropsWithChildren) { function ButtonIcon (line 56) | function ButtonIcon({ children }: PropsWithChildren) { FILE: applications/web/src/components/ui/primitives/checkbox.tsx type CheckboxVariant (line 42) | type CheckboxVariant = "default" | "highlight"; type CheckboxIndicatorProps (line 44) | interface CheckboxIndicatorProps { function CheckboxIndicator (line 50) | function CheckboxIndicator({ checked, variant, className }: CheckboxIndi... type CheckboxProps (line 58) | interface CheckboxProps { function Checkbox (line 65) | function Checkbox({ checked, onCheckedChange, children, className }: Che... FILE: applications/web/src/components/ui/primitives/collapsible.tsx type CollapsibleProps (line 20) | type CollapsibleProps = PropsWithChildren<{ function Collapsible (line 25) | function Collapsible({ trigger, children, className }: CollapsibleProps) { FILE: applications/web/src/components/ui/primitives/dashboard-heading.tsx type HeadingLevel (line 16) | type HeadingLevel = 1 | 2 | 3; type HeadingTag (line 17) | type HeadingTag = "h1" | "h2" | "h3" | "span" | "p"; type DashboardHeadingProps (line 18) | type DashboardHeadingProps = PropsWithChildren<{ level: HeadingLevel; as... function DashboardHeadingBase (line 22) | function DashboardHeadingBase({ children, level, as, className }: Dashbo... function DashboardHeading1 (line 27) | function DashboardHeading1({ children, as, className }: Omit { function FadeIn (line 29) | function FadeIn({ direction, children, ...props }: PropsWithChildren { type GithubStarButtonProps (line 59) | interface GithubStarButtonProps { type GithubStarButtonShellProps (line 63) | interface GithubStarButtonShellProps { type GithubStarErrorBoundaryState (line 67) | interface GithubStarErrorBoundaryState { class GithubStarErrorBoundary (line 71) | class GithubStarErrorBoundary extends Component< method getDerivedStateFromError (line 79) | static getDerivedStateFromError(): GithubStarErrorBoundaryState { method render (line 85) | render() { function GithubStarButtonShell (line 94) | function GithubStarButtonShell({ countLabel }: GithubStarButtonShellProp... function GithubStarButtonCount (line 110) | function GithubStarButtonCount({ initialStarCount }: GithubStarButtonPro... function GithubStarButton (line 132) | function GithubStarButton({ initialStarCount }: GithubStarButtonProps) { FILE: applications/web/src/components/ui/primitives/heading.tsx type HeadingLevel (line 15) | type HeadingLevel = 1 | 2 | 3; type HeadingTag (line 16) | type HeadingTag = "h1" | "h2" | "h3" | "span" | "p"; type HeadingProps (line 17) | type HeadingProps = PropsWithChildren<{ level: HeadingLevel; as?: Headin... function HeadingBase (line 21) | function HeadingBase({ children, level, as, className }: HeadingProps) { function Heading1 (line 26) | function Heading1({ children, as, className }: Omit & VariantProps>; type OrderedListProps (line 4) | type OrderedListProps = PropsWithChildren>; type ListItemProps (line 5) | type ListItemProps = PropsWithChildren>; function UnorderedList (line 7) | function UnorderedList({ children, className, ...props }: ListProps) { function OrderedList (line 21) | function OrderedList({ children, className, ...props }: OrderedListProps) { function ListItem (line 35) | function ListItem({ children, className, ...props }: ListItemProps) { FILE: applications/web/src/components/ui/primitives/markdown-components.tsx type MarkdownElementProps (line 6) | type MarkdownElementProps = function isExternalHttpLink (line 11) | function isExternalHttpLink(href: string): boolean { function MarkdownHeadingOne (line 15) | function MarkdownHeadingOne({ children }: MarkdownElementProps<"h1">) { function MarkdownHeadingTwo (line 19) | function MarkdownHeadingTwo({ children }: MarkdownElementProps<"h2">) { function MarkdownHeadingThree (line 23) | function MarkdownHeadingThree({ children }: MarkdownElementProps<"h3">) { function MarkdownParagraph (line 27) | function MarkdownParagraph({ children }: MarkdownElementProps<"p">) { function MarkdownLink (line 35) | function MarkdownLink({ function MarkdownUnorderedList (line 56) | function MarkdownUnorderedList({ function MarkdownOrderedList (line 62) | function MarkdownOrderedList({ function MarkdownListItem (line 68) | function MarkdownListItem({ children }: MarkdownElementProps<"li">) { function MarkdownInlineCode (line 72) | function MarkdownInlineCode({ children }: MarkdownElementProps<"code">) { function MarkdownCodeBlock (line 80) | function MarkdownCodeBlock({ function MarkdownBlockquote (line 90) | function MarkdownBlockquote({ children }: MarkdownElementProps<"blockquo... function MarkdownRule (line 100) | function MarkdownRule() { function MarkdownTable (line 104) | function MarkdownTable({ function MarkdownTableHeader (line 116) | function MarkdownTableHeader({ function MarkdownTableCell (line 122) | function MarkdownTableCell({ FILE: applications/web/src/components/ui/primitives/modal.tsx type ModalContextValue (line 9) | interface ModalContextValue { function useModal (line 16) | function useModal() { type ModalProps (line 22) | interface ModalProps extends PropsWithChildren { function Modal (line 27) | function Modal({ children, open: controlledOpen, onOpenChange }: ModalPr... function ModalContent (line 42) | function ModalContent({ children }: PropsWithChildren) { function ModalTitle (line 83) | function ModalTitle({ children }: PropsWithChildren) { function ModalDescription (line 87) | function ModalDescription({ children }: PropsWithChildren) { function ModalFooter (line 91) | function ModalFooter({ children }: PropsWithChildren) { FILE: applications/web/src/components/ui/primitives/pagination.tsx function Pagination (line 6) | function Pagination({ children }: PropsWithChildren) { function PaginationPrevious (line 10) | function PaginationPrevious({ to, onMouseEnter }: { to?: string; onMouse... function PaginationNext (line 26) | function PaginationNext({ to, onMouseEnter }: { to?: string; onMouseEnte... FILE: applications/web/src/components/ui/primitives/provider-icon-stack.tsx type ProviderIconStackProps (line 7) | interface ProviderIconStackProps { function ProviderIconStackItem (line 13) | function ProviderIconStackItem({ provider, calendarType }: { provider?: ... constant HIDDEN (line 21) | const HIDDEN = { opacity: 0, filter: "blur(4px)", width: 0 }; constant VISIBLE (line 22) | const VISIBLE = { opacity: 1, filter: "blur(0)", width: "auto" }; function resolveInitial (line 24) | function resolveInitial(animate: boolean) { function ProviderIconStack (line 29) | function ProviderIconStack({ providers, max = 4, animate = false }: Prov... FILE: applications/web/src/components/ui/primitives/provider-icon.tsx type ProviderIconProps (line 5) | interface ProviderIconProps { function resolveIconPath (line 11) | function resolveIconPath(provider: string | undefined): string | undefin... function ProviderIcon (line 16) | function ProviderIcon({ provider, calendarType, size = 15 }: ProviderIco... FILE: applications/web/src/components/ui/primitives/shimmer-text.tsx type ShimmerTextProps (line 4) | type ShimmerTextProps = PropsWithChildren<{ function ShimmerText (line 8) | function ShimmerText({ children, className }: ShimmerTextProps) { FILE: applications/web/src/components/ui/primitives/staggered-backdrop-blur.tsx constant LAYERS (line 1) | const LAYERS = [ function StaggeredBackdropBlur (line 12) | function StaggeredBackdropBlur() { FILE: applications/web/src/components/ui/primitives/template-text.tsx type TemplateTextProps (line 17) | interface TemplateTextProps { function TemplateText (line 24) | function TemplateText({ template, variables, disabled, className }: Temp... FILE: applications/web/src/components/ui/primitives/text-link.tsx type TextLinkProps (line 29) | type TextLinkProps = Omit, "childr... type ExternalTextLinkProps (line 31) | type ExternalTextLinkProps = ComponentPropsWithoutRef<"a"> & function TextLink (line 34) | function TextLink({ children, size, tone, align, className, ...props }: ... function ExternalTextLink (line 42) | function ExternalTextLink({ FILE: applications/web/src/components/ui/primitives/text.tsx type TextProps (line 34) | type TextProps = PropsWithChildren<{ function Text (line 43) | function Text({ as = "p", children, size, tone, align, className, style ... FILE: applications/web/src/components/ui/primitives/tooltip.tsx constant GAP (line 5) | const GAP = 4; constant ABOVE_CLEARANCE (line 6) | const ABOVE_CLEARANCE = 32; type TooltipProps (line 8) | type TooltipProps = PropsWithChildren<{ function Tooltip (line 12) | function Tooltip({ children, content }: TooltipProps) { FILE: applications/web/src/components/ui/primitives/upgrade-hint.tsx function UpgradeHint (line 6) | function UpgradeHint({ children }: PropsWithChildren) { function PremiumFeatureGate (line 19) | function PremiumFeatureGate({ locked, children, hint }: { locked: boolea... FILE: applications/web/src/components/ui/shells/layout.tsx constant GRID_COLS (line 4) | const GRID_COLS = "grid grid-cols-[minmax(1rem,1fr)_minmax(auto,48rem)_m... function Layout (line 6) | function Layout({ children }: PropsWithChildren) { function LayoutItem (line 14) | function LayoutItem({ children }: PropsWithChildren) { function LayoutRow (line 20) | function LayoutRow({ children, className }: PropsWithChildren<{ classNam... FILE: applications/web/src/components/ui/shells/route-shell.tsx type RouteShellProps (line 5) | type RouteShellProps = { function RouteShell (line 13) | function RouteShell(props: RouteShellProps) { FILE: applications/web/src/components/ui/shells/session-slot.tsx type SessionSlotProps (line 5) | interface SessionSlotProps { function SessionSlot (line 13) | function SessionSlot({ authenticated, unauthenticated }: SessionSlotProp... FILE: applications/web/src/config/gdpr.ts constant GDPR_COUNTRIES (line 2) | const GDPR_COUNTRIES = new Set([ FILE: applications/web/src/config/plans.ts type PlanConfig (line 3) | interface PlanConfig { FILE: applications/web/src/features/auth/components/auth-form.tsx function resolveInputTone (line 44) | function resolveInputTone(active: boolean | undefined): "error" | "neutr... function resolveSwitchSearch (line 49) | function resolveSwitchSearch(search?: StringSearchParams): StringSearchP... type AuthScreenCopy (line 56) | type AuthScreenCopy = { type SocialAuthProvider (line 67) | type SocialAuthProvider = { constant SOCIAL_AUTH_PROVIDERS (line 74) | const SOCIAL_AUTH_PROVIDERS: readonly SocialAuthProvider[] = [ function resolvePasswordFieldAnimation (line 89) | function resolvePasswordFieldAnimation(step: "email" | "password"): Targ... function AuthForm (line 97) | function AuthForm({ function redirectAfterAuth (line 148) | function redirectAfterAuth(authorizationSearch?: StringSearchParams) { function usePasskeyAutoFill (line 158) | function usePasskeyAutoFill(authorizationSearch?: StringSearchParams) { type PasskeyAutoFillProps (line 194) | interface PasskeyAutoFillProps { function PasskeyAutoFill (line 198) | function PasskeyAutoFill({ authorizationSearch }: PasskeyAutoFillProps) { function SocialAuthButtons (line 203) | function SocialAuthButtons({ function FormBackButton (line 239) | function FormBackButton({ step, onBack }: { step: "email" | "password"; ... function ForgotPasswordLink (line 244) | function ForgotPasswordLink({ function resolveAutoComplete (line 259) | function resolveAutoComplete( function readFormFieldValue (line 272) | function readFormFieldValue(formData: FormData, fieldName: string): stri... function CredentialForm (line 278) | function CredentialForm({ function resolveAuthErrorAnimation (line 398) | function resolveAuthErrorAnimation(active: boolean | undefined): TargetA... function AuthError (line 403) | function AuthError() { function CredentialInput (line 423) | function CredentialInput({ function PasswordInput (line 470) | function PasswordInput({ function AnimatedBackWrapper (line 506) | function AnimatedBackWrapper({ children }: { children: React.ReactNode }) { function BackButton (line 529) | function BackButton() { function StepBackButton (line 541) | function StepBackButton({ onBack }: { onBack: () => void }) { function SubmitButton (line 553) | function SubmitButton({ children }: { children: string }) { FILE: applications/web/src/features/auth/components/auth-switch-prompt.tsx function AuthSwitchPrompt (line 4) | function AuthSwitchPrompt({ children }: PropsWithChildren) { FILE: applications/web/src/features/auth/components/caldav-connect-form.tsx type CalDAVProvider (line 14) | type CalDAVProvider = "fastmail" | "icloud" | "caldav"; type ProviderConfig (line 16) | interface ProviderConfig { constant PROVIDER_CONFIGS (line 24) | const PROVIDER_CONFIGS: Record = { type CalendarOption (line 48) | interface CalendarOption { type CalDAVConnectFormProps (line 53) | interface CalDAVConnectFormProps { function readFormFieldValue (line 57) | function readFormFieldValue(formData: FormData, fieldName: string): stri... function isRecord (line 63) | function isRecord(value: unknown): value is Record { function isCalendarOption (line 67) | function isCalendarOption(value: unknown): value is CalendarOption { function parseCalendarOptions (line 72) | function parseCalendarOptions(value: unknown): CalendarOption[] | null { function parseAuthMethod (line 80) | function parseAuthMethod(value: unknown): "basic" | "digest" { function parseAccountId (line 86) | function parseAccountId(value: unknown): string | undefined { function CalDAVConnectForm (line 92) | function CalDAVConnectForm({ provider }: CalDAVConnectFormProps) { FILE: applications/web/src/features/auth/components/caldav-connect-page.tsx type CalDAVConnectPageProps (line 7) | interface CalDAVConnectPageProps { function CalDAVConnectPage (line 16) | function CalDAVConnectPage({ FILE: applications/web/src/features/auth/components/ics-connect-form.tsx function resolveSubmitLabel (line 14) | function resolveSubmitLabel(pending: boolean): string { function ICSFeedForm (line 19) | function ICSFeedForm() { FILE: applications/web/src/features/auth/components/oauth-preamble.tsx type Provider (line 18) | type Provider = "google" | "outlook" | "microsoft-365"; constant PROVIDER_LABELS (line 20) | const PROVIDER_LABELS: Record = { constant PERMISSIONS (line 26) | const PERMISSIONS = [ constant PROVIDER_SOCIAL_MAP (line 33) | const PROVIDER_SOCIAL_MAP: Partial> = { constant PROVIDER_API_MAP (line 38) | const PROVIDER_API_MAP: Record = { function PermissionsList (line 44) | function PermissionsList({ items }: { items: readonly string[] }) { type PreambleLayoutProps (line 57) | interface PreambleLayoutProps { function PreambleLayout (line 63) | function PreambleLayout({ provider, onSubmit, children }: PreambleLayout... type AuthOAuthPreambleProps (line 94) | interface AuthOAuthPreambleProps { function AuthOAuthPreamble (line 99) | function AuthOAuthPreamble({ type LinkOAuthPreambleProps (line 123) | interface LinkOAuthPreambleProps { function LinkOAuthPreamble (line 127) | function LinkOAuthPreamble({ provider }: LinkOAuthPreambleProps) { function ProviderIconPair (line 139) | function ProviderIconPair({ children }: { children: ReactNode }) { FILE: applications/web/src/features/blog/components/blog-post-cta.tsx function BlogPostCta (line 5) | function BlogPostCta() { FILE: applications/web/src/features/dashboard/components/event-graph.tsx constant DAYS_BEFORE (line 16) | const DAYS_BEFORE = 7; constant DAYS_AFTER (line 17) | const DAYS_AFTER = 7; constant TOTAL_DAYS (line 18) | const TOTAL_DAYS = DAYS_BEFORE + 1 + DAYS_AFTER; constant GRAPH_HEIGHT (line 19) | const GRAPH_HEIGHT = 96; constant MIN_BAR_HEIGHT (line 20) | const MIN_BAR_HEIGHT = 20; type Period (line 34) | type Period = "past" | "today" | "future"; constant MS_PER_DAY (line 42) | const MS_PER_DAY = 86_400_000; type DayData (line 61) | interface DayData { constant GROWTH_SPACE (line 79) | const GROWTH_SPACE = GRAPH_HEIGHT - MIN_BAR_HEIGHT; function resolveBarHeight (line 81) | function resolveBarHeight(count: number, maxCount: number): number { function resolveWeekTotal (line 105) | function resolveWeekTotal(days: DayData[]): number { function resolveEventCount (line 109) | function resolveEventCount(hoverIndex: number | null, days: DayData[]): ... function resolveLabel (line 114) | function resolveLabel(hoverIndex: number | null, days: DayData[]): string { function resolveDataAttr (line 119) | function resolveDataAttr(condition: boolean): "" | undefined { type EventGraphSummaryProps (line 124) | interface EventGraphSummaryProps { function EventGraphSummary (line 128) | function EventGraphSummary({ days }: EventGraphSummaryProps) { function EventGraphEventCount (line 137) | function EventGraphEventCount({ days }: EventGraphSummaryProps) { function EventGraphLabel (line 148) | function EventGraphLabel({ days }: EventGraphSummaryProps) { constant ANIMATED_TRANSITION (line 159) | const ANIMATED_TRANSITION = { duration: 0.3, ease: [0.4, 0, 0.2, 1] as c... constant INSTANT_TRANSITION (line 160) | const INSTANT_TRANSITION = { duration: 0 }; function resolveBarTransition (line 162) | function resolveBarTransition(shouldAnimate: boolean, dayIndex: number) { function useIsActiveDragTarget (line 167) | function useIsActiveDragTarget(index: number): boolean { type EventGraphBarProps (line 175) | interface EventGraphBarProps { type EventGraphBarsProps (line 217) | interface EventGraphBarsProps { function EventGraphBars (line 222) | function EventGraphBars({ days, shouldAnimate }: EventGraphBarsProps) { function EventGraph (line 288) | function EventGraph() { FILE: applications/web/src/features/dashboard/components/metadata-row.tsx type MetadataRowProps (line 11) | interface MetadataRowProps { function MetadataRow (line 19) | function MetadataRow({ label, value, icon, truncate = false, to }: Metad... FILE: applications/web/src/features/dashboard/components/sync-status.tsx function SyncProgressCircle (line 8) | function SyncProgressCircle({ percent }: { percent: number }) { function SyncProgressIndicator (line 41) | function SyncProgressIndicator() { function SyncStatusLabel (line 55) | function SyncStatusLabel() { function SyncTooltipContent (line 66) | function SyncTooltipContent() { function SyncStatus (line 74) | function SyncStatus() { FILE: applications/web/src/features/dashboard/components/upgrade-card.tsx function UpgradeCard (line 57) | function UpgradeCard({ children, className }: PropsWithChildren<{ classN... function UpgradeCardSection (line 65) | function UpgradeCardSection({ children, gap }: PropsWithChildren<{ gap?:... type UpgradeCardToggleProps (line 69) | type UpgradeCardToggleProps = PropsWithChildren<{ function UpgradeCardToggle (line 74) | function UpgradeCardToggle({ checked, onCheckedChange, children }: Upgra... function UpgradeCardFeature (line 91) | function UpgradeCardFeature({ children }: PropsWithChildren) { function UpgradeCardFeatureIcon (line 95) | function UpgradeCardFeatureIcon({ children }: PropsWithChildren) { function UpgradeCardActions (line 99) | function UpgradeCardActions({ children }: PropsWithChildren) { FILE: applications/web/src/features/marketing/components/marketing-cta.tsx function MarketingCtaSection (line 3) | function MarketingCtaSection({ children }: PropsWithChildren) { function MarketingCtaCard (line 11) | function MarketingCtaCard({ children }: PropsWithChildren) { FILE: applications/web/src/features/marketing/components/marketing-faq.tsx function MarketingFaqSection (line 4) | function MarketingFaqSection({ children }: PropsWithChildren) { function MarketingFaqList (line 8) | function MarketingFaqList({ children }: PropsWithChildren) { function MarketingFaqItem (line 16) | function MarketingFaqItem({ children }: PropsWithChildren) { function MarketingFaqQuestion (line 24) | function MarketingFaqQuestion({ children }: PropsWithChildren) { FILE: applications/web/src/features/marketing/components/marketing-feature-bento.tsx type MarketingFeatureBentoCardProps (line 4) | type MarketingFeatureBentoCardProps = PropsWithChildren<{ className?: st... function MarketingFeatureBentoSection (line 6) | function MarketingFeatureBentoSection({ children, id }: PropsWithChildre... function MarketingFeatureBentoGrid (line 10) | function MarketingFeatureBentoGrid({ children }: PropsWithChildren) { function MarketingFeatureBentoCard (line 18) | function MarketingFeatureBentoCard({ constant ILLUSTRATION_STYLE (line 29) | const ILLUSTRATION_STYLE = { type MarketingFeatureBentoIllustrationProps (line 34) | type MarketingFeatureBentoIllustrationProps = PropsWithChildren<{ function MarketingFeatureBentoIllustration (line 38) | function MarketingFeatureBentoIllustration({ children, plain }: Marketin... function MarketingFeatureBentoBody (line 51) | function MarketingFeatureBentoBody({ children }: PropsWithChildren) { FILE: applications/web/src/features/marketing/components/marketing-footer.tsx function MarketingFooter (line 4) | function MarketingFooter({ children }: PropsWithChildren) { function MarketingFooterTagline (line 12) | function MarketingFooterTagline({ children }: PropsWithChildren) { function MarketingFooterNav (line 20) | function MarketingFooterNav({ children }: PropsWithChildren) { function MarketingFooterNavGroup (line 28) | function MarketingFooterNavGroup({ children }: PropsWithChildren) { function MarketingFooterNavGroupLabel (line 36) | function MarketingFooterNavGroupLabel({ children }: PropsWithChildren) { type MarketingFooterNavItemProps (line 44) | type MarketingFooterNavItemProps = PropsWithChildren<{ function MarketingFooterNavItem (line 49) | function MarketingFooterNavItem({ children, to, href }: MarketingFooterN... FILE: applications/web/src/features/marketing/components/marketing-header.tsx function MarketingHeader (line 6) | function MarketingHeader({ children }: PropsWithChildren) { function MarketingHeaderBranding (line 19) | function MarketingHeaderBranding({ children, label }: PropsWithChildren<... function MarketingHeaderActions (line 23) | function MarketingHeaderActions({ children }: PropsWithChildren) { FILE: applications/web/src/features/marketing/components/marketing-how-it-works.tsx function MarketingHowItWorksSection (line 5) | function MarketingHowItWorksSection({ children }: PropsWithChildren) { constant ILLUSTRATION_STYLE (line 9) | const ILLUSTRATION_STYLE = { function MarketingHowItWorksCard (line 14) | function MarketingHowItWorksCard({ children }: PropsWithChildren) { function MarketingHowItWorksRow (line 22) | function MarketingHowItWorksRow({ children, className, reverse }: PropsW... function MarketingHowItWorksStepBody (line 30) | function MarketingHowItWorksStepBody({ function MarketingHowItWorksStepIllustration (line 42) | function MarketingHowItWorksStepIllustration({ children, align }: PropsW... FILE: applications/web/src/features/marketing/components/marketing-illustration-calendar.tsx type Skew (line 8) | interface Skew { type SkewTuple (line 14) | type SkewTuple = [Skew, Skew, Skew]; constant CALENDAR_COLUMNS (line 16) | const CALENDAR_COLUMNS = 7; constant CALENDAR_ROWS (line 17) | const CALENDAR_ROWS = 6; constant CALENDAR_DAYS_IN_MONTH (line 18) | const CALENDAR_DAYS_IN_MONTH = 31; constant CALENDAR_CELLS (line 19) | const CALENDAR_CELLS = CALENDAR_COLUMNS * CALENDAR_ROWS; constant CALENDAR_ANIMATION_EASE (line 20) | const CALENDAR_ANIMATION_EASE = [0.16, 0.85, 0.2, 1] as const; constant CALENDAR_DAY_NUMBERS (line 22) | const CALENDAR_DAY_NUMBERS = Array.from( type MarketingIllustrationCalendarCardProps (line 27) | interface MarketingIllustrationCalendarCardProps { type CalendarDayProps (line 47) | interface CalendarDayProps { function MarketingIllustrationCalendarCard (line 72) | function MarketingIllustrationCalendarCard({ function MarketingIllustrationCalendar (line 94) | function MarketingIllustrationCalendar({ children }: PropsWithChildren) { FILE: applications/web/src/features/marketing/components/marketing-pricing-section.tsx type ClassNameProps (line 10) | type ClassNameProps = PropsWithChildren<{ className?: string }>; type MarketingPricingCardProps (line 11) | type MarketingPricingCardProps = ClassNameProps & VariantProps extends SWRResponse { function useAnimatedSWR (line 9) | function useAnimatedSWR(key: string, config?: SWRConfiguration): A... FILE: applications/web/src/hooks/use-api-tokens.ts type ApiToken (line 4) | interface ApiToken { type CreatedApiToken (line 13) | interface CreatedApiToken { FILE: applications/web/src/hooks/use-entitlements.ts type EntitlementLimit (line 6) | interface EntitlementLimit { type Entitlements (line 11) | interface Entitlements { constant USAGE_CACHE_KEY (line 19) | const USAGE_CACHE_KEY = "/api/entitlements"; function useEntitlements (line 21) | function useEntitlements() { function useMutateEntitlements (line 51) | function useMutateEntitlements() { function canAddMore (line 83) | function canAddMore(entitlement: EntitlementLimit | undefined): boolean { FILE: applications/web/src/hooks/use-events.ts type CalendarEvent (line 6) | interface CalendarEvent { constant DAYS_PER_PAGE (line 16) | const DAYS_PER_PAGE = 7; function useEvents (line 38) | function useEvents() { function resolveEvents (line 72) | function resolveEvents(data: CalendarEvent[][] | undefined): CalendarEve... FILE: applications/web/src/hooks/use-passkeys.ts type Passkey (line 4) | interface Passkey { FILE: applications/web/src/hooks/use-session.ts type SessionUser (line 4) | interface SessionUser { function useSession (line 22) | function useSession() { FILE: applications/web/src/hooks/use-start-of-today.ts function resolveStartOfToday (line 3) | function resolveStartOfToday(): Date { function resolveMillisecondsUntilTomorrow (line 9) | function resolveMillisecondsUntilTomorrow(): number { function useStartOfToday (line 16) | function useStartOfToday(): Date { FILE: applications/web/src/hooks/use-subscription.ts type SubscriptionState (line 5) | interface SubscriptionState { type ActiveSubscription (line 10) | interface ActiveSubscription { type CustomerStateResponse (line 14) | interface CustomerStateResponse { constant SUBSCRIPTION_STATE_CACHE_KEY (line 18) | const SUBSCRIPTION_STATE_CACHE_KEY = "customer-state"; type UseSubscriptionOptions (line 40) | interface UseSubscriptionOptions { function useSubscription (line 53) | function useSubscription(options: UseSubscriptionOptions = {}) { function fetchSubscriptionStateWithApi (line 64) | async function fetchSubscriptionStateWithApi( FILE: applications/web/src/illustrations/how-it-works-configure.tsx function MiniToggle (line 1) | function MiniToggle({ checked }: { checked: boolean }) { constant SETTINGS (line 17) | const SETTINGS = [ function MiniSettingsRow (line 25) | function MiniSettingsRow({ label, checked }: { label: string; checked: b... function HowItWorksConfigure (line 36) | function HowItWorksConfigure() { FILE: applications/web/src/illustrations/how-it-works-connect.tsx constant PROVIDERS (line 3) | const PROVIDERS = [ function MiniMenuRow (line 11) | function MiniMenuRow({ icon, label }: { icon: string; label: string }) { function HowItWorksConnect (line 21) | function HowItWorksConnect() { FILE: applications/web/src/illustrations/how-it-works-sync.tsx constant PLACEHOLDER_COUNTS (line 8) | const PLACEHOLDER_COUNTS = [3, 5, 2, 7, 4, 6, 1, 8, 3, 5, 4, 6, 2, 7, 5]; constant GRAPH_HEIGHT (line 9) | const GRAPH_HEIGHT = 128; constant MIN_BAR_HEIGHT (line 10) | const MIN_BAR_HEIGHT = 16; constant GROWTH_SPACE (line 11) | const GROWTH_SPACE = GRAPH_HEIGHT - MIN_BAR_HEIGHT; constant MAX_COUNT (line 12) | const MAX_COUNT = Math.max(...PLACEHOLDER_COUNTS); constant TOTAL_EVENTS (line 13) | const TOTAL_EVENTS = PLACEHOLDER_COUNTS.reduce((sum, count) => sum + cou... constant TODAY_INDEX (line 14) | const TODAY_INDEX = 7; type Period (line 16) | type Period = "past" | "today" | "future"; function resolvePeriod (line 30) | function resolvePeriod(index: number): Period { function resolveBarHeight (line 36) | function resolveBarHeight(count: number): number { type BarData (line 40) | interface BarData { constant BARS (line 46) | const BARS: BarData[] = PLACEHOLDER_COUNTS.map((count, index) => ({ constant BAR_TRANSITION_EASE (line 52) | const BAR_TRANSITION_EASE = [0.4, 0, 0.2, 1] as const; function HowItWorksSync (line 54) | function HowItWorksSync() { FILE: applications/web/src/illustrations/marketing-illustration-contributors.tsx constant VISIBLE_COUNT (line 8) | const VISIBLE_COUNT = 3; constant ROTATE_INTERVAL_MS (line 9) | const ROTATE_INTERVAL_MS = 1800; constant FALLBACK_ROW_HEIGHT (line 10) | const FALLBACK_ROW_HEIGHT = 36; constant SLOT_STYLES (line 12) | const SLOT_STYLES = [ constant TRANSITION (line 18) | const TRANSITION = { type Contributor (line 24) | type Contributor = (typeof CONTRIBUTORS)[number]; function MarketingIllustrationContributors (line 52) | function MarketingIllustrationContributors() { FILE: applications/web/src/illustrations/marketing-illustration-providers.tsx constant ORBIT_ITEMS (line 3) | const ORBIT_ITEMS = Object.entries(providerIcons).reverse(); constant ORBIT_DURATION (line 4) | const ORBIT_DURATION = 12; constant RADIUS (line 5) | const RADIUS = 110; constant ICON_SIZE (line 6) | const ICON_SIZE = 32; function MarketingIllustrationProviders (line 8) | function MarketingIllustrationProviders() { FILE: applications/web/src/illustrations/marketing-illustration-setup.tsx type Phase (line 6) | type Phase = "button" | "cursor" | "click" | "syncing" | "done"; constant PHASE_DURATIONS (line 8) | const PHASE_DURATIONS: Record = { constant PHASE_ORDER (line 16) | const PHASE_ORDER: Phase[] = ["button", "cursor", "click", "syncing", "d... constant TRANSITION_ENTER (line 18) | const TRANSITION_ENTER = { constant INITIAL (line 24) | const INITIAL = { opacity: 0, scale: 0.9, filter: "blur(4px)" }; constant ANIMATE (line 25) | const ANIMATE = { opacity: 1, scale: 1, filter: "blur(0px)" }; constant EXIT (line 26) | const EXIT = { opacity: 0, scale: 0.9, filter: "blur(4px)" }; constant CIRCLE_RADIUS (line 28) | const CIRCLE_RADIUS = 16; constant CIRCLE_CIRCUMFERENCE (line 29) | const CIRCLE_CIRCUMFERENCE = 2 * Math.PI * CIRCLE_RADIUS; function SyncButton (line 31) | function SyncButton({ pressed }: { pressed: boolean }) { function SyncCircle (line 45) | function SyncCircle() { function MarketingIllustrationSetup (line 86) | function MarketingIllustrationSetup() { FILE: applications/web/src/illustrations/marketing-illustration-sync.tsx constant PATH_UPPER (line 2) | const PATH_UPPER = `M -10,20 L ${210 - R},20 Q 210,20 210,${20 + R} L 21... constant PATH_LOWER (line 3) | const PATH_LOWER = `M -10,80 L ${210 - R},80 Q 210,80 210,${80 - R} L 21... constant ICON_SIZE (line 5) | const ICON_SIZE = 24; constant PROVIDERS (line 7) | const PROVIDERS = [ function MarketingIllustrationSync (line 13) | function MarketingIllustrationSync() { FILE: applications/web/src/lib/analytics.ts constant CONSENT_COOKIE (line 3) | const CONSENT_COOKIE = "keeper.analytics_consent"; constant CONSENT_MAX_AGE (line 4) | const CONSENT_MAX_AGE = 60 * 60 * 24 * 182; function resolveConsentState (line 6) | function resolveConsentState(granted: boolean): "granted" | "denied" { function readCookieSource (line 11) | function readCookieSource(cookieHeader?: string): string { function readConsentValue (line 17) | function readConsentValue(cookieHeader?: string): string | null { function resolveEffectiveConsent (line 47) | function resolveEffectiveConsent(gdprApplies: boolean, cookieHeader?: st... constant ANALYTICS_EVENTS (line 61) | const ANALYTICS_EVENTS = { type EventProperties (line 95) | type EventProperties = Record; type IdentifyProps (line 101) | interface IdentifyProps { type ConversionOptions (line 115) | interface ConversionOptions { FILE: applications/web/src/lib/auth-capabilities.ts type SocialProviderId (line 5) | type SocialProviderId = keyof AuthCapabilities["socialProviders"]; type CredentialField (line 7) | interface CredentialField { FILE: applications/web/src/lib/auth.ts function authPost (line 4) | async function authPost(url: string, body: Record = {})... function authJsonPost (line 17) | async function authJsonPost(url: string, body: Record):... FILE: applications/web/src/lib/blog-posts.ts type BlogPostMetadata (line 4) | interface BlogPostMetadata { type BlogPost (line 14) | interface BlogPost { function findBlogPostBySlug (line 22) | function findBlogPostBySlug(slug: string): BlogPost | undefined { function formatIsoDate (line 41) | function formatIsoDate(isoDate: string): string { FILE: applications/web/src/lib/fetcher.ts class HttpError (line 1) | class HttpError extends Error { method constructor (line 2) | constructor( function fetcher (line 11) | async function fetcher(url: string): Promise { function apiFetch (line 17) | async function apiFetch( FILE: applications/web/src/lib/mcp-auth-flow.ts type SearchParams (line 3) | type SearchParams = Record; type StringSearchParams (line 4) | type StringSearchParams = Record; constant DEFAULT_POST_AUTH_PATH (line 6) | const DEFAULT_POST_AUTH_PATH = "/dashboard"; FILE: applications/web/src/lib/page-metadata.ts function formatMonthYear (line 7) | function formatMonthYear(isoDate: string): string { type PageMetadata (line 11) | interface PageMetadata { FILE: applications/web/src/lib/pluralize.ts function pluralize (line 1) | function pluralize(count: number, singular: string, plural: string = `${... FILE: applications/web/src/lib/route-access-guards.ts type RedirectTarget (line 1) | type RedirectTarget = "/dashboard" | "/login"; type SubscriptionPlan (line 3) | type SubscriptionPlan = "free" | "pro"; FILE: applications/web/src/lib/router-context.ts type AppAuthContext (line 3) | interface AppAuthContext { type AppJsonFetcher (line 7) | type AppJsonFetcher = (path: string, init?: RequestInit) => Promise; type ViteScript (line 9) | interface ViteScript { type ViteAssets (line 14) | interface ViteAssets { type AppRouterContext (line 22) | interface AppRouterContext { FILE: applications/web/src/lib/runtime-config.ts type PublicRuntimeConfig (line 3) | interface PublicRuntimeConfig { type RuntimeConfigSource (line 13) | interface RuntimeConfigSource { type ServerRuntimeConfigOptions (line 31) | interface ServerRuntimeConfigOptions { type Window (line 83) | interface Window { FILE: applications/web/src/lib/seo.ts constant SITE_URL (line 1) | const SITE_URL = "https://keeper.sh"; constant SITE_NAME (line 2) | const SITE_NAME = "Keeper.sh"; function canonicalUrl (line 4) | function canonicalUrl(path: string): string { function jsonLdScript (line 8) | function jsonLdScript(data: Record) { function seoMeta (line 12) | function seoMeta({ function breadcrumbSchema (line 72) | function breadcrumbSchema( function webPageSchema (line 87) | function webPageSchema(name: string, description: string, path: string) { function softwareApplicationSchema (line 100) | function softwareApplicationSchema() { function collectionPageSchema (line 140) | function collectionPageSchema(posts: Array<{ slug: string; metadata: { t... function blogPostingSchema (line 168) | function blogPostingSchema(post: { FILE: applications/web/src/lib/serialized-mutate.ts type ErrorHandler (line 1) | type ErrorHandler = (error: unknown) => void; type QueuedPatch (line 3) | interface QueuedPatch { function runFlush (line 12) | function runFlush( function drainPatchQueue (line 22) | function drainPatchQueue(key: string) { function serializedPatch (line 38) | function serializedPatch( type QueuedCall (line 71) | interface QueuedCall { function drainCallQueue (line 79) | function drainCallQueue(key: string) { function serializedCall (line 95) | function serializedCall( function defaultOnError (line 118) | function defaultOnError() {} FILE: applications/web/src/lib/session-cookie.ts constant SESSION_COOKIE (line 1) | const SESSION_COOKIE = "keeper.has_session=1"; function hasSessionCookie (line 3) | function hasSessionCookie(cookieHeader?: string): boolean { FILE: applications/web/src/lib/swr.ts function invalidateAccountsAndSources (line 7) | function invalidateAccountsAndSources( FILE: applications/web/src/lib/time.ts constant MINS_PER_HOUR (line 1) | const MINS_PER_HOUR = 60; constant HOURS_PER_DAY (line 2) | const HOURS_PER_DAY = 24; constant MINS_PER_DAY (line 3) | const MINS_PER_DAY = MINS_PER_HOUR * HOURS_PER_DAY; FILE: applications/web/src/providers/sync-provider-logic.ts type IncomingSocketAction (line 4) | type IncomingSocketAction = type AggregateDecision (line 10) | interface AggregateDecision { FILE: applications/web/src/providers/sync-provider.tsx type ConnectionState (line 9) | interface ConnectionState { constant MAX_RECONNECT_DELAY_MS (line 21) | const MAX_RECONNECT_DELAY_MS = 30_000; constant BASE_RECONNECT_DELAY_MS (line 22) | const BASE_RECONNECT_DELAY_MS = 2_000; constant INITIAL_AGGREGATE_TIMEOUT_MS (line 23) | const INITIAL_AGGREGATE_TIMEOUT_MS = 10_000; constant INITIAL_SYNC_STATE (line 25) | const INITIAL_SYNC_STATE: CompositeSyncState = { function SyncProvider (line 229) | function SyncProvider() { FILE: applications/web/src/routeTree.gen.ts type FileRoutesByFullPath (line 324) | interface FileRoutesByFullPath { type FileRoutesByTo (line 369) | interface FileRoutesByTo { type FileRoutesById (line 410) | interface FileRoutesById { type FileRouteTypes (line 461) | interface FileRouteTypes { type RootRouteChildren (line 600) | interface RootRouteChildren { type FileRoutesByPath (line 608) | interface FileRoutesByPath { type authRouteRouteChildren (line 948) | interface authRouteRouteChildren { type dashboardDashboardAccountsRouteRouteChildren (line 970) | interface dashboardDashboardAccountsRouteRouteChildren { type dashboardDashboardConnectRouteRouteChildren (line 991) | interface dashboardDashboardConnectRouteRouteChildren { type dashboardDashboardSettingsRouteRouteChildren (line 1005) | interface dashboardDashboardSettingsRouteRouteChildren { type dashboardRouteRouteChildren (line 1028) | interface dashboardRouteRouteChildren { type marketingBlogRouteRouteChildren (line 1062) | interface marketingBlogRouteRouteChildren { type marketingRouteRouteChildren (line 1075) | interface marketingRouteRouteChildren { type oauthAuthRouteRouteChildren (line 1093) | interface oauthAuthRouteRouteChildren { type oauthDashboardConnectRouteRouteChildren (line 1107) | interface oauthDashboardConnectRouteRouteChildren { type oauthDashboardRouteRouteChildren (line 1135) | interface oauthDashboardRouteRouteChildren { type oauthRouteRouteChildren (line 1146) | interface oauthRouteRouteChildren { FILE: applications/web/src/router.ts type CreateAppRouterOptions (line 11) | interface CreateAppRouterOptions { function getConfiguredApiOrigin (line 16) | function getConfiguredApiOrigin(): string | undefined { function resolveApiOrigin (line 24) | function resolveApiOrigin(request: Request | undefined): string { function resolveWebOrigin (line 41) | function resolveWebOrigin(request: Request | undefined): string { function createJsonFetcher (line 53) | function createJsonFetcher( function createApiFetcher (line 78) | function createApiFetcher( function createWebFetcher (line 86) | function createWebFetcher( function resolveRuntimeConfig (line 94) | function resolveRuntimeConfig(request: Request | undefined): PublicRunti... function createSessionChecker (line 105) | function createSessionChecker( function buildRouterContext (line 117) | function buildRouterContext( function createAppRouter (line 132) | function createAppRouter(options: CreateAppRouterOptions = {}) { type Register (line 144) | interface Register { FILE: applications/web/src/routes/(auth)/forgot-password.tsx function ForgotPasswordPage (line 26) | function ForgotPasswordPage() { function SuccessState (line 73) | function SuccessState() { FILE: applications/web/src/routes/(auth)/login.tsx function LoginPage (line 26) | function LoginPage() { FILE: applications/web/src/routes/(auth)/register.tsx function RegisterPage (line 26) | function RegisterPage() { FILE: applications/web/src/routes/(auth)/reset-password.tsx type SearchParams (line 15) | type SearchParams = { token?: string }; function ResetPasswordPage (line 31) | function ResetPasswordPage() { function ResetPasswordForm (line 38) | function ResetPasswordForm({ token }: { token: string }) { function SuccessState (line 105) | function SuccessState() { function InvalidTokenState (line 126) | function InvalidTokenState() { FILE: applications/web/src/routes/(auth)/route.tsx function AuthLayout (line 22) | function AuthLayout() { FILE: applications/web/src/routes/(auth)/verify-authentication.tsx function VerifyAuthenticationPage (line 10) | function VerifyAuthenticationPage() { FILE: applications/web/src/routes/(auth)/verify-email.tsx function VerifyEmailPage (line 21) | function VerifyEmailPage() { FILE: applications/web/src/routes/(dashboard)/dashboard/accounts/$accountId.$calendarId.tsx type SyncSetting (line 66) | interface SyncSetting { constant SYNC_SETTINGS (line 72) | const SYNC_SETTINGS: SyncSetting[] = [ constant EXCLUSION_SETTINGS (line 77) | const EXCLUSION_SETTINGS: SyncSetting[] = [ constant PROVIDER_EXCLUSION_SETTINGS (line 81) | const PROVIDER_EXCLUSION_SETTINGS: SyncSetting[] = [ constant PROVIDERS_WITH_EXTRA_SETTINGS (line 86) | const PROVIDERS_WITH_EXTRA_SETTINGS = new Set(["google"]); function patchSource (line 88) | function patchSource( function useSeedCalendarDetail (line 112) | function useSeedCalendarDetail(calendarId: string, calendar: CalendarDet... function CalendarDetailPage (line 125) | function CalendarDetailPage() { function CalendarPrevNext (line 167) | function CalendarPrevNext({ calendarId }: { calendarId: string }) { function CalendarHeader (line 190) | function CalendarHeader({ account }: { account: CalendarAccount }) { function CalendarTitle (line 205) | function CalendarTitle() { function RenameSection (line 210) | function RenameSection({ calendarId }: { calendarId: string }) { function RenameItem (line 224) | function RenameItem({ calendarId }: { calendarId: string }) { function RenameItemValue (line 242) | function RenameItemValue() { function DestinationsSeed (line 258) | function DestinationsSeed({ calendarId }: { calendarId: string }) { function DestinationsSection (line 271) | function DestinationsSection({ calendarId }: { calendarId: string }) { function DestinationCheckboxItem (line 305) | function DestinationCheckboxItem({ function DestinationCheckboxIndicator (line 394) | function DestinationCheckboxIndicator({ destinationId }: { destinationId... function SyncSettingsSection (line 406) | function SyncSettingsSection({ calendarId }: { calendarId: string }) { function SyncEventNameDisabledProvider (line 436) | function SyncEventNameDisabledProvider({ locked, children }: { locked: b... function SyncEventNameTemplateItem (line 441) | function SyncEventNameTemplateItem({ calendarId, locked }: { calendarId:... function SyncEventNameTemplateInput (line 465) | function SyncEventNameTemplateInput({ template }: { template: string }) { constant TEMPLATE_VARIABLES (line 469) | const TEMPLATE_VARIABLES = { calendar_name: "Calendar Name", event_name:... function SyncEventNameTemplateValue (line 471) | function SyncEventNameTemplateValue() { function SyncEventNameToggle (line 492) | function SyncEventNameToggle({ calendarId, locked }: { calendarId: strin... function SyncEventNameToggleIndicator (line 528) | function SyncEventNameToggleIndicator({ disabled }: { disabled: boolean ... function ExclusionsSection (line 540) | function ExclusionsSection({ calendarId, provider }: { calendarId: strin... function ExcludeFieldToggle (line 572) | function ExcludeFieldToggle({ function ExcludeFieldToggleIndicator (line 617) | function ExcludeFieldToggleIndicator({ field, matchesField, disabled }: ... function CalendarInfoSection (line 630) | function CalendarInfoSection({ account, accountId }: { account: Calendar... FILE: applications/web/src/routes/(dashboard)/dashboard/accounts/$accountId.index.tsx function CalendarList (line 35) | function CalendarList({ calendars, accountId }: { calendars: CalendarSou... function AccountDetailPage (line 56) | function AccountDetailPage() { function AccountPrevNext (line 143) | function AccountPrevNext({ accountId }: { accountId: string }) { FILE: applications/web/src/routes/(dashboard)/dashboard/accounts/$accountId.setup.tsx constant VALID_STEPS (line 25) | const VALID_STEPS = ["select", "rename", "destinations", "sources"] as c... type SetupStep (line 26) | type SetupStep = (typeof VALID_STEPS)[number]; type SetupSearch (line 28) | interface SetupSearch { type MappingRoute (line 34) | type MappingRoute = "destinations" | "sources"; type MappingResponseKey (line 35) | type MappingResponseKey = "destinationIds" | "sourceIds"; type CalendarMappingData (line 36) | type CalendarMappingData = Partial>; function isValidStep (line 38) | function isValidStep(value: unknown): value is SetupStep { function parseSearchIndex (line 43) | function parseSearchIndex(value: unknown): number | undefined { function parseSelectedIds (line 62) | function parseSelectedIds(commaIds: string | undefined): Set { function resolveStepCalendarIndex (line 67) | function resolveStepCalendarIndex(index: number, count: number): number { type SetupWorkflowData (line 73) | interface SetupWorkflowData { function resolveSetupWorkflowData (line 82) | function resolveSetupWorkflowData({ function resolveNextIndex (line 108) | function resolveNextIndex(currentIndex: number, totalCount: number): num... type SetupStepActions (line 114) | interface SetupStepActions { function createSetupStepActions (line 120) | function createSetupStepActions({ function SetupStepContent (line 170) | function SetupStepContent({ function buildMappingData (line 217) | function buildMappingData(responseKey: MappingResponseKey, ids: string[]... function useCalendarMapping (line 221) | function useCalendarMapping({ function AccountSetupPage (line 271) | function AccountSetupPage() { function SelectSection (line 324) | function SelectSection({ function RenameSection (line 399) | function RenameSection({ function EmptyStepSection (line 457) | function EmptyStepSection({ heading, message, buttonLabel, onNext }: { function DestinationsSection (line 473) | function DestinationsSection({ function SourcesSection (line 537) | function SourcesSection({ FILE: applications/web/src/routes/(dashboard)/dashboard/accounts/route.tsx function AccountsLayout (line 7) | function AccountsLayout() { FILE: applications/web/src/routes/(dashboard)/dashboard/connect/index.tsx function ConnectPage (line 20) | function ConnectPage() { FILE: applications/web/src/routes/(dashboard)/dashboard/connect/route.tsx function ConnectLayout (line 7) | function ConnectLayout() { FILE: applications/web/src/routes/(dashboard)/dashboard/events/index.tsx type DayGroup (line 16) | interface DayGroup { type DaySectionProps (line 21) | interface DaySectionProps { type EventRowProps (line 26) | interface EventRowProps { type LoadMoreSentinelProps (line 30) | interface LoadMoreSentinelProps { function EventsPage (line 51) | function EventsPage() { function EventsContent (line 60) | function EventsContent() { function LoadMoreSentinel (line 89) | function LoadMoreSentinel({ isValidating, hasMore, onLoadMore }: LoadMor... function LoadingIndicator (line 116) | function LoadingIndicator() { function resolveEventRowClassName (line 143) | function resolveEventRowClassName(past: boolean): string { FILE: applications/web/src/routes/(dashboard)/dashboard/feedback.tsx function FeedbackPage (line 15) | function FeedbackPage() { FILE: applications/web/src/routes/(dashboard)/dashboard/ical.tsx type ICalTokenResponse (line 48) | type ICalTokenResponse = { type FeedSettings (line 53) | interface FeedSettings { function patchFeedSettings (line 65) | function patchFeedSettings( function ICalPage (line 88) | function ICalPage() { function ICalLinkSection (line 107) | function ICalLinkSection() { function CopyButton (line 131) | function CopyButton({ value }: { value: string | null }) { function CopyIcon (line 156) | function CopyIcon() { function FeedSettingsSeed (line 161) | function FeedSettingsSeed() { function FeedSettingsToggles (line 173) | function FeedSettingsToggles({ locked }: { locked: boolean }) { constant TEMPLATE_VARIABLES (line 193) | const TEMPLATE_VARIABLES = { event_name: "Event Name", calendar_name: "C... function EventNameDisabledProvider (line 195) | function EventNameDisabledProvider({ locked, children }: { locked: boole... function EventNameTemplateItem (line 200) | function EventNameTemplateItem({ locked }: { locked: boolean }) { function EventNameTemplateValue (line 224) | function EventNameTemplateValue() { function EventNameToggle (line 246) | function EventNameToggle({ locked }: { locked: boolean }) { function FeedSettingToggle (line 279) | function FeedSettingToggle({ function SourceSelectionSection (line 312) | function SourceSelectionSection() { function SourceCheckboxItem (line 359) | function SourceCheckboxItem({ FILE: applications/web/src/routes/(dashboard)/dashboard/index.tsx function DashboardPage (line 41) | function DashboardPage() { function CalendarsMenu (line 107) | function CalendarsMenu() { function AccountsPopover (line 181) | function AccountsPopover() { FILE: applications/web/src/routes/(dashboard)/dashboard/integrations/index.tsx type SearchParams (line 6) | interface SearchParams { function parseSearchError (line 10) | function parseSearchError(value: unknown): string | undefined { function OAuthCallbackErrorPage (line 27) | function OAuthCallbackErrorPage() { FILE: applications/web/src/routes/(dashboard)/dashboard/report.tsx function ReportPage (line 16) | function ReportPage() { FILE: applications/web/src/routes/(dashboard)/dashboard/settings/api-tokens.tsx function CopyTokenIcon (line 44) | function CopyTokenIcon({ copied }: { copied: boolean }) { function resolveApiLimitLabel (line 51) | function resolveApiLimitLabel(plan: string | null): string { function ApiTokensPage (line 58) | function ApiTokensPage() { function CreateSubmitButton (line 207) | function CreateSubmitButton({ isCreating }: { isCreating: boolean }) { function CreateTokenButton (line 223) | function CreateTokenButton({ FILE: applications/web/src/routes/(dashboard)/dashboard/settings/change-password.tsx function resolveInputTone (line 27) | function resolveInputTone(error: string | null): "error" | "neutral" { function ChangePasswordPage (line 32) | function ChangePasswordPage() { FILE: applications/web/src/routes/(dashboard)/dashboard/settings/index.tsx function loadSubscription (line 45) | async function loadSubscription(context: { runtimeConfig: { commercialMo... function SettingsPage (line 65) | function SettingsPage() { FILE: applications/web/src/routes/(dashboard)/dashboard/settings/passkeys.tsx function PasskeysPage (line 43) | function PasskeysPage() { function AddPasskeyButton (line 110) | function AddPasskeyButton({ FILE: applications/web/src/routes/(dashboard)/dashboard/settings/route.tsx function SettingsLayout (line 7) | function SettingsLayout() { FILE: applications/web/src/routes/(dashboard)/dashboard/upgrade/index.tsx function resolveProPlan (line 65) | function resolveProPlan(runtimeConfig: PublicRuntimeConfig): PlanConfig { function UpgradePage (line 73) | function UpgradePage() { type UpgradeActionProps (line 163) | type UpgradeActionProps = { function UpgradeAction (line 170) | function UpgradeAction({ mode, isLoading, onUpgrade, onManage }: Upgrade... FILE: applications/web/src/routes/(dashboard)/route.tsx function DashboardLayout (line 32) | function DashboardLayout() { FILE: applications/web/src/routes/(marketing)/blog/$slug.tsx function BlogPostPage (line 55) | function BlogPostPage() { FILE: applications/web/src/routes/(marketing)/blog/index.tsx constant BLOG_ILLUSTRATION_STYLE (line 7) | const BLOG_ILLUSTRATION_STYLE = { function BlogDirectoryPage (line 31) | function BlogDirectoryPage() { FILE: applications/web/src/routes/(marketing)/blog/route.tsx function BlogRouteLayout (line 7) | function BlogRouteLayout() { FILE: applications/web/src/routes/(marketing)/index.tsx constant SKEW_BACK_LEFT (line 52) | const SKEW_BACK_LEFT: SkewTuple = [ constant SKEW_BACK_RIGHT (line 58) | const SKEW_BACK_RIGHT: SkewTuple = [ constant SKEW_FRONT (line 64) | const SKEW_FRONT: SkewTuple = [ type MarketingFeature (line 70) | type MarketingFeature = { constant MARKETING_FEATURES (line 78) | const MARKETING_FEATURES: MarketingFeature[] = [ type PricingFeature (line 113) | type PricingFeature = { type PricingPlan (line 119) | type PricingPlan = { constant PRICING_PLANS (line 129) | const PRICING_PLANS: PricingPlan[] = [ constant PRICING_FEATURES (line 151) | const PRICING_FEATURES: PricingFeature[] = [ type HowItWorksStep (line 162) | type HowItWorksStep = { constant HOW_IT_WORKS_STEPS (line 167) | const HOW_IT_WORKS_STEPS: HowItWorksStep[] = [ type FaqItem (line 185) | type FaqItem = { constant FAQ_ITEMS (line 191) | const FAQ_ITEMS: FaqItem[] = [ function MarketingPage (line 245) | function MarketingPage() { FILE: applications/web/src/routes/(marketing)/privacy.tsx function PrivacyPage (line 25) | function PrivacyPage() { function Section (line 186) | function Section({ title, children }: PropsWithChildren<{ title: string ... FILE: applications/web/src/routes/(marketing)/route.tsx type GithubStarsLoaderData (line 14) | interface GithubStarsLoaderData { function MarketingLayout (line 42) | function MarketingLayout() { FILE: applications/web/src/routes/(marketing)/terms.tsx function TermsPage (line 25) | function TermsPage() { function Section (line 222) | function Section({ title, children }: PropsWithChildren<{ title: string ... FILE: applications/web/src/routes/(oauth)/auth/google.tsx function GoogleAuthPage (line 21) | function GoogleAuthPage() { FILE: applications/web/src/routes/(oauth)/auth/outlook.tsx function OutlookAuthPage (line 21) | function OutlookAuthPage() { FILE: applications/web/src/routes/(oauth)/auth/route.tsx function OAuthAuthLayout (line 14) | function OAuthAuthLayout() { FILE: applications/web/src/routes/(oauth)/dashboard/connect/apple.tsx function ConnectApplePage (line 8) | function ConnectApplePage() { FILE: applications/web/src/routes/(oauth)/dashboard/connect/caldav.tsx function ConnectCalDAVPage (line 10) | function ConnectCalDAVPage() { FILE: applications/web/src/routes/(oauth)/dashboard/connect/fastmail.tsx function ConnectFastmailPage (line 10) | function ConnectFastmailPage() { FILE: applications/web/src/routes/(oauth)/dashboard/connect/ical-link.tsx function ConnectICalLinkPage (line 14) | function ConnectICalLinkPage() { FILE: applications/web/src/routes/(oauth)/dashboard/connect/ics-file.tsx function ConnectICSFilePage (line 14) | function ConnectICSFilePage() { FILE: applications/web/src/routes/(oauth)/dashboard/connect/route.tsx function OAuthConnectLayout (line 7) | function OAuthConnectLayout() { FILE: applications/web/src/routes/(oauth)/dashboard/route.tsx function OAuthDashboardLayout (line 14) | function OAuthDashboardLayout() { FILE: applications/web/src/routes/(oauth)/oauth/consent.tsx type SearchParams (line 19) | type SearchParams = Record; constant SCOPE_LABELS (line 21) | const SCOPE_LABELS: Record = { function extractConsentErrorMessage (line 52) | function extractConsentErrorMessage(payload: unknown): string { function extractConsentRedirectUrl (line 65) | function extractConsentRedirectUrl(payload: unknown): string { function McpConsentPage (line 75) | function McpConsentPage() { FILE: applications/web/src/routes/(oauth)/route.tsx function OAuthLayout (line 10) | function OAuthLayout() { FILE: applications/web/src/routes/__root.tsx constant NON_RETRYABLE_STATUSES (line 14) | const NON_RETRYABLE_STATUSES = new Set([401, 403, 404]); constant SWR_CONFIG (line 16) | const SWR_CONFIG = { function ViteScriptTag (line 50) | function ViteScriptTag({ script }: { script: ViteScript }) { function RootComponent (line 62) | function RootComponent() { function ScrollToTopOnNavigation (line 110) | function ScrollToTopOnNavigation() { function NotFound (line 124) | function NotFound() { function ErrorFallback (line 139) | function ErrorFallback({ error }: ErrorComponentProps) { FILE: applications/web/src/server.tsx function render (line 6) | function render(request: Request, viteAssets: ViteAssets): Promise { type CreateStaleCacheOptions (line 6) | interface CreateStaleCacheOptions { type CacheSnapshot (line 14) | interface CacheSnapshot { type CacheRevalidationPolicy (line 19) | type CacheRevalidationPolicy = "always" | "when-stale"; type CacheState (line 21) | interface CacheState { function createInitialState (line 26) | function createInitialState(): CacheState { function isStale (line 33) | function isStale(state: CacheState, nowMs: number, ttlMs... function createRefreshTask (line 41) | function createRefreshTask( function shouldRevalidateInBackground (line 53) | function shouldRevalidateInBackground( function createStaleCache (line 70) | function createStaleCache(options: CreateStaleCacheOptions { function getGithubStarsSnapshot (line 49) | async function getGithubStarsSnapshot(): Promise { FILE: applications/web/src/server/http-handler.ts constant CACHEABLE_PATHS (line 8) | const CACHEABLE_PATHS = new Set(["/", "/blog", "/privacy", "/terms"]); constant HTML_CACHE_TTL_MS (line 9) | const HTML_CACHE_TTL_MS = 60_000; type CachedHtml (line 11) | interface CachedHtml { function getCachedHtml (line 18) | function getCachedHtml(pathname: string): string | null { function setCachedHtml (line 28) | function setCachedHtml(pathname: string, body: string): void { function withSecurityHeaders (line 43) | function withSecurityHeaders(response: Response, config: ServerConfig): ... function resolveGdprCacheSegment (line 60) | function resolveGdprCacheSegment(countryCode: string): string { function handleApplicationRequest (line 65) | async function handleApplicationRequest( FILE: applications/web/src/server/internal-routes.ts constant RESOURCE_SCOPES (line 34) | const RESOURCE_SCOPES = [ function serveStaticTextFile (line 49) | async function serveStaticTextFile(pathname: string): Promise; constant DEFAULT_FEED_SETTINGS (line 14) | const DEFAULT_FEED_SETTINGS: FeedSettings = { FILE: applications/web/src/state/sync.ts type CompositeState (line 5) | type CompositeState = "idle" | "syncing"; type SyncAggregateData (line 7) | type SyncAggregateData = SyncAggregate; type CompositeSyncState (line 9) | interface CompositeSyncState { FILE: applications/web/src/types/api.ts type CalendarAccount (line 1) | interface CalendarAccount { type CalendarSource (line 16) | interface CalendarSource { type CalendarDetail (line 33) | interface CalendarDetail { type ApiEvent (line 57) | interface ApiEvent { type ApiEventSummary (line 67) | interface ApiEventSummary { FILE: applications/web/src/utils/calendars.ts type CalendarLike (line 1) | interface CalendarLike { FILE: applications/web/src/utils/checkout.ts type CheckoutCallbacks (line 3) | interface CheckoutCallbacks { type CheckoutResponse (line 7) | interface CheckoutResponse { function createCheckoutSession (line 11) | async function createCheckoutSession(productId: string): Promise { function openCheckout (line 36) | async function openCheckout(productId: string, callbacks?: CheckoutCallb... function openCustomerPortal (line 53) | async function openCustomerPortal(): Promise { FILE: applications/web/src/utils/cn.ts function cn (line 3) | function cn(...inputs: ClassValue[]) { FILE: applications/web/src/utils/collections.ts function resolveUpdatedIds (line 1) | function resolveUpdatedIds(currentIds: string[], targetId: string, check... FILE: applications/web/src/utils/errors.ts function resolveErrorMessage (line 1) | function resolveErrorMessage(error: unknown, fallback: string): string { FILE: applications/web/src/utils/templates.ts type TemplateSegment (line 1) | type TemplateSegment = constant TEMPLATE_REGEX (line 5) | const TEMPLATE_REGEX = /\{\{(\w+)\}\}/g; function parseTemplate (line 7) | function parseTemplate(input: string): TemplateSegment[] { FILE: applications/web/tests/features/auth/components/auth-form.test.tsx class FakePublicKeyCredential (line 179) | class FakePublicKeyCredential {} FILE: applications/web/tests/lib/serialized-mutate.test.ts function deferred (line 4) | function deferred() { FILE: applications/web/vite.config.ts method manualChunks (line 42) | manualChunks(id) { FILE: packages/auth/src/capabilities.ts type ResolveAuthCapabilitiesConfig (line 4) | interface ResolveAuthCapabilitiesConfig { FILE: packages/auth/src/index.ts type EmailUser (line 34) | interface EmailUser { type SendEmailParams (line 39) | interface SendEmailParams { type AuthConfig (line 44) | interface AuthConfig { type KeeperMcpAuthSession (line 63) | interface KeeperMcpAuthSession { type KeeperMcpAuthApi (line 68) | interface KeeperMcpAuthApi { type OAuthProviderAuthApi (line 79) | interface OAuthProviderAuthApi { method onError (line 317) | onError(error: unknown) { type KeeperMcpEnabledAuth (line 411) | type KeeperMcpEnabledAuth> = TAuth... type AuthResult (line 430) | type AuthResult = ReturnType; FILE: packages/auth/src/mcp-config.ts constant KEEPER_MCP_OAUTH_SCOPES (line 13) | const KEEPER_MCP_OAUTH_SCOPES = [ type ResolveMcpAuthOptionsInput (line 21) | interface ResolveMcpAuthOptionsInput { constant MCP_ACCESS_TOKEN_EXPIRES_IN (line 26) | const MCP_ACCESS_TOKEN_EXPIRES_IN = 2_592_000; constant MCP_REFRESH_TOKEN_EXPIRES_IN (line 27) | const MCP_REFRESH_TOKEN_EXPIRES_IN = 7_776_000; type ResolvedMcpAuthOptions (line 29) | interface ResolvedMcpAuthOptions { FILE: packages/auth/src/plugins/username-only/endpoints/sign-in.ts constant INVALID_CREDENTIALS_ERROR (line 6) | const INVALID_CREDENTIALS_ERROR = { FILE: packages/auth/src/plugins/username-only/types.ts type User (line 1) | interface User { type CredentialAccount (line 11) | interface CredentialAccount { FILE: packages/auth/src/plugins/username-only/utils/config.ts type UsernameOnlyOptions (line 1) | interface UsernameOnlyOptions { type UsernameOnlyConfig (line 8) | type UsernameOnlyConfig = Required; FILE: packages/auth/src/polar-customer-delete.ts type PolarCustomerDeletionClient (line 3) | interface PolarCustomerDeletionClient { FILE: packages/broadcast/src/index.ts constant EMPTY_CONNECTIONS_COUNT (line 7) | const EMPTY_CONNECTIONS_COUNT = 0; constant IDLE_TIMEOUT_SECONDS (line 8) | const IDLE_TIMEOUT_SECONDS = 60; type OnConnectCallback (line 10) | type OnConnectCallback = (userId: string, socket: Socket) => void | Prom... type WebsocketHandlerOptions (line 12) | interface WebsocketHandlerOptions { type BroadcastConfig (line 16) | interface BroadcastConfig { type BroadcastService (line 20) | interface BroadcastService { constant CHANNEL (line 25) | const CHANNEL = "broadcast"; method close (line 100) | close(socket: Socket): void { method open (line 106) | async open(socket: Socket): Promise { FILE: packages/broadcast/src/types.ts type BroadcastData (line 3) | interface BroadcastData { type Socket (line 7) | type Socket = ServerWebSocket; FILE: packages/calendar/src/core/events/all-day.ts type AllDayEventShape (line 1) | interface AllDayEventShape { constant MS_PER_DAY (line 7) | const MS_PER_DAY = 24 * 60 * 60 * 1000; FILE: packages/calendar/src/core/events/content-hash.ts type SyncableEventContent (line 4) | type SyncableEventContent = Pick[] = [ FILE: packages/calendar/src/core/oauth/accounts.ts type OAuthAccount (line 14) | interface OAuthAccount { FILE: packages/calendar/src/core/oauth/config.ts type OAuthCredentials (line 1) | interface OAuthCredentials { type OAuthEnv (line 6) | interface OAuthEnv { type OAuthConfigs (line 13) | interface OAuthConfigs { FILE: packages/calendar/src/core/oauth/coordinated-refresher.ts constant MS_PER_SECOND (line 11) | const MS_PER_SECOND = 1000; type CoordinatedRefresherOptions (line 13) | interface CoordinatedRefresherOptions { FILE: packages/calendar/src/core/oauth/create-source-provider.ts constant EMPTY_SOURCES_COUNT (line 8) | const EMPTY_SOURCES_COUNT = 0; constant INITIAL_ADDED_COUNT (line 9) | const INITIAL_ADDED_COUNT = 0; constant INITIAL_REMOVED_COUNT (line 10) | const INITIAL_REMOVED_COUNT = 0; constant INITIAL_INSERTED_COUNT (line 11) | const INITIAL_INSERTED_COUNT = 0; constant INITIAL_UPDATED_COUNT (line 12) | const INITIAL_UPDATED_COUNT = 0; constant INITIAL_FILTERED_OUT_OF_WINDOW_COUNT (line 13) | const INITIAL_FILTERED_OUT_OF_WINDOW_COUNT = 0; constant INITIAL_SYNC_TOKEN_RESET_COUNT (line 14) | const INITIAL_SYNC_TOKEN_RESET_COUNT = 0; constant SOURCE_SYNC_CONCURRENCY (line 15) | const SOURCE_SYNC_CONCURRENCY = 3; constant SOURCE_SYNC_TIMEOUT_MS (line 16) | const SOURCE_SYNC_TIMEOUT_MS = 60_000; type OAuthSourceAccount (line 25) | interface OAuthSourceAccount { type SourceProvider (line 38) | interface SourceProvider { type CreateOAuthSourceProviderOptions (line 42) | interface CreateOAuthSourceProviderOptions< FILE: packages/calendar/src/core/oauth/ensure-valid-token.ts constant MS_PER_SECOND (line 3) | const MS_PER_SECOND = 1000; type TokenState (line 5) | interface TokenState { type OAuthTokenRefreshResult (line 11) | interface OAuthTokenRefreshResult { type TokenRefresher (line 17) | type TokenRefresher = (refreshToken: string) => Promise { method clearSyncToken (line 82) | protected async clearSyncToken(): Promise { method updateSyncToken (line 90) | protected async updateSyncToken(syncToken: string): Promise { method markNeedsReauthentication (line 98) | protected async markNeedsReauthentication(): Promise { method ensureValidToken (line 107) | protected async ensureValidToken(): Promise { method headers (line 145) | protected get headers(): Record { FILE: packages/calendar/src/core/oauth/state.ts constant STATE_EXPIRY_MINUTES (line 3) | const STATE_EXPIRY_MINUTES = 10; constant STATE_PREFIX (line 4) | const STATE_PREFIX = "oauth:state:"; constant MS_PER_SECOND (line 5) | const MS_PER_SECOND = 1000; type PendingState (line 7) | interface PendingState { type ValidatedState (line 14) | interface ValidatedState { type GenerateStateOptions (line 20) | interface GenerateStateOptions { type OAuthStateStore (line 25) | interface OAuthStateStore { constant STATE_EXPIRY_SECONDS (line 32) | const STATE_EXPIRY_SECONDS = STATE_EXPIRY_MINUTES * MS_PER_MINUTE / MS_P... FILE: packages/calendar/src/core/oauth/sync-token.ts constant VERSIONED_SYNC_TOKEN_PREFIX (line 1) | const VERSIONED_SYNC_TOKEN_PREFIX = "keeper:sync-token:"; constant LEGACY_SYNC_WINDOW_VERSION (line 2) | const LEGACY_SYNC_WINDOW_VERSION = 0; type DecodedSyncToken (line 4) | interface DecodedSyncToken { type ResolvedSyncToken (line 9) | interface ResolvedSyncToken { FILE: packages/calendar/src/core/oauth/sync-window.ts constant OAUTH_SYNC_LOOKBACK_DAYS (line 9) | const OAUTH_SYNC_LOOKBACK_DAYS = 7; constant OAUTH_SYNC_WINDOW_VERSION (line 10) | const OAUTH_SYNC_WINDOW_VERSION = 3; constant OAUTH_SYNC_LOOKBACK_MS (line 11) | const OAUTH_SYNC_LOOKBACK_MS = OAUTH_SYNC_LOOKBACK_DAYS * MS_PER_DAY; type OAuthSyncWindow (line 13) | interface OAuthSyncWindow { FILE: packages/calendar/src/core/oauth/token-provider.ts type OAuthRefreshResult (line 1) | interface OAuthRefreshResult { type OAuthTokenProvider (line 7) | interface OAuthTokenProvider { FILE: packages/calendar/src/core/source/event-diff.ts type ExistingSourceEventState (line 3) | interface ExistingSourceEventState { type SourceEventDiffOptions (line 13) | interface SourceEventDiffOptions { type SourceEventIdentityOptions (line 18) | interface SourceEventIdentityOptions { FILE: packages/calendar/src/core/source/sync-diagnostics.ts type OAuthSyncWindow (line 4) | interface OAuthSyncWindow { type SourceEventsInWindowResult (line 9) | interface SourceEventsInWindowResult { type SourceEventStoragePartition (line 14) | interface SourceEventStoragePartition { type SourceSyncTokenAction (line 19) | interface SourceSyncTokenAction { FILE: packages/calendar/src/core/source/write-event-states.ts constant EMPTY_ROW_COUNT (line 4) | const EMPTY_ROW_COUNT = 0; type EventStateInsertRow (line 6) | type EventStateInsertRow = typeof eventStatesTable.$inferInsert; constant EVENT_STATE_CONFLICT_TARGET (line 8) | const EVENT_STATE_CONFLICT_TARGET: [ constant EVENT_STATE_CONFLICT_SET (line 22) | const EVENT_STATE_CONFLICT_SET = { type EventStateInsertClient (line 34) | interface EventStateInsertClient { FILE: packages/calendar/src/core/sync-engine/flush.ts constant FLUSH_BATCH_SIZE (line 6) | const FLUSH_BATCH_SIZE = 5000; FILE: packages/calendar/src/core/sync-engine/generation.ts type GenerationStore (line 1) | interface GenerationStore { constant GENERATION_PREFIX (line 7) | const GENERATION_PREFIX = "sync:gen:"; constant GENERATION_TTL_SECONDS (line 8) | const GENERATION_TTL_SECONDS = 86_400; FILE: packages/calendar/src/core/sync-engine/index.ts type OperationError (line 18) | interface OperationError { type ExecuteRemoteResult (line 101) | interface ExecuteRemoteResult { type OperationRun (line 109) | interface OperationRun { type RunResult (line 135) | interface RunResult { type ProgressCallback (line 187) | type ProgressCallback = (processed: number, total: number) => void; constant OPERATION_CHUNK_SIZE (line 189) | const OPERATION_CHUNK_SIZE = 50; type ChunkedExecutionState (line 199) | interface ChunkedExecutionState { type SyncCalendarOptions (line 308) | interface SyncCalendarOptions { type SyncCalendarResult (line 324) | interface SyncCalendarResult extends SyncResult { constant EMPTY_RESULT (line 329) | const EMPTY_RESULT: SyncCalendarResult = { added: 0, addFailed: 0, remov... FILE: packages/calendar/src/core/sync-engine/ingest.ts type ExistingEventState (line 4) | interface ExistingEventState { type FetchEventsResult (line 14) | interface FetchEventsResult { type IngestionChanges (line 23) | interface IngestionChanges { type IngestSourceOptions (line 29) | interface IngestSourceOptions { type IngestionResult (line 37) | interface IngestionResult { constant EMPTY_RESULT (line 42) | const EMPTY_RESULT: IngestionResult = { eventsAdded: 0, eventsRemoved: 0 }; FILE: packages/calendar/src/core/sync-engine/types.ts type CalendarSyncProvider (line 3) | interface CalendarSyncProvider { type PendingInsert (line 9) | interface PendingInsert { type PendingChanges (line 19) | interface PendingChanges { FILE: packages/calendar/src/core/sync/aggregate-runtime.ts constant SYNC_AGGREGATE_LATEST_KEY_PREFIX (line 7) | const SYNC_AGGREGATE_LATEST_KEY_PREFIX = "sync:aggregate:latest:"; constant SYNC_AGGREGATE_SEQUENCE_KEY_PREFIX (line 8) | const SYNC_AGGREGATE_SEQUENCE_KEY_PREFIX = "sync:aggregate:seq:"; type SyncAggregateRuntimeConfig (line 10) | interface SyncAggregateRuntimeConfig { type SyncAggregateRuntime (line 17) | interface SyncAggregateRuntime { FILE: packages/calendar/src/core/sync/aggregate-tracker.ts type CalendarOperationProgress (line 3) | interface CalendarOperationProgress { type SyncAggregateSnapshot (line 9) | interface SyncAggregateSnapshot { type SyncAggregateMessage (line 18) | interface SyncAggregateMessage extends SyncAggregateSnapshot { type SyncAggregateTrackerConfig (line 22) | interface SyncAggregateTrackerConfig { constant DEFAULT_PROGRESS_THROTTLE_MS (line 26) | const DEFAULT_PROGRESS_THROTTLE_MS = 350; constant INITIAL_COUNT (line 27) | const INITIAL_COUNT = 0; constant INITIAL_SEQUENCE (line 28) | const INITIAL_SEQUENCE = 0; constant PERCENT_MULTIPLIER (line 29) | const PERCENT_MULTIPLIER = 100; class SyncAggregateTracker (line 31) | class SyncAggregateTracker { method constructor (line 40) | constructor(config?: SyncAggregateTrackerConfig) { method getUserProgress (line 44) | private getUserProgress(userId: string): Map Promise; constant INITIAL_BACKOFF_MS (line 3) | const INITIAL_BACKOFF_MS = 1000; constant MAX_BACKOFF_MS (line 4) | const MAX_BACKOFF_MS = 60_000; constant BACKOFF_MULTIPLIER (line 5) | const BACKOFF_MULTIPLIER = 2; constant DEFAULT_CONCURRENCY (line 6) | const DEFAULT_CONCURRENCY = 5; constant DEFAULT_REQUESTS_PER_MINUTE (line 7) | const DEFAULT_REQUESTS_PER_MINUTE = 600; constant MS_PER_MINUTE (line 8) | const MS_PER_MINUTE = 60_000; constant INITIAL_ACTIVE_COUNT (line 9) | const INITIAL_ACTIVE_COUNT = 0; constant INITIAL_BACKOFF_UNTIL (line 10) | const INITIAL_BACKOFF_UNTIL = 0; constant EMPTY_QUEUE_LENGTH (line 11) | const EMPTY_QUEUE_LENGTH = 0; constant MIN_DELAY (line 12) | const MIN_DELAY = 0; constant FIRST_TIMESTAMP_INDEX (line 13) | const FIRST_TIMESTAMP_INDEX = 0; type RateLimiterConfig (line 15) | interface RateLimiterConfig { class RateLimiter (line 20) | class RateLimiter { method constructor (line 33) | constructor(config: RateLimiterConfig = {}) { method execute (line 39) | execute(operation: () => Promise): Promise { method reportRateLimit (line 58) | reportRateLimit(): void { method resetBackoff (line 64) | private resetBackoff(): void { method getFirstTimestamp (line 70) | private getFirstTimestamp(): number | null { method pruneOldTimestamps (line 77) | private pruneOldTimestamps(): void { method canMakeRequest (line 86) | private canMakeRequest(): boolean { method getDelayUntilNextSlot (line 91) | private getDelayUntilNextSlot(): number { method recordRequest (line 102) | private recordRequest(): void { method scheduleQueueProcessing (line 106) | private scheduleQueueProcessing(): void { method processQueue (line 116) | private processQueue(): void { method executeTask (line 152) | private async executeTask(task: QueuedTask): Promise { FILE: packages/calendar/src/core/utils/redis-rate-limiter.ts constant MS_PER_MINUTE (line 3) | const MS_PER_MINUTE = 60_000; constant RETRY_POLL_MS (line 4) | const RETRY_POLL_MS = 100; type RedisRateLimiter (line 6) | interface RedisRateLimiter { type RedisRateLimiterConfig (line 10) | interface RedisRateLimiterConfig { constant ACQUIRE_SCRIPT (line 27) | const ACQUIRE_SCRIPT = ` FILE: packages/calendar/src/ics/utils/create-snapshot.ts type CreateSnapshotResult (line 18) | interface CreateSnapshotResult { FILE: packages/calendar/src/ics/utils/diff-events.ts constant EMPTY_SERIALIZED_VALUE (line 4) | const EMPTY_SERIALIZED_VALUE = ""; constant MS_PER_DAY (line 5) | const MS_PER_DAY = 24 * 60 * 60 * 1000; FILE: packages/calendar/src/ics/utils/fetch-adapter.ts type IcsSourceFetcherConfig (line 10) | interface IcsSourceFetcherConfig { type IcsSourceFetcher (line 17) | interface IcsSourceFetcher { FILE: packages/calendar/src/ics/utils/normalize-timezone.ts constant WINDOWS_TO_IANA (line 10) | const WINDOWS_TO_IANA: Record = { FILE: packages/calendar/src/ics/utils/parse-ics-calendar.ts type ParseIcsCalendarOptions (line 3) | interface ParseIcsCalendarOptions { FILE: packages/calendar/src/ics/utils/parse-ics-events.ts constant DEFAULT_DURATION_VALUE (line 13) | const DEFAULT_DURATION_VALUE = 0; FILE: packages/calendar/src/ics/utils/pull-remote-calendar.ts class CalendarFetchError (line 14) | class CalendarFetchError extends Error { method constructor (line 18) | constructor( type ParsedUrl (line 30) | interface ParsedUrl { constant ICS_USER_AGENT (line 49) | const ICS_USER_AGENT = "Keeper/1.0 (+https://www.keeper.sh)"; type ParsedCalendarResult (line 82) | type ParsedCalendarResult = ReturnType; type OutputICal (line 84) | type OutputICal = "ical" | ["ical"]; type OutputJSON (line 85) | type OutputJSON = "json" | ["json"]; type OutputICALOrJSON (line 86) | type OutputICALOrJSON = ["ical", "json"] | ["json", "ical"]; type JustICal (line 88) | interface JustICal { type JustJSON (line 92) | interface JustJSON { type ICalOrJSON (line 96) | type ICalOrJSON = Omit & Omit; function pullRemoteCalendar (line 114) | async function pullRemoteCalendar( FILE: packages/calendar/src/ics/utils/types.ts type EventAvailability (line 1) | type EventAvailability = "busy" | "free" | "oof" | "workingElsewhere"; type EventTimeSlot (line 3) | interface EventTimeSlot { type StoredEventTimeSlot (line 17) | type StoredEventTimeSlot = EventTimeSlot & { type EventDiff (line 21) | interface EventDiff { type SerializedIcsCalendar (line 26) | interface SerializedIcsCalendar { FILE: packages/calendar/src/providers/caldav/destination/provider.ts constant CALDAV_RATE_LIMIT_CONCURRENCY (line 9) | const CALDAV_RATE_LIMIT_CONCURRENCY = 5; constant YEARS_UNTIL_FUTURE (line 10) | const YEARS_UNTIL_FUTURE = 2; type CalDAVSyncProviderConfig (line 12) | interface CalDAVSyncProviderConfig { FILE: packages/calendar/src/providers/caldav/shared/client.ts type CalendarObject (line 8) | interface CalendarObject { type DAVClientInstance (line 14) | type DAVClientInstance = Awaited>; class CalDAVClient (line 23) | class CalDAVClient { method constructor (line 29) | constructor(config: CalDAVClientConfig, safeFetchOptions?: SafeFetchOp... method getResolvedAuthMethod (line 34) | getResolvedAuthMethod(): CalDAVAuthMethod | null { method getClient (line 38) | private async getClient(): Promise { method discoverCalendars (line 59) | async discoverCalendars(): Promise { method fetchCalendarDisplayName (line 72) | async fetchCalendarDisplayName(calendarUrl: string): Promise { method createCalendarObject (line 94) | async createCalendarObject(params: { method deleteCalendarObject (line 110) | async deleteCalendarObject(params: { calendarUrl: string; filename: st... method fetchCalendarObjects (line 121) | async fetchCalendarObjects(params: { method ensureTrailingSlash (line 135) | private static ensureTrailingSlash(url: string): string { method normalizeUrl (line 143) | private static normalizeUrl(calendarUrl: string, filename: string): st... FILE: packages/calendar/src/providers/caldav/shared/digest-fetch.ts type FetchFunction (line 3) | type FetchFunction = (input: string | Request | URL, init?: RequestInit)... type AuthMethod (line 5) | type AuthMethod = "unknown" | "basic" | "digest"; constant HTTP_UNAUTHORIZED (line 7) | const HTTP_UNAUTHORIZED = 401; type DigestFetchCredentials (line 9) | interface DigestFetchCredentials { type DigestAwareFetchOptions (line 42) | interface DigestAwareFetchOptions { type DigestAwareFetchResult (line 48) | interface DigestAwareFetchResult { type CalDAVAuthMethod (line 102) | type CalDAVAuthMethod = "basic" | "digest"; FILE: packages/calendar/src/providers/caldav/shared/ics.ts constant DEFAULT_DURATION_VALUE (line 15) | const DEFAULT_DURATION_VALUE = 0; type ParsedCalendarEvent (line 69) | interface ParsedCalendarEvent { FILE: packages/calendar/src/providers/caldav/shared/sync-window.ts type CalDAVSyncWindow (line 3) | interface CalDAVSyncWindow { FILE: packages/calendar/src/providers/caldav/source/auth-error-classification.ts constant AUTH_ERROR_STATUS_CODES (line 1) | const AUTH_ERROR_STATUS_CODES = new Set([401]); constant AUTH_ERROR_PATTERNS (line 3) | const AUTH_ERROR_PATTERNS = [ FILE: packages/calendar/src/providers/caldav/source/fetch-adapter.ts constant YEARS_UNTIL_FUTURE (line 9) | const YEARS_UNTIL_FUTURE = 2; type CalDAVSourceFetcherConfig (line 11) | interface CalDAVSourceFetcherConfig { type CalDAVSourceFetcher (line 20) | interface CalDAVSourceFetcher { FILE: packages/calendar/src/providers/caldav/source/provider.ts constant EMPTY_COUNT (line 27) | const EMPTY_COUNT = 0; constant YEARS_UNTIL_FUTURE (line 28) | const YEARS_UNTIL_FUTURE = 2; constant DEFAULT_CALDAV_OPTIONS (line 30) | const DEFAULT_CALDAV_OPTIONS: CalDAVProviderOptions = { type CalDAVSourceProvider (line 35) | interface CalDAVSourceProvider { FILE: packages/calendar/src/providers/caldav/source/sync.ts constant CALDAV_CALENDAR_TYPE (line 6) | const CALDAV_CALENDAR_TYPE = "caldav"; type CalDAVSourceService (line 8) | interface CalDAVSourceService { FILE: packages/calendar/src/providers/caldav/types.ts type CalDAVProviderOptions (line 4) | interface CalDAVProviderOptions { type CalDAVProviderConfig (line 9) | interface CalDAVProviderConfig { type CalDAVAccount (line 14) | interface CalDAVAccount { type CalDAVSourceAccount (line 26) | interface CalDAVSourceAccount { type CalDAVSourceConfig (line 41) | interface CalDAVSourceConfig { type CalDAVSourceProviderConfig (line 50) | interface CalDAVSourceProviderConfig { type CalDAVSourceSyncResult (line 55) | interface CalDAVSourceSyncResult { type CalDAVServiceConfig (line 61) | interface CalDAVServiceConfig { type CalDAVService (line 66) | interface CalDAVService { type CalDAVClientConfig (line 73) | interface CalDAVClientConfig { type CalendarInfo (line 82) | interface CalendarInfo { FILE: packages/calendar/src/providers/fastmail/destination/provider.ts constant FASTMAIL_SERVER_URL (line 1) | const FASTMAIL_SERVER_URL = "https://caldav.fastmail.com/"; FILE: packages/calendar/src/providers/fastmail/source/provider.ts constant PROVIDER_OPTIONS (line 4) | const PROVIDER_OPTIONS = { FILE: packages/calendar/src/providers/google/destination/provider.ts type GoogleSyncProviderConfig (line 17) | interface GoogleSyncProviderConfig { class GoogleCalendarApiError (line 29) | class GoogleCalendarApiError extends Error { method constructor (line 32) | constructor(status: number, body: string) { type ConflictEntry (line 93) | interface ConflictEntry { index: number; uid: string; event: SyncableEve... FILE: packages/calendar/src/providers/google/destination/sync.ts constant PROVIDER (line 7) | const PROVIDER = "google"; type GoogleAccount (line 9) | type GoogleAccount = OAuthAccount; FILE: packages/calendar/src/providers/google/shared/api.ts constant GOOGLE_CALENDAR_API (line 1) | const GOOGLE_CALENDAR_API = "https://www.googleapis.com/calendar/v3/"; constant GOOGLE_CALENDAR_EVENTS_URL (line 2) | const GOOGLE_CALENDAR_EVENTS_URL = "https://www.googleapis.com/calendar/... constant GOOGLE_CALENDAR_LIST_URL (line 3) | const GOOGLE_CALENDAR_LIST_URL = "https://www.googleapis.com/calendar/v3... constant GOOGLE_CALENDAR_MAX_RESULTS (line 4) | const GOOGLE_CALENDAR_MAX_RESULTS = 250; constant GONE_STATUS (line 5) | const GONE_STATUS = 410; constant GOOGLE_BATCH_API (line 6) | const GOOGLE_BATCH_API = "https://www.googleapis.com/batch/calendar/v3"; constant GOOGLE_BATCH_MAX_SIZE (line 7) | const GOOGLE_BATCH_MAX_SIZE = 50; FILE: packages/calendar/src/providers/google/shared/backoff.ts constant MAX_JITTER_MS (line 1) | const MAX_JITTER_MS = 1000; constant MAX_BACKOFF_MS (line 2) | const MAX_BACKOFF_MS = 64_000; constant DEFAULT_MAX_RETRIES (line 3) | const DEFAULT_MAX_RETRIES = 5; constant BACKOFF_MULTIPLIER (line 4) | const BACKOFF_MULTIPLIER = 2; type BackoffOptions (line 47) | interface BackoffOptions { FILE: packages/calendar/src/providers/google/shared/batch.ts type BatchSubRequest (line 7) | interface BatchSubRequest { type BatchSubResponse (line 14) | interface BatchSubResponse { constant DEFAULT_SEPARATOR_LENGTH (line 144) | const DEFAULT_SEPARATOR_LENGTH = 2; class GoogleBatchApiError (line 216) | class GoogleBatchApiError extends Error { method constructor (line 219) | constructor(status: number, body: string) { type BatchChunkedOptions (line 284) | interface BatchChunkedOptions { FILE: packages/calendar/src/providers/google/shared/errors.ts constant GOOGLE_PERMISSION_REAUTH_REASONS (line 5) | const GOOGLE_PERMISSION_REAUTH_REASONS = new Set([ constant GOOGLE_FORBIDDEN_AUTH_REASONS (line 10) | const GOOGLE_FORBIDDEN_AUTH_REASONS = new Set([ constant RATE_LIMIT_REASONS (line 71) | const RATE_LIMIT_REASONS = new Set([ constant EMPTY_API_ERROR (line 96) | const EMPTY_API_ERROR: GoogleApiError = {}; FILE: packages/calendar/src/providers/google/source/fetch-adapter.ts constant YEARS_UNTIL_FUTURE (line 7) | const YEARS_UNTIL_FUTURE = 2; type GoogleSourceFetcherConfig (line 9) | interface GoogleSourceFetcherConfig { type GoogleSourceFetcher (line 16) | interface GoogleSourceFetcher { FILE: packages/calendar/src/providers/google/source/provider.ts constant GOOGLE_PROVIDER_ID (line 22) | const GOOGLE_PROVIDER_ID = "google"; constant EMPTY_COUNT (line 23) | const EMPTY_COUNT = 0; constant YEARS_UNTIL_FUTURE (line 31) | const YEARS_UNTIL_FUTURE = 2; type GoogleSourceConfig (line 33) | interface GoogleSourceConfig extends OAuthSourceConfig { class GoogleCalendarSourceProvider (line 40) | class GoogleCalendarSourceProvider extends OAuthSourceProvider { method removeOutOfRangeEvents (line 217) | private static async removeOutOfRangeEvents( type OutlookSourceAccount (line 237) | interface OutlookSourceAccount { type CreateOutlookSourceProviderConfig (line 253) | interface CreateOutlookSourceProviderConfig { FILE: packages/calendar/src/providers/outlook/source/types.ts type OutlookCalendarListEntry (line 1) | interface OutlookCalendarListEntry { type OutlookCalendarListResponse (line 13) | interface OutlookCalendarListResponse { type OutlookEventDateTime (line 18) | interface OutlookEventDateTime { type OutlookRemovedInfo (line 23) | interface OutlookRemovedInfo { type OutlookCalendarEvent (line 27) | interface OutlookCalendarEvent { type OutlookEventsListResponse (line 43) | interface OutlookEventsListResponse { type FetchEventsOptions (line 49) | interface FetchEventsOptions { type FetchEventsResult (line 57) | interface FetchEventsResult { type EventTimeSlot (line 65) | interface EventTimeSlot { FILE: packages/calendar/src/providers/outlook/source/utils/fetch-events.ts class EventsFetchError (line 15) | class EventsFetchError extends Error { method constructor (line 19) | constructor( constant REQUEST_TIMEOUT_MS (line 31) | const REQUEST_TIMEOUT_MS = 30_000; constant DEFAULT_PAGE_SIZE (line 32) | const DEFAULT_PAGE_SIZE = 50; type PageFetchOptions (line 38) | interface PageFetchOptions { type PageFetchResult (line 47) | interface PageFetchResult { type FullSyncRequiredResult (line 52) | interface FullSyncRequiredResult { type FetchCalendarNameOptions (line 56) | interface FetchCalendarNameOptions { FILE: packages/calendar/src/providers/outlook/source/utils/list-calendars.ts constant INVALID_RESPONSE_STATUS (line 5) | const INVALID_RESPONSE_STATUS = 502; class CalendarListError (line 7) | class CalendarListError extends Error { method constructor (line 11) | constructor( FILE: packages/calendar/src/providers/outlook/types.ts type OutlookDateTime (line 1) | interface OutlookDateTime { type PartialOutlookDateTime (line 6) | interface PartialOutlookDateTime { type MicrosoftApiError (line 11) | interface MicrosoftApiError { FILE: packages/calendar/src/utils/registry/registry.ts constant PROVIDER_DEFINITIONS (line 93) | const PROVIDER_DEFINITIONS = [ type ProviderId (line 102) | type ProviderId = (typeof PROVIDER_DEFINITIONS)[number]["id"]; type OAuthProviderDefinition (line 104) | type OAuthProviderDefinition = Extract< type CalDAVProviderDefinition (line 109) | type CalDAVProviderDefinition = Extract< type OAuthProviderId (line 114) | type OAuthProviderId = OAuthProviderDefinition["id"]; type CalDAVProviderId (line 115) | type CalDAVProviderId = CalDAVProviderDefinition["id"]; FILE: packages/calendar/src/utils/registry/server.ts type SourceFactoryConfig (line 12) | interface SourceFactoryConfig { type SourceFactory (line 18) | type SourceFactory = (config: SourceFactoryConfig) => SourceProvider; constant SOURCE_OAUTH_FACTORIES (line 20) | const SOURCE_OAUTH_FACTORIES: Record = { type SourceProvidersConfig (line 25) | interface SourceProvidersConfig { FILE: packages/calendar/src/utils/safe-fetch.ts constant ALLOWED_PROTOCOLS (line 5) | const ALLOWED_PROTOCOLS = new Set(["http:", "https:"]); constant MAX_REDIRECTS (line 6) | const MAX_REDIRECTS = 10; constant REDIRECT_STATUS_CODES (line 7) | const REDIRECT_STATUS_CODES = new Set([301, 302, 303, 307, 308]); type SafeFetchOptions (line 9) | interface SafeFetchOptions { class UrlSafetyError (line 14) | class UrlSafetyError extends Error { method constructor (line 15) | constructor(message: string) { type SafeFetch (line 21) | type SafeFetch = (input: string | Request | URL, init?: RequestInit) => ... FILE: packages/calendar/tests/core/sync-engine/index.test.ts type GenerationStore (line 398) | type GenerationStore = Parameters[0]; type GenerationStore (line 412) | type GenerationStore = Parameters[0]; type GenerationStore (line 427) | type GenerationStore = Parameters[0]; FILE: packages/calendar/tests/core/sync-engine/ingest.test.ts type ExistingEvent (line 11) | interface ExistingEvent { FILE: packages/calendar/tests/core/sync/aggregate-runtime.test.ts method get (line 47) | get(target, property, receiver) { FILE: packages/calendar/tests/ics/utils/outlook-windows-timezone.test.ts constant OUTLOOK_ICS_WITH_WINDOWS_TIMEZONES (line 5) | const OUTLOOK_ICS_WITH_WINDOWS_TIMEZONES = [ FILE: packages/calendar/tests/providers/google/source/provider.test.ts class TestableGoogleCalendarSourceProvider (line 24) | class TestableGoogleCalendarSourceProvider extends GoogleCalendarSourceP... method runProcessEvents (line 25) | runProcessEvents(events: SourceEvent[], options: ProcessEventsOptions)... FILE: packages/calendar/tests/providers/outlook/source/provider.test.ts class TestableOutlookSourceProvider (line 7) | class TestableOutlookSourceProvider extends OutlookSourceProvider { method runProcessEvents (line 8) | runProcessEvents(events: SourceEvent[], options: ProcessEventsOptions)... FILE: packages/calendar/tests/utils/safe-fetch.test.ts type FetchFn (line 176) | type FetchFn = (input: string | Request | URL, init?: RequestInit) => Pr... FILE: packages/constants/src/constants/http.ts constant HTTP_STATUS (line 1) | const HTTP_STATUS = { type HttpStatus (line 19) | type HttpStatus = (typeof HTTP_STATUS)[keyof typeof HTTP_STATUS]; FILE: packages/constants/src/constants/scopes.ts constant KEEPER_API_READ_SCOPE (line 1) | const KEEPER_API_READ_SCOPE = "keeper.read"; constant KEEPER_API_SOURCE_SCOPE (line 2) | const KEEPER_API_SOURCE_SCOPE = "keeper.sources.read"; constant KEEPER_API_DESTINATION_SCOPE (line 3) | const KEEPER_API_DESTINATION_SCOPE = "keeper.destinations.read"; constant KEEPER_API_MAPPING_SCOPE (line 4) | const KEEPER_API_MAPPING_SCOPE = "keeper.mappings.read"; constant KEEPER_API_EVENT_SCOPE (line 5) | const KEEPER_API_EVENT_SCOPE = "keeper.events.read"; constant KEEPER_API_SYNC_SCOPE (line 6) | const KEEPER_API_SYNC_SCOPE = "keeper.sync-status.read"; constant KEEPER_API_SCOPES (line 8) | const KEEPER_API_SCOPES = [ constant KEEPER_API_RESOURCE_SCOPES (line 17) | const KEEPER_API_RESOURCE_SCOPES = [...KEEPER_API_SCOPES]; constant KEEPER_API_DEFAULT_SCOPE (line 19) | const KEEPER_API_DEFAULT_SCOPE = ["offline_access", ...KEEPER_API_RESOUR... FILE: packages/constants/src/constants/time.ts constant MS_PER_SECOND (line 1) | const MS_PER_SECOND = 1000; constant SECONDS_PER_MINUTE (line 2) | const SECONDS_PER_MINUTE = 60; constant MINUTES_PER_HOUR (line 3) | const MINUTES_PER_HOUR = 60; constant HOURS_PER_DAY (line 4) | const HOURS_PER_DAY = 24; constant DAYS_PER_WEEK (line 5) | const DAYS_PER_WEEK = 7; constant REFRESH_BUFFER_MINUTES (line 6) | const REFRESH_BUFFER_MINUTES = 5; constant RATE_LIMIT_SECONDS (line 7) | const RATE_LIMIT_SECONDS = 60; constant MS_PER_MINUTE (line 9) | const MS_PER_MINUTE = SECONDS_PER_MINUTE * MS_PER_SECOND; constant MS_PER_HOUR (line 10) | const MS_PER_HOUR = MINUTES_PER_HOUR * MS_PER_MINUTE; constant MS_PER_DAY (line 11) | const MS_PER_DAY = HOURS_PER_DAY * MS_PER_HOUR; constant MS_PER_WEEK (line 12) | const MS_PER_WEEK = DAYS_PER_WEEK * MS_PER_DAY; constant SECONDS_PER_HOUR (line 14) | const SECONDS_PER_HOUR = MINUTES_PER_HOUR * SECONDS_PER_MINUTE; constant SECONDS_PER_DAY (line 15) | const SECONDS_PER_DAY = HOURS_PER_DAY * SECONDS_PER_HOUR; constant TOOLTIP_CLEAR_DELAY_MS (line 17) | const TOOLTIP_CLEAR_DELAY_MS = 1500; constant TOAST_TIMEOUT_MS (line 18) | const TOAST_TIMEOUT_MS = 3000; constant WEBSOCKET_RECONNECT_DELAY_MS (line 19) | const WEBSOCKET_RECONNECT_DELAY_MS = 3000; constant TOKEN_TTL_MS (line 20) | const TOKEN_TTL_MS = 30_000; constant TOKEN_REFRESH_BUFFER_MS (line 21) | const TOKEN_REFRESH_BUFFER_MS = REFRESH_BUFFER_MINUTES * MS_PER_MINUTE; constant RATE_LIMIT_DELAY_MS (line 22) | const RATE_LIMIT_DELAY_MS = RATE_LIMIT_SECONDS * MS_PER_SECOND; constant SYNC_TTL_SECONDS (line 23) | const SYNC_TTL_SECONDS = SECONDS_PER_DAY; constant KEEPER_EVENT_SUFFIX (line 25) | const KEEPER_EVENT_SUFFIX = "@keeper.sh"; constant KEEPER_USER_EVENT_SUFFIX (line 26) | const KEEPER_USER_EVENT_SUFFIX = "@user.keeper.sh"; constant KEEPER_CATEGORY (line 27) | const KEEPER_CATEGORY = "keeper.sh"; FILE: packages/data-schemas/src/client.ts type SocketMessage (line 1) | interface SocketMessage { type SyncAggregate (line 6) | interface SyncAggregate { FILE: packages/data-schemas/src/index.ts type ProxyableMethods (line 5) | type ProxyableMethods = typeof proxyableMethods.infer; type Plan (line 8) | type Plan = typeof planSchema.infer; type BillingPeriod (line 11) | type BillingPeriod = typeof billingPeriodSchema.infer; type FeedbackRequest (line 19) | type FeedbackRequest = typeof feedbackRequestSchema.infer; type CreateSource (line 27) | type CreateSource = typeof createSourceSchema.infer; type GoogleEvent (line 51) | type GoogleEvent = typeof googleEventSchema.infer; type GoogleEventList (line 58) | type GoogleEventList = typeof googleEventListSchema.infer; type GoogleAttendee (line 65) | type GoogleAttendee = typeof googleAttendeeSchema.infer; type GoogleEventWithAttendees (line 71) | type GoogleEventWithAttendees = typeof googleEventWithAttendeesSchema.in... type GoogleEventWithAttendeesList (line 77) | type GoogleEventWithAttendeesList = typeof googleEventWithAttendeesListS... type GoogleApiError (line 88) | type GoogleApiError = typeof googleApiErrorSchema.infer; type GoogleTokenResponse (line 97) | type GoogleTokenResponse = typeof googleTokenResponseSchema.infer; type GoogleUserInfo (line 108) | type GoogleUserInfo = typeof googleUserInfoSchema.infer; type MicrosoftTokenResponse (line 117) | type MicrosoftTokenResponse = typeof microsoftTokenResponseSchema.infer; type MicrosoftUserInfo (line 125) | type MicrosoftUserInfo = typeof microsoftUserInfoSchema.infer; type OutlookEvent (line 140) | type OutlookEvent = typeof outlookEventSchema.infer; type OutlookEventList (line 147) | type OutlookEventList = typeof outlookEventListSchema.infer; type OutlookCalendarViewEvent (line 161) | type OutlookCalendarViewEvent = typeof outlookCalendarViewEventSchema.in... type OutlookCalendarViewList (line 167) | type OutlookCalendarViewList = typeof outlookCalendarViewListSchema.infer; type MicrosoftApiError (line 172) | type MicrosoftApiError = typeof microsoftApiErrorSchema.infer; type AuthSocialProviders (line 179) | type AuthSocialProviders = typeof authSocialProvidersSchema.infer; type AuthCapabilities (line 191) | type AuthCapabilities = typeof authCapabilitiesSchema.infer; type SocketMessage (line 197) | type SocketMessage = typeof socketMessageSchema.infer; type SyncOperation (line 203) | type SyncOperation = typeof syncOperationSchema.infer; type SyncStatus (line 218) | type SyncStatus = typeof syncStatusSchema.infer; type SyncAggregate (line 229) | type SyncAggregate = typeof syncAggregateSchema.infer; type BroadcastMessage (line 236) | type BroadcastMessage = typeof broadcastMessageSchema.infer; type User (line 245) | type User = typeof userSchema.infer; type SignUpBody (line 253) | type SignUpBody = typeof signUpBodySchema.infer; type CalDAVDiscoverRequest (line 261) | type CalDAVDiscoverRequest = typeof caldavDiscoverRequestSchema.infer; type CalDAVConnectRequest (line 271) | type CalDAVConnectRequest = typeof caldavConnectRequestSchema.infer; type UpdateSourceDestinations (line 277) | type UpdateSourceDestinations = typeof updateSourceDestinationsSchema.in... type CheckoutSuccessEvent (line 284) | type CheckoutSuccessEvent = typeof checkoutSuccessEventSchema.infer; type GoogleCalendarListEntry (line 295) | type GoogleCalendarListEntry = typeof googleCalendarListEntrySchema.infer; type GoogleCalendarListResponse (line 302) | type GoogleCalendarListResponse = typeof googleCalendarListResponseSchem... type CreateOAuthSource (line 313) | type CreateOAuthSource = typeof createOAuthSourceSchema.infer; type CreateCalDAVSource (line 325) | type CreateCalDAVSource = typeof createCalDAVSourceSchema.infer; type CalDAVDiscoverSource (line 333) | type CalDAVDiscoverSource = typeof caldavDiscoverSourceSchema.infer; type OAuthCalendarSource (line 344) | type OAuthCalendarSource = typeof oauthCalendarSourceSchema.infer; type UpdateOAuthSourceDestinations (line 350) | type UpdateOAuthSourceDestinations = typeof updateOAuthSourceDestination... FILE: packages/database/drizzle/0000_slimy_justice.sql type "calendar_snapshots" (line 1) | CREATE TABLE "calendar_snapshots" ( FILE: packages/database/drizzle/0001_complete_golden_guardian.sql type "remote_ical_sources" (line 1) | CREATE TABLE "remote_ical_sources" ( FILE: packages/database/drizzle/0002_striped_queen_noir.sql type "calendars" (line 1) | CREATE TABLE "calendars" ( type "event_states" (line 9) | CREATE TABLE "event_states" ( type "users" (line 17) | CREATE TABLE "users" ( FILE: packages/database/drizzle/0005_dusty_nomad.sql type "account" (line 1) | CREATE TABLE "account" ( type "session" (line 17) | CREATE TABLE "session" ( type "user" (line 29) | CREATE TABLE "user" ( type "verification" (line 40) | CREATE TABLE "verification" ( FILE: packages/database/drizzle/0012_vengeful_thena.sql type "user_subscriptions" (line 1) | CREATE TABLE "user_subscriptions" ( FILE: packages/database/drizzle/0013_parallel_union_jack.sql type "sync_status" (line 1) | CREATE TABLE "sync_status" ( type "sync_status" (line 12) | CREATE UNIQUE INDEX "sync_status_user_provider_idx" ON "sync_status" USI... type "event_states" (line 13) | CREATE INDEX "event_states_start_time_idx" ON "event_states" USING btree... FILE: packages/database/drizzle/0016_salty_nextwave.sql type "passkey" (line 1) | CREATE TABLE "passkey" ( FILE: packages/database/drizzle/0019_tearful_doctor_doom.sql type "calendar_destinations" (line 1) | CREATE TABLE "calendar_destinations" ( type "calendar_destinations" (line 15) | CREATE UNIQUE INDEX "calendar_destinations_user_provider_idx" ON "calend... FILE: packages/database/drizzle/0020_huge_talon.sql type "calendar_destinations" (line 2) | CREATE UNIQUE INDEX "calendar_destinations_user_provider_account_idx" ON... FILE: packages/database/drizzle/0021_icy_white_queen.sql type "sync_status" (line 6) | CREATE UNIQUE INDEX "sync_status_destination_idx" ON "sync_status" USING... FILE: packages/database/drizzle/0022_lazy_avengers.sql type "calendar_destinations" (line 6) | CREATE UNIQUE INDEX "calendar_destinations_provider_account_idx" ON "cal... FILE: packages/database/drizzle/0023_lyrical_genesis.sql type "caldav_credentials" (line 1) | CREATE TABLE "caldav_credentials" ( type "oauth_credentials" (line 11) | CREATE TABLE "oauth_credentials" ( FILE: packages/database/drizzle/0024_aberrant_wallop.sql type "event_mappings" (line 1) | CREATE TABLE "event_mappings" ( type "event_mappings" (line 12) | CREATE UNIQUE INDEX "event_mappings_event_dest_idx" ON "event_mappings" ... type "event_mappings" (line 13) | CREATE INDEX "event_mappings_destination_idx" ON "event_mappings" USING ... type "event_states" (line 14) | CREATE UNIQUE INDEX "event_states_identity_idx" ON "event_states" USING ... FILE: packages/database/drizzle/0028_lush_sumo.sql type "source_destination_mappings" (line 1) | CREATE TABLE "source_destination_mappings" ( type "source_destination_mappings" (line 10) | CREATE UNIQUE INDEX "source_destination_mapping_idx" ON "source_destinat... type "source_destination_mappings" (line 11) | CREATE INDEX "source_destination_mappings_source_idx" ON "source_destina... type "source_destination_mappings" (line 12) | CREATE INDEX "source_destination_mappings_destination_idx" ON "source_de... FILE: packages/database/drizzle/0030_youthful_speed.sql type "oauth_calendar_sources" (line 1) | CREATE TABLE "oauth_calendar_sources" ( type "oauth_event_mappings" (line 13) | CREATE TABLE "oauth_event_mappings" ( type "oauth_event_states" (line 24) | CREATE TABLE "oauth_event_states" ( type "oauth_source_destination_mappings" (line 33) | CREATE TABLE "oauth_source_destination_mappings" ( type "oauth_calendar_sources" (line 47) | CREATE UNIQUE INDEX "oauth_calendar_sources_user_calendar_idx" ON "oauth... type "oauth_calendar_sources" (line 48) | CREATE INDEX "oauth_calendar_sources_user_idx" ON "oauth_calendar_source... type "oauth_calendar_sources" (line 49) | CREATE INDEX "oauth_calendar_sources_destination_idx" ON "oauth_calendar... type "oauth_calendar_sources" (line 50) | CREATE INDEX "oauth_calendar_sources_provider_idx" ON "oauth_calendar_so... type "oauth_event_mappings" (line 51) | CREATE UNIQUE INDEX "oauth_event_mappings_event_dest_idx" ON "oauth_even... type "oauth_event_mappings" (line 52) | CREATE INDEX "oauth_event_mappings_destination_idx" ON "oauth_event_mapp... type "oauth_event_states" (line 53) | CREATE INDEX "oauth_event_states_start_time_idx" ON "oauth_event_states"... type "oauth_event_states" (line 54) | CREATE UNIQUE INDEX "oauth_event_states_identity_idx" ON "oauth_event_st... type "oauth_event_states" (line 55) | CREATE INDEX "oauth_event_states_source_idx" ON "oauth_event_states" USI... type "oauth_source_destination_mappings" (line 56) | CREATE UNIQUE INDEX "oauth_source_destination_mapping_idx" ON "oauth_sou... type "oauth_source_destination_mappings" (line 57) | CREATE INDEX "oauth_source_destination_mappings_source_idx" ON "oauth_so... type "oauth_source_destination_mappings" (line 58) | CREATE INDEX "oauth_source_destination_mappings_destination_idx" ON "oau... FILE: packages/database/drizzle/0031_glorious_joshua_kane.sql type "caldav_event_mappings" (line 1) | CREATE TABLE "caldav_event_mappings" ( type "caldav_event_states" (line 12) | CREATE TABLE "caldav_event_states" ( type "caldav_source_credentials" (line 21) | CREATE TABLE "caldav_source_credentials" ( type "caldav_source_destination_mappings" (line 30) | CREATE TABLE "caldav_source_destination_mappings" ( type "caldav_sources" (line 37) | CREATE TABLE "caldav_sources" ( type "oauth_source_credentials" (line 49) | CREATE TABLE "oauth_source_credentials" ( type "caldav_event_mappings" (line 73) | CREATE UNIQUE INDEX "caldav_event_mappings_event_dest_idx" ON "caldav_ev... type "caldav_event_mappings" (line 74) | CREATE INDEX "caldav_event_mappings_destination_idx" ON "caldav_event_ma... type "caldav_event_states" (line 75) | CREATE INDEX "caldav_event_states_start_time_idx" ON "caldav_event_state... type "caldav_event_states" (line 76) | CREATE UNIQUE INDEX "caldav_event_states_identity_idx" ON "caldav_event_... type "caldav_event_states" (line 77) | CREATE INDEX "caldav_event_states_source_idx" ON "caldav_event_states" U... type "caldav_source_destination_mappings" (line 78) | CREATE UNIQUE INDEX "caldav_source_destination_mapping_idx" ON "caldav_s... type "caldav_source_destination_mappings" (line 79) | CREATE INDEX "caldav_source_destination_mappings_source_idx" ON "caldav_... type "caldav_source_destination_mappings" (line 80) | CREATE INDEX "caldav_source_destination_mappings_destination_idx" ON "ca... type "caldav_sources" (line 81) | CREATE INDEX "caldav_sources_user_idx" ON "caldav_sources" USING btree (... type "caldav_sources" (line 82) | CREATE INDEX "caldav_sources_provider_idx" ON "caldav_sources" USING btr... type "caldav_sources" (line 83) | CREATE UNIQUE INDEX "caldav_sources_user_calendar_idx" ON "caldav_source... type "oauth_source_credentials" (line 84) | CREATE INDEX "oauth_source_credentials_user_idx" ON "oauth_source_creden... type "oauth_source_credentials" (line 85) | CREATE INDEX "oauth_source_credentials_provider_idx" ON "oauth_source_cr... type "oauth_calendar_sources" (line 87) | CREATE INDEX "oauth_calendar_sources_credential_idx" ON "oauth_calendar_... type "oauth_calendar_sources" (line 88) | CREATE UNIQUE INDEX "oauth_calendar_sources_user_calendar_idx" ON "oauth... FILE: packages/database/drizzle/0032_dapper_patch.sql type "calendar_sources" (line 1) | CREATE TABLE "calendar_sources" ( type "calendar_sources" (line 20) | CREATE INDEX "calendar_sources_user_idx" ON "calendar_sources" USING btr... type "calendar_sources" (line 21) | CREATE INDEX "calendar_sources_type_idx" ON "calendar_sources" USING btr... type "calendar_sources" (line 22) | CREATE INDEX "calendar_sources_provider_idx" ON "calendar_sources" USING... type "event_states" (line 41) | CREATE INDEX "event_states_source_idx" ON "event_states" USING btree ("s... FILE: packages/database/drizzle/0037_thankful_machine_man.sql type "calendar_accounts" (line 2) | CREATE TABLE "calendar_accounts" ( type "calendars" (line 16) | CREATE TABLE "calendars" ( type "tmp_source_calendar_id_map" (line 185) | CREATE TEMP TABLE "tmp_source_calendar_id_map" AS type "tmp_calendar_account_id_map" (line 273) | CREATE TEMP TABLE "tmp_calendar_account_id_map" AS type "calendar_accounts" (line 394) | CREATE INDEX "calendar_accounts_user_idx" ON "calendar_accounts" USING b... type "calendar_accounts" (line 395) | CREATE INDEX "calendar_accounts_provider_idx" ON "calendar_accounts" USI... type "calendars" (line 396) | CREATE INDEX "calendars_user_idx" ON "calendars" USING btree ("userId") type "calendars" (line 397) | CREATE INDEX "calendars_account_idx" ON "calendars" USING btree ("accoun... type "calendars" (line 398) | CREATE INDEX "calendars_role_idx" ON "calendars" USING btree ("role") type "calendars" (line 399) | CREATE INDEX "calendars_type_idx" ON "calendars" USING btree ("calendarT... type "event_mappings" (line 400) | CREATE UNIQUE INDEX "event_mappings_event_cal_idx" ON "event_mappings" U... type "event_mappings" (line 401) | CREATE INDEX "event_mappings_calendar_idx" ON "event_mappings" USING btr... type "event_states" (line 402) | CREATE INDEX "event_states_calendar_idx" ON "event_states" USING btree (... type "oauth_credentials" (line 403) | CREATE INDEX "oauth_credentials_user_idx" ON "oauth_credentials" USING b... type "oauth_credentials" (line 404) | CREATE INDEX "oauth_credentials_provider_idx" ON "oauth_credentials" USI... type "sync_status" (line 405) | CREATE UNIQUE INDEX "sync_status_calendar_idx" ON "sync_status" USING bt... type "event_states" (line 406) | CREATE UNIQUE INDEX "event_states_identity_idx" ON "event_states" USING ... type "source_destination_mappings" (line 407) | CREATE UNIQUE INDEX "source_destination_mapping_idx" ON "source_destinat... type "source_destination_mappings" (line 408) | CREATE INDEX "source_destination_mappings_source_idx" ON "source_destina... type "source_destination_mappings" (line 409) | CREATE INDEX "source_destination_mappings_destination_idx" ON "source_de... FILE: packages/database/drizzle/0038_military_radioactive_man.sql type "calendars" (line 5) | CREATE INDEX "calendars_capabilities_idx" ON "calendars" USING btree ("c... FILE: packages/database/drizzle/0039_fat_mad_thinker.sql type "sync_profiles" (line 1) | CREATE TABLE "sync_profiles" ( type "sync_profiles" (line 29) | CREATE INDEX "sync_profiles_user_idx" ON "sync_profiles" USING btree ("u... type "source_destination_mappings" (line 31) | CREATE INDEX "source_destination_mappings_profile_idx" ON "source_destin... type "source_destination_mappings" (line 32) | CREATE UNIQUE INDEX "source_destination_mapping_idx" ON "source_destinat... FILE: packages/database/drizzle/0040_sparkling_toad.sql type "tmp_calendar_account_id_map_0040" (line 68) | CREATE TEMP TABLE "tmp_calendar_account_id_map_0040" AS FILE: packages/database/drizzle/0041_keen_black_panther.sql type "profile_calendars" (line 1) | CREATE TABLE "profile_calendars" ( type "profile_calendars" (line 10) | CREATE UNIQUE INDEX "profile_calendars_unique_idx" ON "profile_calendars... type "profile_calendars" (line 11) | CREATE INDEX "profile_calendars_profile_idx" ON "profile_calendars" USIN... FILE: packages/database/drizzle/0042_famous_obadiah_stane.sql type "source_destination_mappings" (line 12) | CREATE UNIQUE INDEX "source_destination_mapping_idx" ON "source_destinat... FILE: packages/database/drizzle/0048_gigantic_kid_colt.sql type "ical_feed_settings" (line 1) | CREATE TABLE "ical_feed_settings" ( FILE: packages/database/drizzle/0050_purple_patch.sql type "feedback" (line 1) | CREATE TABLE "feedback" ( type "feedback" (line 11) | CREATE INDEX "feedback_user_idx" ON "feedback" USING btree ("userId") FILE: packages/database/drizzle/0058_same_robbie_robertson.sql type "oauth_access_token" (line 1) | CREATE TABLE "oauth_access_token" ( type "oauth_application" (line 15) | CREATE TABLE "oauth_application" ( type "oauth_consent" (line 50) | CREATE TABLE "oauth_consent" ( type "oauth_refresh_token" (line 60) | CREATE TABLE "oauth_refresh_token" ( type "oauth_access_token" (line 85) | CREATE INDEX "oauth_access_token_client_idx" ON "oauth_access_token" USI... type "oauth_access_token" (line 86) | CREATE INDEX "oauth_access_token_session_idx" ON "oauth_access_token" US... type "oauth_access_token" (line 87) | CREATE INDEX "oauth_access_token_user_idx" ON "oauth_access_token" USING... type "oauth_access_token" (line 88) | CREATE INDEX "oauth_access_token_refresh_idx" ON "oauth_access_token" US... type "oauth_application" (line 89) | CREATE INDEX "oauth_application_user_idx" ON "oauth_application" USING b... type "oauth_consent" (line 90) | CREATE INDEX "oauth_consent_client_idx" ON "oauth_consent" USING btree (... type "oauth_consent" (line 91) | CREATE INDEX "oauth_consent_user_idx" ON "oauth_consent" USING btree ("u... type "oauth_consent" (line 92) | CREATE INDEX "oauth_consent_reference_idx" ON "oauth_consent" USING btre... type "oauth_refresh_token" (line 93) | CREATE INDEX "oauth_refresh_token_client_idx" ON "oauth_refresh_token" U... type "oauth_refresh_token" (line 94) | CREATE INDEX "oauth_refresh_token_session_idx" ON "oauth_refresh_token" ... type "oauth_refresh_token" (line 95) | CREATE INDEX "oauth_refresh_token_user_idx" ON "oauth_refresh_token" USI... FILE: packages/database/drizzle/0059_shocking_stone_men.sql type "jwks" (line 1) | CREATE TABLE "jwks" ( FILE: packages/database/drizzle/0061_brief_toxin.sql type "calendar_accounts" (line 1) | CREATE INDEX "calendar_accounts_needs_reauth_idx" ON "calendar_accounts"... type "event_mappings" (line 2) | CREATE INDEX "event_mappings_sync_hash_idx" ON "event_mappings" USING bt... type "event_states" (line 3) | CREATE INDEX "event_states_end_time_idx" ON "event_states" USING btree (... type "oauth_credentials" (line 4) | CREATE INDEX "oauth_credentials_expires_at_idx" ON "oauth_credentials" U... FILE: packages/database/drizzle/0062_lame_white_tiger.sql type "api_tokens" (line 1) | CREATE TABLE "api_tokens" ( type "api_tokens" (line 14) | CREATE INDEX "api_tokens_user_idx" ON "api_tokens" USING btree ("userId") type "api_tokens" (line 15) | CREATE UNIQUE INDEX "api_tokens_hash_idx" ON "api_tokens" USING btree ("... FILE: packages/database/drizzle/0063_friendly_black_panther.sql type "user_events" (line 1) | CREATE TABLE "user_events" ( type "user_events" (line 20) | CREATE INDEX "user_events_user_idx" ON "user_events" USING btree ("userId") type "user_events" (line 21) | CREATE INDEX "user_events_calendar_idx" ON "user_events" USING btree ("c... type "user_events" (line 22) | CREATE INDEX "user_events_start_time_idx" ON "user_events" USING btree (... type "user_events" (line 23) | CREATE INDEX "user_events_end_time_idx" ON "user_events" USING btree ("e... FILE: packages/database/src/database/schema.ts constant DEFAULT_EVENT_COUNT (line 13) | const DEFAULT_EVENT_COUNT = 0; FILE: packages/database/src/utils/database.ts type DatabasePoolOptions (line 5) | interface DatabasePoolOptions { constant DEFAULT_STATEMENT_TIMEOUT_MS (line 9) | const DEFAULT_STATEMENT_TIMEOUT_MS = 30_000; type DatabaseInstance (line 17) | interface DatabaseInstance extends BunSQLDatabase { constant CONNECTION_RETRY_DELAY_MS (line 21) | const CONNECTION_RETRY_DELAY_MS = 500; constant CONNECTION_MAX_RETRIES (line 22) | const CONNECTION_MAX_RETRIES = 10; FILE: packages/digest-fetch/src/index.ts type DigestChallenge (line 66) | interface DigestChallenge { type FetchFunction (line 142) | type FetchFunction = ( type DigestClientOptions (line 147) | interface DigestClientOptions { FILE: packages/fixtures/src/cache.ts constant DEFAULT_FIXTURE_DIRECTORY_SEGMENT (line 3) | const DEFAULT_FIXTURE_DIRECTORY_SEGMENT = "ics"; type FixtureDirectoryOptions (line 5) | interface FixtureDirectoryOptions { type SyncFixtureFilesOptions (line 9) | interface SyncFixtureFilesOptions extends FixtureDirectoryOptions { type SyncedFixture (line 15) | interface SyncedFixture { type MissingFixture (line 21) | interface MissingFixture { FILE: packages/fixtures/src/schema.ts type FixtureExpectation (line 9) | type FixtureExpectation = typeof fixtureExpectationSchema.infer; type FixtureSource (line 21) | type FixtureSource = typeof fixtureSourceSchema.infer; type FixtureManifest (line 24) | type FixtureManifest = typeof fixtureManifestSchema.infer; FILE: packages/fixtures/src/scripts/sync-fixtures.ts constant FORCE_REFRESH_FLAG (line 4) | const FORCE_REFRESH_FLAG = "--refresh"; constant INCLUDE_DISABLED_FLAG (line 5) | const INCLUDE_DISABLED_FLAG = "--include-disabled"; FILE: packages/otelemetry/src/index.ts constant PINO_SEVERITY (line 16) | const PINO_SEVERITY: Record = { constant PINO_SEVERITY_TEXT (line 25) | const PINO_SEVERITY_TEXT: Record = { FILE: packages/premium/src/constants.ts constant FREE_ACCOUNT_LIMIT (line 1) | const FREE_ACCOUNT_LIMIT = 2; constant PRO_ACCOUNT_LIMIT (line 2) | const PRO_ACCOUNT_LIMIT = Infinity; constant FREE_MAPPING_LIMIT (line 4) | const FREE_MAPPING_LIMIT = 3; constant PRO_MAPPING_LIMIT (line 5) | const PRO_MAPPING_LIMIT = Infinity; FILE: packages/premium/src/subscription.ts constant FIRST_RESULT_LIMIT (line 13) | const FIRST_RESULT_LIMIT = 1; type PremiumConfig (line 15) | interface PremiumConfig { type UserSubscription (line 20) | interface UserSubscription { type PremiumService (line 24) | interface PremiumService { FILE: packages/queue/src/index.ts constant PUSH_SYNC_QUEUE_NAME (line 5) | const PUSH_SYNC_QUEUE_NAME = "push-sync"; constant USER_TIMEOUT_MS (line 6) | const USER_TIMEOUT_MS = 300_000; type PushSyncJobPayload (line 8) | interface PushSyncJobPayload { type PushSyncJobResult (line 14) | interface PushSyncJobResult { FILE: packages/sync/src/destination-errors.ts constant BACKOFF_ERROR_PATTERNS (line 7) | const BACKOFF_ERROR_PATTERNS: string[] = [ FILE: packages/sync/src/resolve-provider.ts constant OAUTH_PROVIDERS (line 22) | const OAUTH_PROVIDERS = new Set(["google", "outlook"]); constant CALDAV_PROVIDERS (line 23) | const CALDAV_PROVIDERS = new Set(["caldav", "fastmail", "icloud"]); type OAuthConfig (line 25) | interface OAuthConfig { type ResolveProviderOptions (line 150) | interface ResolveProviderOptions { FILE: packages/sync/src/sync-lock.ts constant LOCK_PREFIX (line 1) | const LOCK_PREFIX = "sync:lock:"; constant SIGNAL_PREFIX (line 2) | const SIGNAL_PREFIX = "sync:signal:"; constant INVALIDATION_PREFIX (line 3) | const INVALIDATION_PREFIX = "sync:invalidated:"; constant LOCK_TTL_SECONDS (line 4) | const LOCK_TTL_SECONDS = 120; constant INVALIDATION_TTL_SECONDS (line 5) | const INVALIDATION_TTL_SECONDS = 300; constant POLL_INTERVAL_MS (line 6) | const POLL_INTERVAL_MS = 250; constant POLL_TIMEOUT_MS (line 7) | const POLL_TIMEOUT_MS = (LOCK_TTL_SECONDS * 1000) + 10_000; type SyncLockRedis (line 9) | interface SyncLockRedis { type InvalidationRedis (line 14) | interface InvalidationRedis { type SyncLockHandle (line 18) | interface SyncLockHandle { type AcquireSyncLockResult (line 23) | interface AcquireSyncLockResult { type SyncLockSkippedResult (line 28) | interface SyncLockSkippedResult { constant ACQUIRE_OR_SIGNAL_SCRIPT (line 45) | const ACQUIRE_OR_SIGNAL_SCRIPT = ` constant RELEASE_SCRIPT (line 68) | const RELEASE_SCRIPT = ` FILE: packages/sync/src/sync-user.ts constant GOOGLE_REQUESTS_PER_MINUTE (line 21) | const GOOGLE_REQUESTS_PER_MINUTE = 500; type SyncConfig (line 58) | interface SyncConfig { type SyncDestinationsResult (line 68) | interface SyncDestinationsResult { constant EMPTY_RESULT (line 77) | const EMPTY_RESULT: SyncDestinationsResult = { type CalendarSyncCompletion (line 86) | interface CalendarSyncCompletion { type SyncCallbacks (line 100) | interface SyncCallbacks { FILE: services/api/src/context.ts constant MIN_TRUSTED_ORIGINS_COUNT (line 16) | const MIN_TRUSTED_ORIGINS_COUNT = 0; method set (line 25) | async set(key, value, ttlSeconds) { method consume (line 29) | async consume(key) { method tryAcquire (line 45) | async tryAcquire(key, ttlSeconds) { method release (line 49) | async release(key) { FILE: services/api/src/handlers/auth-oauth-resource.ts type PrepareOAuthTokenRequestInput (line 1) | interface PrepareOAuthTokenRequestInput { type PreparedOAuthTokenRequest (line 7) | type PreparedOAuthTokenRequest = constant TOKEN_ENDPOINT_PATH (line 18) | const TOKEN_ENDPOINT_PATH = "/api/auth/oauth2/token"; constant FORM_URLENCODED_MEDIA_TYPE (line 19) | const FORM_URLENCODED_MEDIA_TYPE = "application/x-www-form-urlencoded"; constant TOKEN_GRANT_TYPES (line 20) | const TOKEN_GRANT_TYPES = new Set(["authorization_code", "refresh_token"]); FILE: services/api/src/handlers/auth.ts constant COMPANION_COOKIE_NAME (line 7) | const COMPANION_COOKIE_NAME = "keeper.has_session"; constant COMPANION_COOKIE_SET (line 8) | const COMPANION_COOKIE_SET = `${COMPANION_COOKIE_NAME}=1; Path=/; SameSi... constant COMPANION_COOKIE_CLEAR (line 9) | const COMPANION_COOKIE_CLEAR = `${COMPANION_COOKIE_NAME}=; Path=/; Max-A... FILE: services/api/src/handlers/websocket-initial-status.ts type SocketSender (line 1) | interface SocketSender { type InitialSyncAggregateFallbackPayload (line 5) | interface InitialSyncAggregateFallbackPayload { type OutgoingSyncAggregatePayload (line 13) | interface OutgoingSyncAggregatePayload { type SendInitialSyncStatusDependencies (line 23) | interface SendInitialSyncStatusDependencies { constant INITIAL_COUNT (line 32) | const INITIAL_COUNT = 0; constant COMPLETE_PERCENT (line 33) | const COMPLETE_PERCENT = 100; FILE: services/api/src/handlers/websocket-payload.ts type SyncAggregatePayload (line 1) | interface SyncAggregatePayload { type SyncAggregateFallbackPayload (line 11) | type SyncAggregateFallbackPayload = Omit { FILE: services/api/src/index.ts constant HTTP_UNAUTHORIZED (line 15) | const HTTP_UNAUTHORIZED = 401; constant HTTP_NOT_FOUND (line 16) | const HTTP_NOT_FOUND = 404; constant HTTP_METHOD_NOT_ALLOWED (line 17) | const HTTP_METHOD_NOT_ALLOWED = 405; constant HTTP_INTERNAL_SERVER_ERROR (line 18) | const HTTP_INTERNAL_SERVER_ERROR = 500; FILE: services/api/src/middleware/cors.ts constant CORS_MAX_AGE_SECONDS (line 4) | const CORS_MAX_AGE_SECONDS = 86_400; constant HTTP_NO_CONTENT (line 5) | const HTTP_NO_CONTENT = 204; constant HTTP_FORBIDDEN (line 6) | const HTTP_FORBIDDEN = 403; constant EMPTY_ORIGINS_COUNT (line 7) | const EMPTY_ORIGINS_COUNT = 0; type FetchHandler (line 9) | type FetchHandler = (request: Request) => MaybePromise = { FILE: services/api/src/mutations/resolve-credentials.ts type CredentialRow (line 31) | interface CredentialRow { type EventSource (line 142) | type EventSource = "user" | "synced"; type ResolvedEventCredentials (line 144) | interface ResolvedEventCredentials { FILE: services/api/src/provider-display.ts type AccountDisplayInput (line 3) | interface AccountDisplayInput { FILE: services/api/src/queries/get-event-count.ts constant EMPTY_RESULT_COUNT (line 10) | const EMPTY_RESULT_COUNT = 0; type EventCountOptions (line 12) | interface EventCountOptions { FILE: services/api/src/queries/get-events-in-range.ts constant EMPTY_RESULT_COUNT (line 12) | const EMPTY_RESULT_COUNT = 0; type SourceInfo (line 34) | interface SourceInfo { FILE: services/api/src/queries/list-mappings.ts constant EMPTY_RESULT_COUNT (line 8) | const EMPTY_RESULT_COUNT = 0; FILE: services/api/src/read-models.ts type KeeperApiOptions (line 19) | interface KeeperApiOptions { FILE: services/api/src/routes/api/accounts/[id].ts constant GET (line 10) | const GET = withWideEvent( constant DELETE (line 48) | const DELETE = withWideEvent( FILE: services/api/src/routes/api/accounts/index.ts constant GET (line 7) | const GET = withWideEvent( FILE: services/api/src/routes/api/cal/[identifier].ts constant ICS_EXTENSION_LENGTH (line 5) | const ICS_EXTENSION_LENGTH = 4; constant GET (line 7) | const GET = withWideEvent(async ({ params }) => { FILE: services/api/src/routes/api/destinations/[id].ts constant DELETE (line 6) | const DELETE = withWideEvent( FILE: services/api/src/routes/api/destinations/authorize.ts constant FIRST_RESULT_LIMIT (line 9) | const FIRST_RESULT_LIMIT = 1; constant GET (line 35) | const GET = withWideEvent( FILE: services/api/src/routes/api/destinations/caldav/discover.ts constant POST (line 7) | const POST = withWideEvent( FILE: services/api/src/routes/api/destinations/caldav/index.ts constant POST (line 11) | const POST = withWideEvent( FILE: services/api/src/routes/api/destinations/callback/[provider].ts constant GET (line 13) | const GET = withWideEvent(async ({ request, params }) => { FILE: services/api/src/routes/api/destinations/index.ts constant GET (line 7) | const GET = withWideEvent( FILE: services/api/src/routes/api/entitlements.ts constant GET (line 7) | const GET = withWideEvent( FILE: services/api/src/routes/api/events/count.ts constant GET (line 7) | const GET = withWideEvent( FILE: services/api/src/routes/api/events/index.ts constant GET (line 8) | const GET = withWideEvent( FILE: services/api/src/routes/api/feedback/index.ts constant TEMPLATE_ID (line 9) | const TEMPLATE_ID = { constant POST (line 14) | const POST = withWideEvent( FILE: services/api/src/routes/api/health.ts constant GET (line 3) | const GET = withWideEvent(() => FILE: services/api/src/routes/api/ical/settings.ts constant DEFAULT_SETTINGS (line 11) | const DEFAULT_SETTINGS = { constant ICAL_BOOLEAN_UPDATE_FIELDS (line 19) | const ICAL_BOOLEAN_UPDATE_FIELDS = [ type PatchIcalSettingsRouteContext (line 43) | interface PatchIcalSettingsRouteContext { type PatchIcalSettingsDependencies (line 48) | interface PatchIcalSettingsDependencies { constant GET (line 80) | const GET = withWideEvent( constant PATCH (line 92) | const PATCH = withWideEvent( FILE: services/api/src/routes/api/ical/token.ts constant GET (line 10) | const GET = withWideEvent( FILE: services/api/src/routes/api/ics/[id]/destinations.ts constant GET (line 6) | const GET = withWideEvent( FILE: services/api/src/routes/api/ics/index.ts constant GET (line 14) | const GET = withWideEvent( constant POST (line 24) | const POST = withWideEvent( FILE: services/api/src/routes/api/ics/source-routes.ts type IcsRouteContext (line 5) | interface IcsRouteContext { type IcsPostRouteContext (line 9) | interface IcsPostRouteContext extends IcsRouteContext { type ParsedCreateSourceBody (line 13) | interface ParsedCreateSourceBody { type InvalidSourceUrlErrorLike (line 18) | interface InvalidSourceUrlErrorLike { type GetIcsSourcesDependencies (line 23) | interface GetIcsSourcesDependencies { type PostIcsSourceDependencies (line 27) | interface PostIcsSourceDependencies { FILE: services/api/src/routes/api/mappings/index.ts constant GET (line 7) | const GET = withWideEvent( FILE: services/api/src/routes/api/socket/token.ts constant GET (line 4) | const GET = withWideEvent( FILE: services/api/src/routes/api/socket/url.ts constant GET (line 5) | const GET = withWideEvent( FILE: services/api/src/routes/api/sources/[id].ts constant GET (line 14) | const GET = withWideEvent( constant PATCH (line 68) | const PATCH = withWideEvent( FILE: services/api/src/routes/api/sources/[id]/destinations.ts constant GET (line 14) | const GET = withWideEvent( constant PUT (line 39) | const PUT = withWideEvent( FILE: services/api/src/routes/api/sources/[id]/mapping-routes.ts type MappingRouteContext (line 6) | interface MappingRouteContext { type MappingPutRouteContext (line 11) | interface MappingPutRouteContext extends MappingRouteContext { type GetSourceDestinationsDependencies (line 15) | interface GetSourceDestinationsDependencies { type PutSourceDestinationsDependencies (line 20) | interface PutSourceDestinationsDependencies { type GetSourcesForDestinationDependencies (line 28) | interface GetSourcesForDestinationDependencies { type PutSourcesForDestinationDependencies (line 33) | interface PutSourcesForDestinationDependencies { FILE: services/api/src/routes/api/sources/[id]/source-item-routes.ts constant EVENT_FILTER_FIELDS (line 6) | const EVENT_FILTER_FIELDS = [ constant SOURCE_BOOLEAN_UPDATE_FIELDS (line 15) | const SOURCE_BOOLEAN_UPDATE_FIELDS = [ type SourceRouteContext (line 20) | interface SourceRouteContext { type PatchSourceRouteContext (line 25) | interface PatchSourceRouteContext extends SourceRouteContext { type PatchSourceDependencies (line 29) | interface PatchSourceDependencies { FILE: services/api/src/routes/api/sources/[id]/sources.ts constant GET (line 14) | const GET = withWideEvent( constant PUT (line 37) | const PUT = withWideEvent( FILE: services/api/src/routes/api/sources/authorize.ts constant FIRST_RESULT_LIMIT (line 9) | const FIRST_RESULT_LIMIT = 1; constant GET (line 26) | const GET = withWideEvent( FILE: services/api/src/routes/api/sources/caldav/discover.ts constant POST (line 8) | const POST = withWideEvent( FILE: services/api/src/routes/api/sources/caldav/index.ts constant GET (line 14) | const GET = withWideEvent( constant POST (line 34) | const POST = withWideEvent( FILE: services/api/src/routes/api/sources/callback-state.ts constant GET (line 6) | const GET = withWideEvent( FILE: services/api/src/routes/api/sources/callback/[provider].ts constant MS_PER_SECOND (line 15) | const MS_PER_SECOND = 1000; constant GET (line 17) | const GET = withWideEvent(async ({ request, params }) => { FILE: services/api/src/routes/api/sources/google/[id]/destinations.ts constant GET (line 6) | const GET = withWideEvent( FILE: services/api/src/routes/api/sources/google/calendars.ts constant GOOGLE_PROVIDER (line 10) | const GOOGLE_PROVIDER = "google"; constant GET (line 12) | const GET = withWideEvent( FILE: services/api/src/routes/api/sources/google/index.ts constant GOOGLE_PROVIDER (line 16) | const GOOGLE_PROVIDER = "google"; constant GET (line 18) | const GET = withWideEvent( constant POST (line 25) | const POST = withWideEvent( FILE: services/api/src/routes/api/sources/index.ts constant GET (line 7) | const GET = withWideEvent( FILE: services/api/src/routes/api/sources/outlook/[id]/destinations.ts constant GET (line 6) | const GET = withWideEvent( FILE: services/api/src/routes/api/sources/outlook/calendars.ts constant OUTLOOK_PROVIDER (line 10) | const OUTLOOK_PROVIDER = "outlook"; constant GET (line 12) | const GET = withWideEvent( FILE: services/api/src/routes/api/sources/outlook/index.ts constant OUTLOOK_PROVIDER (line 15) | const OUTLOOK_PROVIDER = "outlook"; constant GET (line 17) | const GET = withWideEvent( constant POST (line 24) | const POST = withWideEvent( FILE: services/api/src/routes/api/sync/status.ts constant GET (line 7) | const GET = withWideEvent( FILE: services/api/src/routes/api/tokens/[id].ts constant DELETE (line 8) | const DELETE = withWideEvent( FILE: services/api/src/routes/api/tokens/index.ts constant GET (line 14) | const GET = withWideEvent( constant POST (line 33) | const POST = withWideEvent( FILE: services/api/src/routes/api/v1/accounts/index.ts constant GET (line 7) | const GET = withWideEvent( FILE: services/api/src/routes/api/v1/calendars/[calendarId]/invites.ts constant GET (line 13) | const GET = withWideEvent( FILE: services/api/src/routes/api/v1/calendars/index.ts constant GET (line 15) | const GET = withWideEvent( FILE: services/api/src/routes/api/v1/events/[id].ts constant GET (line 14) | const GET = withWideEvent( constant PATCH (line 30) | const PATCH = withWideEvent( constant DELETE (line 74) | const DELETE = withWideEvent( FILE: services/api/src/routes/api/v1/events/index.ts constant GET (line 39) | const GET = withWideEvent( constant POST (line 61) | const POST = withWideEvent( FILE: services/api/src/routes/api/v1/ical/index.ts constant GET (line 10) | const GET = withWideEvent( FILE: services/api/src/routes/api/webhook/polar.ts constant HTTP_OK (line 8) | const HTTP_OK = 200; FILE: services/api/src/types.ts type KeeperDatabase (line 3) | type KeeperDatabase = BunSQLDatabase; type KeeperEventRangeInput (line 5) | interface KeeperEventRangeInput { type KeeperEventFilters (line 10) | interface KeeperEventFilters { type KeeperSource (line 16) | interface KeeperSource { type KeeperDestination (line 33) | interface KeeperDestination { type KeeperMapping (line 40) | interface KeeperMapping { type KeeperEvent (line 48) | interface KeeperEvent { type KeeperSyncStatus (line 61) | interface KeeperSyncStatus { type EventInput (line 69) | interface EventInput { type EventUpdateInput (line 80) | interface EventUpdateInput { type RsvpStatus (line 90) | type RsvpStatus = "accepted" | "declined" | "tentative"; type EventActionResult (line 92) | interface EventActionResult { type EventCreateResult (line 97) | interface EventCreateResult extends EventActionResult { type PendingInvite (line 101) | interface PendingInvite { type ProviderCredentials (line 114) | interface ProviderCredentials { type KeeperApi (line 135) | interface KeeperApi { FILE: services/api/src/utils/api-rate-limit.ts constant FREE_DAILY_LIMIT (line 3) | const FREE_DAILY_LIMIT = 25; constant SECONDS_PER_DAY (line 4) | const SECONDS_PER_DAY = 86_400; type RateLimitResult (line 11) | interface RateLimitResult { FILE: services/api/src/utils/api-tokens.ts constant TOKEN_PREFIX (line 3) | const TOKEN_PREFIX = "kpr_"; constant TOKEN_BYTES (line 4) | const TOKEN_BYTES = 32; constant DISPLAY_PREFIX_LENGTH (line 5) | const DISPLAY_PREFIX_LENGTH = 12; FILE: services/api/src/utils/background-task.ts type BackgroundJobCallback (line 3) | type BackgroundJobCallback = () => Promise; FILE: services/api/src/utils/caldav-sources.ts constant FIRST_RESULT_LIMIT (line 13) | const FIRST_RESULT_LIMIT = 1; constant CALDAV_CALENDAR_TYPE (line 14) | const CALDAV_CALENDAR_TYPE = "caldav"; constant USER_ACCOUNT_LOCK_NAMESPACE (line 15) | const USER_ACCOUNT_LOCK_NAMESPACE = 9002; type CaldavSourceDatabase (line 16) | type CaldavSourceDatabase = Pick< class CalDAVSourceLimitError (line 21) | class CalDAVSourceLimitError extends Error { method constructor (line 22) | constructor() { class DuplicateCalDAVSourceError (line 27) | class DuplicateCalDAVSourceError extends Error { method constructor (line 28) | constructor() { type CalDAVSource (line 33) | interface CalDAVSource { type CreateCalDAVSourceData (line 45) | interface CreateCalDAVSourceData { FILE: services/api/src/utils/caldav.ts constant USER_ACCOUNT_LOCK_NAMESPACE (line 12) | const USER_ACCOUNT_LOCK_NAMESPACE = 9002; class DestinationLimitError (line 14) | class DestinationLimitError extends Error { method constructor (line 15) | constructor() { class CalDAVConnectionError (line 20) | class CalDAVConnectionError extends Error { method constructor (line 21) | constructor(cause?: unknown) { type CalDAVCredentials (line 27) | interface CalDAVCredentials { type DiscoveredCalendar (line 32) | interface DiscoveredCalendar { type DiscoveryResult (line 37) | interface DiscoveryResult { FILE: services/api/src/utils/date-range.ts constant HOURS_START_OF_DAY (line 3) | const HOURS_START_OF_DAY = 0; constant MINUTES_START (line 4) | const MINUTES_START = 0; constant SECONDS_START (line 5) | const SECONDS_START = 0; constant MILLISECONDS_START (line 6) | const MILLISECONDS_START = 0; constant HOURS_END_OF_DAY (line 7) | const HOURS_END_OF_DAY = 23; constant MINUTES_END (line 8) | const MINUTES_END = 59; constant SECONDS_END (line 9) | const SECONDS_END = 59; constant MILLISECONDS_END (line 10) | const MILLISECONDS_END = 999; type DateRange (line 12) | interface DateRange { type NormalizedDateRange (line 17) | interface NormalizedDateRange { FILE: services/api/src/utils/destinations.ts constant FIRST_RESULT_LIMIT (line 19) | const FIRST_RESULT_LIMIT = 1; constant EMPTY_RESULT_COUNT (line 20) | const EMPTY_RESULT_COUNT = 0; type DestinationDatabase (line 21) | type DestinationDatabase = Pick, r... type RouteCallback (line 25) | type RouteCallback = (ctx: RouteContext) => MaybePromise; type AuthenticatedRouteCallback (line 26) | type AuthenticatedRouteCallback = (ctx: AuthenticatedRouteContext) => Ma... type UserContext (line 59) | interface UserContext { type Session (line 81) | interface Session { FILE: services/api/src/utils/oauth-calendar-listing.ts type CredentialsWithExpiry (line 18) | interface CredentialsWithExpiry { type RefreshTokenResult (line 24) | interface RefreshTokenResult { type CalendarListAuthError (line 28) | interface CalendarListAuthError extends Error { type NormalizedCalendar (line 32) | interface NormalizedCalendar { type OAuthCalendarListingOptions (line 38) | interface OAuthCalendarListingOptions { type OAuthCalendarAccessOptions (line 52) | type OAuthCalendarAccessOptions = Pick< FILE: services/api/src/utils/oauth-callback-state.ts constant CALLBACK_STATE_PREFIX (line 3) | const CALLBACK_STATE_PREFIX = "oauth:callback:"; constant CALLBACK_STATE_TTL_SECONDS (line 4) | const CALLBACK_STATE_TTL_SECONDS = 300; type OAuthCallbackState (line 6) | interface OAuthCallbackState { FILE: services/api/src/utils/oauth-refresh.ts constant FIRST_RESULT_LIMIT (line 10) | const FIRST_RESULT_LIMIT = 1; constant MS_PER_SECOND (line 11) | const MS_PER_SECOND = 1000; type RefreshResult (line 13) | interface RefreshResult { FILE: services/api/src/utils/oauth-source-credentials.ts constant FIRST_RESULT_LIMIT (line 5) | const FIRST_RESULT_LIMIT = 1; type CreateOAuthSourceCredentialData (line 7) | interface CreateOAuthSourceCredentialData { FILE: services/api/src/utils/oauth-sources.ts constant FIRST_RESULT_LIMIT (line 17) | const FIRST_RESULT_LIMIT = 1; constant OAUTH_CALENDAR_TYPE (line 18) | const OAUTH_CALENDAR_TYPE = "oauth"; constant USER_ACCOUNT_LOCK_NAMESPACE (line 19) | const USER_ACCOUNT_LOCK_NAMESPACE = 9002; type OAuthSourceDatabase (line 20) | type OAuthSourceDatabase = Pick... type SourceDestinationMapping (line 16) | interface SourceDestinationMapping { type SetDestinationsTransaction (line 24) | interface SetDestinationsTransaction { type SetDestinationsDependencies (line 40) | interface SetDestinationsDependencies { type SetSourcesTransaction (line 47) | interface SetSourcesTransaction { type SetSourcesDependencies (line 60) | interface SetSourcesDependencies { FILE: services/api/src/utils/source-lifecycle.ts type SourceReference (line 3) | interface SourceReference { type CreateSourceInput (line 7) | interface CreateSourceInput { type CreateSourceDependencies (line 13) | interface CreateSourceDependencies { class SourceLimitError (line 37) | class SourceLimitError extends Error { method constructor (line 38) | constructor() { class InvalidSourceUrlError (line 43) | class InvalidSourceUrlError extends Error { method constructor (line 46) | constructor(cause?: unknown) { FILE: services/api/src/utils/source-sync-defaults.ts constant DEFAULT_SOURCE_SYNC_RULES (line 1) | const DEFAULT_SOURCE_SYNC_RULES = { FILE: services/api/src/utils/sources.ts constant USER_ACCOUNT_LOCK_NAMESPACE (line 18) | const USER_ACCOUNT_LOCK_NAMESPACE = 9002; constant FIRST_RESULT_LIMIT (line 20) | const FIRST_RESULT_LIMIT = 1; constant ICAL_CALENDAR_TYPE (line 21) | const ICAL_CALENDAR_TYPE = "ical"; type Source (line 22) | type Source = typeof calendarsTable.$inferSelect; FILE: services/api/src/utils/state.ts constant SOCKET_TOKEN_PREFIX (line 4) | const SOCKET_TOKEN_PREFIX = "socket:token:"; constant TOKEN_TTL_SECONDS (line 5) | const TOKEN_TTL_SECONDS = Math.ceil(TOKEN_TTL_MS / 1000); FILE: services/api/src/utils/user.ts constant FIRST_RESULT_LIMIT (line 5) | const FIRST_RESULT_LIMIT = 1; FILE: services/api/tests/routes/api/ics/source-routes.test.ts class TestSourceLimitError (line 9) | class TestSourceLimitError extends Error {} class TestInvalidSourceUrlError (line 11) | class TestInvalidSourceUrlError extends Error { method constructor (line 14) | constructor(message: string, authRequired: boolean) { FILE: services/api/tests/utils/account-locks.test.ts type SelectPromise (line 33) | type SelectPromise = Promise & { FILE: services/api/tests/utils/enqueue-push-sync.test.ts type AddedJob (line 6) | interface AddedJob { method addedJobs (line 25) | get addedJobs() { return state.addedJobs; } method closed (line 25) | get closed() { return state.closed; } FILE: services/api/tests/utils/ical.test.ts type SummaryEvent (line 8) | interface SummaryEvent { type SummarySettings (line 13) | interface SummarySettings { constant DEFAULT_SETTINGS (line 30) | const DEFAULT_SETTINGS = { FILE: services/api/tests/utils/source-destination-mappings.test.ts type UserLockManager (line 51) | interface UserLockManager { FILE: services/api/tests/utils/source-lifecycle.test.ts type TestSource (line 8) | interface TestSource { FILE: services/cron/scripts/build.ts constant ROUTES_GLOB (line 3) | const ROUTES_GLOB = new Glob("src/jobs/**/*.ts"); constant ENTRY_POINT_GLOB (line 4) | const ENTRY_POINT_GLOB = new Glob("src/index.ts"); FILE: services/cron/src/context.ts constant REDIS_COMMAND_TIMEOUT_MS (line 15) | const REDIS_COMMAND_TIMEOUT_MS = 10_000; method tryAcquire (line 18) | async tryAcquire(key, ttlSeconds) { method release (line 22) | async release(key) { FILE: services/cron/src/jobs/ingest-sources.ts constant SOURCE_TIMEOUT_MS (line 32) | const SOURCE_TIMEOUT_MS = 60_000; constant SOURCE_CONCURRENCY (line 33) | const SOURCE_CONCURRENCY = 5; constant GOOGLE_REQUESTS_PER_MINUTE (line 34) | const GOOGLE_REQUESTS_PER_MINUTE = 500; type OAuthFetcherParams (line 142) | interface OAuthFetcherParams { type IngestionSourceResult (line 162) | interface IngestionSourceResult { method callback (line 567) | async callback() { FILE: services/cron/src/jobs/push-destinations.ts method callback (line 45) | async callback() { FILE: services/cron/src/jobs/reconcile-subscriptions.ts constant EMPTY_SUBSCRIPTIONS_COUNT (line 7) | const EMPTY_SUBSCRIPTIONS_COUNT = 0; type ReconcileSubscriptionsDependencies (line 16) | interface ReconcileSubscriptionsDependencies { constant RECONCILE_USER_TIMEOUT_MS (line 23) | const RECONCILE_USER_TIMEOUT_MS = 60_000; method callback (line 110) | async callback() { FILE: services/cron/src/migration-check.ts constant MIGRATION_GUIDE_URL (line 1) | const MIGRATION_GUIDE_URL = "https://github.com/ridafkih/keeper.sh/issue... FILE: services/cron/src/utils/source-plan-selection.ts type SourceWithUserId (line 3) | interface SourceWithUserId { type GetUserPlan (line 7) | type GetUserPlan = (userId: string) => Promise; FILE: services/cron/tests/utils/source-plan-selection.test.ts type Plan (line 4) | type Plan = "free" | "pro"; type SourceRecord (line 6) | interface SourceRecord { FILE: services/mcp/src/env.ts type McpEnv (line 14) | type McpEnv = ReturnType; FILE: services/mcp/src/index.ts constant HTTP_NOT_FOUND (line 13) | const HTTP_NOT_FOUND = 404; constant HTTP_METHOD_NOT_ALLOWED (line 14) | const HTTP_METHOD_NOT_ALLOWED = 405; constant HTTP_INTERNAL_SERVER_ERROR (line 15) | const HTTP_INTERNAL_SERVER_ERROR = 500; FILE: services/mcp/src/mcp-handler.ts constant JSON_RPC_VERSION (line 7) | const JSON_RPC_VERSION = "2.0"; constant JSON_RPC_ERROR_UNAUTHORIZED (line 8) | const JSON_RPC_ERROR_UNAUTHORIZED = -32_001; constant JSON_RPC_ERROR_FORBIDDEN (line 9) | const JSON_RPC_ERROR_FORBIDDEN = -32_003; constant JSON_RPC_ERROR_METHOD_NOT_ALLOWED (line 10) | const JSON_RPC_ERROR_METHOD_NOT_ALLOWED = -32_005; constant ALLOWED_HTTP_METHODS (line 11) | const ALLOWED_HTTP_METHODS = new Set(["DELETE", "GET", "POST"]); constant ALLOW_HEADER_VALUE (line 12) | const ALLOW_HEADER_VALUE = "GET, POST, DELETE, OPTIONS"; type ResponseHeaders (line 13) | type ResponseHeaders = Headers | Record; type KeeperMcpAuthSession (line 15) | interface KeeperMcpAuthSession { type AuthenticatedKeeperMcpSession (line 20) | interface AuthenticatedKeeperMcpSession { type KeeperMcpAuth (line 26) | interface KeeperMcpAuth { type McpSessionResolution (line 32) | type McpSessionResolution = type CreateKeeperMcpHandlerOptions (line 41) | interface CreateKeeperMcpHandlerOptions { FILE: services/mcp/src/routes/health.ts constant GET (line 3) | const GET = withWideEvent(() => FILE: services/mcp/src/toolset.ts type KeeperEvent (line 16) | type KeeperEvent = z.infer; type KeeperToolContext (line 18) | interface KeeperToolContext { type KeeperMcpToolDefinition (line 23) | interface KeeperMcpToolDefinition { type KeeperCalendar (line 36) | type KeeperCalendar = z.infer; type KeeperMcpToolset (line 38) | interface KeeperMcpToolset { FILE: services/mcp/src/utils/middleware.ts type RouteHandler (line 3) | type RouteHandler = (request: Request) => Response | Promise; FILE: services/mcp/src/utils/route-handler.ts type RouteHandler (line 1) | type RouteHandler = (request: Request) => Response | Promise; type HttpMethod (line 3) | type HttpMethod = "GET" | "POST" | "DELETE"; type RouteModule (line 5) | interface RouteModule { constant HTTP_METHODS (line 11) | const HTTP_METHODS: HttpMethod[] = ["GET", "POST", "DELETE"]; FILE: services/worker/scripts/build.ts constant ENTRY_POINT_GLOB (line 3) | const ENTRY_POINT_GLOB = new Glob("src/index.ts"); FILE: services/worker/src/context.ts constant REDIS_COMMAND_TIMEOUT_MS (line 8) | const REDIS_COMMAND_TIMEOUT_MS = 10_000; constant REDIS_MAX_RETRIES (line 9) | const REDIS_MAX_RETRIES = 3; method tryAcquire (line 12) | async tryAcquire(key, ttlSeconds) { method release (line 16) | async release(key) { FILE: services/worker/src/index.ts constant DEFAULT_CONCURRENCY (line 10) | const DEFAULT_CONCURRENCY = 25; constant LOCK_DURATION_MS (line 11) | const LOCK_DURATION_MS = 360_000; constant STALLED_INTERVAL_MS (line 12) | const STALLED_INTERVAL_MS = 30_000; constant MAX_STALLED_COUNT (line 13) | const MAX_STALLED_COUNT = 1;