@pol-studios/db 1.0.55 → 1.0.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{DataLayerContext-C7cJtiO8.d.ts → DataLayerContext-BYZtDD0g.d.ts} +1 -1
- package/dist/auth/context.js +4 -2
- package/dist/auth/hooks.js +5 -3
- package/dist/auth/index.js +5 -3
- package/dist/{chunk-7YGDT46S.js → chunk-4EO55YV2.js} +10 -7
- package/dist/chunk-4EO55YV2.js.map +1 -0
- package/dist/{chunk-WILXD5X3.js → chunk-6SDH7M7J.js} +25 -9
- package/dist/chunk-6SDH7M7J.js.map +1 -0
- package/dist/{chunk-OC6S4XFL.js → chunk-DDL63KLQ.js} +385 -104
- package/dist/chunk-DDL63KLQ.js.map +1 -0
- package/dist/{chunk-WSKBZIEI.js → chunk-GWYTROSD.js} +95 -1
- package/dist/chunk-GWYTROSD.js.map +1 -0
- package/dist/{chunk-BRFFTGVJ.js → chunk-MEBT5YHA.js} +2 -2
- package/dist/{chunk-AA3VUWTP.js → chunk-N4KK5G5T.js} +7 -5
- package/dist/{chunk-AA3VUWTP.js.map → chunk-N4KK5G5T.js.map} +1 -1
- package/dist/chunk-QYAFI34Q.js +64 -0
- package/dist/chunk-QYAFI34Q.js.map +1 -0
- package/dist/{chunk-AKCNWHXV.js → chunk-VYFAMTHI.js} +2 -2
- package/dist/chunk-W7PERM66.js +215 -0
- package/dist/chunk-W7PERM66.js.map +1 -0
- package/dist/{chunk-HZIVE5AZ.js → chunk-YRIPM2AN.js} +253 -338
- package/dist/chunk-YRIPM2AN.js.map +1 -0
- package/dist/core/index.d.ts +24 -1
- package/dist/{executor-YJw4m7Q7.d.ts → executor-D15yjeMo.d.ts} +20 -0
- package/dist/hooks/index.d.ts +3 -3
- package/dist/hooks/index.js +4 -2
- package/dist/{index-jVYdTeWx.d.ts → index-CFUuTzXO.d.ts} +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +10 -8
- package/dist/index.native.d.ts +6 -6
- package/dist/index.native.js +10 -8
- package/dist/index.web.d.ts +10 -9
- package/dist/index.web.js +23 -12
- package/dist/index.web.js.map +1 -1
- package/dist/powersync-bridge/index.d.ts +1 -1
- package/dist/query/index.d.ts +4 -83
- package/dist/query/index.js +13 -3
- package/dist/realtime/index.d.ts +80 -1
- package/dist/realtime/index.js +11 -9
- package/dist/realtime/index.js.map +1 -1
- package/dist/select-parser-BAV7fOaM.d.ts +144 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/{useDbCount-DHLJzmkO.d.ts → useDbCount-Ckb-FhZk.d.ts} +1 -1
- package/dist/{useResolveFeedback-B0UcYWVI.d.ts → useResolveFeedback-CuUkdHoR.d.ts} +13 -29
- package/dist/with-auth/index.js +7 -5
- package/dist/with-auth/index.js.map +1 -1
- package/package.json +5 -2
- package/dist/chunk-7YGDT46S.js.map +0 -1
- package/dist/chunk-HZIVE5AZ.js.map +0 -1
- package/dist/chunk-OC6S4XFL.js.map +0 -1
- package/dist/chunk-WILXD5X3.js.map +0 -1
- package/dist/chunk-WSKBZIEI.js.map +0 -1
- /package/dist/{chunk-BRFFTGVJ.js.map → chunk-MEBT5YHA.js.map} +0 -0
- /package/dist/{chunk-AKCNWHXV.js.map → chunk-VYFAMTHI.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useConsent.ts","../../src/hooks/useAccountDeletion.ts","../../src/hooks/useUserStatus.ts","../../src/hooks/useDataExport.ts","../../src/useBackgroundTask.tsx","../../src/useUserMetadata.tsx","../../src/storage/useStorageUpload.ts"],"sourcesContent":["import { useCallback, useMemo } from \"react\";\nimport useSupabase from \"../useSupabase\";\nimport { useDbQuery } from \"../useDbQuery\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useSetupAuth } from \"../auth\";\n\n/**\n * Consent types supported by the system\n */\nexport type ConsentType = \"terms_of_service\" | \"privacy_policy\" | \"marketing\" | \"data_processing\" | \"cookies\" | string;\n\n/**\n * A single consent record from the database\n */\nexport interface ConsentRecord {\n id: number;\n userId: string;\n consentType: ConsentType;\n consentVersion: string;\n consentGiven: boolean;\n consentText: string | null;\n ipAddress: string | null;\n userAgent: string | null;\n createdAt: string;\n}\n\n/**\n * Summary of a user's consent status for each type\n */\nexport interface ConsentSummary {\n consentType: ConsentType;\n consentGiven: boolean;\n consentVersion: string;\n consentedAt: string;\n}\n\n/**\n * Options for recording consent\n */\nexport interface RecordConsentOptions {\n /** Optional snapshot of the consent text shown to the user */\n consentText?: string;\n /** Optional IP address (usually captured server-side) */\n ipAddress?: string;\n}\n\n/**\n * Return type for the useConsent hook\n */\nexport interface UseConsentReturn {\n /**\n * Records a consent decision for a specific type and version\n * @param type - The type of consent (e.g., 'terms_of_service', 'privacy_policy')\n * @param version - The version of the document being consented to\n * @param given - Whether consent is being given (true) or withdrawn (false)\n * @param options - Optional additional data (consent text snapshot, IP address)\n * @returns Promise resolving to the created consent record or null on error\n */\n recordConsent: (type: ConsentType, version: string, given: boolean, options?: RecordConsentOptions) => Promise<ConsentRecord | null>;\n\n /**\n * Fetches all consent records for the current user\n * @returns Array of consent records\n */\n consents: ConsentRecord[];\n\n /**\n * Gets the latest consent status for each consent type\n * @returns Array of consent summaries\n */\n consentSummary: ConsentSummary[];\n\n /**\n * Records consent withdrawal for a specific type\n * Creates a new consent record with consentGiven: false\n * @param type - The type of consent to withdraw\n * @param version - The version of the current document\n * @returns Promise resolving to the created withdrawal record or null on error\n */\n withdrawConsent: (type: ConsentType, version: string) => Promise<ConsentRecord | null>;\n\n /**\n * Checks if the user has active (non-withdrawn) consent for a type\n * @param type - The consent type to check\n * @returns boolean indicating if consent is currently active\n */\n hasActiveConsent: (type: ConsentType) => boolean;\n\n /**\n * Gets the latest consent record for a specific type\n * @param type - The consent type to look up\n * @returns The latest consent record or undefined if none exists\n */\n getLatestConsent: (type: ConsentType) => ConsentRecord | undefined;\n\n /**\n * Whether consent data is currently being loaded\n */\n isLoading: boolean;\n\n /**\n * Any error that occurred while loading consents\n */\n error: Error | null;\n\n /**\n * Refetch consent data from the server\n */\n refetch: () => void;\n}\n\n/**\n * Hook for managing GDPR-compliant consent records\n *\n * Provides functionality to:\n * - Record new consent decisions\n * - Fetch user's consent history\n * - Withdraw consent\n * - Check consent status\n *\n * @example\n * ```tsx\n * function ConsentManager() {\n * const {\n * recordConsent,\n * withdrawConsent,\n * hasActiveConsent,\n * consentSummary,\n * isLoading\n * } = useConsent();\n *\n * const handleAcceptTerms = async () => {\n * await recordConsent('terms_of_service', 'v1.0', true, {\n * consentText: 'I agree to the Terms of Service...'\n * });\n * };\n *\n * const handleWithdrawMarketing = async () => {\n * await withdrawConsent('marketing', 'v1.0');\n * };\n *\n * if (isLoading) return <Spinner />;\n *\n * return (\n * <div>\n * {consentSummary.map(consent => (\n * <div key={consent.consentType}>\n * {consent.consentType}: {consent.consentGiven ? 'Accepted' : 'Declined'}\n * </div>\n * ))}\n * </div>\n * );\n * }\n * ```\n */\nexport function useConsent(): UseConsentReturn {\n const supabase = useSupabase();\n const {\n user\n } = useSetupAuth();\n\n // Fetch all consent records for the current user\n const consentsQuery = useDbQuery(supabase.schema(\"core\").from(\"ConsentRecord\").select(\"*\").eq(\"userId\", user?.id ?? \"\").order(\"createdAt\", {\n ascending: false\n }), {\n enabled: isUsable(user),\n crossOrganization: true\n });\n const consents: ConsentRecord[] = useMemo(() => {\n if (!consentsQuery.data) return [];\n return consentsQuery.data as ConsentRecord[];\n }, [consentsQuery.data]);\n\n // Compute consent summary (latest status per type)\n const consentSummary: ConsentSummary[] = useMemo(() => {\n const latestByType = new Map<ConsentType, ConsentRecord>();\n for (const consent of consents) {\n // Since we order by createdAt DESC, first occurrence is latest\n if (!latestByType.has(consent.consentType)) {\n latestByType.set(consent.consentType, consent);\n }\n }\n return Array.from(latestByType.values()).map(record => ({\n consentType: record.consentType,\n consentGiven: record.consentGiven,\n consentVersion: record.consentVersion,\n consentedAt: record.createdAt\n }));\n }, [consents]);\n\n /**\n * Record a consent decision\n */\n const recordConsent = useCallback(async (type: ConsentType, version: string, given: boolean, options?: RecordConsentOptions): Promise<ConsentRecord | null> => {\n if (!user?.id) {\n console.error(\"Cannot record consent: user not authenticated\");\n return null;\n }\n try {\n // Capture user agent from browser\n const userAgent = typeof window !== \"undefined\" ? window.navigator.userAgent : null;\n const {\n data,\n error\n } = await supabase.schema(\"core\").from(\"ConsentRecord\").insert({\n userId: user.id,\n consentType: type,\n consentVersion: version,\n consentGiven: given,\n consentText: options?.consentText ?? null,\n ipAddress: options?.ipAddress ?? null,\n userAgent: userAgent\n }).select().single();\n if (error) {\n console.error(\"Error recording consent:\", error);\n return null;\n }\n\n // Refetch to update local state\n consentsQuery.refetch();\n return data as ConsentRecord;\n } catch (err) {\n console.error(\"Error recording consent:\", err);\n return null;\n }\n }, [supabase, user?.id, consentsQuery]);\n\n /**\n * Withdraw consent for a specific type\n */\n const withdrawConsent = useCallback(async (type_0: ConsentType, version_0: string): Promise<ConsentRecord | null> => {\n return recordConsent(type_0, version_0, false);\n }, [recordConsent]);\n\n /**\n * Check if user has active (non-withdrawn) consent for a type\n */\n const hasActiveConsent = useCallback((type_1: ConsentType): boolean => {\n const summary = consentSummary.find(s => s.consentType === type_1);\n return summary?.consentGiven ?? false;\n }, [consentSummary]);\n\n /**\n * Get the latest consent record for a specific type\n */\n const getLatestConsent = useCallback((type_2: ConsentType): ConsentRecord | undefined => {\n return consents.find(c => c.consentType === type_2);\n }, [consents]);\n return {\n recordConsent,\n consents,\n consentSummary,\n withdrawConsent,\n hasActiveConsent,\n getLatestConsent,\n isLoading: consentsQuery.isLoading,\n error: consentsQuery.error as Error | null,\n refetch: consentsQuery.refetch\n };\n}\n\n/**\n * Standalone function to record consent during registration\n * Use this when the useConsent hook is not available (e.g., during sign-up flow)\n *\n * @param supabase - Supabase client instance\n * @param userId - The user's ID\n * @param type - Consent type\n * @param version - Document version\n * @param given - Whether consent is given\n * @param options - Optional additional data\n * @returns Promise resolving to the created record or null on error\n *\n * @example\n * ```tsx\n * // In registration handler\n * const response = await supabase.auth.signUp({ email, password });\n * if (response.data.user) {\n * await recordConsentForUser(\n * supabase,\n * response.data.user.id,\n * 'terms_of_service',\n * 'v1.0',\n * true,\n * { consentText: 'I agree to the Terms of Service...' }\n * );\n * }\n * ```\n */\nexport async function recordConsentForUser(supabase: ReturnType<typeof useSupabase>, userId: string, type: ConsentType, version: string, given: boolean, options?: RecordConsentOptions): Promise<ConsentRecord | null> {\n try {\n // Capture user agent from browser\n const userAgent = typeof window !== \"undefined\" ? window.navigator.userAgent : null;\n const {\n data,\n error\n } = await supabase.schema(\"core\").from(\"ConsentRecord\").insert({\n userId: userId,\n consentType: type,\n consentVersion: version,\n consentGiven: given,\n consentText: options?.consentText ?? null,\n ipAddress: options?.ipAddress ?? null,\n userAgent: userAgent\n }).select().single();\n if (error) {\n console.error(\"Error recording consent:\", error);\n return null;\n }\n return data as ConsentRecord;\n } catch (err) {\n console.error(\"Error recording consent:\", err);\n return null;\n }\n}\nexport default useConsent;","import { c as _c } from \"react/compiler-runtime\";\nimport { useCallback, useMemo } from \"react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport useSupabase from \"../useSupabase\";\nimport { useAuth } from \"../auth\";\n\n/**\n * Deletion request status\n */\nexport type DeletionStatus = \"pending\" | \"cancelled\" | \"completed\";\n\n/**\n * Account deletion request details\n */\nexport interface DeletionRequest {\n id: number;\n status: DeletionStatus;\n requestedAt: string;\n scheduledDeletionAt: string;\n completedAt: string | null;\n cancelledAt: string | null;\n reason: string | null;\n daysRemaining: number | null;\n}\n\n/**\n * Response from get_deletion_status RPC\n */\nexport interface DeletionStatusResponse {\n hasRequest: boolean;\n request: DeletionRequest | null;\n}\n\n/**\n * Response from request_account_deletion RPC\n */\nexport interface RequestDeletionResponse {\n success: boolean;\n error?: string;\n requestId?: number;\n requestedAt?: string;\n scheduledDeletionAt?: string;\n gracePeriodDays?: number;\n message?: string;\n existingRequest?: {\n id: number;\n requestedAt: string;\n scheduledDeletionAt: string;\n status: DeletionStatus;\n };\n}\n\n/**\n * Response from cancel_account_deletion RPC\n */\nexport interface CancelDeletionResponse {\n success: boolean;\n error?: string;\n requestId?: number;\n cancelledAt?: string;\n message?: string;\n}\n\n/**\n * Query key for deletion status\n */\nconst DELETION_STATUS_KEY = [\"accountDeletionStatus\"] as const;\n\n/**\n * Hook for managing GDPR-compliant account deletion\n *\n * Provides functionality to:\n * - Request account deletion (with 30-day grace period)\n * - Cancel a pending deletion request\n * - Check current deletion status\n *\n * @example\n * ```tsx\n * function AccountSettings() {\n * const {\n * deletionStatus,\n * isLoading,\n * isPendingDeletion,\n * daysRemaining,\n * requestDeletion,\n * cancelDeletion,\n * isRequesting,\n * isCancelling\n * } = useAccountDeletion();\n *\n * if (isLoading) return <Spinner />;\n *\n * if (isPendingDeletion) {\n * return (\n * <div>\n * <p>Your account is scheduled for deletion in {daysRemaining} days</p>\n * <button onClick={() => cancelDeletion()}>Cancel Deletion</button>\n * </div>\n * );\n * }\n *\n * return (\n * <button onClick={() => requestDeletion(\"No longer using the service\")}>\n * Delete My Account\n * </button>\n * );\n * }\n * ```\n */\nexport function useAccountDeletion() {\n const $ = _c(56);\n const supabase = useSupabase();\n const queryClient = useQueryClient();\n const {\n user\n } = useAuth();\n let t0;\n if ($[0] !== supabase) {\n t0 = async () => {\n const {\n data,\n error\n } = await supabase.schema(\"core\").rpc(\"get_deletion_status\");\n if (error) {\n throw new Error(error.message);\n }\n return data as unknown as DeletionStatusResponse;\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n const t1 = !!user;\n let t2;\n if ($[2] !== t0 || $[3] !== t1) {\n t2 = {\n queryKey: DELETION_STATUS_KEY,\n queryFn: t0,\n enabled: t1,\n staleTime: 300000,\n refetchOnWindowFocus: true\n };\n $[2] = t0;\n $[3] = t1;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n const statusQuery = useQuery(t2);\n let t3;\n if ($[5] !== supabase) {\n t3 = async reason => {\n const {\n data: data_0,\n error: error_0\n } = await supabase.schema(\"core\").rpc(\"request_account_deletion\", {\n p_reason: reason\n });\n if (error_0) {\n throw new Error(error_0.message);\n }\n return data_0 as unknown as RequestDeletionResponse;\n };\n $[5] = supabase;\n $[6] = t3;\n } else {\n t3 = $[6];\n }\n let t4;\n if ($[7] !== queryClient) {\n t4 = data_1 => {\n if (data_1.success) {\n queryClient.invalidateQueries({\n queryKey: DELETION_STATUS_KEY\n });\n }\n };\n $[7] = queryClient;\n $[8] = t4;\n } else {\n t4 = $[8];\n }\n let t5;\n if ($[9] !== t3 || $[10] !== t4) {\n t5 = {\n mutationFn: t3,\n onSuccess: t4\n };\n $[9] = t3;\n $[10] = t4;\n $[11] = t5;\n } else {\n t5 = $[11];\n }\n const requestMutation = useMutation(t5);\n let t6;\n if ($[12] !== supabase) {\n t6 = async () => {\n const {\n data: data_2,\n error: error_1\n } = await supabase.schema(\"core\").rpc(\"cancel_account_deletion\");\n if (error_1) {\n throw new Error(error_1.message);\n }\n return data_2 as unknown as CancelDeletionResponse;\n };\n $[12] = supabase;\n $[13] = t6;\n } else {\n t6 = $[13];\n }\n let t7;\n if ($[14] !== queryClient) {\n t7 = data_3 => {\n if (data_3.success) {\n queryClient.invalidateQueries({\n queryKey: DELETION_STATUS_KEY\n });\n }\n };\n $[14] = queryClient;\n $[15] = t7;\n } else {\n t7 = $[15];\n }\n let t8;\n if ($[16] !== t6 || $[17] !== t7) {\n t8 = {\n mutationFn: t6,\n onSuccess: t7\n };\n $[16] = t6;\n $[17] = t7;\n $[18] = t8;\n } else {\n t8 = $[18];\n }\n const cancelMutation = useMutation(t8);\n let t9;\n if ($[19] !== requestMutation) {\n t9 = async reason_0 => requestMutation.mutateAsync(reason_0);\n $[19] = requestMutation;\n $[20] = t9;\n } else {\n t9 = $[20];\n }\n const requestDeletion = t9;\n let t10;\n if ($[21] !== cancelMutation) {\n t10 = async () => cancelMutation.mutateAsync();\n $[21] = cancelMutation;\n $[22] = t10;\n } else {\n t10 = $[22];\n }\n const cancelDeletion = t10;\n let t11;\n if ($[23] !== queryClient) {\n t11 = () => {\n queryClient.invalidateQueries({\n queryKey: DELETION_STATUS_KEY\n });\n };\n $[23] = queryClient;\n $[24] = t11;\n } else {\n t11 = $[24];\n }\n const refreshStatus = t11;\n const status = statusQuery.data;\n const request = status?.request;\n const t12 = request?.status === \"pending\";\n const t13 = request?.status === \"cancelled\";\n const t14 = request?.status === \"completed\";\n const t15 = request?.daysRemaining ?? null;\n let t16;\n if ($[25] !== request) {\n t16 = request?.scheduledDeletionAt ? new Date(request.scheduledDeletionAt) : null;\n $[25] = request;\n $[26] = t16;\n } else {\n t16 = $[26];\n }\n let t17;\n if ($[27] !== request) {\n t17 = request?.requestedAt ? new Date(request.requestedAt) : null;\n $[27] = request;\n $[28] = t17;\n } else {\n t17 = $[28];\n }\n let t18;\n if ($[29] !== request) {\n t18 = request?.cancelledAt ? new Date(request.cancelledAt) : null;\n $[29] = request;\n $[30] = t18;\n } else {\n t18 = $[30];\n }\n const t19 = request?.reason ?? null;\n let t20;\n if ($[31] !== request || $[32] !== t12 || $[33] !== t13 || $[34] !== t14 || $[35] !== t15 || $[36] !== t16 || $[37] !== t17 || $[38] !== t18 || $[39] !== t19) {\n t20 = {\n deletionRequest: request,\n isPendingDeletion: t12,\n isCancelledDeletion: t13,\n isCompletedDeletion: t14,\n daysRemaining: t15,\n scheduledDeletionAt: t16,\n requestedAt: t17,\n cancelledAt: t18,\n reason: t19\n };\n $[31] = request;\n $[32] = t12;\n $[33] = t13;\n $[34] = t14;\n $[35] = t15;\n $[36] = t16;\n $[37] = t17;\n $[38] = t18;\n $[39] = t19;\n $[40] = t20;\n } else {\n t20 = $[40];\n }\n const computedValues = t20;\n let t21;\n if ($[41] !== cancelDeletion || $[42] !== cancelMutation.data || $[43] !== cancelMutation.error || $[44] !== cancelMutation.isPending || $[45] !== computedValues || $[46] !== refreshStatus || $[47] !== requestDeletion || $[48] !== requestMutation.data || $[49] !== requestMutation.error || $[50] !== requestMutation.isPending || $[51] !== statusQuery.data || $[52] !== statusQuery.error || $[53] !== statusQuery.isError || $[54] !== statusQuery.isLoading) {\n t21 = {\n deletionStatus: statusQuery.data,\n isLoading: statusQuery.isLoading,\n isError: statusQuery.isError,\n error: statusQuery.error,\n ...computedValues,\n requestDeletion,\n cancelDeletion,\n refreshStatus,\n isRequesting: requestMutation.isPending,\n isCancelling: cancelMutation.isPending,\n requestError: requestMutation.error,\n cancelError: cancelMutation.error,\n requestResult: requestMutation.data,\n cancelResult: cancelMutation.data\n };\n $[41] = cancelDeletion;\n $[42] = cancelMutation.data;\n $[43] = cancelMutation.error;\n $[44] = cancelMutation.isPending;\n $[45] = computedValues;\n $[46] = refreshStatus;\n $[47] = requestDeletion;\n $[48] = requestMutation.data;\n $[49] = requestMutation.error;\n $[50] = requestMutation.isPending;\n $[51] = statusQuery.data;\n $[52] = statusQuery.error;\n $[53] = statusQuery.isError;\n $[54] = statusQuery.isLoading;\n $[55] = t21;\n } else {\n t21 = $[55];\n }\n return t21;\n}\n\n/**\n * Type exports for consumers\n */\nexport type UseAccountDeletionReturn = ReturnType<typeof useAccountDeletion>;","import { c as _c } from \"react/compiler-runtime\";\nimport { useCallback, useMemo } from \"react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport useSupabase from \"../useSupabase\";\nimport { useAuth, ProfileStatus } from \"../auth\";\n\n/**\n * User status information from get_user_status RPC\n */\nexport interface UserStatusInfo {\n exists: boolean;\n userId?: string;\n status?: ProfileStatus;\n archivedAt?: string | null;\n archivedBy?: string | null;\n isActive?: boolean;\n}\n\n/**\n * Response from archive_user RPC\n */\nexport interface ArchiveUserResponse {\n success: boolean;\n error?: string;\n userId?: string;\n archivedAt?: string;\n archivedBy?: string;\n message?: string;\n}\n\n/**\n * Response from unarchive_user RPC\n */\nexport interface UnarchiveUserResponse {\n success: boolean;\n error?: string;\n userId?: string;\n restoredAt?: string;\n restoredBy?: string;\n message?: string;\n}\n\n/**\n * Query key factory for user status\n */\nconst USER_STATUS_KEY = (userId: string) => [\"userStatus\", userId] as const;\n\n/**\n * Hook for managing user profile status (archival)\n *\n * Provides functionality to:\n * - Check a user's current status\n * - Archive a user (admin only)\n * - Unarchive/restore a user (admin only)\n *\n * @param targetUserId - Optional user ID to check. Defaults to current user.\n *\n * @example\n * ```tsx\n * // Check current user's status\n * function MyProfile() {\n * const { status, isArchived } = useUserStatus();\n *\n * if (isArchived) {\n * return <p>Your account has been archived</p>;\n * }\n *\n * return <p>Your account is active</p>;\n * }\n *\n * // Admin managing another user\n * function UserManagement({ userId }: { userId: string }) {\n * const {\n * status,\n * isArchived,\n * archiveUser,\n * unarchiveUser,\n * isArchiving,\n * isUnarchiving\n * } = useUserStatus(userId);\n *\n * return (\n * <div>\n * <p>Status: {status}</p>\n * {isArchived ? (\n * <button onClick={() => unarchiveUser(userId)} disabled={isUnarchiving}>\n * Restore Access\n * </button>\n * ) : (\n * <button onClick={() => archiveUser(userId)} disabled={isArchiving}>\n * Archive User\n * </button>\n * )}\n * </div>\n * );\n * }\n * ```\n */\nexport function useUserStatus(targetUserId) {\n const $ = _c(58);\n const supabase = useSupabase();\n const queryClient = useQueryClient();\n const {\n user\n } = useAuth();\n const userId = targetUserId ?? user?.id;\n const t0 = userId ?? \"\";\n let t1;\n if ($[0] !== t0) {\n t1 = USER_STATUS_KEY(t0);\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n let t2;\n if ($[2] !== supabase || $[3] !== userId) {\n t2 = async () => {\n const {\n data,\n error\n } = await supabase.schema(\"core\").rpc(\"get_user_status\", {\n p_user_id: userId\n });\n if (error) {\n throw new Error(error.message);\n }\n return data as unknown as UserStatusInfo;\n };\n $[2] = supabase;\n $[3] = userId;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n const t3 = !!userId;\n let t4;\n if ($[5] !== t1 || $[6] !== t2 || $[7] !== t3) {\n t4 = {\n queryKey: t1,\n queryFn: t2,\n enabled: t3,\n staleTime: 300000,\n refetchOnWindowFocus: true\n };\n $[5] = t1;\n $[6] = t2;\n $[7] = t3;\n $[8] = t4;\n } else {\n t4 = $[8];\n }\n const statusQuery = useQuery(t4);\n let t5;\n if ($[9] !== supabase) {\n t5 = async t6 => {\n const {\n userId: userId_0,\n reason\n } = t6;\n const {\n data: data_0,\n error: error_0\n } = await supabase.schema(\"core\").rpc(\"archive_user\", {\n p_user_id: userId_0,\n p_reason: reason ?? undefined\n });\n if (error_0) {\n throw new Error(error_0.message);\n }\n return data_0 as unknown as ArchiveUserResponse;\n };\n $[9] = supabase;\n $[10] = t5;\n } else {\n t5 = $[10];\n }\n let t6;\n if ($[11] !== queryClient) {\n t6 = (data_1, variables) => {\n if (data_1.success) {\n queryClient.invalidateQueries({\n queryKey: USER_STATUS_KEY(variables.userId)\n });\n }\n };\n $[11] = queryClient;\n $[12] = t6;\n } else {\n t6 = $[12];\n }\n let t7;\n if ($[13] !== t5 || $[14] !== t6) {\n t7 = {\n mutationFn: t5,\n onSuccess: t6\n };\n $[13] = t5;\n $[14] = t6;\n $[15] = t7;\n } else {\n t7 = $[15];\n }\n const archiveMutation = useMutation(t7);\n let t8;\n if ($[16] !== supabase) {\n t8 = async userId_1 => {\n const {\n data: data_2,\n error: error_1\n } = await supabase.schema(\"core\").rpc(\"unarchive_user\", {\n p_user_id: userId_1\n });\n if (error_1) {\n throw new Error(error_1.message);\n }\n return data_2 as unknown as UnarchiveUserResponse;\n };\n $[16] = supabase;\n $[17] = t8;\n } else {\n t8 = $[17];\n }\n let t9;\n if ($[18] !== queryClient) {\n t9 = (data_3, userId_2) => {\n if (data_3.success) {\n queryClient.invalidateQueries({\n queryKey: USER_STATUS_KEY(userId_2)\n });\n }\n };\n $[18] = queryClient;\n $[19] = t9;\n } else {\n t9 = $[19];\n }\n let t10;\n if ($[20] !== t8 || $[21] !== t9) {\n t10 = {\n mutationFn: t8,\n onSuccess: t9\n };\n $[20] = t8;\n $[21] = t9;\n $[22] = t10;\n } else {\n t10 = $[22];\n }\n const unarchiveMutation = useMutation(t10);\n let t11;\n if ($[23] !== archiveMutation) {\n t11 = async (userId_3, reason_0) => archiveMutation.mutateAsync({\n userId: userId_3,\n reason: reason_0\n });\n $[23] = archiveMutation;\n $[24] = t11;\n } else {\n t11 = $[24];\n }\n const archiveUser = t11;\n let t12;\n if ($[25] !== unarchiveMutation) {\n t12 = async userId_4 => unarchiveMutation.mutateAsync(userId_4);\n $[25] = unarchiveMutation;\n $[26] = t12;\n } else {\n t12 = $[26];\n }\n const unarchiveUser = t12;\n let t13;\n if ($[27] !== queryClient || $[28] !== userId) {\n t13 = () => {\n if (userId) {\n queryClient.invalidateQueries({\n queryKey: USER_STATUS_KEY(userId)\n });\n }\n };\n $[27] = queryClient;\n $[28] = userId;\n $[29] = t13;\n } else {\n t13 = $[29];\n }\n const refreshStatus = t13;\n let t14;\n if ($[30] !== queryClient) {\n t14 = userIdToInvalidate => {\n queryClient.invalidateQueries({\n queryKey: USER_STATUS_KEY(userIdToInvalidate)\n });\n };\n $[30] = queryClient;\n $[31] = t14;\n } else {\n t14 = $[31];\n }\n const invalidateUserStatus = t14;\n const statusData = statusQuery.data;\n const t15 = statusData?.exists ?? false;\n const t16 = statusData?.status as ProfileStatus | undefined;\n const t17 = statusData?.isActive ?? false;\n const t18 = statusData?.status === \"archived\";\n const t19 = statusData?.status === \"suspended\";\n let t20;\n if ($[32] !== statusData) {\n t20 = statusData?.archivedAt ? new Date(statusData.archivedAt) : null;\n $[32] = statusData;\n $[33] = t20;\n } else {\n t20 = $[33];\n }\n const t21 = statusData?.archivedBy ?? null;\n let t22;\n if ($[34] !== t15 || $[35] !== t16 || $[36] !== t17 || $[37] !== t18 || $[38] !== t19 || $[39] !== t20 || $[40] !== t21) {\n t22 = {\n exists: t15,\n status: t16,\n isActive: t17,\n isArchived: t18,\n isSuspended: t19,\n archivedAt: t20,\n archivedBy: t21\n };\n $[34] = t15;\n $[35] = t16;\n $[36] = t17;\n $[37] = t18;\n $[38] = t19;\n $[39] = t20;\n $[40] = t21;\n $[41] = t22;\n } else {\n t22 = $[41];\n }\n const computedValues = t22;\n let t23;\n if ($[42] !== archiveMutation.data || $[43] !== archiveMutation.error || $[44] !== archiveMutation.isPending || $[45] !== archiveUser || $[46] !== computedValues || $[47] !== invalidateUserStatus || $[48] !== refreshStatus || $[49] !== statusQuery.data || $[50] !== statusQuery.error || $[51] !== statusQuery.isError || $[52] !== statusQuery.isLoading || $[53] !== unarchiveMutation.data || $[54] !== unarchiveMutation.error || $[55] !== unarchiveMutation.isPending || $[56] !== unarchiveUser) {\n t23 = {\n statusData: statusQuery.data,\n isLoading: statusQuery.isLoading,\n isError: statusQuery.isError,\n error: statusQuery.error,\n ...computedValues,\n archiveUser,\n unarchiveUser,\n refreshStatus,\n invalidateUserStatus,\n isArchiving: archiveMutation.isPending,\n isUnarchiving: unarchiveMutation.isPending,\n archiveError: archiveMutation.error,\n unarchiveError: unarchiveMutation.error,\n archiveResult: archiveMutation.data,\n unarchiveResult: unarchiveMutation.data\n };\n $[42] = archiveMutation.data;\n $[43] = archiveMutation.error;\n $[44] = archiveMutation.isPending;\n $[45] = archiveUser;\n $[46] = computedValues;\n $[47] = invalidateUserStatus;\n $[48] = refreshStatus;\n $[49] = statusQuery.data;\n $[50] = statusQuery.error;\n $[51] = statusQuery.isError;\n $[52] = statusQuery.isLoading;\n $[53] = unarchiveMutation.data;\n $[54] = unarchiveMutation.error;\n $[55] = unarchiveMutation.isPending;\n $[56] = unarchiveUser;\n $[57] = t23;\n } else {\n t23 = $[57];\n }\n return t23;\n}\n\n/**\n * Type exports for consumers\n */\nexport type UseUserStatusReturn = ReturnType<typeof useUserStatus>;","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport useSupabase from \"../useSupabase\";\nimport { useAuth } from \"../auth\";\n/**\n * GDPR Article 20 compliant personal data export metadata\n */\nexport interface DataExportMetadata {\n exportId: string;\n exportedAt: string;\n userId: string;\n gdprArticle: string;\n format: string;\n version: string;\n}\n\n/**\n * Profile data structure in export\n */\nexport interface ExportedProfile {\n id: string;\n email: string;\n firstName: string;\n middleName: string;\n lastName: string;\n fullName: string;\n phone: string;\n profilePath: string | null;\n metadata: Record<string, unknown> | null;\n}\n\n/**\n * Access permission record\n */\nexport interface ExportedAccessPermission {\n accessKey: string;\n source: \"direct\" | \"group\";\n}\n\n/**\n * Group membership record\n */\nexport interface ExportedGroupMembership {\n groupId: number;\n groupName: string;\n groupDescription: string | null;\n grantedAt: string;\n grantedBy: string | null;\n expiresAt: string | null;\n}\n\n/**\n * User metadata key-value pair\n */\nexport interface ExportedUserMetadata {\n key: string;\n value: string;\n}\n\n/**\n * Device/push token information\n */\nexport interface ExportedDevice {\n deviceType: string | null;\n deviceOS: string | null;\n deviceOSVersion: string | null;\n deviceModel: string | null;\n platform: string | null;\n appVersion: string | null;\n isActive: boolean;\n createdAt: string;\n lastUsedAt: string | null;\n}\n\n/**\n * Audit log entry\n */\nexport interface ExportedAuditLogEntry {\n schemaName: string;\n tableName: string;\n operation: string;\n changeAt: string;\n recordPrimaryKey: Record<string, unknown>;\n}\n\n/**\n * Saved query record\n */\nexport interface ExportedSavedQuery {\n id: number;\n title: string;\n description: string | null;\n categoryId: string;\n schema: string;\n table: string;\n path: string;\n visibility: string;\n createdAt: string;\n}\n\n/**\n * Comment record\n */\nexport interface ExportedComment {\n id: string;\n message: string;\n createdAt: string;\n commentSectionId: string;\n}\n\n/**\n * Notification record\n */\nexport interface ExportedNotification {\n title: string;\n message: string;\n link: string | null;\n scheduledAt: string | null;\n types: string[];\n}\n\n/**\n * Recent activity section\n */\nexport interface ExportedRecentActivity {\n auditLog: ExportedAuditLogEntry[];\n retentionPeriod: string;\n}\n\n/**\n * Complete personal data export structure\n * Follows GDPR Article 20 requirements for data portability\n */\nexport interface PersonalDataExport {\n exportMetadata: DataExportMetadata;\n profile: ExportedProfile;\n accessPermissions: ExportedAccessPermission[];\n groupMemberships: ExportedGroupMembership[];\n userMetadata: ExportedUserMetadata[];\n devices: ExportedDevice[];\n recentActivity: ExportedRecentActivity;\n savedQueries: ExportedSavedQuery[];\n comments: ExportedComment[];\n notifications: ExportedNotification[];\n}\n\n/**\n * Export request history record\n */\nexport interface DataExportHistoryRecord {\n id: string;\n requestedAt: string;\n completedAt: string | null;\n status: \"pending\" | \"processing\" | \"completed\" | \"failed\";\n downloadCount: number;\n lastDownloadedAt: string | null;\n expiresAt: string | null;\n}\n\n/**\n * Hook return type\n */\nexport interface UseDataExportReturn {\n /** Trigger a personal data export */\n exportMyData: () => Promise<PersonalDataExport>;\n /** Export mutation state */\n exportMutation: ReturnType<typeof useMutation<PersonalDataExport, Error, void>>;\n /** Download data as JSON file */\n downloadAsJson: (data: PersonalDataExport, filename?: string) => void;\n /** Export history query */\n historyQuery: ReturnType<typeof useQuery<DataExportHistoryRecord[], Error>>;\n /** Get export history */\n getExportHistory: () => DataExportHistoryRecord[];\n /** Refresh export history */\n refreshHistory: () => void;\n /** Loading state for export */\n isExporting: boolean;\n /** Loading state for history */\n isLoadingHistory: boolean;\n}\n\n/**\n * Hook for GDPR Article 20 compliant personal data export\n *\n * @example\n * ```tsx\n * function DataExportButton() {\n * const { exportMyData, downloadAsJson, isExporting } = useDataExport();\n *\n * const handleExport = async () => {\n * const data = await exportMyData();\n * downloadAsJson(data);\n * };\n *\n * return (\n * <button onClick={handleExport} disabled={isExporting}>\n * {isExporting ? 'Preparing...' : 'Download My Data'}\n * </button>\n * );\n * }\n * ```\n */\nexport function useDataExport() {\n const $ = _c(35);\n const supabase = useSupabase();\n const auth = useAuth();\n const queryClient = useQueryClient();\n let t0;\n if ($[0] !== auth.user.id) {\n t0 = [\"dataExportHistory\", auth.user.id];\n $[0] = auth.user.id;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== auth.user.id || $[3] !== supabase) {\n t1 = async () => {\n const {\n data,\n error\n } = await supabase.rpc(\"get_data_export_history\" as any, {\n p_user_id: auth.user.id\n });\n if (error) {\n throw new Error(`Failed to fetch export history: ${error.message}`);\n }\n return data as unknown as DataExportHistoryRecord[] || [];\n };\n $[2] = auth.user.id;\n $[3] = supabase;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n let t2;\n if ($[5] !== t0 || $[6] !== t1) {\n t2 = {\n queryKey: t0,\n queryFn: t1,\n staleTime: 300000\n };\n $[5] = t0;\n $[6] = t1;\n $[7] = t2;\n } else {\n t2 = $[7];\n }\n const historyQuery = useQuery(t2);\n let t3;\n if ($[8] !== auth.user.id || $[9] !== supabase) {\n t3 = async () => {\n const {\n data: data_0,\n error: error_0\n } = await supabase.rpc(\"export_user_personal_data\" as any, {\n p_user_id: auth.user.id\n });\n if (error_0) {\n throw new Error(`Failed to export personal data: ${error_0.message}`);\n }\n if (!data_0) {\n throw new Error(\"No data returned from export\");\n }\n return data_0 as unknown as PersonalDataExport;\n };\n $[8] = auth.user.id;\n $[9] = supabase;\n $[10] = t3;\n } else {\n t3 = $[10];\n }\n let t4;\n if ($[11] !== auth.user.id || $[12] !== queryClient) {\n t4 = () => {\n queryClient.invalidateQueries({\n queryKey: [\"dataExportHistory\", auth.user.id]\n });\n };\n $[11] = auth.user.id;\n $[12] = queryClient;\n $[13] = t4;\n } else {\n t4 = $[13];\n }\n let t5;\n if ($[14] !== t3 || $[15] !== t4) {\n t5 = {\n mutationFn: t3,\n onSuccess: t4\n };\n $[14] = t3;\n $[15] = t4;\n $[16] = t5;\n } else {\n t5 = $[16];\n }\n const exportMutation = useMutation(t5);\n let t6;\n if ($[17] !== exportMutation) {\n t6 = async () => exportMutation.mutateAsync();\n $[17] = exportMutation;\n $[18] = t6;\n } else {\n t6 = $[18];\n }\n const exportMyData = t6;\n let t7;\n if ($[19] !== auth.user.id || $[20] !== queryClient || $[21] !== supabase) {\n t7 = (data_1, filename) => {\n const timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n const defaultFilename = `my-data-${timestamp}.json`;\n const finalFilename = filename || defaultFilename;\n const jsonString = JSON.stringify(data_1, null, 2);\n const blob = new Blob([jsonString], {\n type: \"application/json\"\n });\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = finalFilename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n if (data_1.exportMetadata?.exportId) {\n supabase.rpc(\"increment_export_download_count\" as any, {\n p_export_id: data_1.exportMetadata.exportId\n }).then(() => {\n queryClient.invalidateQueries({\n queryKey: [\"dataExportHistory\", auth.user.id]\n });\n });\n }\n };\n $[19] = auth.user.id;\n $[20] = queryClient;\n $[21] = supabase;\n $[22] = t7;\n } else {\n t7 = $[22];\n }\n const downloadAsJson = t7;\n let t8;\n if ($[23] !== historyQuery.data) {\n t8 = () => historyQuery.data || [];\n $[23] = historyQuery.data;\n $[24] = t8;\n } else {\n t8 = $[24];\n }\n const getExportHistory = t8;\n let t9;\n if ($[25] !== auth.user.id || $[26] !== queryClient) {\n t9 = () => {\n queryClient.invalidateQueries({\n queryKey: [\"dataExportHistory\", auth.user.id]\n });\n };\n $[25] = auth.user.id;\n $[26] = queryClient;\n $[27] = t9;\n } else {\n t9 = $[27];\n }\n const refreshHistory = t9;\n let t10;\n if ($[28] !== downloadAsJson || $[29] !== exportMutation || $[30] !== exportMyData || $[31] !== getExportHistory || $[32] !== historyQuery || $[33] !== refreshHistory) {\n t10 = {\n exportMyData,\n exportMutation,\n downloadAsJson,\n historyQuery,\n getExportHistory,\n refreshHistory,\n isExporting: exportMutation.isPending,\n isLoadingHistory: historyQuery.isLoading\n };\n $[28] = downloadAsJson;\n $[29] = exportMutation;\n $[30] = exportMyData;\n $[31] = getExportHistory;\n $[32] = historyQuery;\n $[33] = refreshHistory;\n $[34] = t10;\n } else {\n t10 = $[34];\n }\n return t10;\n}\nexport default useDataExport;","import { c as _c } from \"react/compiler-runtime\";\nimport React from \"react\";\nimport useSupabase from \"./useSupabase\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useToast } from \"@pol-studios/hooks/toast\";\nimport { useAuth } from \"./auth\";\nexport type TaskRequest = {\n handlerId: string;\n title: string;\n description: string;\n body?: any;\n};\ntype RetryJobRequest = {\n taskId: string;\n};\ntype CancelJobRequest = {\n taskId: string;\n};\nexport default function useBackgroundTask() {\n const $ = _c(12);\n const supabase = useSupabase();\n const {\n user\n } = useAuth();\n const {\n toast\n } = useToast();\n let t0;\n if ($[0] !== supabase || $[1] !== toast || $[2] !== user) {\n t0 = async function startTask(request) {\n if (user == null) {\n return;\n }\n const response = await supabase.functions.invoke(\"background-task-orchestrator\", {\n body: {\n taskId: request.handlerId,\n title: request.title,\n description: request.description,\n payload: request.body\n }\n });\n if (response.error) {\n if (response.error.message?.includes(\"rate limit\") || response.error.message?.includes(\"429\")) {\n toast({\n title: \"Too many requests. Please try again later.\"\n });\n } else {\n toast({\n title: \"Failed to start task\"\n });\n }\n throw response.error;\n }\n const task = response.data?.task;\n if (isUsable(task) === false) {\n return;\n }\n toast({\n title: `Task Started: ${request.title}`\n });\n };\n $[0] = supabase;\n $[1] = toast;\n $[2] = user;\n $[3] = t0;\n } else {\n t0 = $[3];\n }\n const startTask = t0;\n let t1;\n if ($[4] !== supabase) {\n t1 = async function retryTask(taskId) {\n const response_0 = await supabase.functions.invoke(\"trigger-update\", {\n body: {\n taskId,\n action: \"retry\"\n }\n });\n console.log(response_0.data);\n if (response_0.error) {\n throw response_0.error;\n }\n return response_0.data.id;\n };\n $[4] = supabase;\n $[5] = t1;\n } else {\n t1 = $[5];\n }\n const retryTask = t1;\n let t2;\n if ($[6] !== supabase) {\n t2 = async function cancelTask(taskId_0) {\n await supabase.functions.invoke(\"trigger-update\", {\n body: {\n taskId: taskId_0,\n action: \"cancel\"\n }\n });\n };\n $[6] = supabase;\n $[7] = t2;\n } else {\n t2 = $[7];\n }\n const cancelTask = t2;\n let t3;\n if ($[8] !== cancelTask || $[9] !== retryTask || $[10] !== startTask) {\n t3 = {\n startTask,\n retryTask,\n cancelTask\n };\n $[8] = cancelTask;\n $[9] = retryTask;\n $[10] = startTask;\n $[11] = t3;\n } else {\n t3 = $[11];\n }\n return t3;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useDbQuery } from \"./useDbQuery\";\nimport useSupabase from \"./useSupabase\";\nimport { useDbUpsert } from \"./hooks\";\nimport { UseQuerySingleReturn } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { Tables, TablesInsert } from \"./database.types\";\nimport { useAuth } from \"./auth\";\nexport default function useUserMetadata(key) {\n const $ = _c(16);\n const supabase = useSupabase();\n const {\n user\n } = useAuth();\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = {\n invalidateTables: [\"UserMetadata\"]\n };\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n const upsertMutation = useDbUpsert(\"UserMetadata\", t0);\n let t1;\n if ($[1] !== key || $[2] !== supabase || $[3] !== user?.id) {\n t1 = supabase.from(\"UserMetadata\").select().eq(\"userId\", user?.id).eq(\"key\", key).maybeSingle();\n $[1] = key;\n $[2] = supabase;\n $[3] = user?.id;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n let t2;\n if ($[5] !== user) {\n t2 = isUsable(user);\n $[5] = user;\n $[6] = t2;\n } else {\n t2 = $[6];\n }\n let t3;\n if ($[7] !== t2) {\n t3 = {\n crossOrganization: true,\n enabled: t2\n };\n $[7] = t2;\n $[8] = t3;\n } else {\n t3 = $[8];\n }\n const lastOpenRequest = useDbQuery(t1, t3);\n let t4;\n if ($[9] !== key || $[10] !== upsertMutation || $[11] !== user) {\n t4 = async function setMetadata(value) {\n const newValue = {\n userId: user.id,\n key,\n value\n };\n await upsertMutation.mutateAsync(newValue);\n };\n $[9] = key;\n $[10] = upsertMutation;\n $[11] = user;\n $[12] = t4;\n } else {\n t4 = $[12];\n }\n const setMetadata = t4;\n let t5;\n if ($[13] !== lastOpenRequest || $[14] !== setMetadata) {\n t5 = [lastOpenRequest, setMetadata];\n $[13] = lastOpenRequest;\n $[14] = setMetadata;\n $[15] = t5;\n } else {\n t5 = $[15];\n }\n return t5;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { Upload } from \"tus-js-client\";\nimport { SupabaseClient } from \"@supabase/supabase-js\";\nimport { isNullOrWhitespace, newUuid } from \"@pol-studios/utils\";\nimport useSupabase from \"../useSupabase\";\nimport { useAuth } from \"../auth\";\nimport { getSupabaseUrl } from \"../config\";\n\n/**\n * Metadata to store in storage.objects.metadata\n */\nexport interface StorageUploadMetadata {\n processingStatus?: \"None\" | \"Processing\" | \"Error\";\n contentType?: string;\n contentHeight?: number;\n contentWidth?: number;\n originalFileName?: string;\n}\ntype UploadInput = {\n /** The file to upload */\n file: File | Blob;\n /** Optional custom filename (defaults to original file name) */\n fileName?: string;\n /** Optional directory prefix within the bucket */\n directory?: string;\n /** Optional custom metadata to store with the file */\n metadata?: StorageUploadMetadata;\n /** Progress callback */\n onUploadProgress?: (bytesUploaded: number, bytesTotal: number) => void;\n};\ntype UploadResult = {\n /** The storage path (e.g., \"14/abc-123.jpg\") */\n path: string;\n /** The bucket ID */\n bucketId: string;\n /** Original filename */\n originalFileName: string;\n /** Content type from file */\n contentType: string;\n};\ntype UseStorageUploadOptions = {\n /** The storage bucket ID - required */\n bucketId: string;\n};\nasync function uploadFileWithMetadata(supabase: SupabaseClient, bucketName: string, filePath: string, file: File | Blob, metadata: StorageUploadMetadata, onProgress?: (bytesUploaded: number, bytesTotal: number) => void): Promise<void> {\n const {\n data: {\n session\n }\n } = await supabase.auth.getSession();\n if (!session) {\n throw new Error(\"User must be logged in to upload files\");\n }\n const contentType = \"type\" in file ? file.type : metadata.contentType ?? \"application/octet-stream\";\n return new Promise((resolve, reject) => {\n const upload = new Upload(file, {\n endpoint: `${getSupabaseUrl()}/storage/v1/upload/resumable`,\n retryDelays: [0, 3000, 5000, 10000, 20000],\n headers: {\n authorization: `Bearer ${session.access_token}`,\n \"x-upsert\": \"true\"\n },\n uploadDataDuringCreation: true,\n removeFingerprintOnSuccess: true,\n metadata: {\n bucketName: bucketName,\n objectName: filePath,\n contentType: contentType,\n cacheControl: \"3600\",\n // Custom metadata gets stored in storage.objects.metadata\n ...Object.fromEntries(Object.entries(metadata).map(([k, v]) => [k, String(v)]))\n },\n chunkSize: 6 * 1024 * 1024,\n // 6MB - required by Supabase\n onError: error => {\n console.error(\"Upload failed:\", error);\n reject(error);\n },\n onProgress: onProgress,\n onSuccess: () => {\n resolve();\n }\n });\n upload.findPreviousUploads().then(previousUploads => {\n if (previousUploads.length) {\n upload.resumeFromPreviousUpload(previousUploads[0]);\n }\n upload.start();\n });\n });\n}\n\n/**\n * Hook for uploading files to Supabase Storage with path-based references.\n *\n * Unlike useDbAttachmentUpload, this hook:\n * - Does NOT create Attachment records\n * - Returns the storage path for the caller to store\n * - Sets metadata directly on storage.objects\n *\n * @example\n * ```tsx\n * import { BUCKETS } from \"@pol-studios/db\";\n *\n * const upload = useStorageUpload({ bucketId: BUCKETS.AVATARS });\n *\n * const handleUpload = async (file: File) => {\n * const result = await upload.mutateAsync({ file });\n * // Store result.path on the entity\n * await updateProfile({ profilePath: result.path });\n * };\n * ```\n */\nexport default function useStorageUpload(options) {\n const $ = _c(3);\n const {\n bucketId\n } = options;\n const supabase = useSupabase();\n let t0;\n if ($[0] !== bucketId || $[1] !== supabase) {\n t0 = {\n mutationFn: async input => {\n const {\n file,\n fileName,\n directory,\n metadata: t1,\n onUploadProgress\n } = input;\n const metadata = t1 === undefined ? {} : t1;\n const originalFileName = fileName ?? (\"name\" in file ? file.name : \"\") ?? (\"fileName\" in file ? (file as any).fileName : \"file\");\n if (isNullOrWhitespace(originalFileName)) {\n throw new Error(\"File must have a valid name\");\n }\n const extension = originalFileName.split(\".\").pop() ?? \"\";\n const uniqueFileName = `${newUuid()}.${extension}`;\n const path = directory ? `${directory}/14/${uniqueFileName}` : `14/${uniqueFileName}`;\n const contentType = \"type\" in file ? file.type.split(\"/\").pop()?.toUpperCase() ?? \"Unknown\" : extension.toUpperCase();\n const uploadMetadata = {\n processingStatus: \"None\",\n contentType,\n originalFileName,\n ...metadata\n };\n await uploadFileWithMetadata(supabase, bucketId, path, file, uploadMetadata, onUploadProgress);\n return {\n path,\n bucketId,\n originalFileName,\n contentType\n };\n }\n };\n $[0] = bucketId;\n $[1] = supabase;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n return useMutation(t0);\n}\n\n/**\n * Convenience hook that combines upload with entity update.\n * Uploads the file and then updates the specified entity with the path.\n */\nexport function useStorageUploadWithEntity(options) {\n const $ = _c(6);\n let updateEntity;\n let uploadOptions;\n if ($[0] !== options) {\n const {\n pathField,\n updateEntity: t0,\n ...t1\n } = options;\n updateEntity = t0;\n uploadOptions = t1;\n $[0] = options;\n $[1] = updateEntity;\n $[2] = uploadOptions;\n } else {\n updateEntity = $[1];\n uploadOptions = $[2];\n }\n const uploadMutation = useStorageUpload(uploadOptions);\n let t0;\n if ($[3] !== updateEntity || $[4] !== uploadMutation) {\n t0 = {\n mutationFn: async input => {\n const {\n entity,\n ...uploadInput\n } = input;\n const result = await uploadMutation.mutateAsync(uploadInput);\n await updateEntity(entity, result.path);\n return result;\n }\n };\n $[3] = updateEntity;\n $[4] = uploadMutation;\n $[5] = t0;\n } else {\n t0 = $[5];\n }\n return useMutation(t0);\n}"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,aAAa,eAAe;AAGrC,SAAS,gBAAgB;AAwJlB,SAAS,aAA+B;AAC7C,QAAM,WAAW,YAAY;AAC7B,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,aAAa;AAGjB,QAAM,gBAAgB,WAAW,SAAS,OAAO,MAAM,EAAE,KAAK,eAAe,EAAE,OAAO,GAAG,EAAE,GAAG,UAAU,MAAM,MAAM,EAAE,EAAE,MAAM,aAAa;AAAA,IACzI,WAAW;AAAA,EACb,CAAC,GAAG;AAAA,IACF,SAAS,SAAS,IAAI;AAAA,IACtB,mBAAmB;AAAA,EACrB,CAAC;AACD,QAAM,WAA4B,QAAQ,MAAM;AAC9C,QAAI,CAAC,cAAc,KAAM,QAAO,CAAC;AACjC,WAAO,cAAc;AAAA,EACvB,GAAG,CAAC,cAAc,IAAI,CAAC;AAGvB,QAAM,iBAAmC,QAAQ,MAAM;AACrD,UAAM,eAAe,oBAAI,IAAgC;AACzD,eAAW,WAAW,UAAU;AAE9B,UAAI,CAAC,aAAa,IAAI,QAAQ,WAAW,GAAG;AAC1C,qBAAa,IAAI,QAAQ,aAAa,OAAO;AAAA,MAC/C;AAAA,IACF;AACA,WAAO,MAAM,KAAK,aAAa,OAAO,CAAC,EAAE,IAAI,aAAW;AAAA,MACtD,aAAa,OAAO;AAAA,MACpB,cAAc,OAAO;AAAA,MACrB,gBAAgB,OAAO;AAAA,MACvB,aAAa,OAAO;AAAA,IACtB,EAAE;AAAA,EACJ,GAAG,CAAC,QAAQ,CAAC;AAKb,QAAM,gBAAgB,YAAY,OAAO,MAAmB,SAAiB,OAAgB,YAAkE;AAC7J,QAAI,CAAC,MAAM,IAAI;AACb,cAAQ,MAAM,+CAA+C;AAC7D,aAAO;AAAA,IACT;AACA,QAAI;AAEF,YAAM,YAAY,OAAO,WAAW,cAAc,OAAO,UAAU,YAAY;AAC/E,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,MACF,IAAI,MAAM,SAAS,OAAO,MAAM,EAAE,KAAK,eAAe,EAAE,OAAO;AAAA,QAC7D,QAAQ,KAAK;AAAA,QACb,aAAa;AAAA,QACb,gBAAgB;AAAA,QAChB,cAAc;AAAA,QACd,aAAa,SAAS,eAAe;AAAA,QACrC,WAAW,SAAS,aAAa;AAAA,QACjC;AAAA,MACF,CAAC,EAAE,OAAO,EAAE,OAAO;AACnB,UAAI,OAAO;AACT,gBAAQ,MAAM,4BAA4B,KAAK;AAC/C,eAAO;AAAA,MACT;AAGA,oBAAc,QAAQ;AACtB,aAAO;AAAA,IACT,SAAS,KAAK;AACZ,cAAQ,MAAM,4BAA4B,GAAG;AAC7C,aAAO;AAAA,IACT;AAAA,EACF,GAAG,CAAC,UAAU,MAAM,IAAI,aAAa,CAAC;AAKtC,QAAM,kBAAkB,YAAY,OAAO,QAAqB,cAAqD;AACnH,WAAO,cAAc,QAAQ,WAAW,KAAK;AAAA,EAC/C,GAAG,CAAC,aAAa,CAAC;AAKlB,QAAM,mBAAmB,YAAY,CAAC,WAAiC;AACrE,UAAM,UAAU,eAAe,KAAK,OAAK,EAAE,gBAAgB,MAAM;AACjE,WAAO,SAAS,gBAAgB;AAAA,EAClC,GAAG,CAAC,cAAc,CAAC;AAKnB,QAAM,mBAAmB,YAAY,CAAC,WAAmD;AACvF,WAAO,SAAS,KAAK,OAAK,EAAE,gBAAgB,MAAM;AAAA,EACpD,GAAG,CAAC,QAAQ,CAAC;AACb,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,WAAW,cAAc;AAAA,IACzB,OAAO,cAAc;AAAA,IACrB,SAAS,cAAc;AAAA,EACzB;AACF;AA8BA,eAAsB,qBAAqB,UAA0C,QAAgB,MAAmB,SAAiB,OAAgB,SAA+D;AACtN,MAAI;AAEF,UAAM,YAAY,OAAO,WAAW,cAAc,OAAO,UAAU,YAAY;AAC/E,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,IACF,IAAI,MAAM,SAAS,OAAO,MAAM,EAAE,KAAK,eAAe,EAAE,OAAO;AAAA,MAC7D;AAAA,MACA,aAAa;AAAA,MACb,gBAAgB;AAAA,MAChB,cAAc;AAAA,MACd,aAAa,SAAS,eAAe;AAAA,MACrC,WAAW,SAAS,aAAa;AAAA,MACjC;AAAA,IACF,CAAC,EAAE,OAAO,EAAE,OAAO;AACnB,QAAI,OAAO;AACT,cAAQ,MAAM,4BAA4B,KAAK;AAC/C,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,YAAQ,MAAM,4BAA4B,GAAG;AAC7C,WAAO;AAAA,EACT;AACF;AACA,IAAO,qBAAQ;;;AC3Tf,SAAS,KAAK,UAAU;AAExB,SAAS,aAAa,UAAU,sBAAsB;AAgEtD,IAAM,sBAAsB,CAAC,uBAAuB;AA2C7C,SAAS,qBAAqB;AACnC,QAAM,IAAI,GAAG,EAAE;AACf,QAAM,WAAW,YAAY;AAC7B,QAAM,cAAc,eAAe;AACnC,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,QAAQ;AACZ,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,UAAU;AACrB,SAAK,YAAY;AACf,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,MACF,IAAI,MAAM,SAAS,OAAO,MAAM,EAAE,IAAI,qBAAqB;AAC3D,UAAI,OAAO;AACT,cAAM,IAAI,MAAM,MAAM,OAAO;AAAA,MAC/B;AACA,aAAO;AAAA,IACT;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,KAAK,CAAC,CAAC;AACb,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,IAAI;AAC9B,SAAK;AAAA,MACH,UAAU;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,MACX,sBAAsB;AAAA,IACxB;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,cAAc,SAAS,EAAE;AAC/B,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,UAAU;AACrB,SAAK,OAAM,WAAU;AACnB,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,MACT,IAAI,MAAM,SAAS,OAAO,MAAM,EAAE,IAAI,4BAA4B;AAAA,QAChE,UAAU;AAAA,MACZ,CAAC;AACD,UAAI,SAAS;AACX,cAAM,IAAI,MAAM,QAAQ,OAAO;AAAA,MACjC;AACA,aAAO;AAAA,IACT;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,aAAa;AACxB,SAAK,YAAU;AACb,UAAI,OAAO,SAAS;AAClB,oBAAY,kBAAkB;AAAA,UAC5B,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,MAAM,EAAE,EAAE,MAAM,IAAI;AAC/B,SAAK;AAAA,MACH,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AACA,MAAE,CAAC,IAAI;AACP,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,kBAAkB,YAAY,EAAE;AACtC,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,UAAU;AACtB,SAAK,YAAY;AACf,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,MACT,IAAI,MAAM,SAAS,OAAO,MAAM,EAAE,IAAI,yBAAyB;AAC/D,UAAI,SAAS;AACX,cAAM,IAAI,MAAM,QAAQ,OAAO;AAAA,MACjC;AACA,aAAO;AAAA,IACT;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,aAAa;AACzB,SAAK,YAAU;AACb,UAAI,OAAO,SAAS;AAClB,oBAAY,kBAAkB;AAAA,UAC5B,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAAA,IACF;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,MAAM,EAAE,EAAE,MAAM,IAAI;AAChC,SAAK;AAAA,MACH,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,iBAAiB,YAAY,EAAE;AACrC,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,iBAAiB;AAC7B,SAAK,OAAM,aAAY,gBAAgB,YAAY,QAAQ;AAC3D,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,kBAAkB;AACxB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,gBAAgB;AAC5B,UAAM,YAAY,eAAe,YAAY;AAC7C,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,iBAAiB;AACvB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,aAAa;AACzB,UAAM,MAAM;AACV,kBAAY,kBAAkB;AAAA,QAC5B,UAAU;AAAA,MACZ,CAAC;AAAA,IACH;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,gBAAgB;AACtB,QAAM,SAAS,YAAY;AAC3B,QAAM,UAAU,QAAQ;AACxB,QAAM,MAAM,SAAS,WAAW;AAChC,QAAM,MAAM,SAAS,WAAW;AAChC,QAAM,MAAM,SAAS,WAAW;AAChC,QAAM,MAAM,SAAS,iBAAiB;AACtC,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,SAAS;AACrB,UAAM,SAAS,sBAAsB,IAAI,KAAK,QAAQ,mBAAmB,IAAI;AAC7E,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,SAAS;AACrB,UAAM,SAAS,cAAc,IAAI,KAAK,QAAQ,WAAW,IAAI;AAC7D,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,SAAS;AACrB,UAAM,SAAS,cAAc,IAAI,KAAK,QAAQ,WAAW,IAAI;AAC7D,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,MAAM,SAAS,UAAU;AAC/B,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,WAAW,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,KAAK;AAC7J,UAAM;AAAA,MACJ,iBAAiB;AAAA,MACjB,mBAAmB;AAAA,MACnB,qBAAqB;AAAA,MACrB,qBAAqB;AAAA,MACrB,eAAe;AAAA,MACf,qBAAqB;AAAA,MACrB,aAAa;AAAA,MACb,aAAa;AAAA,MACb,QAAQ;AAAA,IACV;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,iBAAiB;AACvB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,kBAAkB,EAAE,EAAE,MAAM,eAAe,QAAQ,EAAE,EAAE,MAAM,eAAe,SAAS,EAAE,EAAE,MAAM,eAAe,aAAa,EAAE,EAAE,MAAM,kBAAkB,EAAE,EAAE,MAAM,iBAAiB,EAAE,EAAE,MAAM,mBAAmB,EAAE,EAAE,MAAM,gBAAgB,QAAQ,EAAE,EAAE,MAAM,gBAAgB,SAAS,EAAE,EAAE,MAAM,gBAAgB,aAAa,EAAE,EAAE,MAAM,YAAY,QAAQ,EAAE,EAAE,MAAM,YAAY,SAAS,EAAE,EAAE,MAAM,YAAY,WAAW,EAAE,EAAE,MAAM,YAAY,WAAW;AACtc,UAAM;AAAA,MACJ,gBAAgB,YAAY;AAAA,MAC5B,WAAW,YAAY;AAAA,MACvB,SAAS,YAAY;AAAA,MACrB,OAAO,YAAY;AAAA,MACnB,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,gBAAgB;AAAA,MAC9B,cAAc,eAAe;AAAA,MAC7B,cAAc,gBAAgB;AAAA,MAC9B,aAAa,eAAe;AAAA,MAC5B,eAAe,gBAAgB;AAAA,MAC/B,cAAc,eAAe;AAAA,IAC/B;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI,eAAe;AACvB,MAAE,EAAE,IAAI,eAAe;AACvB,MAAE,EAAE,IAAI,eAAe;AACvB,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI,gBAAgB;AACxB,MAAE,EAAE,IAAI,gBAAgB;AACxB,MAAE,EAAE,IAAI,gBAAgB;AACxB,MAAE,EAAE,IAAI,YAAY;AACpB,MAAE,EAAE,IAAI,YAAY;AACpB,MAAE,EAAE,IAAI,YAAY;AACpB,MAAE,EAAE,IAAI,YAAY;AACpB,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,SAAO;AACT;;;AC9WA,SAAS,KAAKA,WAAU;AAExB,SAAS,eAAAC,cAAa,YAAAC,WAAU,kBAAAC,uBAAsB;AA2CtD,IAAM,kBAAkB,CAAC,WAAmB,CAAC,cAAc,MAAM;AAqD1D,SAAS,cAAc,cAAc;AAC1C,QAAM,IAAIC,IAAG,EAAE;AACf,QAAM,WAAW,YAAY;AAC7B,QAAM,cAAcC,gBAAe;AACnC,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,QAAQ;AACZ,QAAM,SAAS,gBAAgB,MAAM;AACrC,QAAM,KAAK,UAAU;AACrB,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,IAAI;AACf,SAAK,gBAAgB,EAAE;AACvB,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,YAAY,EAAE,CAAC,MAAM,QAAQ;AACxC,SAAK,YAAY;AACf,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,MACF,IAAI,MAAM,SAAS,OAAO,MAAM,EAAE,IAAI,mBAAmB;AAAA,QACvD,WAAW;AAAA,MACb,CAAC;AACD,UAAI,OAAO;AACT,cAAM,IAAI,MAAM,MAAM,OAAO;AAAA,MAC/B;AACA,aAAO;AAAA,IACT;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,KAAK,CAAC,CAAC;AACb,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,IAAI;AAC7C,SAAK;AAAA,MACH,UAAU;AAAA,MACV,SAAS;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,MACX,sBAAsB;AAAA,IACxB;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,cAAcC,UAAS,EAAE;AAC/B,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,UAAU;AACrB,SAAK,OAAMC,QAAM;AACf,YAAM;AAAA,QACJ,QAAQ;AAAA,QACR;AAAA,MACF,IAAIA;AACJ,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,MACT,IAAI,MAAM,SAAS,OAAO,MAAM,EAAE,IAAI,gBAAgB;AAAA,QACpD,WAAW;AAAA,QACX,UAAU,UAAU;AAAA,MACtB,CAAC;AACD,UAAI,SAAS;AACX,cAAM,IAAI,MAAM,QAAQ,OAAO;AAAA,MACjC;AACA,aAAO;AAAA,IACT;AACA,MAAE,CAAC,IAAI;AACP,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,aAAa;AACzB,SAAK,CAAC,QAAQ,cAAc;AAC1B,UAAI,OAAO,SAAS;AAClB,oBAAY,kBAAkB;AAAA,UAC5B,UAAU,gBAAgB,UAAU,MAAM;AAAA,QAC5C,CAAC;AAAA,MACH;AAAA,IACF;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,MAAM,EAAE,EAAE,MAAM,IAAI;AAChC,SAAK;AAAA,MACH,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,kBAAkBC,aAAY,EAAE;AACtC,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,UAAU;AACtB,SAAK,OAAM,aAAY;AACrB,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,MACT,IAAI,MAAM,SAAS,OAAO,MAAM,EAAE,IAAI,kBAAkB;AAAA,QACtD,WAAW;AAAA,MACb,CAAC;AACD,UAAI,SAAS;AACX,cAAM,IAAI,MAAM,QAAQ,OAAO;AAAA,MACjC;AACA,aAAO;AAAA,IACT;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,aAAa;AACzB,SAAK,CAAC,QAAQ,aAAa;AACzB,UAAI,OAAO,SAAS;AAClB,oBAAY,kBAAkB;AAAA,UAC5B,UAAU,gBAAgB,QAAQ;AAAA,QACpC,CAAC;AAAA,MACH;AAAA,IACF;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,MAAM,EAAE,EAAE,MAAM,IAAI;AAChC,UAAM;AAAA,MACJ,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,oBAAoBA,aAAY,GAAG;AACzC,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,iBAAiB;AAC7B,UAAM,OAAO,UAAU,aAAa,gBAAgB,YAAY;AAAA,MAC9D,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV,CAAC;AACD,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,cAAc;AACpB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,mBAAmB;AAC/B,UAAM,OAAM,aAAY,kBAAkB,YAAY,QAAQ;AAC9D,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,gBAAgB;AACtB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,eAAe,EAAE,EAAE,MAAM,QAAQ;AAC7C,UAAM,MAAM;AACV,UAAI,QAAQ;AACV,oBAAY,kBAAkB;AAAA,UAC5B,UAAU,gBAAgB,MAAM;AAAA,QAClC,CAAC;AAAA,MACH;AAAA,IACF;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,gBAAgB;AACtB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,aAAa;AACzB,UAAM,wBAAsB;AAC1B,kBAAY,kBAAkB;AAAA,QAC5B,UAAU,gBAAgB,kBAAkB;AAAA,MAC9C,CAAC;AAAA,IACH;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,uBAAuB;AAC7B,QAAM,aAAa,YAAY;AAC/B,QAAM,MAAM,YAAY,UAAU;AAClC,QAAM,MAAM,YAAY;AACxB,QAAM,MAAM,YAAY,YAAY;AACpC,QAAM,MAAM,YAAY,WAAW;AACnC,QAAM,MAAM,YAAY,WAAW;AACnC,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,YAAY;AACxB,UAAM,YAAY,aAAa,IAAI,KAAK,WAAW,UAAU,IAAI;AACjE,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,MAAM,YAAY,cAAc;AACtC,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,OAAO,EAAE,EAAE,MAAM,KAAK;AACvH,UAAM;AAAA,MACJ,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,YAAY;AAAA,IACd;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,iBAAiB;AACvB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,gBAAgB,QAAQ,EAAE,EAAE,MAAM,gBAAgB,SAAS,EAAE,EAAE,MAAM,gBAAgB,aAAa,EAAE,EAAE,MAAM,eAAe,EAAE,EAAE,MAAM,kBAAkB,EAAE,EAAE,MAAM,wBAAwB,EAAE,EAAE,MAAM,iBAAiB,EAAE,EAAE,MAAM,YAAY,QAAQ,EAAE,EAAE,MAAM,YAAY,SAAS,EAAE,EAAE,MAAM,YAAY,WAAW,EAAE,EAAE,MAAM,YAAY,aAAa,EAAE,EAAE,MAAM,kBAAkB,QAAQ,EAAE,EAAE,MAAM,kBAAkB,SAAS,EAAE,EAAE,MAAM,kBAAkB,aAAa,EAAE,EAAE,MAAM,eAAe;AAC5e,UAAM;AAAA,MACJ,YAAY,YAAY;AAAA,MACxB,WAAW,YAAY;AAAA,MACvB,SAAS,YAAY;AAAA,MACrB,OAAO,YAAY;AAAA,MACnB,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,gBAAgB;AAAA,MAC7B,eAAe,kBAAkB;AAAA,MACjC,cAAc,gBAAgB;AAAA,MAC9B,gBAAgB,kBAAkB;AAAA,MAClC,eAAe,gBAAgB;AAAA,MAC/B,iBAAiB,kBAAkB;AAAA,IACrC;AACA,MAAE,EAAE,IAAI,gBAAgB;AACxB,MAAE,EAAE,IAAI,gBAAgB;AACxB,MAAE,EAAE,IAAI,gBAAgB;AACxB,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI,YAAY;AACpB,MAAE,EAAE,IAAI,YAAY;AACpB,MAAE,EAAE,IAAI,YAAY;AACpB,MAAE,EAAE,IAAI,YAAY;AACpB,MAAE,EAAE,IAAI,kBAAkB;AAC1B,MAAE,EAAE,IAAI,kBAAkB;AAC1B,MAAE,EAAE,IAAI,kBAAkB;AAC1B,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,SAAO;AACT;;;ACzXA,SAAS,KAAKC,WAAU;AACxB,SAAS,eAAAC,cAAa,YAAAC,WAAU,kBAAAC,uBAAsB;AA0M/C,SAAS,gBAAgB;AAC9B,QAAM,IAAIC,IAAG,EAAE;AACf,QAAM,WAAW,YAAY;AAC7B,QAAM,OAAO,QAAQ;AACrB,QAAM,cAAcC,gBAAe;AACnC,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,KAAK,KAAK,IAAI;AACzB,SAAK,CAAC,qBAAqB,KAAK,KAAK,EAAE;AACvC,MAAE,CAAC,IAAI,KAAK,KAAK;AACjB,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,KAAK,KAAK,MAAM,EAAE,CAAC,MAAM,UAAU;AAC9C,SAAK,YAAY;AACf,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,MACF,IAAI,MAAM,SAAS,IAAI,2BAAkC;AAAA,QACvD,WAAW,KAAK,KAAK;AAAA,MACvB,CAAC;AACD,UAAI,OAAO;AACT,cAAM,IAAI,MAAM,mCAAmC,MAAM,OAAO,EAAE;AAAA,MACpE;AACA,aAAO,QAAgD,CAAC;AAAA,IAC1D;AACA,MAAE,CAAC,IAAI,KAAK,KAAK;AACjB,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,IAAI;AAC9B,SAAK;AAAA,MACH,UAAU;AAAA,MACV,SAAS;AAAA,MACT,WAAW;AAAA,IACb;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,eAAeC,UAAS,EAAE;AAChC,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,KAAK,KAAK,MAAM,EAAE,CAAC,MAAM,UAAU;AAC9C,SAAK,YAAY;AACf,YAAM;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,MACT,IAAI,MAAM,SAAS,IAAI,6BAAoC;AAAA,QACzD,WAAW,KAAK,KAAK;AAAA,MACvB,CAAC;AACD,UAAI,SAAS;AACX,cAAM,IAAI,MAAM,mCAAmC,QAAQ,OAAO,EAAE;AAAA,MACtE;AACA,UAAI,CAAC,QAAQ;AACX,cAAM,IAAI,MAAM,8BAA8B;AAAA,MAChD;AACA,aAAO;AAAA,IACT;AACA,MAAE,CAAC,IAAI,KAAK,KAAK;AACjB,MAAE,CAAC,IAAI;AACP,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,KAAK,KAAK,MAAM,EAAE,EAAE,MAAM,aAAa;AACnD,SAAK,MAAM;AACT,kBAAY,kBAAkB;AAAA,QAC5B,UAAU,CAAC,qBAAqB,KAAK,KAAK,EAAE;AAAA,MAC9C,CAAC;AAAA,IACH;AACA,MAAE,EAAE,IAAI,KAAK,KAAK;AAClB,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,MAAM,EAAE,EAAE,MAAM,IAAI;AAChC,SAAK;AAAA,MACH,YAAY;AAAA,MACZ,WAAW;AAAA,IACb;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,iBAAiBC,aAAY,EAAE;AACrC,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,gBAAgB;AAC5B,SAAK,YAAY,eAAe,YAAY;AAC5C,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,eAAe;AACrB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,KAAK,KAAK,MAAM,EAAE,EAAE,MAAM,eAAe,EAAE,EAAE,MAAM,UAAU;AACzE,SAAK,CAAC,QAAQ,aAAa;AACzB,YAAM,aAAY,oBAAI,KAAK,GAAE,YAAY,EAAE,QAAQ,SAAS,GAAG;AAC/D,YAAM,kBAAkB,WAAW,SAAS;AAC5C,YAAM,gBAAgB,YAAY;AAClC,YAAM,aAAa,KAAK,UAAU,QAAQ,MAAM,CAAC;AACjD,YAAM,OAAO,IAAI,KAAK,CAAC,UAAU,GAAG;AAAA,QAClC,MAAM;AAAA,MACR,CAAC;AACD,YAAM,MAAM,IAAI,gBAAgB,IAAI;AACpC,YAAM,OAAO,SAAS,cAAc,GAAG;AACvC,WAAK,OAAO;AACZ,WAAK,WAAW;AAChB,eAAS,KAAK,YAAY,IAAI;AAC9B,WAAK,MAAM;AACX,eAAS,KAAK,YAAY,IAAI;AAC9B,UAAI,gBAAgB,GAAG;AACvB,UAAI,OAAO,gBAAgB,UAAU;AACnC,iBAAS,IAAI,mCAA0C;AAAA,UACrD,aAAa,OAAO,eAAe;AAAA,QACrC,CAAC,EAAE,KAAK,MAAM;AACZ,sBAAY,kBAAkB;AAAA,YAC5B,UAAU,CAAC,qBAAqB,KAAK,KAAK,EAAE;AAAA,UAC9C,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF;AACA,MAAE,EAAE,IAAI,KAAK,KAAK;AAClB,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,iBAAiB;AACvB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,aAAa,MAAM;AAC/B,SAAK,MAAM,aAAa,QAAQ,CAAC;AACjC,MAAE,EAAE,IAAI,aAAa;AACrB,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,mBAAmB;AACzB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,KAAK,KAAK,MAAM,EAAE,EAAE,MAAM,aAAa;AACnD,SAAK,MAAM;AACT,kBAAY,kBAAkB;AAAA,QAC5B,UAAU,CAAC,qBAAqB,KAAK,KAAK,EAAE;AAAA,MAC9C,CAAC;AAAA,IACH;AACA,MAAE,EAAE,IAAI,KAAK,KAAK;AAClB,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,iBAAiB;AACvB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,kBAAkB,EAAE,EAAE,MAAM,kBAAkB,EAAE,EAAE,MAAM,gBAAgB,EAAE,EAAE,MAAM,oBAAoB,EAAE,EAAE,MAAM,gBAAgB,EAAE,EAAE,MAAM,gBAAgB;AACtK,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,aAAa,eAAe;AAAA,MAC5B,kBAAkB,aAAa;AAAA,IACjC;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,SAAO;AACT;AACA,IAAO,wBAAQ;;;ACvYf,SAAS,KAAKC,WAAU;AAGxB,SAAS,YAAAC,iBAAgB;AACzB,SAAS,gBAAgB;AAcV,SAAR,oBAAqC;AAC1C,QAAM,IAAIC,IAAG,EAAE;AACf,QAAM,WAAW,YAAY;AAC7B,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,QAAQ;AACZ,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,SAAS;AACb,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,YAAY,EAAE,CAAC,MAAM,SAAS,EAAE,CAAC,MAAM,MAAM;AACxD,SAAK,eAAeC,WAAU,SAAS;AACrC,UAAI,QAAQ,MAAM;AAChB;AAAA,MACF;AACA,YAAM,WAAW,MAAM,SAAS,UAAU,OAAO,gCAAgC;AAAA,QAC/E,MAAM;AAAA,UACJ,QAAQ,QAAQ;AAAA,UAChB,OAAO,QAAQ;AAAA,UACf,aAAa,QAAQ;AAAA,UACrB,SAAS,QAAQ;AAAA,QACnB;AAAA,MACF,CAAC;AACD,UAAI,SAAS,OAAO;AAClB,YAAI,SAAS,MAAM,SAAS,SAAS,YAAY,KAAK,SAAS,MAAM,SAAS,SAAS,KAAK,GAAG;AAC7F,gBAAM;AAAA,YACJ,OAAO;AAAA,UACT,CAAC;AAAA,QACH,OAAO;AACL,gBAAM;AAAA,YACJ,OAAO;AAAA,UACT,CAAC;AAAA,QACH;AACA,cAAM,SAAS;AAAA,MACjB;AACA,YAAM,OAAO,SAAS,MAAM;AAC5B,UAAIC,UAAS,IAAI,MAAM,OAAO;AAC5B;AAAA,MACF;AACA,YAAM;AAAA,QACJ,OAAO,iBAAiB,QAAQ,KAAK;AAAA,MACvC,CAAC;AAAA,IACH;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,YAAY;AAClB,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,UAAU;AACrB,SAAK,eAAeC,WAAU,QAAQ;AACpC,YAAM,aAAa,MAAM,SAAS,UAAU,OAAO,kBAAkB;AAAA,QACnE,MAAM;AAAA,UACJ;AAAA,UACA,QAAQ;AAAA,QACV;AAAA,MACF,CAAC;AACD,cAAQ,IAAI,WAAW,IAAI;AAC3B,UAAI,WAAW,OAAO;AACpB,cAAM,WAAW;AAAA,MACnB;AACA,aAAO,WAAW,KAAK;AAAA,IACzB;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,YAAY;AAClB,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,UAAU;AACrB,SAAK,eAAeC,YAAW,UAAU;AACvC,YAAM,SAAS,UAAU,OAAO,kBAAkB;AAAA,QAChD,MAAM;AAAA,UACJ,QAAQ;AAAA,UACR,QAAQ;AAAA,QACV;AAAA,MACF,CAAC;AAAA,IACH;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,aAAa;AACnB,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,cAAc,EAAE,CAAC,MAAM,aAAa,EAAE,EAAE,MAAM,WAAW;AACpE,SAAK;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,SAAO;AACT;;;ACzHA,SAAS,KAAKC,WAAU;AACxB,SAAS,YAAAC,iBAAgB;AAOV,SAAR,gBAAiC,KAAK;AAC3C,QAAM,IAAIC,IAAG,EAAE;AACf,QAAM,WAAW,YAAY;AAC7B,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,QAAQ;AACZ,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,uBAAO,IAAI,2BAA2B,GAAG;AACpD,SAAK;AAAA,MACH,kBAAkB,CAAC,cAAc;AAAA,IACnC;AACA,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,iBAAiB,YAAY,gBAAgB,EAAE;AACrD,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,YAAY,EAAE,CAAC,MAAM,MAAM,IAAI;AAC1D,SAAK,SAAS,KAAK,cAAc,EAAE,OAAO,EAAE,GAAG,UAAU,MAAM,EAAE,EAAE,GAAG,OAAO,GAAG,EAAE,YAAY;AAC9F,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI,MAAM;AACb,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,MAAM;AACjB,SAAKC,UAAS,IAAI;AAClB,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,IAAI;AACf,SAAK;AAAA,MACH,mBAAmB;AAAA,MACnB,SAAS;AAAA,IACX;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,kBAAkB,WAAW,IAAI,EAAE;AACzC,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,kBAAkB,EAAE,EAAE,MAAM,MAAM;AAC9D,SAAK,eAAeC,aAAY,OAAO;AACrC,YAAM,WAAW;AAAA,QACf,QAAQ,KAAK;AAAA,QACb;AAAA,QACA;AAAA,MACF;AACA,YAAM,eAAe,YAAY,QAAQ;AAAA,IAC3C;AACA,MAAE,CAAC,IAAI;AACP,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,cAAc;AACpB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,mBAAmB,EAAE,EAAE,MAAM,aAAa;AACtD,SAAK,CAAC,iBAAiB,WAAW;AAClC,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,SAAO;AACT;;;AClFA,SAAS,KAAKC,WAAU;AACxB,SAAS,eAAAC,oBAAmB;AAC5B,SAAS,cAAc;AAEvB,SAAS,oBAAoB,eAAe;AAyC5C,eAAe,uBAAuB,UAA0B,YAAoB,UAAkB,MAAmB,UAAiC,YAAiF;AACzO,QAAM;AAAA,IACJ,MAAM;AAAA,MACJ;AAAA,IACF;AAAA,EACF,IAAI,MAAM,SAAS,KAAK,WAAW;AACnC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,wCAAwC;AAAA,EAC1D;AACA,QAAM,cAAc,UAAU,OAAO,KAAK,OAAO,SAAS,eAAe;AACzE,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,SAAS,IAAI,OAAO,MAAM;AAAA,MAC9B,UAAU,GAAG,eAAe,CAAC;AAAA,MAC7B,aAAa,CAAC,GAAG,KAAM,KAAM,KAAO,GAAK;AAAA,MACzC,SAAS;AAAA,QACP,eAAe,UAAU,QAAQ,YAAY;AAAA,QAC7C,YAAY;AAAA,MACd;AAAA,MACA,0BAA0B;AAAA,MAC1B,4BAA4B;AAAA,MAC5B,UAAU;AAAA,QACR;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,QACA,cAAc;AAAA;AAAA,QAEd,GAAG,OAAO,YAAY,OAAO,QAAQ,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAAA,MAChF;AAAA,MACA,WAAW,IAAI,OAAO;AAAA;AAAA,MAEtB,SAAS,WAAS;AAChB,gBAAQ,MAAM,kBAAkB,KAAK;AACrC,eAAO,KAAK;AAAA,MACd;AAAA,MACA;AAAA,MACA,WAAW,MAAM;AACf,gBAAQ;AAAA,MACV;AAAA,IACF,CAAC;AACD,WAAO,oBAAoB,EAAE,KAAK,qBAAmB;AACnD,UAAI,gBAAgB,QAAQ;AAC1B,eAAO,yBAAyB,gBAAgB,CAAC,CAAC;AAAA,MACpD;AACA,aAAO,MAAM;AAAA,IACf,CAAC;AAAA,EACH,CAAC;AACH;AAuBe,SAAR,iBAAkC,SAAS;AAChD,QAAM,IAAIC,IAAG,CAAC;AACd,QAAM;AAAA,IACJ;AAAA,EACF,IAAI;AACJ,QAAM,WAAW,YAAY;AAC7B,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,YAAY,EAAE,CAAC,MAAM,UAAU;AAC1C,SAAK;AAAA,MACH,YAAY,OAAM,UAAS;AACzB,cAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACV;AAAA,QACF,IAAI;AACJ,cAAM,WAAW,OAAO,SAAY,CAAC,IAAI;AACzC,cAAM,mBAAmB,aAAa,UAAU,OAAO,KAAK,OAAO,QAAQ,cAAc,OAAQ,KAAa,WAAW;AACzH,YAAI,mBAAmB,gBAAgB,GAAG;AACxC,gBAAM,IAAI,MAAM,6BAA6B;AAAA,QAC/C;AACA,cAAM,YAAY,iBAAiB,MAAM,GAAG,EAAE,IAAI,KAAK;AACvD,cAAM,iBAAiB,GAAG,QAAQ,CAAC,IAAI,SAAS;AAChD,cAAM,OAAO,YAAY,GAAG,SAAS,OAAO,cAAc,KAAK,MAAM,cAAc;AACnF,cAAM,cAAc,UAAU,OAAO,KAAK,KAAK,MAAM,GAAG,EAAE,IAAI,GAAG,YAAY,KAAK,YAAY,UAAU,YAAY;AACpH,cAAM,iBAAiB;AAAA,UACrB,kBAAkB;AAAA,UAClB;AAAA,UACA;AAAA,UACA,GAAG;AAAA,QACL;AACA,cAAM,uBAAuB,UAAU,UAAU,MAAM,MAAM,gBAAgB,gBAAgB;AAC7F,eAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,SAAOC,aAAY,EAAE;AACvB;AAMO,SAAS,2BAA2B,SAAS;AAClD,QAAM,IAAID,IAAG,CAAC;AACd,MAAI;AACJ,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,SAAS;AACpB,UAAM;AAAA,MACJ;AAAA,MACA,cAAcE;AAAA,MACd,GAAG;AAAA,IACL,IAAI;AACJ,mBAAeA;AACf,oBAAgB;AAChB,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,mBAAe,EAAE,CAAC;AAClB,oBAAgB,EAAE,CAAC;AAAA,EACrB;AACA,QAAM,iBAAiB,iBAAiB,aAAa;AACrD,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,gBAAgB,EAAE,CAAC,MAAM,gBAAgB;AACpD,SAAK;AAAA,MACH,YAAY,OAAM,UAAS;AACzB,cAAM;AAAA,UACJ;AAAA,UACA,GAAG;AAAA,QACL,IAAI;AACJ,cAAM,SAAS,MAAM,eAAe,YAAY,WAAW;AAC3D,cAAM,aAAa,QAAQ,OAAO,IAAI;AACtC,eAAO;AAAA,MACT;AAAA,IACF;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,SAAOD,aAAY,EAAE;AACvB;","names":["_c","useMutation","useQuery","useQueryClient","_c","useQueryClient","useQuery","t6","useMutation","_c","useMutation","useQuery","useQueryClient","_c","useQueryClient","useQuery","useMutation","_c","isUsable","_c","startTask","isUsable","retryTask","cancelTask","_c","isUsable","_c","isUsable","setMetadata","_c","useMutation","_c","useMutation","t0"]}
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useConsent.ts","../../src/hooks/useAccountDeletion.ts","../../src/hooks/useUserStatus.ts","../../src/hooks/useDataExport.ts","../../src/useBackgroundTask.tsx","../../src/useUserMetadata.tsx","../../src/storage/useStorageUpload.ts"],"sourcesContent":["import { useCallback, useMemo } from \"react\";\nimport useSupabase from \"../useSupabase\";\nimport { useDbQuery } from \"../useDbQuery\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useSetupAuth } from \"../auth\";\n\n/**\n * Consent types supported by the system\n */\nexport type ConsentType = \"terms_of_service\" | \"privacy_policy\" | \"marketing\" | \"data_processing\" | \"cookies\" | string;\n\n/**\n * A single consent record from the database\n */\nexport interface ConsentRecord {\n id: number;\n userId: string;\n consentType: ConsentType;\n consentVersion: string;\n consentGiven: boolean;\n consentText: string | null;\n ipAddress: string | null;\n userAgent: string | null;\n createdAt: string;\n}\n\n/**\n * Summary of a user's consent status for each type\n */\nexport interface ConsentSummary {\n consentType: ConsentType;\n consentGiven: boolean;\n consentVersion: string;\n consentedAt: string;\n}\n\n/**\n * Options for recording consent\n */\nexport interface RecordConsentOptions {\n /** Optional snapshot of the consent text shown to the user */\n consentText?: string;\n /** Optional IP address (usually captured server-side) */\n ipAddress?: string;\n}\n\n/**\n * Return type for the useConsent hook\n */\nexport interface UseConsentReturn {\n /**\n * Records a consent decision for a specific type and version\n * @param type - The type of consent (e.g., 'terms_of_service', 'privacy_policy')\n * @param version - The version of the document being consented to\n * @param given - Whether consent is being given (true) or withdrawn (false)\n * @param options - Optional additional data (consent text snapshot, IP address)\n * @returns Promise resolving to the created consent record or null on error\n */\n recordConsent: (type: ConsentType, version: string, given: boolean, options?: RecordConsentOptions) => Promise<ConsentRecord | null>;\n\n /**\n * Fetches all consent records for the current user\n * @returns Array of consent records\n */\n consents: ConsentRecord[];\n\n /**\n * Gets the latest consent status for each consent type\n * @returns Array of consent summaries\n */\n consentSummary: ConsentSummary[];\n\n /**\n * Records consent withdrawal for a specific type\n * Creates a new consent record with consentGiven: false\n * @param type - The type of consent to withdraw\n * @param version - The version of the current document\n * @returns Promise resolving to the created withdrawal record or null on error\n */\n withdrawConsent: (type: ConsentType, version: string) => Promise<ConsentRecord | null>;\n\n /**\n * Checks if the user has active (non-withdrawn) consent for a type\n * @param type - The consent type to check\n * @returns boolean indicating if consent is currently active\n */\n hasActiveConsent: (type: ConsentType) => boolean;\n\n /**\n * Gets the latest consent record for a specific type\n * @param type - The consent type to look up\n * @returns The latest consent record or undefined if none exists\n */\n getLatestConsent: (type: ConsentType) => ConsentRecord | undefined;\n\n /**\n * Whether consent data is currently being loaded\n */\n isLoading: boolean;\n\n /**\n * Any error that occurred while loading consents\n */\n error: Error | null;\n\n /**\n * Refetch consent data from the server\n */\n refetch: () => void;\n}\n\n/**\n * Hook for managing GDPR-compliant consent records\n *\n * Provides functionality to:\n * - Record new consent decisions\n * - Fetch user's consent history\n * - Withdraw consent\n * - Check consent status\n *\n * @example\n * ```tsx\n * function ConsentManager() {\n * const {\n * recordConsent,\n * withdrawConsent,\n * hasActiveConsent,\n * consentSummary,\n * isLoading\n * } = useConsent();\n *\n * const handleAcceptTerms = async () => {\n * await recordConsent('terms_of_service', 'v1.0', true, {\n * consentText: 'I agree to the Terms of Service...'\n * });\n * };\n *\n * const handleWithdrawMarketing = async () => {\n * await withdrawConsent('marketing', 'v1.0');\n * };\n *\n * if (isLoading) return <Spinner />;\n *\n * return (\n * <div>\n * {consentSummary.map(consent => (\n * <div key={consent.consentType}>\n * {consent.consentType}: {consent.consentGiven ? 'Accepted' : 'Declined'}\n * </div>\n * ))}\n * </div>\n * );\n * }\n * ```\n */\nexport function useConsent(): UseConsentReturn {\n const supabase = useSupabase();\n const {\n user\n } = useSetupAuth();\n\n // Fetch all consent records for the current user\n const consentsQuery = useDbQuery(supabase.schema(\"core\").from(\"ConsentRecord\").select(\"*\").eq(\"userId\", user?.id ?? \"\").order(\"createdAt\", {\n ascending: false\n }), {\n enabled: isUsable(user),\n crossOrganization: true\n });\n const consents: ConsentRecord[] = useMemo(() => {\n if (!consentsQuery.data) return [];\n return consentsQuery.data as ConsentRecord[];\n }, [consentsQuery.data]);\n\n // Compute consent summary (latest status per type)\n const consentSummary: ConsentSummary[] = useMemo(() => {\n const latestByType = new Map<ConsentType, ConsentRecord>();\n for (const consent of consents) {\n // Since we order by createdAt DESC, first occurrence is latest\n if (!latestByType.has(consent.consentType)) {\n latestByType.set(consent.consentType, consent);\n }\n }\n return Array.from(latestByType.values()).map(record => ({\n consentType: record.consentType,\n consentGiven: record.consentGiven,\n consentVersion: record.consentVersion,\n consentedAt: record.createdAt\n }));\n }, [consents]);\n\n /**\n * Record a consent decision\n */\n const recordConsent = useCallback(async (type: ConsentType, version: string, given: boolean, options?: RecordConsentOptions): Promise<ConsentRecord | null> => {\n if (!user?.id) {\n console.error(\"Cannot record consent: user not authenticated\");\n return null;\n }\n try {\n // Capture user agent from browser\n const userAgent = typeof window !== \"undefined\" ? window.navigator.userAgent : null;\n const {\n data,\n error\n } = await supabase.schema(\"core\").from(\"ConsentRecord\").insert({\n userId: user.id,\n consentType: type,\n consentVersion: version,\n consentGiven: given,\n consentText: options?.consentText ?? null,\n ipAddress: options?.ipAddress ?? null,\n userAgent: userAgent\n }).select().single();\n if (error) {\n console.error(\"Error recording consent:\", error);\n return null;\n }\n\n // Refetch to update local state\n consentsQuery.refetch();\n return data as ConsentRecord;\n } catch (err) {\n console.error(\"Error recording consent:\", err);\n return null;\n }\n }, [supabase, user?.id, consentsQuery]);\n\n /**\n * Withdraw consent for a specific type\n */\n const withdrawConsent = useCallback(async (type_0: ConsentType, version_0: string): Promise<ConsentRecord | null> => {\n return recordConsent(type_0, version_0, false);\n }, [recordConsent]);\n\n /**\n * Check if user has active (non-withdrawn) consent for a type\n */\n const hasActiveConsent = useCallback((type_1: ConsentType): boolean => {\n const summary = consentSummary.find(s => s.consentType === type_1);\n return summary?.consentGiven ?? false;\n }, [consentSummary]);\n\n /**\n * Get the latest consent record for a specific type\n */\n const getLatestConsent = useCallback((type_2: ConsentType): ConsentRecord | undefined => {\n return consents.find(c => c.consentType === type_2);\n }, [consents]);\n return {\n recordConsent,\n consents,\n consentSummary,\n withdrawConsent,\n hasActiveConsent,\n getLatestConsent,\n isLoading: consentsQuery.isLoading,\n error: consentsQuery.error as Error | null,\n refetch: consentsQuery.refetch\n };\n}\n\n/**\n * Standalone function to record consent during registration\n * Use this when the useConsent hook is not available (e.g., during sign-up flow)\n *\n * @param supabase - Supabase client instance\n * @param userId - The user's ID\n * @param type - Consent type\n * @param version - Document version\n * @param given - Whether consent is given\n * @param options - Optional additional data\n * @returns Promise resolving to the created record or null on error\n *\n * @example\n * ```tsx\n * // In registration handler\n * const response = await supabase.auth.signUp({ email, password });\n * if (response.data.user) {\n * await recordConsentForUser(\n * supabase,\n * response.data.user.id,\n * 'terms_of_service',\n * 'v1.0',\n * true,\n * { consentText: 'I agree to the Terms of Service...' }\n * );\n * }\n * ```\n */\nexport async function recordConsentForUser(supabase: ReturnType<typeof useSupabase>, userId: string, type: ConsentType, version: string, given: boolean, options?: RecordConsentOptions): Promise<ConsentRecord | null> {\n try {\n // Capture user agent from browser\n const userAgent = typeof window !== \"undefined\" ? window.navigator.userAgent : null;\n const {\n data,\n error\n } = await supabase.schema(\"core\").from(\"ConsentRecord\").insert({\n userId: userId,\n consentType: type,\n consentVersion: version,\n consentGiven: given,\n consentText: options?.consentText ?? null,\n ipAddress: options?.ipAddress ?? null,\n userAgent: userAgent\n }).select().single();\n if (error) {\n console.error(\"Error recording consent:\", error);\n return null;\n }\n return data as ConsentRecord;\n } catch (err) {\n console.error(\"Error recording consent:\", err);\n return null;\n }\n}\nexport default useConsent;","import { c as _c } from \"react/compiler-runtime\";\nimport { useCallback, useMemo } from \"react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport useSupabase from \"../useSupabase\";\nimport { useAuth } from \"../auth\";\n\n/**\n * Deletion request status\n */\nexport type DeletionStatus = \"pending\" | \"cancelled\" | \"completed\";\n\n/**\n * Account deletion request details\n */\nexport interface DeletionRequest {\n id: number;\n status: DeletionStatus;\n requestedAt: string;\n scheduledDeletionAt: string;\n completedAt: string | null;\n cancelledAt: string | null;\n reason: string | null;\n daysRemaining: number | null;\n}\n\n/**\n * Response from get_deletion_status RPC\n */\nexport interface DeletionStatusResponse {\n hasRequest: boolean;\n request: DeletionRequest | null;\n}\n\n/**\n * Response from request_account_deletion RPC\n */\nexport interface RequestDeletionResponse {\n success: boolean;\n error?: string;\n requestId?: number;\n requestedAt?: string;\n scheduledDeletionAt?: string;\n gracePeriodDays?: number;\n message?: string;\n existingRequest?: {\n id: number;\n requestedAt: string;\n scheduledDeletionAt: string;\n status: DeletionStatus;\n };\n}\n\n/**\n * Response from cancel_account_deletion RPC\n */\nexport interface CancelDeletionResponse {\n success: boolean;\n error?: string;\n requestId?: number;\n cancelledAt?: string;\n message?: string;\n}\n\n/**\n * Query key for deletion status\n */\nconst DELETION_STATUS_KEY = [\"accountDeletionStatus\"] as const;\n\n/**\n * Hook for managing GDPR-compliant account deletion\n *\n * Provides functionality to:\n * - Request account deletion (with 30-day grace period)\n * - Cancel a pending deletion request\n * - Check current deletion status\n *\n * @example\n * ```tsx\n * function AccountSettings() {\n * const {\n * deletionStatus,\n * isLoading,\n * isPendingDeletion,\n * daysRemaining,\n * requestDeletion,\n * cancelDeletion,\n * isRequesting,\n * isCancelling\n * } = useAccountDeletion();\n *\n * if (isLoading) return <Spinner />;\n *\n * if (isPendingDeletion) {\n * return (\n * <div>\n * <p>Your account is scheduled for deletion in {daysRemaining} days</p>\n * <button onClick={() => cancelDeletion()}>Cancel Deletion</button>\n * </div>\n * );\n * }\n *\n * return (\n * <button onClick={() => requestDeletion(\"No longer using the service\")}>\n * Delete My Account\n * </button>\n * );\n * }\n * ```\n */\nexport function useAccountDeletion() {\n const $ = _c(56);\n const supabase = useSupabase();\n const queryClient = useQueryClient();\n const {\n user\n } = useAuth();\n let t0;\n if ($[0] !== supabase) {\n t0 = async () => {\n const {\n data,\n error\n } = await supabase.schema(\"core\").rpc(\"get_deletion_status\");\n if (error) {\n throw new Error(error.message);\n }\n return data as unknown as DeletionStatusResponse;\n };\n $[0] = supabase;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n const t1 = !!user;\n let t2;\n if ($[2] !== t0 || $[3] !== t1) {\n t2 = {\n queryKey: DELETION_STATUS_KEY,\n queryFn: t0,\n enabled: t1,\n staleTime: 300000,\n refetchOnWindowFocus: true\n };\n $[2] = t0;\n $[3] = t1;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n const statusQuery = useQuery(t2);\n let t3;\n if ($[5] !== supabase) {\n t3 = async reason => {\n const {\n data: data_0,\n error: error_0\n } = await supabase.schema(\"core\").rpc(\"request_account_deletion\", {\n p_reason: reason\n });\n if (error_0) {\n throw new Error(error_0.message);\n }\n return data_0 as unknown as RequestDeletionResponse;\n };\n $[5] = supabase;\n $[6] = t3;\n } else {\n t3 = $[6];\n }\n let t4;\n if ($[7] !== queryClient) {\n t4 = data_1 => {\n if (data_1.success) {\n queryClient.invalidateQueries({\n queryKey: DELETION_STATUS_KEY\n });\n }\n };\n $[7] = queryClient;\n $[8] = t4;\n } else {\n t4 = $[8];\n }\n let t5;\n if ($[9] !== t3 || $[10] !== t4) {\n t5 = {\n mutationFn: t3,\n onSuccess: t4\n };\n $[9] = t3;\n $[10] = t4;\n $[11] = t5;\n } else {\n t5 = $[11];\n }\n const requestMutation = useMutation(t5);\n let t6;\n if ($[12] !== supabase) {\n t6 = async () => {\n const {\n data: data_2,\n error: error_1\n } = await supabase.schema(\"core\").rpc(\"cancel_account_deletion\");\n if (error_1) {\n throw new Error(error_1.message);\n }\n return data_2 as unknown as CancelDeletionResponse;\n };\n $[12] = supabase;\n $[13] = t6;\n } else {\n t6 = $[13];\n }\n let t7;\n if ($[14] !== queryClient) {\n t7 = data_3 => {\n if (data_3.success) {\n queryClient.invalidateQueries({\n queryKey: DELETION_STATUS_KEY\n });\n }\n };\n $[14] = queryClient;\n $[15] = t7;\n } else {\n t7 = $[15];\n }\n let t8;\n if ($[16] !== t6 || $[17] !== t7) {\n t8 = {\n mutationFn: t6,\n onSuccess: t7\n };\n $[16] = t6;\n $[17] = t7;\n $[18] = t8;\n } else {\n t8 = $[18];\n }\n const cancelMutation = useMutation(t8);\n let t9;\n if ($[19] !== requestMutation) {\n t9 = async reason_0 => requestMutation.mutateAsync(reason_0);\n $[19] = requestMutation;\n $[20] = t9;\n } else {\n t9 = $[20];\n }\n const requestDeletion = t9;\n let t10;\n if ($[21] !== cancelMutation) {\n t10 = async () => cancelMutation.mutateAsync();\n $[21] = cancelMutation;\n $[22] = t10;\n } else {\n t10 = $[22];\n }\n const cancelDeletion = t10;\n let t11;\n if ($[23] !== queryClient) {\n t11 = () => {\n queryClient.invalidateQueries({\n queryKey: DELETION_STATUS_KEY\n });\n };\n $[23] = queryClient;\n $[24] = t11;\n } else {\n t11 = $[24];\n }\n const refreshStatus = t11;\n const status = statusQuery.data;\n const request = status?.request;\n const t12 = request?.status === \"pending\";\n const t13 = request?.status === \"cancelled\";\n const t14 = request?.status === \"completed\";\n const t15 = request?.daysRemaining ?? null;\n let t16;\n if ($[25] !== request) {\n t16 = request?.scheduledDeletionAt ? new Date(request.scheduledDeletionAt) : null;\n $[25] = request;\n $[26] = t16;\n } else {\n t16 = $[26];\n }\n let t17;\n if ($[27] !== request) {\n t17 = request?.requestedAt ? new Date(request.requestedAt) : null;\n $[27] = request;\n $[28] = t17;\n } else {\n t17 = $[28];\n }\n let t18;\n if ($[29] !== request) {\n t18 = request?.cancelledAt ? new Date(request.cancelledAt) : null;\n $[29] = request;\n $[30] = t18;\n } else {\n t18 = $[30];\n }\n const t19 = request?.reason ?? null;\n let t20;\n if ($[31] !== request || $[32] !== t12 || $[33] !== t13 || $[34] !== t14 || $[35] !== t15 || $[36] !== t16 || $[37] !== t17 || $[38] !== t18 || $[39] !== t19) {\n t20 = {\n deletionRequest: request,\n isPendingDeletion: t12,\n isCancelledDeletion: t13,\n isCompletedDeletion: t14,\n daysRemaining: t15,\n scheduledDeletionAt: t16,\n requestedAt: t17,\n cancelledAt: t18,\n reason: t19\n };\n $[31] = request;\n $[32] = t12;\n $[33] = t13;\n $[34] = t14;\n $[35] = t15;\n $[36] = t16;\n $[37] = t17;\n $[38] = t18;\n $[39] = t19;\n $[40] = t20;\n } else {\n t20 = $[40];\n }\n const computedValues = t20;\n let t21;\n if ($[41] !== cancelDeletion || $[42] !== cancelMutation.data || $[43] !== cancelMutation.error || $[44] !== cancelMutation.isPending || $[45] !== computedValues || $[46] !== refreshStatus || $[47] !== requestDeletion || $[48] !== requestMutation.data || $[49] !== requestMutation.error || $[50] !== requestMutation.isPending || $[51] !== statusQuery.data || $[52] !== statusQuery.error || $[53] !== statusQuery.isError || $[54] !== statusQuery.isLoading) {\n t21 = {\n deletionStatus: statusQuery.data,\n isLoading: statusQuery.isLoading,\n isError: statusQuery.isError,\n error: statusQuery.error,\n ...computedValues,\n requestDeletion,\n cancelDeletion,\n refreshStatus,\n isRequesting: requestMutation.isPending,\n isCancelling: cancelMutation.isPending,\n requestError: requestMutation.error,\n cancelError: cancelMutation.error,\n requestResult: requestMutation.data,\n cancelResult: cancelMutation.data\n };\n $[41] = cancelDeletion;\n $[42] = cancelMutation.data;\n $[43] = cancelMutation.error;\n $[44] = cancelMutation.isPending;\n $[45] = computedValues;\n $[46] = refreshStatus;\n $[47] = requestDeletion;\n $[48] = requestMutation.data;\n $[49] = requestMutation.error;\n $[50] = requestMutation.isPending;\n $[51] = statusQuery.data;\n $[52] = statusQuery.error;\n $[53] = statusQuery.isError;\n $[54] = statusQuery.isLoading;\n $[55] = t21;\n } else {\n t21 = $[55];\n }\n return t21;\n}\n\n/**\n * Type exports for consumers\n */\nexport type UseAccountDeletionReturn = ReturnType<typeof useAccountDeletion>;","import { c as _c } from \"react/compiler-runtime\";\nimport { useCallback, useMemo } from \"react\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport useSupabase from \"../useSupabase\";\nimport { useAuth, ProfileStatus } from \"../auth\";\n\n/**\n * User status information from get_user_status RPC\n */\nexport interface UserStatusInfo {\n exists: boolean;\n userId?: string;\n status?: ProfileStatus;\n archivedAt?: string | null;\n archivedBy?: string | null;\n isActive?: boolean;\n}\n\n/**\n * Response from archive_user RPC\n */\nexport interface ArchiveUserResponse {\n success: boolean;\n error?: string;\n userId?: string;\n archivedAt?: string;\n archivedBy?: string;\n message?: string;\n}\n\n/**\n * Response from unarchive_user RPC\n */\nexport interface UnarchiveUserResponse {\n success: boolean;\n error?: string;\n userId?: string;\n restoredAt?: string;\n restoredBy?: string;\n message?: string;\n}\n\n/**\n * Query key factory for user status\n */\nconst USER_STATUS_KEY = (userId: string) => [\"userStatus\", userId] as const;\n\n/**\n * Hook for managing user profile status (archival)\n *\n * Provides functionality to:\n * - Check a user's current status\n * - Archive a user (admin only)\n * - Unarchive/restore a user (admin only)\n *\n * @param targetUserId - Optional user ID to check. Defaults to current user.\n *\n * @example\n * ```tsx\n * // Check current user's status\n * function MyProfile() {\n * const { status, isArchived } = useUserStatus();\n *\n * if (isArchived) {\n * return <p>Your account has been archived</p>;\n * }\n *\n * return <p>Your account is active</p>;\n * }\n *\n * // Admin managing another user\n * function UserManagement({ userId }: { userId: string }) {\n * const {\n * status,\n * isArchived,\n * archiveUser,\n * unarchiveUser,\n * isArchiving,\n * isUnarchiving\n * } = useUserStatus(userId);\n *\n * return (\n * <div>\n * <p>Status: {status}</p>\n * {isArchived ? (\n * <button onClick={() => unarchiveUser(userId)} disabled={isUnarchiving}>\n * Restore Access\n * </button>\n * ) : (\n * <button onClick={() => archiveUser(userId)} disabled={isArchiving}>\n * Archive User\n * </button>\n * )}\n * </div>\n * );\n * }\n * ```\n */\nexport function useUserStatus(targetUserId) {\n const $ = _c(58);\n const supabase = useSupabase();\n const queryClient = useQueryClient();\n const {\n user\n } = useAuth();\n const userId = targetUserId ?? user?.id;\n const t0 = userId ?? \"\";\n let t1;\n if ($[0] !== t0) {\n t1 = USER_STATUS_KEY(t0);\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n let t2;\n if ($[2] !== supabase || $[3] !== userId) {\n t2 = async () => {\n const {\n data,\n error\n } = await supabase.schema(\"core\").rpc(\"get_user_status\", {\n p_user_id: userId\n });\n if (error) {\n throw new Error(error.message);\n }\n return data as unknown as UserStatusInfo;\n };\n $[2] = supabase;\n $[3] = userId;\n $[4] = t2;\n } else {\n t2 = $[4];\n }\n const t3 = !!userId;\n let t4;\n if ($[5] !== t1 || $[6] !== t2 || $[7] !== t3) {\n t4 = {\n queryKey: t1,\n queryFn: t2,\n enabled: t3,\n staleTime: 300000,\n refetchOnWindowFocus: true\n };\n $[5] = t1;\n $[6] = t2;\n $[7] = t3;\n $[8] = t4;\n } else {\n t4 = $[8];\n }\n const statusQuery = useQuery(t4);\n let t5;\n if ($[9] !== supabase) {\n t5 = async t6 => {\n const {\n userId: userId_0,\n reason\n } = t6;\n const {\n data: data_0,\n error: error_0\n } = await supabase.schema(\"core\").rpc(\"archive_user\", {\n p_user_id: userId_0,\n p_reason: reason ?? undefined\n });\n if (error_0) {\n throw new Error(error_0.message);\n }\n return data_0 as unknown as ArchiveUserResponse;\n };\n $[9] = supabase;\n $[10] = t5;\n } else {\n t5 = $[10];\n }\n let t6;\n if ($[11] !== queryClient) {\n t6 = (data_1, variables) => {\n if (data_1.success) {\n queryClient.invalidateQueries({\n queryKey: USER_STATUS_KEY(variables.userId)\n });\n }\n };\n $[11] = queryClient;\n $[12] = t6;\n } else {\n t6 = $[12];\n }\n let t7;\n if ($[13] !== t5 || $[14] !== t6) {\n t7 = {\n mutationFn: t5,\n onSuccess: t6\n };\n $[13] = t5;\n $[14] = t6;\n $[15] = t7;\n } else {\n t7 = $[15];\n }\n const archiveMutation = useMutation(t7);\n let t8;\n if ($[16] !== supabase) {\n t8 = async userId_1 => {\n const {\n data: data_2,\n error: error_1\n } = await supabase.schema(\"core\").rpc(\"unarchive_user\", {\n p_user_id: userId_1\n });\n if (error_1) {\n throw new Error(error_1.message);\n }\n return data_2 as unknown as UnarchiveUserResponse;\n };\n $[16] = supabase;\n $[17] = t8;\n } else {\n t8 = $[17];\n }\n let t9;\n if ($[18] !== queryClient) {\n t9 = (data_3, userId_2) => {\n if (data_3.success) {\n queryClient.invalidateQueries({\n queryKey: USER_STATUS_KEY(userId_2)\n });\n }\n };\n $[18] = queryClient;\n $[19] = t9;\n } else {\n t9 = $[19];\n }\n let t10;\n if ($[20] !== t8 || $[21] !== t9) {\n t10 = {\n mutationFn: t8,\n onSuccess: t9\n };\n $[20] = t8;\n $[21] = t9;\n $[22] = t10;\n } else {\n t10 = $[22];\n }\n const unarchiveMutation = useMutation(t10);\n let t11;\n if ($[23] !== archiveMutation) {\n t11 = async (userId_3, reason_0) => archiveMutation.mutateAsync({\n userId: userId_3,\n reason: reason_0\n });\n $[23] = archiveMutation;\n $[24] = t11;\n } else {\n t11 = $[24];\n }\n const archiveUser = t11;\n let t12;\n if ($[25] !== unarchiveMutation) {\n t12 = async userId_4 => unarchiveMutation.mutateAsync(userId_4);\n $[25] = unarchiveMutation;\n $[26] = t12;\n } else {\n t12 = $[26];\n }\n const unarchiveUser = t12;\n let t13;\n if ($[27] !== queryClient || $[28] !== userId) {\n t13 = () => {\n if (userId) {\n queryClient.invalidateQueries({\n queryKey: USER_STATUS_KEY(userId)\n });\n }\n };\n $[27] = queryClient;\n $[28] = userId;\n $[29] = t13;\n } else {\n t13 = $[29];\n }\n const refreshStatus = t13;\n let t14;\n if ($[30] !== queryClient) {\n t14 = userIdToInvalidate => {\n queryClient.invalidateQueries({\n queryKey: USER_STATUS_KEY(userIdToInvalidate)\n });\n };\n $[30] = queryClient;\n $[31] = t14;\n } else {\n t14 = $[31];\n }\n const invalidateUserStatus = t14;\n const statusData = statusQuery.data;\n const t15 = statusData?.exists ?? false;\n const t16 = statusData?.status as ProfileStatus | undefined;\n const t17 = statusData?.isActive ?? false;\n const t18 = statusData?.status === \"archived\";\n const t19 = statusData?.status === \"suspended\";\n let t20;\n if ($[32] !== statusData) {\n t20 = statusData?.archivedAt ? new Date(statusData.archivedAt) : null;\n $[32] = statusData;\n $[33] = t20;\n } else {\n t20 = $[33];\n }\n const t21 = statusData?.archivedBy ?? null;\n let t22;\n if ($[34] !== t15 || $[35] !== t16 || $[36] !== t17 || $[37] !== t18 || $[38] !== t19 || $[39] !== t20 || $[40] !== t21) {\n t22 = {\n exists: t15,\n status: t16,\n isActive: t17,\n isArchived: t18,\n isSuspended: t19,\n archivedAt: t20,\n archivedBy: t21\n };\n $[34] = t15;\n $[35] = t16;\n $[36] = t17;\n $[37] = t18;\n $[38] = t19;\n $[39] = t20;\n $[40] = t21;\n $[41] = t22;\n } else {\n t22 = $[41];\n }\n const computedValues = t22;\n let t23;\n if ($[42] !== archiveMutation.data || $[43] !== archiveMutation.error || $[44] !== archiveMutation.isPending || $[45] !== archiveUser || $[46] !== computedValues || $[47] !== invalidateUserStatus || $[48] !== refreshStatus || $[49] !== statusQuery.data || $[50] !== statusQuery.error || $[51] !== statusQuery.isError || $[52] !== statusQuery.isLoading || $[53] !== unarchiveMutation.data || $[54] !== unarchiveMutation.error || $[55] !== unarchiveMutation.isPending || $[56] !== unarchiveUser) {\n t23 = {\n statusData: statusQuery.data,\n isLoading: statusQuery.isLoading,\n isError: statusQuery.isError,\n error: statusQuery.error,\n ...computedValues,\n archiveUser,\n unarchiveUser,\n refreshStatus,\n invalidateUserStatus,\n isArchiving: archiveMutation.isPending,\n isUnarchiving: unarchiveMutation.isPending,\n archiveError: archiveMutation.error,\n unarchiveError: unarchiveMutation.error,\n archiveResult: archiveMutation.data,\n unarchiveResult: unarchiveMutation.data\n };\n $[42] = archiveMutation.data;\n $[43] = archiveMutation.error;\n $[44] = archiveMutation.isPending;\n $[45] = archiveUser;\n $[46] = computedValues;\n $[47] = invalidateUserStatus;\n $[48] = refreshStatus;\n $[49] = statusQuery.data;\n $[50] = statusQuery.error;\n $[51] = statusQuery.isError;\n $[52] = statusQuery.isLoading;\n $[53] = unarchiveMutation.data;\n $[54] = unarchiveMutation.error;\n $[55] = unarchiveMutation.isPending;\n $[56] = unarchiveUser;\n $[57] = t23;\n } else {\n t23 = $[57];\n }\n return t23;\n}\n\n/**\n * Type exports for consumers\n */\nexport type UseUserStatusReturn = ReturnType<typeof useUserStatus>;","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation, useQuery, useQueryClient } from \"@tanstack/react-query\";\nimport { useCallback } from \"react\";\nimport useSupabase from \"../useSupabase\";\nimport { useAuth } from \"../auth\";\n/**\n * GDPR Article 20 compliant personal data export metadata\n */\nexport interface DataExportMetadata {\n exportId: string;\n exportedAt: string;\n userId: string;\n gdprArticle: string;\n format: string;\n version: string;\n}\n\n/**\n * Profile data structure in export\n */\nexport interface ExportedProfile {\n id: string;\n email: string;\n firstName: string;\n middleName: string;\n lastName: string;\n fullName: string;\n phone: string;\n profilePath: string | null;\n metadata: Record<string, unknown> | null;\n}\n\n/**\n * Access permission record\n */\nexport interface ExportedAccessPermission {\n accessKey: string;\n source: \"direct\" | \"group\";\n}\n\n/**\n * Group membership record\n */\nexport interface ExportedGroupMembership {\n groupId: number;\n groupName: string;\n groupDescription: string | null;\n grantedAt: string;\n grantedBy: string | null;\n expiresAt: string | null;\n}\n\n/**\n * User metadata key-value pair\n */\nexport interface ExportedUserMetadata {\n key: string;\n value: string;\n}\n\n/**\n * Device/push token information\n */\nexport interface ExportedDevice {\n deviceType: string | null;\n deviceOS: string | null;\n deviceOSVersion: string | null;\n deviceModel: string | null;\n platform: string | null;\n appVersion: string | null;\n isActive: boolean;\n createdAt: string;\n lastUsedAt: string | null;\n}\n\n/**\n * Audit log entry\n */\nexport interface ExportedAuditLogEntry {\n schemaName: string;\n tableName: string;\n operation: string;\n changeAt: string;\n recordPrimaryKey: Record<string, unknown>;\n}\n\n/**\n * Saved query record\n */\nexport interface ExportedSavedQuery {\n id: number;\n title: string;\n description: string | null;\n categoryId: string;\n schema: string;\n table: string;\n path: string;\n visibility: string;\n createdAt: string;\n}\n\n/**\n * Comment record\n */\nexport interface ExportedComment {\n id: string;\n message: string;\n createdAt: string;\n commentSectionId: string;\n}\n\n/**\n * Notification record\n */\nexport interface ExportedNotification {\n title: string;\n message: string;\n link: string | null;\n scheduledAt: string | null;\n types: string[];\n}\n\n/**\n * Recent activity section\n */\nexport interface ExportedRecentActivity {\n auditLog: ExportedAuditLogEntry[];\n retentionPeriod: string;\n}\n\n/**\n * Complete personal data export structure\n * Follows GDPR Article 20 requirements for data portability\n */\nexport interface PersonalDataExport {\n exportMetadata: DataExportMetadata;\n profile: ExportedProfile;\n accessPermissions: ExportedAccessPermission[];\n groupMemberships: ExportedGroupMembership[];\n userMetadata: ExportedUserMetadata[];\n devices: ExportedDevice[];\n recentActivity: ExportedRecentActivity;\n savedQueries: ExportedSavedQuery[];\n comments: ExportedComment[];\n notifications: ExportedNotification[];\n}\n\n/**\n * Export request history record\n */\nexport interface DataExportHistoryRecord {\n id: string;\n requestedAt: string;\n completedAt: string | null;\n status: \"pending\" | \"processing\" | \"completed\" | \"failed\";\n downloadCount: number;\n lastDownloadedAt: string | null;\n expiresAt: string | null;\n}\n\n/**\n * Hook return type\n */\nexport interface UseDataExportReturn {\n /** Trigger a personal data export */\n exportMyData: () => Promise<PersonalDataExport>;\n /** Export mutation state */\n exportMutation: ReturnType<typeof useMutation<PersonalDataExport, Error, void>>;\n /** Download data as JSON file */\n downloadAsJson: (data: PersonalDataExport, filename?: string) => void;\n /** Export history query */\n historyQuery: ReturnType<typeof useQuery<DataExportHistoryRecord[], Error>>;\n /** Get export history */\n getExportHistory: () => DataExportHistoryRecord[];\n /** Refresh export history */\n refreshHistory: () => void;\n /** Loading state for export */\n isExporting: boolean;\n /** Loading state for history */\n isLoadingHistory: boolean;\n}\n\n/**\n * Hook for GDPR Article 20 compliant personal data export\n *\n * @example\n * ```tsx\n * function DataExportButton() {\n * const { exportMyData, downloadAsJson, isExporting } = useDataExport();\n *\n * const handleExport = async () => {\n * const data = await exportMyData();\n * downloadAsJson(data);\n * };\n *\n * return (\n * <button onClick={handleExport} disabled={isExporting}>\n * {isExporting ? 'Preparing...' : 'Download My Data'}\n * </button>\n * );\n * }\n * ```\n */\nexport function useDataExport() {\n const $ = _c(35);\n const supabase = useSupabase();\n const auth = useAuth();\n const queryClient = useQueryClient();\n let t0;\n if ($[0] !== auth.user.id) {\n t0 = [\"dataExportHistory\", auth.user.id];\n $[0] = auth.user.id;\n $[1] = t0;\n } else {\n t0 = $[1];\n }\n let t1;\n if ($[2] !== auth.user.id || $[3] !== supabase) {\n t1 = async () => {\n const {\n data,\n error\n } = await supabase.rpc(\"get_data_export_history\" as any, {\n p_user_id: auth.user.id\n });\n if (error) {\n throw new Error(`Failed to fetch export history: ${error.message}`);\n }\n return data as unknown as DataExportHistoryRecord[] || [];\n };\n $[2] = auth.user.id;\n $[3] = supabase;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n let t2;\n if ($[5] !== t0 || $[6] !== t1) {\n t2 = {\n queryKey: t0,\n queryFn: t1,\n staleTime: 300000\n };\n $[5] = t0;\n $[6] = t1;\n $[7] = t2;\n } else {\n t2 = $[7];\n }\n const historyQuery = useQuery(t2);\n let t3;\n if ($[8] !== auth.user.id || $[9] !== supabase) {\n t3 = async () => {\n const {\n data: data_0,\n error: error_0\n } = await supabase.rpc(\"export_user_personal_data\" as any, {\n p_user_id: auth.user.id\n });\n if (error_0) {\n throw new Error(`Failed to export personal data: ${error_0.message}`);\n }\n if (!data_0) {\n throw new Error(\"No data returned from export\");\n }\n return data_0 as unknown as PersonalDataExport;\n };\n $[8] = auth.user.id;\n $[9] = supabase;\n $[10] = t3;\n } else {\n t3 = $[10];\n }\n let t4;\n if ($[11] !== auth.user.id || $[12] !== queryClient) {\n t4 = () => {\n queryClient.invalidateQueries({\n queryKey: [\"dataExportHistory\", auth.user.id]\n });\n };\n $[11] = auth.user.id;\n $[12] = queryClient;\n $[13] = t4;\n } else {\n t4 = $[13];\n }\n let t5;\n if ($[14] !== t3 || $[15] !== t4) {\n t5 = {\n mutationFn: t3,\n onSuccess: t4\n };\n $[14] = t3;\n $[15] = t4;\n $[16] = t5;\n } else {\n t5 = $[16];\n }\n const exportMutation = useMutation(t5);\n let t6;\n if ($[17] !== exportMutation) {\n t6 = async () => exportMutation.mutateAsync();\n $[17] = exportMutation;\n $[18] = t6;\n } else {\n t6 = $[18];\n }\n const exportMyData = t6;\n let t7;\n if ($[19] !== auth.user.id || $[20] !== queryClient || $[21] !== supabase) {\n t7 = (data_1, filename) => {\n const timestamp = new Date().toISOString().replace(/[:.]/g, \"-\");\n const defaultFilename = `my-data-${timestamp}.json`;\n const finalFilename = filename || defaultFilename;\n const jsonString = JSON.stringify(data_1, null, 2);\n const blob = new Blob([jsonString], {\n type: \"application/json\"\n });\n const url = URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n link.href = url;\n link.download = finalFilename;\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n URL.revokeObjectURL(url);\n if (data_1.exportMetadata?.exportId) {\n supabase.rpc(\"increment_export_download_count\" as any, {\n p_export_id: data_1.exportMetadata.exportId\n }).then(() => {\n queryClient.invalidateQueries({\n queryKey: [\"dataExportHistory\", auth.user.id]\n });\n });\n }\n };\n $[19] = auth.user.id;\n $[20] = queryClient;\n $[21] = supabase;\n $[22] = t7;\n } else {\n t7 = $[22];\n }\n const downloadAsJson = t7;\n let t8;\n if ($[23] !== historyQuery.data) {\n t8 = () => historyQuery.data || [];\n $[23] = historyQuery.data;\n $[24] = t8;\n } else {\n t8 = $[24];\n }\n const getExportHistory = t8;\n let t9;\n if ($[25] !== auth.user.id || $[26] !== queryClient) {\n t9 = () => {\n queryClient.invalidateQueries({\n queryKey: [\"dataExportHistory\", auth.user.id]\n });\n };\n $[25] = auth.user.id;\n $[26] = queryClient;\n $[27] = t9;\n } else {\n t9 = $[27];\n }\n const refreshHistory = t9;\n let t10;\n if ($[28] !== downloadAsJson || $[29] !== exportMutation || $[30] !== exportMyData || $[31] !== getExportHistory || $[32] !== historyQuery || $[33] !== refreshHistory) {\n t10 = {\n exportMyData,\n exportMutation,\n downloadAsJson,\n historyQuery,\n getExportHistory,\n refreshHistory,\n isExporting: exportMutation.isPending,\n isLoadingHistory: historyQuery.isLoading\n };\n $[28] = downloadAsJson;\n $[29] = exportMutation;\n $[30] = exportMyData;\n $[31] = getExportHistory;\n $[32] = historyQuery;\n $[33] = refreshHistory;\n $[34] = t10;\n } else {\n t10 = $[34];\n }\n return t10;\n}\nexport default useDataExport;","import { c as _c } from \"react/compiler-runtime\";\nimport React from \"react\";\nimport useSupabase from \"./useSupabase\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useToast } from \"@pol-studios/hooks/toast\";\nimport { useAuth } from \"./auth\";\nexport type TaskRequest = {\n handlerId: string;\n title: string;\n description: string;\n body?: any;\n};\ntype RetryJobRequest = {\n taskId: string;\n};\ntype CancelJobRequest = {\n taskId: string;\n};\nexport default function useBackgroundTask() {\n const $ = _c(12);\n const supabase = useSupabase();\n const {\n user\n } = useAuth();\n const {\n toast\n } = useToast();\n let t0;\n if ($[0] !== supabase || $[1] !== toast || $[2] !== user) {\n t0 = async function startTask(request) {\n if (user == null) {\n return;\n }\n const response = await supabase.functions.invoke(\"background-task-orchestrator\", {\n body: {\n taskId: request.handlerId,\n title: request.title,\n description: request.description,\n payload: request.body\n }\n });\n if (response.error) {\n if (response.error.message?.includes(\"rate limit\") || response.error.message?.includes(\"429\")) {\n toast({\n title: \"Too many requests. Please try again later.\"\n });\n } else {\n toast({\n title: \"Failed to start task\"\n });\n }\n throw response.error;\n }\n const task = response.data?.task;\n if (isUsable(task) === false) {\n return;\n }\n toast({\n title: `Task Started: ${request.title}`\n });\n };\n $[0] = supabase;\n $[1] = toast;\n $[2] = user;\n $[3] = t0;\n } else {\n t0 = $[3];\n }\n const startTask = t0;\n let t1;\n if ($[4] !== supabase) {\n t1 = async function retryTask(taskId) {\n const response_0 = await supabase.functions.invoke(\"trigger-update\", {\n body: {\n taskId,\n action: \"retry\"\n }\n });\n console.log(response_0.data);\n if (response_0.error) {\n throw response_0.error;\n }\n return response_0.data.id;\n };\n $[4] = supabase;\n $[5] = t1;\n } else {\n t1 = $[5];\n }\n const retryTask = t1;\n let t2;\n if ($[6] !== supabase) {\n t2 = async function cancelTask(taskId_0) {\n await supabase.functions.invoke(\"trigger-update\", {\n body: {\n taskId: taskId_0,\n action: \"cancel\"\n }\n });\n };\n $[6] = supabase;\n $[7] = t2;\n } else {\n t2 = $[7];\n }\n const cancelTask = t2;\n let t3;\n if ($[8] !== cancelTask || $[9] !== retryTask || $[10] !== startTask) {\n t3 = {\n startTask,\n retryTask,\n cancelTask\n };\n $[8] = cancelTask;\n $[9] = retryTask;\n $[10] = startTask;\n $[11] = t3;\n } else {\n t3 = $[11];\n }\n return t3;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useDbQuery } from \"./useDbQuery\";\nimport useSupabase from \"./useSupabase\";\nimport { useDbUpsert } from \"./hooks\";\nimport { UseQuerySingleReturn } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { Tables, TablesInsert } from \"./database.types\";\nimport { useAuth } from \"./auth\";\nexport default function useUserMetadata(key) {\n const $ = _c(16);\n const supabase = useSupabase();\n const {\n user\n } = useAuth();\n let t0;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t0 = {\n invalidateTables: [\"UserMetadata\"]\n };\n $[0] = t0;\n } else {\n t0 = $[0];\n }\n const upsertMutation = useDbUpsert(\"UserMetadata\", t0);\n let t1;\n if ($[1] !== key || $[2] !== supabase || $[3] !== user?.id) {\n t1 = supabase.from(\"UserMetadata\").select().eq(\"userId\", user?.id).eq(\"key\", key).maybeSingle();\n $[1] = key;\n $[2] = supabase;\n $[3] = user?.id;\n $[4] = t1;\n } else {\n t1 = $[4];\n }\n let t2;\n if ($[5] !== user) {\n t2 = isUsable(user);\n $[5] = user;\n $[6] = t2;\n } else {\n t2 = $[6];\n }\n let t3;\n if ($[7] !== t2) {\n t3 = {\n crossOrganization: true,\n enabled: t2\n };\n $[7] = t2;\n $[8] = t3;\n } else {\n t3 = $[8];\n }\n const lastOpenRequest = useDbQuery(t1, t3);\n let t4;\n if ($[9] !== key || $[10] !== upsertMutation || $[11] !== user) {\n t4 = async function setMetadata(value) {\n const newValue = {\n userId: user.id,\n key,\n value\n };\n await upsertMutation.mutateAsync(newValue);\n };\n $[9] = key;\n $[10] = upsertMutation;\n $[11] = user;\n $[12] = t4;\n } else {\n t4 = $[12];\n }\n const setMetadata = t4;\n let t5;\n if ($[13] !== lastOpenRequest || $[14] !== setMetadata) {\n t5 = [lastOpenRequest, setMetadata];\n $[13] = lastOpenRequest;\n $[14] = setMetadata;\n $[15] = t5;\n } else {\n t5 = $[15];\n }\n return t5;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { useMutation } from \"@tanstack/react-query\";\nimport { Upload } from \"tus-js-client\";\nimport { SupabaseClient } from \"@supabase/supabase-js\";\nimport { isNullOrWhitespace, newUuid } from \"@pol-studios/utils\";\nimport useSupabase from \"../useSupabase\";\nimport { useAuth } from \"../auth\";\nimport { getSupabaseUrl } from \"../config\";\n\n/**\n * Metadata to store in storage.objects.metadata\n */\nexport interface StorageUploadMetadata {\n processingStatus?: \"None\" | \"Processing\" | \"Error\";\n contentType?: string;\n contentHeight?: number;\n contentWidth?: number;\n originalFileName?: string;\n}\ntype UploadInput = {\n /** The file to upload */\n file: File | Blob;\n /** Optional custom filename (defaults to original file name) */\n fileName?: string;\n /** Optional directory prefix within the bucket */\n directory?: string;\n /** Optional custom metadata to store with the file */\n metadata?: StorageUploadMetadata;\n /** Progress callback */\n onUploadProgress?: (bytesUploaded: number, bytesTotal: number) => void;\n};\ntype UploadResult = {\n /** The storage path (e.g., \"14/abc-123.jpg\") */\n path: string;\n /** The bucket ID */\n bucketId: string;\n /** Original filename */\n originalFileName: string;\n /** Content type from file */\n contentType: string;\n};\ntype UseStorageUploadOptions = {\n /** The storage bucket ID - required */\n bucketId: string;\n};\nasync function uploadFileWithMetadata(supabase: SupabaseClient, bucketName: string, filePath: string, file: File | Blob, metadata: StorageUploadMetadata, onProgress?: (bytesUploaded: number, bytesTotal: number) => void): Promise<void> {\n const {\n data: {\n session\n }\n } = await supabase.auth.getSession();\n if (!session) {\n throw new Error(\"User must be logged in to upload files\");\n }\n const contentType = \"type\" in file ? file.type : metadata.contentType ?? \"application/octet-stream\";\n return new Promise((resolve, reject) => {\n const upload = new Upload(file, {\n endpoint: `${getSupabaseUrl()}/storage/v1/upload/resumable`,\n retryDelays: [0, 3000, 5000, 10000, 20000],\n headers: {\n authorization: `Bearer ${session.access_token}`,\n \"x-upsert\": \"true\"\n },\n uploadDataDuringCreation: true,\n removeFingerprintOnSuccess: true,\n metadata: {\n bucketName: bucketName,\n objectName: filePath,\n contentType: contentType,\n cacheControl: \"3600\",\n // Custom metadata gets stored in storage.objects.metadata\n ...Object.fromEntries(Object.entries(metadata).map(([k, v]) => [k, String(v)]))\n },\n chunkSize: 6 * 1024 * 1024,\n // 6MB - required by Supabase\n onError: error => {\n console.error(\"Upload failed:\", error);\n reject(error);\n },\n onProgress: onProgress,\n onSuccess: () => {\n resolve();\n }\n });\n upload.findPreviousUploads().then(previousUploads => {\n if (previousUploads.length) {\n upload.resumeFromPreviousUpload(previousUploads[0]);\n }\n upload.start();\n });\n });\n}\n\n/**\n * Hook for uploading files to Supabase Storage with path-based references.\n *\n * Unlike useDbAttachmentUpload, this hook:\n * - Does NOT create Attachment records\n * - Returns the storage path for the caller to store\n * - Sets metadata directly on storage.objects\n *\n * @example\n * ```tsx\n * import { BUCKETS } from \"@pol-studios/db\";\n *\n * const upload = useStorageUpload({ bucketId: BUCKETS.AVATARS });\n *\n * const handleUpload = async (file: File) => {\n * const result = await upload.mutateAsync({ file });\n * // Store result.path on the entity\n * await updateProfile({ profilePath: result.path });\n * };\n * ```\n */\nexport default function useStorageUpload(options) {\n const $ = _c(3);\n const {\n bucketId\n } = options;\n const supabase = useSupabase();\n let t0;\n if ($[0] !== bucketId || $[1] !== supabase) {\n t0 = {\n mutationFn: async input => {\n const {\n file,\n fileName,\n directory,\n metadata: t1,\n onUploadProgress\n } = input;\n const metadata = t1 === undefined ? {} : t1;\n const originalFileName = fileName ?? (\"name\" in file ? file.name : \"\") ?? (\"fileName\" in file ? (file as any).fileName : \"file\");\n if (isNullOrWhitespace(originalFileName)) {\n throw new Error(\"File must have a valid name\");\n }\n const extension = originalFileName.split(\".\").pop() ?? \"\";\n const uniqueFileName = `${newUuid()}.${extension}`;\n const path = directory ? `${directory}/14/${uniqueFileName}` : `14/${uniqueFileName}`;\n const contentType = \"type\" in file ? file.type.split(\"/\").pop()?.toUpperCase() ?? \"Unknown\" : extension.toUpperCase();\n const uploadMetadata = {\n processingStatus: \"None\",\n contentType,\n originalFileName,\n ...metadata\n };\n await uploadFileWithMetadata(supabase, bucketId, path, file, uploadMetadata, onUploadProgress);\n return {\n path,\n bucketId,\n originalFileName,\n contentType\n };\n }\n };\n $[0] = bucketId;\n $[1] = supabase;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n return useMutation(t0);\n}\n\n/**\n * Convenience hook that combines upload with entity update.\n * Uploads the file and then updates the specified entity with the path.\n */\nexport function useStorageUploadWithEntity(options) {\n const $ = _c(6);\n let updateEntity;\n let uploadOptions;\n if ($[0] !== options) {\n const {\n pathField,\n updateEntity: t0,\n ...t1\n } = options;\n updateEntity = t0;\n uploadOptions = t1;\n $[0] = options;\n $[1] = updateEntity;\n $[2] = uploadOptions;\n } else {\n updateEntity = $[1];\n uploadOptions = $[2];\n }\n const uploadMutation = useStorageUpload(uploadOptions);\n let t0;\n if ($[3] !== updateEntity || $[4] !== uploadMutation) {\n t0 = {\n mutationFn: async input => {\n const {\n entity,\n ...uploadInput\n } = input;\n const result = await uploadMutation.mutateAsync(uploadInput);\n await updateEntity(entity, result.path);\n return result;\n }\n };\n $[3] = updateEntity;\n $[4] = uploadMutation;\n $[5] = t0;\n } else {\n t0 = $[5];\n }\n return useMutation(t0);\n}"],"mappings":"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","names":["_c","useMutation","useQuery","useQueryClient","_c","useQueryClient","useQuery","t6","useMutation","_c","useMutation","useQuery","useQueryClient","_c","useQueryClient","useQuery","useMutation","_c","isUsable","_c","startTask","isUsable","retryTask","cancelTask","_c","isUsable","_c","isUsable","setMetadata","_c","useMutation","_c","useMutation","t0"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pol-studios/db",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.56",
|
|
4
4
|
"description": "Database layer for React applications with Supabase and PowerSync support",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"type": "module",
|
|
@@ -201,7 +201,8 @@
|
|
|
201
201
|
"@types/fast-json-stable-stringify": "^2.1.0",
|
|
202
202
|
"babel-plugin-react-compiler": "^1.0.0",
|
|
203
203
|
"tsup": "^8.0.0",
|
|
204
|
-
"typescript": "^5.0.0"
|
|
204
|
+
"typescript": "^5.0.0",
|
|
205
|
+
"vitest": "^3.2.4"
|
|
205
206
|
},
|
|
206
207
|
"publishConfig": {
|
|
207
208
|
"access": "public"
|
|
@@ -209,6 +210,8 @@
|
|
|
209
210
|
"scripts": {
|
|
210
211
|
"build": "NODE_OPTIONS='--max-old-space-size=8192' tsup",
|
|
211
212
|
"dev": "tsup --watch",
|
|
213
|
+
"test": "vitest run",
|
|
214
|
+
"test:watch": "vitest",
|
|
212
215
|
"typecheck": "tsc --noEmit"
|
|
213
216
|
}
|
|
214
217
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/contexts/LiveChangeContext.tsx","../src/useLiveChangesIndicator.tsx","../src/contexts/UserMetadataContext.tsx"],"sourcesContent":["import { c as _c } from \"react/compiler-runtime\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { ReactNode, createContext } from \"react\";\nimport { DbChangeLog } from \"../types\";\nimport { useDbQuery } from \"../useDbQuery\";\nimport useSupabase from \"../useSupabase\";\nexport interface AlertProps {\n title: string;\n description: string;\n}\ninterface Context {\n lastModifiedUserName: string;\n changeLog: DbChangeLog;\n}\ninterface AlertState {\n isOpen: boolean;\n title: string;\n description: string;\n onConfirm: () => void;\n onCancel: () => void;\n}\nexport const LiveChangeContext = createContext({} as Context);\nexport const LiveChangeContextProvider = t0 => {\n const $ = _c(13);\n const {\n children,\n changeLog\n } = t0;\n const supabase = useSupabase();\n let t1;\n if ($[0] !== changeLog?.modifiedByUserId || $[1] !== supabase) {\n t1 = supabase.schema(\"core\").from(\"Profile\").select().eq(\"id\", changeLog?.modifiedByUserId).single();\n $[0] = changeLog?.modifiedByUserId;\n $[1] = supabase;\n $[2] = t1;\n } else {\n t1 = $[2];\n }\n const t2 = changeLog?.modifiedByUserId;\n let t3;\n if ($[3] !== t2) {\n t3 = isUsable(t2);\n $[3] = t2;\n $[4] = t3;\n } else {\n t3 = $[4];\n }\n let t4;\n if ($[5] !== t3) {\n t4 = {\n enabled: t3,\n crossOrganization: true\n };\n $[5] = t3;\n $[6] = t4;\n } else {\n t4 = $[6];\n }\n const userRequest = useDbQuery(t1, t4);\n const t5 = userRequest.data?.firstName + \" \" + userRequest.data?.lastName;\n let t6;\n if ($[7] !== changeLog || $[8] !== t5) {\n t6 = {\n changeLog,\n lastModifiedUserName: t5\n };\n $[7] = changeLog;\n $[8] = t5;\n $[9] = t6;\n } else {\n t6 = $[9];\n }\n let t7;\n if ($[10] !== children || $[11] !== t6) {\n t7 = <LiveChangeContext.Provider value={t6}>{children}</LiveChangeContext.Provider>;\n $[10] = children;\n $[11] = t6;\n $[12] = t7;\n } else {\n t7 = $[12];\n }\n return t7;\n};","import { isNullOrWhitespace } from \"@pol-studios/utils\";\nimport { useCallback, useContext, useEffect, useRef, useState } from \"react\";\nimport { delay } from \"@pol-studios/utils\";\nimport { LiveChangeContext } from \"./contexts/LiveChangeContext\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { useSetupAuth } from \"./auth\";\nexport default function useLiveChangesIndicator(value: any, field: string | undefined): [boolean, string] {\n const liveChangesContext = useContext(LiveChangeContext);\n const [showModifiedByName, setShowModifiedByName] = useState(false);\n const isMounted = useRef(false);\n const {\n user\n } = useSetupAuth();\n const checkChanges = useCallback(async () => {\n try {\n const changeLog = liveChangesContext?.changeLog;\n if (isUsable(changeLog) === false) {\n return;\n }\n const changes = changeLog.changes;\n if (isUsable(changes) === false) {\n return;\n }\n const changeOccurredInChangeLog = Object.keys(changes).some(x => {\n return field ? x === field : changes[x] === value;\n });\n if (changeOccurredInChangeLog === false) {\n return;\n }\n setShowModifiedByName(changeLog.modifiedByUserId !== user?.id);\n await delay(isNullOrWhitespace(liveChangesContext?.lastModifiedUserName) ? 2000 : 1500);\n } finally {\n setShowModifiedByName(false);\n }\n }, [liveChangesContext?.changeLog]);\n useEffect(() => {\n if (isMounted.current === false) {\n delay(200).then(x => {\n isMounted.current = true;\n });\n return;\n }\n checkChanges();\n }, [liveChangesContext?.changeLog]);\n return [showModifiedByName, liveChangesContext?.lastModifiedUserName];\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { ReactNode, createContext, useContext, useEffect, useMemo, useState, useCallback } from \"react\";\nimport { useDbQuery } from \"../useDbQuery\";\nimport { useDbUpsert } from \"../hooks\";\nimport useSupabase from \"../useSupabase\";\nimport { isUsable } from \"@pol-studios/utils\";\nimport { Database } from \"../useSupabase\";\nimport { useDbRealtimeQuery } from \"../useDbRealtimeQuery\";\nimport { UserMetadata } from \"../gen/public/UserMetadata/query\";\nimport { useSetupAuth } from \"../auth\";\n\n// Type definitions for UserMetadata\nexport type UserMetadataRow = Database[\"core\"][\"Tables\"][\"UserMetadata\"][\"Row\"];\nexport type UserMetadataInsert = Database[\"core\"][\"Tables\"][\"UserMetadata\"][\"Insert\"];\nexport type UserMetadataUpdate = Database[\"core\"][\"Tables\"][\"UserMetadata\"][\"Update\"];\n\n// Context interface\nexport interface UserMetadataContextType {\n metadata: Record<string, string>;\n isLoading: boolean;\n error: Error | null;\n setMetadata: (key: string, value: string) => Promise<void>;\n getMetadata: (key: string) => string | undefined;\n removeMetadata: (key: string) => Promise<void>;\n refreshMetadata: () => Promise<void>;\n}\n\n// Create context\nexport const userMetadataContext = createContext<UserMetadataContextType | null>(null);\n\n// Provider component\nexport function UserMetadataContextProvider(t0) {\n const $ = _c(35);\n const {\n children\n } = t0;\n const supabase = useSupabase();\n let t1;\n if ($[0] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t1 = {};\n $[0] = t1;\n } else {\n t1 = $[0];\n }\n const [metadata, setMetadataState] = useState(t1);\n const [isLoading, setIsLoading] = useState(true);\n const [error, setError] = useState(null);\n const {\n user\n } = useSetupAuth();\n const userId = user?.id;\n let t2;\n if ($[1] !== supabase || $[2] !== userId) {\n t2 = supabase.schema(\"core\").from(\"UserMetadata\").select(UserMetadata.defaultQuery).eq(\"userId\", userId).order(\"key\");\n $[1] = supabase;\n $[2] = userId;\n $[3] = t2;\n } else {\n t2 = $[3];\n }\n let t3;\n if ($[4] !== userId) {\n t3 = isUsable(userId);\n $[4] = userId;\n $[5] = t3;\n } else {\n t3 = $[5];\n }\n let t4;\n if ($[6] !== t3) {\n t4 = {\n enabled: t3,\n crossOrganization: true\n };\n $[6] = t3;\n $[7] = t4;\n } else {\n t4 = $[7];\n }\n const metadataQuery = useDbQuery(t2, t4);\n let t5;\n if ($[8] === Symbol.for(\"react.memo_cache_sentinel\")) {\n t5 = {\n invalidateTables: [\"UserMetadata\"]\n };\n $[8] = t5;\n } else {\n t5 = $[8];\n }\n const upsertMutation = useDbUpsert(\"UserMetadata\", t5);\n let t6;\n let t7;\n if ($[9] !== metadataQuery.data || $[10] !== metadataQuery.error || $[11] !== metadataQuery.isLoading) {\n t6 = () => {\n if (metadataQuery.data && Array.isArray(metadataQuery.data)) {\n const metadataMap = {};\n metadataQuery.data.forEach(item => {\n metadataMap[item.key] = item.value;\n });\n setMetadataState(metadataMap);\n setIsLoading(false);\n setError(null);\n } else {\n if (metadataQuery.error) {\n setError(metadataQuery.error);\n setIsLoading(false);\n } else {\n if (metadataQuery.isLoading) {\n setIsLoading(true);\n } else {\n if (metadataQuery.data && !Array.isArray(metadataQuery.data)) {\n setMetadataState({});\n setIsLoading(false);\n }\n }\n }\n }\n };\n t7 = [metadataQuery.data, metadataQuery.error, metadataQuery.isLoading];\n $[9] = metadataQuery.data;\n $[10] = metadataQuery.error;\n $[11] = metadataQuery.isLoading;\n $[12] = t6;\n $[13] = t7;\n } else {\n t6 = $[12];\n t7 = $[13];\n }\n useEffect(t6, t7);\n let t8;\n if ($[14] !== upsertMutation || $[15] !== userId) {\n t8 = async (key, value) => {\n if (!userId) {\n throw new Error(\"User not authenticated\");\n }\n ;\n try {\n await upsertMutation.mutateAsync({\n userId,\n key,\n value\n });\n setMetadataState(prev => ({\n ...prev,\n [key]: value\n }));\n } catch (t9) {\n const err = t9;\n setError(err as Error);\n throw err;\n }\n };\n $[14] = upsertMutation;\n $[15] = userId;\n $[16] = t8;\n } else {\n t8 = $[16];\n }\n const setMetadata = t8;\n let t9;\n if ($[17] !== metadata) {\n t9 = key_0 => metadata[key_0];\n $[17] = metadata;\n $[18] = t9;\n } else {\n t9 = $[18];\n }\n const getMetadata = t9;\n let t10;\n if ($[19] !== supabase || $[20] !== userId) {\n t10 = async key_1 => {\n if (!userId) {\n throw new Error(\"User not authenticated\");\n }\n ;\n try {\n await supabase.schema(\"core\").from(\"UserMetadata\").delete().eq(\"userId\", userId).eq(\"key\", key_1);\n setMetadataState(prev_0 => {\n const newState = {\n ...prev_0\n };\n delete newState[key_1];\n return newState;\n });\n } catch (t11) {\n const err_0 = t11;\n setError(err_0 as Error);\n throw err_0;\n }\n };\n $[19] = supabase;\n $[20] = userId;\n $[21] = t10;\n } else {\n t10 = $[21];\n }\n const removeMetadata = t10;\n let t11;\n if ($[22] !== metadataQuery) {\n t11 = async () => {\n await metadataQuery.refetch();\n };\n $[22] = metadataQuery;\n $[23] = t11;\n } else {\n t11 = $[23];\n }\n const refreshMetadata = t11;\n let t12;\n if ($[24] !== error || $[25] !== getMetadata || $[26] !== isLoading || $[27] !== metadata || $[28] !== refreshMetadata || $[29] !== removeMetadata || $[30] !== setMetadata) {\n t12 = {\n metadata,\n isLoading,\n error,\n setMetadata,\n getMetadata,\n removeMetadata,\n refreshMetadata\n };\n $[24] = error;\n $[25] = getMetadata;\n $[26] = isLoading;\n $[27] = metadata;\n $[28] = refreshMetadata;\n $[29] = removeMetadata;\n $[30] = setMetadata;\n $[31] = t12;\n } else {\n t12 = $[31];\n }\n const contextValue = t12;\n let t13;\n if ($[32] !== children || $[33] !== contextValue) {\n t13 = <userMetadataContext.Provider value={contextValue}>{children}</userMetadataContext.Provider>;\n $[32] = children;\n $[33] = contextValue;\n $[34] = t13;\n } else {\n t13 = $[34];\n }\n return t13;\n}\n\n// Hook to use the context\nexport function useUserMetadata() {\n const context = useContext(userMetadataContext);\n if (!context) {\n throw new Error(\"useUserMetadata must be used within a UserMetadataContextProvider\");\n }\n return context;\n}\n\n// Convenience hook for getting a specific metadata value\nexport function useUserMetadataValue(key) {\n const $ = _c(3);\n const {\n getMetadata\n } = useUserMetadata();\n let t0;\n if ($[0] !== getMetadata || $[1] !== key) {\n t0 = getMetadata(key);\n $[0] = getMetadata;\n $[1] = key;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n return t0;\n}\n\n// Convenience hook for setting a specific metadata value\nexport function useSetUserMetadata() {\n const $ = _c(3);\n const {\n setMetadata,\n removeMetadata\n } = useUserMetadata();\n let t0;\n if ($[0] !== removeMetadata || $[1] !== setMetadata) {\n t0 = {\n setMetadata,\n removeMetadata\n };\n $[0] = removeMetadata;\n $[1] = setMetadata;\n $[2] = t0;\n } else {\n t0 = $[2];\n }\n return t0;\n}\n\n// Advanced state-like hook with JSON serialization support\nexport function useUserMetadataState(key, defaultValue, options) {\n const $ = _c(11);\n const {\n metadata,\n setMetadata,\n isLoading\n } = useUserMetadata();\n const serialize = options?.serialize ?? _temp;\n const deserialize = options?.deserialize ?? _temp2;\n let t0;\n bb0: {\n const rawValue = metadata[key];\n if (!rawValue) {\n t0 = defaultValue;\n break bb0;\n }\n ;\n try {\n let t2;\n if ($[0] !== deserialize || $[1] !== rawValue) {\n t2 = deserialize(rawValue);\n $[0] = deserialize;\n $[1] = rawValue;\n $[2] = t2;\n } else {\n t2 = $[2];\n }\n t0 = t2;\n } catch (t1) {\n const error = t1;\n console.warn(`Failed to deserialize metadata for key \"${key}\":`, error);\n t0 = defaultValue;\n }\n }\n const currentValue = t0;\n let t1;\n if ($[3] !== key || $[4] !== serialize || $[5] !== setMetadata) {\n t1 = async value_1 => {\n const serializedValue = serialize(value_1);\n await setMetadata(key, serializedValue);\n };\n $[3] = key;\n $[4] = serialize;\n $[5] = setMetadata;\n $[6] = t1;\n } else {\n t1 = $[6];\n }\n const setValue = t1;\n let t2;\n if ($[7] !== currentValue || $[8] !== isLoading || $[9] !== setValue) {\n t2 = [currentValue, setValue, isLoading];\n $[7] = currentValue;\n $[8] = isLoading;\n $[9] = setValue;\n $[10] = t2;\n } else {\n t2 = $[10];\n }\n return t2;\n}\nfunction _temp2(value_0) {\n return JSON.parse(value_0);\n}\nfunction _temp(value) {\n return JSON.stringify(value);\n}"],"mappings":";;;;;;;;;;;;;;;;;AAAA,SAAS,KAAK,UAAU;AACxB,SAAS,gBAAgB;AACzB,SAAoB,qBAAqB;AAwEhC;AArDF,IAAM,oBAAoB,cAAc,CAAC,CAAY;AACrD,IAAM,4BAA4B,QAAM;AAC7C,QAAM,IAAI,GAAG,EAAE;AACf,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI;AACJ,QAAM,WAAW,YAAY;AAC7B,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,WAAW,oBAAoB,EAAE,CAAC,MAAM,UAAU;AAC7D,SAAK,SAAS,OAAO,MAAM,EAAE,KAAK,SAAS,EAAE,OAAO,EAAE,GAAG,MAAM,WAAW,gBAAgB,EAAE,OAAO;AACnG,MAAE,CAAC,IAAI,WAAW;AAClB,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,KAAK,WAAW;AACtB,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,IAAI;AACf,SAAK,SAAS,EAAE;AAChB,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,IAAI;AACf,SAAK;AAAA,MACH,SAAS;AAAA,MACT,mBAAmB;AAAA,IACrB;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,cAAc,WAAW,IAAI,EAAE;AACrC,QAAM,KAAK,YAAY,MAAM,YAAY,MAAM,YAAY,MAAM;AACjE,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,aAAa,EAAE,CAAC,MAAM,IAAI;AACrC,SAAK;AAAA,MACH;AAAA,MACA,sBAAsB;AAAA,IACxB;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,YAAY,EAAE,EAAE,MAAM,IAAI;AACtC,SAAK,oBAAC,kBAAkB,UAAlB,EAA2B,OAAO,IAAK,UAAS;AACtD,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,SAAO;AACT;;;AClFA,SAAS,0BAA0B;AACnC,SAAS,aAAa,YAAY,WAAW,QAAQ,gBAAgB;AACrE,SAAS,aAAa;AAEtB,SAAS,YAAAA,iBAAgB;AAEV,SAAR,wBAAyC,OAAY,OAA8C;AACxG,QAAM,qBAAqB,WAAW,iBAAiB;AACvD,QAAM,CAAC,oBAAoB,qBAAqB,IAAI,SAAS,KAAK;AAClE,QAAM,YAAY,OAAO,KAAK;AAC9B,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,aAAa;AACjB,QAAM,eAAe,YAAY,YAAY;AAC3C,QAAI;AACF,YAAM,YAAY,oBAAoB;AACtC,UAAIC,UAAS,SAAS,MAAM,OAAO;AACjC;AAAA,MACF;AACA,YAAM,UAAU,UAAU;AAC1B,UAAIA,UAAS,OAAO,MAAM,OAAO;AAC/B;AAAA,MACF;AACA,YAAM,4BAA4B,OAAO,KAAK,OAAO,EAAE,KAAK,OAAK;AAC/D,eAAO,QAAQ,MAAM,QAAQ,QAAQ,CAAC,MAAM;AAAA,MAC9C,CAAC;AACD,UAAI,8BAA8B,OAAO;AACvC;AAAA,MACF;AACA,4BAAsB,UAAU,qBAAqB,MAAM,EAAE;AAC7D,YAAM,MAAM,mBAAmB,oBAAoB,oBAAoB,IAAI,MAAO,IAAI;AAAA,IACxF,UAAE;AACA,4BAAsB,KAAK;AAAA,IAC7B;AAAA,EACF,GAAG,CAAC,oBAAoB,SAAS,CAAC;AAClC,YAAU,MAAM;AACd,QAAI,UAAU,YAAY,OAAO;AAC/B,YAAM,GAAG,EAAE,KAAK,OAAK;AACnB,kBAAU,UAAU;AAAA,MACtB,CAAC;AACD;AAAA,IACF;AACA,iBAAa;AAAA,EACf,GAAG,CAAC,oBAAoB,SAAS,CAAC;AAClC,SAAO,CAAC,oBAAoB,oBAAoB,oBAAoB;AACtE;;;AC7CA,SAAS,KAAKC,WAAU;AACxB,SAAoB,iBAAAC,gBAAe,cAAAC,aAAY,aAAAC,YAAoB,YAAAC,iBAA6B;AAIhG,SAAS,YAAAC,iBAAgB;AAoOf,gBAAAC,YAAA;AA7MH,IAAM,sBAAsBC,eAA8C,IAAI;AAG9E,SAAS,4BAA4B,IAAI;AAC9C,QAAM,IAAIC,IAAG,EAAE;AACf,QAAM;AAAA,IACJ;AAAA,EACF,IAAI;AACJ,QAAM,WAAW,YAAY;AAC7B,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,uBAAO,IAAI,2BAA2B,GAAG;AACpD,SAAK,CAAC;AACN,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,CAAC,UAAU,gBAAgB,IAAIC,UAAS,EAAE;AAChD,QAAM,CAAC,WAAW,YAAY,IAAIA,UAAS,IAAI;AAC/C,QAAM,CAAC,OAAO,QAAQ,IAAIA,UAAS,IAAI;AACvC,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,aAAa;AACjB,QAAM,SAAS,MAAM;AACrB,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,YAAY,EAAE,CAAC,MAAM,QAAQ;AACxC,SAAK,SAAS,OAAO,MAAM,EAAE,KAAK,cAAc,EAAE,OAAO,aAAa,YAAY,EAAE,GAAG,UAAU,MAAM,EAAE,MAAM,KAAK;AACpH,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,QAAQ;AACnB,SAAKC,UAAS,MAAM;AACpB,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,IAAI;AACf,SAAK;AAAA,MACH,SAAS;AAAA,MACT,mBAAmB;AAAA,IACrB;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,gBAAgB,WAAW,IAAI,EAAE;AACvC,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,uBAAO,IAAI,2BAA2B,GAAG;AACpD,SAAK;AAAA,MACH,kBAAkB,CAAC,cAAc;AAAA,IACnC;AACA,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,iBAAiB,YAAY,gBAAgB,EAAE;AACrD,MAAI;AACJ,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,cAAc,QAAQ,EAAE,EAAE,MAAM,cAAc,SAAS,EAAE,EAAE,MAAM,cAAc,WAAW;AACrG,SAAK,MAAM;AACT,UAAI,cAAc,QAAQ,MAAM,QAAQ,cAAc,IAAI,GAAG;AAC3D,cAAM,cAAc,CAAC;AACrB,sBAAc,KAAK,QAAQ,UAAQ;AACjC,sBAAY,KAAK,GAAG,IAAI,KAAK;AAAA,QAC/B,CAAC;AACD,yBAAiB,WAAW;AAC5B,qBAAa,KAAK;AAClB,iBAAS,IAAI;AAAA,MACf,OAAO;AACL,YAAI,cAAc,OAAO;AACvB,mBAAS,cAAc,KAAK;AAC5B,uBAAa,KAAK;AAAA,QACpB,OAAO;AACL,cAAI,cAAc,WAAW;AAC3B,yBAAa,IAAI;AAAA,UACnB,OAAO;AACL,gBAAI,cAAc,QAAQ,CAAC,MAAM,QAAQ,cAAc,IAAI,GAAG;AAC5D,+BAAiB,CAAC,CAAC;AACnB,2BAAa,KAAK;AAAA,YACpB;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,SAAK,CAAC,cAAc,MAAM,cAAc,OAAO,cAAc,SAAS;AACtE,MAAE,CAAC,IAAI,cAAc;AACrB,MAAE,EAAE,IAAI,cAAc;AACtB,MAAE,EAAE,IAAI,cAAc;AACtB,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AACT,SAAK,EAAE,EAAE;AAAA,EACX;AACA,EAAAC,WAAU,IAAI,EAAE;AAChB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,kBAAkB,EAAE,EAAE,MAAM,QAAQ;AAChD,SAAK,OAAO,KAAK,UAAU;AACzB,UAAI,CAAC,QAAQ;AACX,cAAM,IAAI,MAAM,wBAAwB;AAAA,MAC1C;AACA;AACA,UAAI;AACF,cAAM,eAAe,YAAY;AAAA,UAC/B;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AACD,yBAAiB,WAAS;AAAA,UACxB,GAAG;AAAA,UACH,CAAC,GAAG,GAAG;AAAA,QACT,EAAE;AAAA,MACJ,SAASC,KAAI;AACX,cAAM,MAAMA;AACZ,iBAAS,GAAY;AACrB,cAAM;AAAA,MACR;AAAA,IACF;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,cAAc;AACpB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,UAAU;AACtB,SAAK,WAAS,SAAS,KAAK;AAC5B,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,QAAM,cAAc;AACpB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,YAAY,EAAE,EAAE,MAAM,QAAQ;AAC1C,UAAM,OAAM,UAAS;AACnB,UAAI,CAAC,QAAQ;AACX,cAAM,IAAI,MAAM,wBAAwB;AAAA,MAC1C;AACA;AACA,UAAI;AACF,cAAM,SAAS,OAAO,MAAM,EAAE,KAAK,cAAc,EAAE,OAAO,EAAE,GAAG,UAAU,MAAM,EAAE,GAAG,OAAO,KAAK;AAChG,yBAAiB,YAAU;AACzB,gBAAM,WAAW;AAAA,YACf,GAAG;AAAA,UACL;AACA,iBAAO,SAAS,KAAK;AACrB,iBAAO;AAAA,QACT,CAAC;AAAA,MACH,SAASC,MAAK;AACZ,cAAM,QAAQA;AACd,iBAAS,KAAc;AACvB,cAAM;AAAA,MACR;AAAA,IACF;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,iBAAiB;AACvB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,eAAe;AAC3B,UAAM,YAAY;AAChB,YAAM,cAAc,QAAQ;AAAA,IAC9B;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,kBAAkB;AACxB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,SAAS,EAAE,EAAE,MAAM,eAAe,EAAE,EAAE,MAAM,aAAa,EAAE,EAAE,MAAM,YAAY,EAAE,EAAE,MAAM,mBAAmB,EAAE,EAAE,MAAM,kBAAkB,EAAE,EAAE,MAAM,aAAa;AAC3K,UAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,QAAM,eAAe;AACrB,MAAI;AACJ,MAAI,EAAE,EAAE,MAAM,YAAY,EAAE,EAAE,MAAM,cAAc;AAChD,UAAM,gBAAAP,KAAC,oBAAoB,UAApB,EAA6B,OAAO,cAAe,UAAS;AACnE,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AACR,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,UAAM,EAAE,EAAE;AAAA,EACZ;AACA,SAAO;AACT;AAGO,SAAS,kBAAkB;AAChC,QAAM,UAAUQ,YAAW,mBAAmB;AAC9C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACrF;AACA,SAAO;AACT;AAGO,SAAS,qBAAqB,KAAK;AACxC,QAAM,IAAIN,IAAG,CAAC;AACd,QAAM;AAAA,IACJ;AAAA,EACF,IAAI,gBAAgB;AACpB,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,eAAe,EAAE,CAAC,MAAM,KAAK;AACxC,SAAK,YAAY,GAAG;AACpB,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,SAAO;AACT;AAGO,SAAS,qBAAqB;AACnC,QAAM,IAAIA,IAAG,CAAC;AACd,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI,gBAAgB;AACpB,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,kBAAkB,EAAE,CAAC,MAAM,aAAa;AACnD,SAAK;AAAA,MACH;AAAA,MACA;AAAA,IACF;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,SAAO;AACT;AAGO,SAAS,qBAAqB,KAAK,cAAc,SAAS;AAC/D,QAAM,IAAIA,IAAG,EAAE;AACf,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,gBAAgB;AACpB,QAAM,YAAY,SAAS,aAAa;AACxC,QAAM,cAAc,SAAS,eAAe;AAC5C,MAAI;AACJ,OAAK;AACH,UAAM,WAAW,SAAS,GAAG;AAC7B,QAAI,CAAC,UAAU;AACb,WAAK;AACL,YAAM;AAAA,IACR;AACA;AACA,QAAI;AACF,UAAIO;AACJ,UAAI,EAAE,CAAC,MAAM,eAAe,EAAE,CAAC,MAAM,UAAU;AAC7C,QAAAA,MAAK,YAAY,QAAQ;AACzB,UAAE,CAAC,IAAI;AACP,UAAE,CAAC,IAAI;AACP,UAAE,CAAC,IAAIA;AAAA,MACT,OAAO;AACL,QAAAA,MAAK,EAAE,CAAC;AAAA,MACV;AACA,WAAKA;AAAA,IACP,SAASC,KAAI;AACX,YAAM,QAAQA;AACd,cAAQ,KAAK,2CAA2C,GAAG,MAAM,KAAK;AACtE,WAAK;AAAA,IACP;AAAA,EACF;AACA,QAAM,eAAe;AACrB,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,OAAO,EAAE,CAAC,MAAM,aAAa,EAAE,CAAC,MAAM,aAAa;AAC9D,SAAK,OAAM,YAAW;AACpB,YAAM,kBAAkB,UAAU,OAAO;AACzC,YAAM,YAAY,KAAK,eAAe;AAAA,IACxC;AACA,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AAAA,EACT,OAAO;AACL,SAAK,EAAE,CAAC;AAAA,EACV;AACA,QAAM,WAAW;AACjB,MAAI;AACJ,MAAI,EAAE,CAAC,MAAM,gBAAgB,EAAE,CAAC,MAAM,aAAa,EAAE,CAAC,MAAM,UAAU;AACpE,SAAK,CAAC,cAAc,UAAU,SAAS;AACvC,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,CAAC,IAAI;AACP,MAAE,EAAE,IAAI;AAAA,EACV,OAAO;AACL,SAAK,EAAE,EAAE;AAAA,EACX;AACA,SAAO;AACT;AACA,SAAS,OAAO,SAAS;AACvB,SAAO,KAAK,MAAM,OAAO;AAC3B;AACA,SAAS,MAAM,OAAO;AACpB,SAAO,KAAK,UAAU,KAAK;AAC7B;","names":["isUsable","isUsable","_c","createContext","useContext","useEffect","useState","isUsable","jsx","createContext","_c","useState","isUsable","useEffect","t9","t11","useContext","t2","t1"]}
|