{"version":3,"file":"index-DmIxeUHk.mjs","sources":["../../node_modules/react/cjs/react.production.min.js","../../node_modules/react/index.js","../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../node_modules/react/jsx-runtime.js","../../node_modules/scheduler/cjs/scheduler.production.min.js","../../node_modules/scheduler/index.js","../../node_modules/react-dom/cjs/react-dom.production.min.js","../../node_modules/react-dom/index.js","../../node_modules/react-dom/client.js","../../src/hooks/use-toast.ts","../../node_modules/@radix-ui/primitive/dist/index.mjs","../../node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../node_modules/@radix-ui/react-context/dist/index.mjs","../../node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/@radix-ui/react-collection/dist/index.mjs","../../node_modules/@radix-ui/react-primitive/dist/index.mjs","../../node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../../node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../../node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../../node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-portal/dist/index.mjs","../../node_modules/@radix-ui/react-presence/dist/index.mjs","../../node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../../node_modules/@radix-ui/react-visually-hidden/dist/index.mjs","../../node_modules/@radix-ui/react-toast/dist/index.mjs","../../node_modules/clsx/dist/clsx.mjs","../../node_modules/class-variance-authority/dist/index.mjs","../../node_modules/lucide-react/dist/esm/shared/src/utils.js","../../node_modules/lucide-react/dist/esm/defaultAttributes.js","../../node_modules/lucide-react/dist/esm/Icon.js","../../node_modules/lucide-react/dist/esm/createLucideIcon.js","../../node_modules/lucide-react/dist/esm/icons/arrow-left.js","../../node_modules/lucide-react/dist/esm/icons/book-open.js","../../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../../node_modules/lucide-react/dist/esm/icons/circle-check-big.js","../../node_modules/lucide-react/dist/esm/icons/circle-help.js","../../node_modules/lucide-react/dist/esm/icons/circle-x.js","../../node_modules/lucide-react/dist/esm/icons/clipboard.js","../../node_modules/lucide-react/dist/esm/icons/clock.js","../../node_modules/lucide-react/dist/esm/icons/external-link.js","../../node_modules/lucide-react/dist/esm/icons/flame.js","../../node_modules/lucide-react/dist/esm/icons/heart.js","../../node_modules/lucide-react/dist/esm/icons/house.js","../../node_modules/lucide-react/dist/esm/icons/loader-circle.js","../../node_modules/lucide-react/dist/esm/icons/map-pin.js","../../node_modules/lucide-react/dist/esm/icons/menu.js","../../node_modules/lucide-react/dist/esm/icons/mic.js","../../node_modules/lucide-react/dist/esm/icons/phone-off.js","../../node_modules/lucide-react/dist/esm/icons/phone.js","../../node_modules/lucide-react/dist/esm/icons/shield.js","../../node_modules/lucide-react/dist/esm/icons/triangle-alert.js","../../node_modules/lucide-react/dist/esm/icons/user.js","../../node_modules/lucide-react/dist/esm/icons/users.js","../../node_modules/lucide-react/dist/esm/icons/x.js","../../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../../src/lib/utils.ts","../../src/components/ui/toast.tsx","../../src/components/ui/toaster.tsx","../../node_modules/next-themes/dist/index.mjs","../../node_modules/sonner/dist/index.mjs","../../src/components/ui/sonner.tsx","../../node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-context/dist/index.mjs","../../node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../../node_modules/@radix-ui/react-id/dist/index.mjs","../../node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.mjs","../../node_modules/@radix-ui/react-arrow/dist/index.mjs","../../node_modules/@radix-ui/react-use-size/dist/index.mjs","../../node_modules/@radix-ui/react-popper/dist/index.mjs","../../node_modules/@radix-ui/react-portal/dist/index.mjs","../../node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-presence/dist/index.mjs","../../node_modules/@radix-ui/react-tooltip/dist/index.mjs","../../src/components/ui/tooltip.tsx","../../node_modules/@tanstack/query-core/build/modern/subscribable.js","../../node_modules/@tanstack/query-core/build/modern/utils.js","../../node_modules/@tanstack/query-core/build/modern/focusManager.js","../../node_modules/@tanstack/query-core/build/modern/onlineManager.js","../../node_modules/@tanstack/query-core/build/modern/retryer.js","../../node_modules/@tanstack/query-core/build/modern/notifyManager.js","../../node_modules/@tanstack/query-core/build/modern/removable.js","../../node_modules/@tanstack/query-core/build/modern/query.js","../../node_modules/@tanstack/query-core/build/modern/queryCache.js","../../node_modules/@tanstack/query-core/build/modern/mutation.js","../../node_modules/@tanstack/query-core/build/modern/mutationCache.js","../../node_modules/@tanstack/query-core/build/modern/infiniteQueryBehavior.js","../../node_modules/@tanstack/query-core/build/modern/queryClient.js","../../node_modules/@tanstack/react-query/build/modern/QueryClientProvider.js","../../node_modules/@remix-run/router/dist/router.js","../../node_modules/react-router/dist/index.js","../../node_modules/react-router-dom/dist/index.js","../../node_modules/react-fast-compare/index.js","../../node_modules/invariant/browser.js","../../node_modules/shallowequal/index.js","../../node_modules/react-helmet-async/lib/index.esm.js","../../node_modules/@vercel/analytics/dist/react/index.mjs","../../node_modules/@elevenlabs/client/dist/utils/assert.js","../../node_modules/@elevenlabs/client/dist/utils/errors.js","../../node_modules/@elevenlabs/client/dist/utils/uploadFile.js","../../node_modules/@elevenlabs/client/dist/types.js","../../node_modules/@elevenlabs/client/dist/BaseConversation.js","../../node_modules/@elevenlabs/client/dist/utils/mergeOptions.js","../../node_modules/@elevenlabs/client/dist/utils/location.js","../../node_modules/@elevenlabs/client/dist/version.js","../../node_modules/@elevenlabs/client/dist/sourceInfo.js","../../node_modules/@elevenlabs/client/dist/utils/BaseConnection.js","../../node_modules/@elevenlabs/client/dist/utils/events.js","../../node_modules/livekit-client/dist/livekit-client.esm.mjs","../../node_modules/@elevenlabs/client/dist/utils/overrides.js","../../node_modules/@elevenlabs/client/dist/utils/audio.js","../../node_modules/@elevenlabs/client/dist/utils/volumeProvider.js","../../node_modules/@elevenlabs/client/dist/WebRTCAudioAdapter.js","../../node_modules/@elevenlabs/client/dist/utils/WebRTCConnection.js","../../node_modules/@elevenlabs/client/dist/platform/VoiceSessionSetup.js","../../node_modules/@elevenlabs/client/dist/utils/WebSocketConnection.js","../../node_modules/@elevenlabs/client/dist/utils/ConnectionFactory.js","../../node_modules/@elevenlabs/react/dist/version.js","../../node_modules/@elevenlabs/client/dist/platform/web/createWorkletModuleLoader.js","../../node_modules/@elevenlabs/client/dist/platform/web/audioConcatProcessor.generated.js","../../node_modules/@elevenlabs/client/dist/platform/web/addLibsamplerateModule.js","../../node_modules/@elevenlabs/client/dist/utils/calculateVolume.js","../../node_modules/@elevenlabs/client/dist/platform/web/volumeProvider.js","../../node_modules/@elevenlabs/client/dist/platform/web/compatibility.js","../../node_modules/@elevenlabs/client/dist/platform/web/output.js","../../node_modules/@elevenlabs/client/dist/platform/web/rawAudioProcessor.generated.js","../../node_modules/@elevenlabs/client/dist/InputController.js","../../node_modules/@elevenlabs/client/dist/platform/web/input.js","../../node_modules/@elevenlabs/client/dist/utils/attachInputToConnection.js","../../node_modules/@elevenlabs/client/dist/utils/attachConnectionToOutput.js","../../node_modules/@elevenlabs/client/dist/utils/applyDelay.js","../../node_modules/@elevenlabs/client/dist/platform/web/audioUnlock.js","../../node_modules/@elevenlabs/client/dist/platform/web/VoiceSessionSetup.js","../../node_modules/@elevenlabs/client/dist/platform/web/webAudioAdapter.js","../../node_modules/@elevenlabs/client/dist/runtime.js","../../node_modules/@elevenlabs/client/dist/TextConversation.js","../../node_modules/@elevenlabs/client/dist/VoiceConversation.js","../../node_modules/@elevenlabs/client/dist/scribe/connection.js","../../node_modules/@elevenlabs/client/dist/scribe/scribe.js","../../node_modules/@elevenlabs/client/dist/index.js","../../node_modules/@elevenlabs/client/dist/platform/web/index.js","../../node_modules/@elevenlabs/react/dist/conversation/ConversationContext.js","../../node_modules/@elevenlabs/react/dist/conversation/ConversationControls.js","../../node_modules/@elevenlabs/react/dist/conversation/ConversationStatus.js","../../node_modules/@elevenlabs/react/dist/conversation/ConversationInput.js","../../node_modules/@elevenlabs/react/dist/conversation/ConversationMode.js","../../node_modules/@elevenlabs/react/dist/conversation/ConversationFeedback.js","../../node_modules/@elevenlabs/react/dist/conversation/ConversationClientTools.js","../../node_modules/@elevenlabs/react/dist/conversation/ListenerSet.js","../../node_modules/@elevenlabs/react/dist/conversation/ListenerMap.js","../../node_modules/@elevenlabs/react/dist/conversation/useStableCallbacks.js","../../node_modules/@elevenlabs/react/dist/conversation/ConversationProvider.js","../../node_modules/@elevenlabs/react/dist/conversation/useConversation.js","../../node_modules/@elevenlabs/react/dist/index.js","../../src/types/simulator.ts","../../src/services/tokenPrefetch.ts","../../src/hooks/usePhoneSimulator.ts","../../src/components/ui/button.tsx","../../src/components/simulator/DialPad.tsx","../../src/components/simulator/DisplayScreen.tsx","../../src/components/simulator/CallButton.tsx","../../src/components/simulator/DisclaimerHeader.tsx","../../src/components/simulator/CallStatusIndicator.tsx","../../src/components/simulator/CallDuration.tsx","../../src/components/EmergencyDialer.tsx","../../src/hooks/useRingingSound.ts","../../src/utils/duration.ts","../../src/utils/googleAds.ts","../../src/hooks/useEmergencyCall.ts","../../src/components/EmergencyCall.tsx","../../src/components/HomepageContent.tsx","../../node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-context/dist/index.mjs","../../node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../../node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-presence/dist/index.mjs","../../node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../../node_modules/react-remove-scroll/node_modules/tslib/tslib.es6.mjs","../../node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../node_modules/use-callback-ref/dist/es2015/assignRef.js","../../node_modules/use-callback-ref/dist/es2015/useRef.js","../../node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../node_modules/use-sidecar/node_modules/tslib/tslib.es6.mjs","../../node_modules/use-sidecar/dist/es2015/medium.js","../../node_modules/use-sidecar/dist/es2015/exports.js","../../node_modules/react-remove-scroll/dist/es2015/medium.js","../../node_modules/react-remove-scroll/dist/es2015/UI.js","../../node_modules/get-nonce/dist/es2015/index.js","../../node_modules/react-style-singleton/dist/es2015/singleton.js","../../node_modules/react-style-singleton/dist/es2015/hook.js","../../node_modules/react-style-singleton/dist/es2015/component.js","../../node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../node_modules/react-remove-scroll/dist/es2015/Combination.js","../../node_modules/aria-hidden/dist/es2015/index.js","../../node_modules/@radix-ui/react-dialog/dist/index.mjs","../../src/components/ui/sheet.tsx","../../src/components/Navigation.tsx","../../src/components/KofiWidget.tsx","../../src/components/Footer.tsx","../../src/utils/consent.ts","../../src/components/CookieBanner.tsx","../../src/components/MainLayout.tsx","../../src/utils/domain.ts","../../src/pages/Index.tsx","../../src/components/ui/textarea.tsx","../../node_modules/react-hook-form/dist/index.esm.mjs","../../node_modules/@radix-ui/react-label/dist/index.mjs","../../src/components/ui/label.tsx","../../src/components/ui/form.tsx","../../node_modules/@hookform/resolvers/dist/resolvers.mjs","../../node_modules/@hookform/resolvers/zod/dist/zod.mjs","../../node_modules/zod/lib/index.mjs","../../node_modules/@supabase/supabase-js/dist/tracingRegistry.mjs","../../node_modules/tslib/tslib.es6.mjs","../../node_modules/@supabase/functions-js/dist/module/helper.js","../../node_modules/@supabase/functions-js/dist/module/types.js","../../node_modules/@supabase/functions-js/dist/module/FunctionsClient.js","../../node_modules/@supabase/postgrest-js/dist/index.mjs","../../node_modules/@supabase/realtime-js/dist/module/lib/websocket-factory.js","../../node_modules/@supabase/realtime-js/dist/module/lib/version.js","../../node_modules/@supabase/realtime-js/dist/module/lib/constants.js","../../node_modules/@supabase/realtime-js/dist/module/lib/serializer.js","../../node_modules/@supabase/realtime-js/dist/module/lib/transformers.js","../../node_modules/@supabase/phoenix/priv/static/phoenix.mjs","../../node_modules/@supabase/realtime-js/dist/module/phoenix/presenceAdapter.js","../../node_modules/@supabase/realtime-js/dist/module/RealtimePresence.js","../../node_modules/@supabase/realtime-js/dist/module/lib/normalizeChannelError.js","../../node_modules/@supabase/realtime-js/dist/module/phoenix/channelAdapter.js","../../node_modules/@supabase/realtime-js/dist/module/RealtimePostgresFilterBuilder.js","../../node_modules/@supabase/realtime-js/dist/module/RealtimeChannel.js","../../node_modules/@supabase/realtime-js/dist/module/phoenix/socketAdapter.js","../../node_modules/@supabase/realtime-js/dist/module/RealtimeClient.js","../../node_modules/iceberg-js/dist/index.mjs","../../node_modules/@supabase/storage-js/dist/index.mjs","../../node_modules/@supabase/auth-js/dist/module/lib/version.js","../../node_modules/@supabase/auth-js/dist/module/lib/constants.js","../../node_modules/@supabase/auth-js/dist/module/lib/errors.js","../../node_modules/@supabase/auth-js/dist/module/lib/base64url.js","../../node_modules/@supabase/auth-js/dist/module/lib/helpers.js","../../node_modules/@supabase/auth-js/dist/module/lib/fetch.js","../../node_modules/@supabase/auth-js/dist/module/lib/types.js","../../node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js","../../node_modules/@supabase/auth-js/dist/module/lib/local-storage.js","../../node_modules/@supabase/auth-js/dist/module/lib/locks.js","../../node_modules/@supabase/auth-js/dist/module/lib/polyfills.js","../../node_modules/@supabase/auth-js/dist/module/lib/web3/ethereum.js","../../node_modules/@supabase/auth-js/dist/module/lib/webauthn.errors.js","../../node_modules/@supabase/auth-js/dist/module/lib/webauthn.js","../../node_modules/@supabase/auth-js/dist/module/GoTrueClient.js","../../node_modules/@supabase/auth-js/dist/module/AuthClient.js","../../node_modules/@supabase/supabase-js/dist/index.mjs","../../src/integrations/supabase/client.ts","../../src/pages/Feedback.tsx","../../src/pages/Guide.tsx","../../src/pages/Scripts.tsx","../../src/pages/Protocol.tsx","../../node_modules/@radix-ui/react-collapsible/dist/index.mjs","../../node_modules/@radix-ui/react-direction/dist/index.mjs","../../node_modules/@radix-ui/react-accordion/dist/index.mjs","../../src/components/ui/accordion.tsx","../../src/pages/FAQ.tsx","../../src/pages/Resources.tsx","../../src/assets/simon-photo.jpeg","../../src/pages/About.tsx","../../src/pages/Privacy.tsx","../../src/components/SeoCanonical.tsx","../../src/App.tsx","../../src/main.tsx"],"sourcesContent":["/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];c.children=f}if(a&&a.defaultProps)for(d in g=a.defaultProps,g)void 0===c[d]&&(c[d]=g[d]);return{$$typeof:l,type:a,key:k,ref:h,props:c,_owner:K.current}}\nfunction N(a,b){return{$$typeof:l,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function O(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===l}function escape(a){var b={\"=\":\"=0\",\":\":\"=2\"};return\"$\"+a.replace(/[=:]/g,function(a){return b[a]})}var P=/\\/+/g;function Q(a,b){return\"object\"===typeof a&&null!==a&&null!=a.key?escape(\"\"+a.key):b.toString(36)}\nfunction R(a,b,e,d,c){var k=typeof a;if(\"undefined\"===k||\"boolean\"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case \"string\":case \"number\":h=!0;break;case \"object\":switch(a.$$typeof){case l:case n:h=!0}}if(h)return h=a,c=c(h),a=\"\"===d?\".\"+Q(h,0):d,I(c)?(e=\"\",null!=a&&(e=a.replace(P,\"$&/\")+\"/\"),R(c,b,e,\"\",function(a){return a})):null!=c&&(O(c)&&(c=N(c,e+(!c.key||h&&h.key===c.key?\"\":(\"\"+c.key).replace(P,\"$&/\")+\"/\")+a)),b.push(c)),1;h=0;d=\"\"===d?\".\":d+\":\";if(I(a))for(var g=0;g<a.length;g++){k=\na[g];var f=d+Q(k,g);h+=R(k,b,e,f,c)}else if(f=A(a),\"function\"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=d+Q(k,g++),h+=R(k,b,e,f,c);else if(\"object\"===k)throw b=String(a),Error(\"Objects are not valid as a React child (found: \"+(\"[object Object]\"===b?\"object with keys {\"+Object.keys(a).join(\", \")+\"}\":b)+\"). If you meant to render a collection of children, use an array instead.\");return h}\nfunction S(a,b,e){if(null==a)return a;var d=[],c=0;R(a,d,\"\",\"\",function(a){return b.call(e,a,c++)});return d}function T(a){if(-1===a._status){var b=a._result;b=b();b.then(function(b){if(0===a._status||-1===a._status)a._status=1,a._result=b},function(b){if(0===a._status||-1===a._status)a._status=2,a._result=b});-1===a._status&&(a._status=0,a._result=b)}if(1===a._status)return a._result.default;throw a._result;}\nvar U={current:null},V={transition:null},W={ReactCurrentDispatcher:U,ReactCurrentBatchConfig:V,ReactCurrentOwner:K};function X(){throw Error(\"act(...) is not supported in production builds of React.\");}\nexports.Children={map:S,forEach:function(a,b,e){S(a,function(){b.apply(this,arguments)},e)},count:function(a){var b=0;S(a,function(){b++});return b},toArray:function(a){return S(a,function(a){return a})||[]},only:function(a){if(!O(a))throw Error(\"React.Children.only expected to receive a single React element child.\");return a}};exports.Component=E;exports.Fragment=p;exports.Profiler=r;exports.PureComponent=G;exports.StrictMode=q;exports.Suspense=w;\nexports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=W;exports.act=X;\nexports.cloneElement=function(a,b,e){if(null===a||void 0===a)throw Error(\"React.cloneElement(...): The argument must be a React element, but you passed \"+a+\".\");var d=C({},a.props),c=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=K.current);void 0!==b.key&&(c=\"\"+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)J.call(b,f)&&!L.hasOwnProperty(f)&&(d[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)d.children=e;else if(1<f){g=Array(f);\nfor(var m=0;m<f;m++)g[m]=arguments[m+2];d.children=g}return{$$typeof:l,type:a.type,key:c,ref:k,props:d,_owner:h}};exports.createContext=function(a){a={$$typeof:u,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null};a.Provider={$$typeof:t,_context:a};return a.Consumer=a};exports.createElement=M;exports.createFactory=function(a){var b=M.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};\nexports.forwardRef=function(a){return{$$typeof:v,render:a}};exports.isValidElement=O;exports.lazy=function(a){return{$$typeof:y,_payload:{_status:-1,_result:a},_init:T}};exports.memo=function(a,b){return{$$typeof:x,type:a,compare:void 0===b?null:b}};exports.startTransition=function(a){var b=V.transition;V.transition={};try{a()}finally{V.transition=b}};exports.unstable_act=X;exports.useCallback=function(a,b){return U.current.useCallback(a,b)};exports.useContext=function(a){return U.current.useContext(a)};\nexports.useDebugValue=function(){};exports.useDeferredValue=function(a){return U.current.useDeferredValue(a)};exports.useEffect=function(a,b){return U.current.useEffect(a,b)};exports.useId=function(){return U.current.useId()};exports.useImperativeHandle=function(a,b,e){return U.current.useImperativeHandle(a,b,e)};exports.useInsertionEffect=function(a,b){return U.current.useInsertionEffect(a,b)};exports.useLayoutEffect=function(a,b){return U.current.useLayoutEffect(a,b)};\nexports.useMemo=function(a,b){return U.current.useMemo(a,b)};exports.useReducer=function(a,b,e){return U.current.useReducer(a,b,e)};exports.useRef=function(a){return U.current.useRef(a)};exports.useState=function(a){return U.current.useState(a)};exports.useSyncExternalStore=function(a,b,e){return U.current.useSyncExternalStore(a,b,e)};exports.useTransition=function(){return U.current.useTransition()};exports.version=\"18.3.1\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.min.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * scheduler.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';function f(a,b){var c=a.length;a.push(b);a:for(;0<c;){var d=c-1>>>1,e=a[d];if(0<g(e,b))a[d]=b,a[c]=e,c=d;else break a}}function h(a){return 0===a.length?null:a[0]}function k(a){if(0===a.length)return null;var b=a[0],c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length,w=e>>>1;d<w;){var m=2*(d+1)-1,C=a[m],n=m+1,x=a[n];if(0>g(C,c))n<e&&0>g(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(n<e&&0>g(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Q<P?!1:!0}function R(){if(null!==O){var a=exports.unstable_now();Q=a;var b=!0;try{b=O(!0,a)}finally{b?S():(N=!1,O=null)}}else N=!1}var S;if(\"function\"===typeof F)S=function(){F(R)};else if(\"undefined\"!==typeof MessageChannel){var T=new MessageChannel,U=T.port2;T.port1.onmessage=R;S=function(){U.postMessage(null)}}else S=function(){D(R,0)};function I(a){O=a;N||(N=!0,S())}function K(a,b){L=D(function(){a(exports.unstable_now())},b)}\nexports.unstable_IdlePriority=5;exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){A||z||(A=!0,I(J))};\nexports.unstable_forceFrameRate=function(a){0>a||125<a?console.error(\"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"):P=0<a?Math.floor(1E3/a):5};exports.unstable_getCurrentPriorityLevel=function(){return y};exports.unstable_getFirstCallbackNode=function(){return h(r)};exports.unstable_next=function(a){switch(y){case 1:case 2:case 3:var b=3;break;default:b=y}var c=y;y=b;try{return a()}finally{y=c}};exports.unstable_pauseExecution=function(){};\nexports.unstable_requestPaint=function(){};exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=y;y=a;try{return b()}finally{y=c}};\nexports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();\"object\"===typeof c&&null!==c?(c=c.delay,c=\"number\"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:u++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;c<arguments.length;c++)b+=\"&args[]=\"+encodeURIComponent(arguments[c]);return\"Minified React error #\"+a+\"; visit \"+b+\" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"}var da=new Set,ea={};function fa(a,b){ha(a,b);ha(a+\"Capture\",b)}\nfunction ha(a,b){ea[a]=b;for(a=0;a<b.length;a++)da.add(b[a])}\nvar ia=!(\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement),ja=Object.prototype.hasOwnProperty,ka=/^[:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD][:A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*$/,la=\n{},ma={};function oa(a){if(ja.call(ma,a))return!0;if(ja.call(la,a))return!1;if(ka.test(a))return ma[a]=!0;la[a]=!0;return!1}function pa(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case \"function\":case \"symbol\":return!0;case \"boolean\":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return\"data-\"!==a&&\"aria-\"!==a;default:return!1}}\nfunction qa(a,b,c,d){if(null===b||\"undefined\"===typeof b||pa(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2<b.length)||\"o\"!==b[0]&&\"O\"!==b[0]||\"n\"!==b[1]&&\"N\"!==b[1])qa(b,c,e,d)&&(c=null),d||null===e?oa(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,\"\"+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:\"\":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?\"\":\"\"+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c)))}\nvar ua=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,va=Symbol.for(\"react.element\"),wa=Symbol.for(\"react.portal\"),ya=Symbol.for(\"react.fragment\"),za=Symbol.for(\"react.strict_mode\"),Aa=Symbol.for(\"react.profiler\"),Ba=Symbol.for(\"react.provider\"),Ca=Symbol.for(\"react.context\"),Da=Symbol.for(\"react.forward_ref\"),Ea=Symbol.for(\"react.suspense\"),Fa=Symbol.for(\"react.suspense_list\"),Ga=Symbol.for(\"react.memo\"),Ha=Symbol.for(\"react.lazy\");Symbol.for(\"react.scope\");Symbol.for(\"react.debug_trace_mode\");\nvar Ia=Symbol.for(\"react.offscreen\");Symbol.for(\"react.legacy_hidden\");Symbol.for(\"react.cache\");Symbol.for(\"react.tracing_marker\");var Ja=Symbol.iterator;function Ka(a){if(null===a||\"object\"!==typeof a)return null;a=Ja&&a[Ja]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}var A=Object.assign,La;function Ma(a){if(void 0===La)try{throw Error();}catch(c){var b=c.stack.trim().match(/\\n( *(at )?)/);La=b&&b[1]||\"\"}return\"\\n\"+La+a}var Na=!1;\nfunction Oa(a,b){if(!a||Na)return\"\";Na=!0;var c=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b)if(b=function(){throw Error();},Object.defineProperty(b.prototype,\"props\",{set:function(){throw Error();}}),\"object\"===typeof Reflect&&Reflect.construct){try{Reflect.construct(b,[])}catch(l){var d=l}Reflect.construct(a,[],b)}else{try{b.call()}catch(l){d=l}a.call(b.prototype)}else{try{throw Error();}catch(l){d=l}a()}}catch(l){if(l&&d&&\"string\"===typeof l.stack){for(var e=l.stack.split(\"\\n\"),\nf=d.stack.split(\"\\n\"),g=e.length-1,h=f.length-1;1<=g&&0<=h&&e[g]!==f[h];)h--;for(;1<=g&&0<=h;g--,h--)if(e[g]!==f[h]){if(1!==g||1!==h){do if(g--,h--,0>h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"<anonymous>\")&&(k=k.replace(\"<anonymous>\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b[\"$\"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty(\"$\"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=\"\"+Sa(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}\nfunction gb(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(p(91));return A({},b,{value:void 0,defaultValue:void 0,children:\"\"+a._wrapperState.initialValue})}function hb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(p(92));if(eb(c)){if(1<c.length)throw Error(p(93));c=c[0]}b=c}null==b&&(b=\"\");c=b}a._wrapperState={initialValue:Sa(c)}}\nfunction ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=\"\"+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=\"\"+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&\"\"!==b&&null!==b&&(a.value=b)}function kb(a){switch(a){case \"svg\":return\"http://www.w3.org/2000/svg\";case \"math\":return\"http://www.w3.org/1998/Math/MathML\";default:return\"http://www.w3.org/1999/xhtml\"}}\nfunction lb(a,b){return null==a||\"http://www.w3.org/1999/xhtml\"===a?kb(b):\"http://www.w3.org/2000/svg\"===a&&\"foreignObject\"===b?\"http://www.w3.org/1999/xhtml\":a}\nvar mb,nb=function(a){return\"undefined\"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(\"http://www.w3.org/2000/svg\"!==a.namespaceURI||\"innerHTML\"in a)a.innerHTML=b;else{mb=mb||document.createElement(\"div\");mb.innerHTML=\"<svg>\"+b.valueOf().toString()+\"</svg>\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a<b.length;a++)Bb(b[a])}}function Gb(a,b){return a(b)}function Hb(){}var Ib=!1;function Jb(a,b,c){if(Ib)return a(b,c);Ib=!0;try{return Gb(a,b,c)}finally{if(Ib=!1,null!==zb||null!==Ab)Hb(),Fb()}}\nfunction Kb(a,b){var c=a.stateNode;if(null===c)return null;var d=Db(c);if(null===d)return null;c=d[b];a:switch(b){case \"onClick\":case \"onClickCapture\":case \"onDoubleClick\":case \"onDoubleClickCapture\":case \"onMouseDown\":case \"onMouseDownCapture\":case \"onMouseMove\":case \"onMouseMoveCapture\":case \"onMouseUp\":case \"onMouseUpCapture\":case \"onMouseEnter\":(d=!d.disabled)||(a=a.type,d=!(\"button\"===a||\"input\"===a||\"select\"===a||\"textarea\"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&\"function\"!==\ntypeof c)throw Error(p(231,b,typeof c));return c}var Lb=!1;if(ia)try{var Mb={};Object.defineProperty(Mb,\"passive\",{get:function(){Lb=!0}});window.addEventListener(\"test\",Mb,Mb);window.removeEventListener(\"test\",Mb,Mb)}catch(a){Lb=!1}function Nb(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(m){this.onError(m)}}var Ob=!1,Pb=null,Qb=!1,Rb=null,Sb={onError:function(a){Ob=!0;Pb=a}};function Tb(a,b,c,d,e,f,g,h,k){Ob=!1;Pb=null;Nb.apply(Sb,arguments)}\nfunction Ub(a,b,c,d,e,f,g,h,k){Tb.apply(this,arguments);if(Ob){if(Ob){var l=Pb;Ob=!1;Pb=null}else throw Error(p(198));Qb||(Qb=!0,Rb=l)}}function Vb(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.flags&4098)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function Wb(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function Xb(a){if(Vb(a)!==a)throw Error(p(188));}\nfunction Yb(a){var b=a.alternate;if(!b){b=Vb(a);if(null===b)throw Error(p(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return Xb(e),a;if(f===d)return Xb(e),b;f=f.sibling}throw Error(p(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===\nc){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(p(189));}}if(c.alternate!==d)throw Error(p(190));}if(3!==c.tag)throw Error(p(188));return c.stateNode.current===c?a:b}function Zb(a){a=Yb(a);return null!==a?$b(a):null}function $b(a){if(5===a.tag||6===a.tag)return a;for(a=a.child;null!==a;){var b=$b(a);if(null!==b)return b;a=a.sibling}return null}\nvar ac=ca.unstable_scheduleCallback,bc=ca.unstable_cancelCallback,cc=ca.unstable_shouldYield,dc=ca.unstable_requestPaint,B=ca.unstable_now,ec=ca.unstable_getCurrentPriorityLevel,fc=ca.unstable_ImmediatePriority,gc=ca.unstable_UserBlockingPriority,hc=ca.unstable_NormalPriority,ic=ca.unstable_LowPriority,jc=ca.unstable_IdlePriority,kc=null,lc=null;function mc(a){if(lc&&\"function\"===typeof lc.onCommitFiberRoot)try{lc.onCommitFiberRoot(kc,a,void 0,128===(a.current.flags&128))}catch(b){}}\nvar oc=Math.clz32?Math.clz32:nc,pc=Math.log,qc=Math.LN2;function nc(a){a>>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0<b;)c=31-oc(b),e=1<<c,d|=a[c],b&=~e;return d}\nfunction vc(a,b){switch(a){case 1:case 2:case 4:return b+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return b+5E3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}\nfunction wc(a,b){for(var c=a.suspendedLanes,d=a.pingedLanes,e=a.expirationTimes,f=a.pendingLanes;0<f;){var g=31-oc(f),h=1<<g,k=e[g];if(-1===k){if(0===(h&c)||0!==(h&d))e[g]=vc(h,b)}else k<=b&&(a.expiredLanes|=h);f&=~h}}function xc(a){a=a.pendingLanes&-1073741825;return 0!==a?a:a&1073741824?1073741824:0}function yc(){var a=rc;rc<<=1;0===(rc&4194240)&&(rc=64);return a}function zc(a){for(var b=[],c=0;31>c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0<c;){var e=31-oc(c),f=1<<e;b[e]=0;d[e]=-1;a[e]=-1;c&=~f}}\nfunction Cc(a,b){var c=a.entangledLanes|=b;for(a=a.entanglements;c;){var d=31-oc(c),e=1<<d;e&b|a[d]&b&&(a[d]|=b);c&=~e}}var C=0;function Dc(a){a&=-a;return 1<a?4<a?0!==(a&268435455)?16:536870912:4:1}var Ec,Fc,Gc,Hc,Ic,Jc=!1,Kc=[],Lc=null,Mc=null,Nc=null,Oc=new Map,Pc=new Map,Qc=[],Rc=\"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit\".split(\" \");\nfunction Sc(a,b){switch(a){case \"focusin\":case \"focusout\":Lc=null;break;case \"dragenter\":case \"dragleave\":Mc=null;break;case \"mouseover\":case \"mouseout\":Nc=null;break;case \"pointerover\":case \"pointerout\":Oc.delete(b.pointerId);break;case \"gotpointercapture\":case \"lostpointercapture\":Pc.delete(b.pointerId)}}\nfunction Tc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a={blockedOn:b,domEventName:c,eventSystemFlags:d,nativeEvent:f,targetContainers:[e]},null!==b&&(b=Cb(b),null!==b&&Fc(b)),a;a.eventSystemFlags|=d;b=a.targetContainers;null!==e&&-1===b.indexOf(e)&&b.push(e);return a}\nfunction Uc(a,b,c,d,e){switch(b){case \"focusin\":return Lc=Tc(Lc,a,b,c,d,e),!0;case \"dragenter\":return Mc=Tc(Mc,a,b,c,d,e),!0;case \"mouseover\":return Nc=Tc(Nc,a,b,c,d,e),!0;case \"pointerover\":var f=e.pointerId;Oc.set(f,Tc(Oc.get(f)||null,a,b,c,d,e));return!0;case \"gotpointercapture\":return f=e.pointerId,Pc.set(f,Tc(Pc.get(f)||null,a,b,c,d,e)),!0}return!1}\nfunction Vc(a){var b=Wc(a.target);if(null!==b){var c=Vb(b);if(null!==c)if(b=c.tag,13===b){if(b=Wb(c),null!==b){a.blockedOn=b;Ic(a.priority,function(){Gc(c)});return}}else if(3===b&&c.stateNode.current.memoizedState.isDehydrated){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}\nfunction Xc(a){if(null!==a.blockedOn)return!1;for(var b=a.targetContainers;0<b.length;){var c=Yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null===c){c=a.nativeEvent;var d=new c.constructor(c.type,c);wb=d;c.target.dispatchEvent(d);wb=null}else return b=Cb(c),null!==b&&Fc(b),a.blockedOn=c,!1;b.shift()}return!0}function Zc(a,b,c){Xc(a)&&c.delete(b)}function $c(){Jc=!1;null!==Lc&&Xc(Lc)&&(Lc=null);null!==Mc&&Xc(Mc)&&(Mc=null);null!==Nc&&Xc(Nc)&&(Nc=null);Oc.forEach(Zc);Pc.forEach(Zc)}\nfunction ad(a,b){a.blockedOn===b&&(a.blockedOn=null,Jc||(Jc=!0,ca.unstable_scheduleCallback(ca.unstable_NormalPriority,$c)))}\nfunction bd(a){function b(b){return ad(b,a)}if(0<Kc.length){ad(Kc[0],a);for(var c=1;c<Kc.length;c++){var d=Kc[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==Lc&&ad(Lc,a);null!==Mc&&ad(Mc,a);null!==Nc&&ad(Nc,a);Oc.forEach(b);Pc.forEach(b);for(c=0;c<Qc.length;c++)d=Qc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<Qc.length&&(c=Qc[0],null===c.blockedOn);)Vc(c),null===c.blockedOn&&Qc.shift()}var cd=ua.ReactCurrentBatchConfig,dd=!0;\nfunction ed(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=1,fd(a,b,c,d)}finally{C=e,cd.transition=f}}function gd(a,b,c,d){var e=C,f=cd.transition;cd.transition=null;try{C=4,fd(a,b,c,d)}finally{C=e,cd.transition=f}}\nfunction fd(a,b,c,d){if(dd){var e=Yc(a,b,c,d);if(null===e)hd(a,b,d,id,c),Sc(a,d);else if(Uc(e,a,b,c,d))d.stopPropagation();else if(Sc(a,d),b&4&&-1<Rc.indexOf(a)){for(;null!==e;){var f=Cb(e);null!==f&&Ec(f);f=Yc(a,b,c,d);null===f&&hd(a,b,d,id,c);if(f===e)break;e=f}null!==e&&d.stopPropagation()}else hd(a,b,d,null,c)}}var id=null;\nfunction Yc(a,b,c,d){id=null;a=xb(d);a=Wc(a);if(null!==a)if(b=Vb(a),null===b)a=null;else if(c=b.tag,13===c){a=Wb(b);if(null!==a)return a;a=null}else if(3===c){if(b.stateNode.current.memoizedState.isDehydrated)return 3===b.tag?b.stateNode.containerInfo:null;a=null}else b!==a&&(a=null);id=a;return null}\nfunction jd(a){switch(a){case \"cancel\":case \"click\":case \"close\":case \"contextmenu\":case \"copy\":case \"cut\":case \"auxclick\":case \"dblclick\":case \"dragend\":case \"dragstart\":case \"drop\":case \"focusin\":case \"focusout\":case \"input\":case \"invalid\":case \"keydown\":case \"keypress\":case \"keyup\":case \"mousedown\":case \"mouseup\":case \"paste\":case \"pause\":case \"play\":case \"pointercancel\":case \"pointerdown\":case \"pointerup\":case \"ratechange\":case \"reset\":case \"resize\":case \"seeked\":case \"submit\":case \"touchcancel\":case \"touchend\":case \"touchstart\":case \"volumechange\":case \"change\":case \"selectionchange\":case \"textInput\":case \"compositionstart\":case \"compositionend\":case \"compositionupdate\":case \"beforeblur\":case \"afterblur\":case \"beforeinput\":case \"blur\":case \"fullscreenchange\":case \"focus\":case \"hashchange\":case \"popstate\":case \"select\":case \"selectstart\":return 1;case \"drag\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"mousemove\":case \"mouseout\":case \"mouseover\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"scroll\":case \"toggle\":case \"touchmove\":case \"wheel\":case \"mouseenter\":case \"mouseleave\":case \"pointerenter\":case \"pointerleave\":return 4;\ncase \"message\":switch(ec()){case fc:return 1;case gc:return 4;case hc:case ic:return 16;case jc:return 536870912;default:return 16}default:return 16}}var kd=null,ld=null,md=null;function nd(){if(md)return md;var a,b=ld,c=b.length,d,e=\"value\"in kd?kd.value:kd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return md=e.slice(a,1<d?1-d:void 0)}\nfunction od(a){var b=a.keyCode;\"charCode\"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}function pd(){return!0}function qd(){return!1}\nfunction rd(a){function b(b,d,e,f,g){this._reactName=b;this._targetInst=e;this.type=d;this.nativeEvent=f;this.target=g;this.currentTarget=null;for(var c in a)a.hasOwnProperty(c)&&(b=a[c],this[c]=b?b(f):f[c]);this.isDefaultPrevented=(null!=f.defaultPrevented?f.defaultPrevented:!1===f.returnValue)?pd:qd;this.isPropagationStopped=qd;return this}A(b.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():\"unknown\"!==typeof a.returnValue&&\n(a.returnValue=!1),this.isDefaultPrevented=pd)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():\"unknown\"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=pd)},persist:function(){},isPersistent:pd});return b}\nvar sd={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},td=rd(sd),ud=A({},sd,{view:0,detail:0}),vd=rd(ud),wd,xd,yd,Ad=A({},ud,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:zd,button:0,buttons:0,relatedTarget:function(a){return void 0===a.relatedTarget?a.fromElement===a.srcElement?a.toElement:a.fromElement:a.relatedTarget},movementX:function(a){if(\"movementX\"in\na)return a.movementX;a!==yd&&(yd&&\"mousemove\"===a.type?(wd=a.screenX-yd.screenX,xd=a.screenY-yd.screenY):xd=wd=0,yd=a);return wd},movementY:function(a){return\"movementY\"in a?a.movementY:xd}}),Bd=rd(Ad),Cd=A({},Ad,{dataTransfer:0}),Dd=rd(Cd),Ed=A({},ud,{relatedTarget:0}),Fd=rd(Ed),Gd=A({},sd,{animationName:0,elapsedTime:0,pseudoElement:0}),Hd=rd(Gd),Id=A({},sd,{clipboardData:function(a){return\"clipboardData\"in a?a.clipboardData:window.clipboardData}}),Jd=rd(Id),Kd=A({},sd,{data:0}),Ld=rd(Kd),Md={Esc:\"Escape\",\nSpacebar:\" \",Left:\"ArrowLeft\",Up:\"ArrowUp\",Right:\"ArrowRight\",Down:\"ArrowDown\",Del:\"Delete\",Win:\"OS\",Menu:\"ContextMenu\",Apps:\"ContextMenu\",Scroll:\"ScrollLock\",MozPrintableKey:\"Unidentified\"},Nd={8:\"Backspace\",9:\"Tab\",12:\"Clear\",13:\"Enter\",16:\"Shift\",17:\"Control\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Escape\",32:\" \",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"ArrowLeft\",38:\"ArrowUp\",39:\"ArrowRight\",40:\"ArrowDown\",45:\"Insert\",46:\"Delete\",112:\"F1\",113:\"F2\",114:\"F3\",115:\"F4\",116:\"F5\",117:\"F6\",118:\"F7\",\n119:\"F8\",120:\"F9\",121:\"F10\",122:\"F11\",123:\"F12\",144:\"NumLock\",145:\"ScrollLock\",224:\"Meta\"},Od={Alt:\"altKey\",Control:\"ctrlKey\",Meta:\"metaKey\",Shift:\"shiftKey\"};function Pd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Od[a])?!!b[a]:!1}function zd(){return Pd}\nvar Qd=A({},ud,{key:function(a){if(a.key){var b=Md[a.key]||a.key;if(\"Unidentified\"!==b)return b}return\"keypress\"===a.type?(a=od(a),13===a?\"Enter\":String.fromCharCode(a)):\"keydown\"===a.type||\"keyup\"===a.type?Nd[a.keyCode]||\"Unidentified\":\"\"},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:zd,charCode:function(a){return\"keypress\"===a.type?od(a):0},keyCode:function(a){return\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0},which:function(a){return\"keypress\"===\na.type?od(a):\"keydown\"===a.type||\"keyup\"===a.type?a.keyCode:0}}),Rd=rd(Qd),Sd=A({},Ad,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Td=rd(Sd),Ud=A({},ud,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:zd}),Vd=rd(Ud),Wd=A({},sd,{propertyName:0,elapsedTime:0,pseudoElement:0}),Xd=rd(Wd),Yd=A({},Ad,{deltaX:function(a){return\"deltaX\"in a?a.deltaX:\"wheelDeltaX\"in a?-a.wheelDeltaX:0},\ndeltaY:function(a){return\"deltaY\"in a?a.deltaY:\"wheelDeltaY\"in a?-a.wheelDeltaY:\"wheelDelta\"in a?-a.wheelDelta:0},deltaZ:0,deltaMode:0}),Zd=rd(Yd),$d=[9,13,27,32],ae=ia&&\"CompositionEvent\"in window,be=null;ia&&\"documentMode\"in document&&(be=document.documentMode);var ce=ia&&\"TextEvent\"in window&&!be,de=ia&&(!ae||be&&8<be&&11>=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case \"compositionend\":return de&&\"ko\"!==b.locale?null:b.data;default:return null}}\nvar le={color:!0,date:!0,datetime:!0,\"datetime-local\":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return\"input\"===b?!!le[a.type]:\"textarea\"===b?!0:!1}function ne(a,b,c,d){Eb(d);b=oe(b,\"onChange\");0<b.length&&(c=new td(\"onChange\",\"change\",null,c,d),a.push({event:c,listeners:b}))}var pe=null,qe=null;function re(a){se(a,0)}function te(a){var b=ue(a);if(Wa(b))return a}\nfunction ve(a,b){if(\"change\"===a)return b}var we=!1;if(ia){var xe;if(ia){var ye=\"oninput\"in document;if(!ye){var ze=document.createElement(\"div\");ze.setAttribute(\"oninput\",\"return;\");ye=\"function\"===typeof ze.oninput}xe=ye}else xe=!1;we=xe&&(!document.documentMode||9<document.documentMode)}function Ae(){pe&&(pe.detachEvent(\"onpropertychange\",Be),qe=pe=null)}function Be(a){if(\"value\"===a.propertyName&&te(qe)){var b=[];ne(b,qe,a,xb(a));Jb(re,b)}}\nfunction Ce(a,b,c){\"focusin\"===a?(Ae(),pe=b,qe=c,pe.attachEvent(\"onpropertychange\",Be)):\"focusout\"===a&&Ae()}function De(a){if(\"selectionchange\"===a||\"keyup\"===a||\"keydown\"===a)return te(qe)}function Ee(a,b){if(\"click\"===a)return te(b)}function Fe(a,b){if(\"input\"===a||\"change\"===a)return te(b)}function Ge(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var He=\"function\"===typeof Object.is?Object.is:Ge;\nfunction Ie(a,b){if(He(a,b))return!0;if(\"object\"!==typeof a||null===a||\"object\"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++){var e=c[d];if(!ja.call(b,e)||!He(a[e],b[e]))return!1}return!0}function Je(a){for(;a&&a.firstChild;)a=a.firstChild;return a}\nfunction Ke(a,b){var c=Je(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c<b.length;c++)a=b[c],a.element.scrollLeft=a.left,a.element.scrollTop=a.top}}\nvar Pe=ia&&\"documentMode\"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0<d.length&&(b=new td(\"onSelect\",\"select\",null,b,c),a.push({event:b,listeners:d}),b.target=Qe)))}\nfunction Ve(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c[\"Webkit\"+a]=\"webkit\"+b;c[\"Moz\"+a]=\"moz\"+b;return c}var We={animationend:Ve(\"Animation\",\"AnimationEnd\"),animationiteration:Ve(\"Animation\",\"AnimationIteration\"),animationstart:Ve(\"Animation\",\"AnimationStart\"),transitionend:Ve(\"Transition\",\"TransitionEnd\")},Xe={},Ye={};\nia&&(Ye=document.createElement(\"div\").style,\"AnimationEvent\"in window||(delete We.animationend.animation,delete We.animationiteration.animation,delete We.animationstart.animation),\"TransitionEvent\"in window||delete We.transitionend.transition);function Ze(a){if(Xe[a])return Xe[a];if(!We[a])return a;var b=We[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Ye)return Xe[a]=b[c];return a}var $e=Ze(\"animationend\"),af=Ze(\"animationiteration\"),bf=Ze(\"animationstart\"),cf=Ze(\"transitionend\"),df=new Map,ef=\"abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\" \");\nfunction ff(a,b){df.set(a,b);fa(b,[a])}for(var gf=0;gf<ef.length;gf++){var hf=ef[gf],jf=hf.toLowerCase(),kf=hf[0].toUpperCase()+hf.slice(1);ff(jf,\"on\"+kf)}ff($e,\"onAnimationEnd\");ff(af,\"onAnimationIteration\");ff(bf,\"onAnimationStart\");ff(\"dblclick\",\"onDoubleClick\");ff(\"focusin\",\"onFocus\");ff(\"focusout\",\"onBlur\");ff(cf,\"onTransitionEnd\");ha(\"onMouseEnter\",[\"mouseout\",\"mouseover\"]);ha(\"onMouseLeave\",[\"mouseout\",\"mouseover\"]);ha(\"onPointerEnter\",[\"pointerout\",\"pointerover\"]);\nha(\"onPointerLeave\",[\"pointerout\",\"pointerover\"]);fa(\"onChange\",\"change click focusin focusout input keydown keyup selectionchange\".split(\" \"));fa(\"onSelect\",\"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\" \"));fa(\"onBeforeInput\",[\"compositionend\",\"keypress\",\"textInput\",\"paste\"]);fa(\"onCompositionEnd\",\"compositionend focusout keydown keypress keyup mousedown\".split(\" \"));fa(\"onCompositionStart\",\"compositionstart focusout keydown keypress keyup mousedown\".split(\" \"));\nfa(\"onCompositionUpdate\",\"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \"));var lf=\"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\" \"),mf=new Set(\"cancel close invalid load scroll toggle\".split(\" \").concat(lf));\nfunction nf(a,b,c){var d=a.type||\"unknown-event\";a.currentTarget=c;Ub(d,b,void 0,a);a.currentTarget=null}\nfunction se(a,b){b=0!==(b&4);for(var c=0;c<a.length;c++){var d=a[c],e=d.event;d=d.listeners;a:{var f=void 0;if(b)for(var g=d.length-1;0<=g;g--){var h=d[g],k=h.instance,l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}else for(g=0;g<d.length;g++){h=d[g];k=h.instance;l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;nf(e,h,l);f=k}}}if(Qb)throw a=Rb,Qb=!1,Rb=null,a;}\nfunction D(a,b){var c=b[of];void 0===c&&(c=b[of]=new Set);var d=a+\"__bubble\";c.has(d)||(pf(b,a,2,!1),c.add(d))}function qf(a,b,c){var d=0;b&&(d|=4);pf(c,a,d,b)}var rf=\"_reactListening\"+Math.random().toString(36).slice(2);function sf(a){if(!a[rf]){a[rf]=!0;da.forEach(function(b){\"selectionchange\"!==b&&(mf.has(b)||qf(b,!1,a),qf(b,!0,a))});var b=9===a.nodeType?a:a.ownerDocument;null===b||b[rf]||(b[rf]=!0,qf(\"selectionchange\",!1,b))}}\nfunction pf(a,b,c,d){switch(jd(b)){case 1:var e=ed;break;case 4:e=gd;break;default:e=fd}c=e.bind(null,b,c,a);e=void 0;!Lb||\"touchstart\"!==b&&\"touchmove\"!==b&&\"wheel\"!==b||(e=!0);d?void 0!==e?a.addEventListener(b,c,{capture:!0,passive:e}):a.addEventListener(b,c,!0):void 0!==e?a.addEventListener(b,c,{passive:e}):a.addEventListener(b,c,!1)}\nfunction hd(a,b,c,d,e){var f=d;if(0===(b&1)&&0===(b&2)&&null!==d)a:for(;;){if(null===d)return;var g=d.tag;if(3===g||4===g){var h=d.stateNode.containerInfo;if(h===e||8===h.nodeType&&h.parentNode===e)break;if(4===g)for(g=d.return;null!==g;){var k=g.tag;if(3===k||4===k)if(k=g.stateNode.containerInfo,k===e||8===k.nodeType&&k.parentNode===e)return;g=g.return}for(;null!==h;){g=Wc(h);if(null===g)return;k=g.tag;if(5===k||6===k){d=f=g;continue a}h=h.parentNode}}d=d.return}Jb(function(){var d=f,e=xb(c),g=[];\na:{var h=df.get(a);if(void 0!==h){var k=td,n=a;switch(a){case \"keypress\":if(0===od(c))break a;case \"keydown\":case \"keyup\":k=Rd;break;case \"focusin\":n=\"focus\";k=Fd;break;case \"focusout\":n=\"blur\";k=Fd;break;case \"beforeblur\":case \"afterblur\":k=Fd;break;case \"click\":if(2===c.button)break a;case \"auxclick\":case \"dblclick\":case \"mousedown\":case \"mousemove\":case \"mouseup\":case \"mouseout\":case \"mouseover\":case \"contextmenu\":k=Bd;break;case \"drag\":case \"dragend\":case \"dragenter\":case \"dragexit\":case \"dragleave\":case \"dragover\":case \"dragstart\":case \"drop\":k=\nDd;break;case \"touchcancel\":case \"touchend\":case \"touchmove\":case \"touchstart\":k=Vd;break;case $e:case af:case bf:k=Hd;break;case cf:k=Xd;break;case \"scroll\":k=vd;break;case \"wheel\":k=Zd;break;case \"copy\":case \"cut\":case \"paste\":k=Jd;break;case \"gotpointercapture\":case \"lostpointercapture\":case \"pointercancel\":case \"pointerdown\":case \"pointermove\":case \"pointerout\":case \"pointerover\":case \"pointerup\":k=Td}var t=0!==(b&4),J=!t&&\"scroll\"===a,x=t?null!==h?h+\"Capture\":null:h;t=[];for(var w=d,u;null!==\nw;){u=w;var F=u.stateNode;5===u.tag&&null!==F&&(u=F,null!==x&&(F=Kb(w,x),null!=F&&t.push(tf(w,F,u))));if(J)break;w=w.return}0<t.length&&(h=new k(h,n,null,c,e),g.push({event:h,listeners:t}))}}if(0===(b&7)){a:{h=\"mouseover\"===a||\"pointerover\"===a;k=\"mouseout\"===a||\"pointerout\"===a;if(h&&c!==wb&&(n=c.relatedTarget||c.fromElement)&&(Wc(n)||n[uf]))break a;if(k||h){h=e.window===e?e:(h=e.ownerDocument)?h.defaultView||h.parentWindow:window;if(k){if(n=c.relatedTarget||c.toElement,k=d,n=n?Wc(n):null,null!==\nn&&(J=Vb(n),n!==J||5!==n.tag&&6!==n.tag))n=null}else k=null,n=d;if(k!==n){t=Bd;F=\"onMouseLeave\";x=\"onMouseEnter\";w=\"mouse\";if(\"pointerout\"===a||\"pointerover\"===a)t=Td,F=\"onPointerLeave\",x=\"onPointerEnter\",w=\"pointer\";J=null==k?h:ue(k);u=null==n?h:ue(n);h=new t(F,w+\"leave\",k,c,e);h.target=J;h.relatedTarget=u;F=null;Wc(e)===d&&(t=new t(x,w+\"enter\",n,c,e),t.target=u,t.relatedTarget=J,F=t);J=F;if(k&&n)b:{t=k;x=n;w=0;for(u=t;u;u=vf(u))w++;u=0;for(F=x;F;F=vf(F))u++;for(;0<w-u;)t=vf(t),w--;for(;0<u-w;)x=\nvf(x),u--;for(;w--;){if(t===x||null!==x&&t===x.alternate)break b;t=vf(t);x=vf(x)}t=null}else t=null;null!==k&&wf(g,h,k,t,!1);null!==n&&null!==J&&wf(g,J,n,t,!0)}}}a:{h=d?ue(d):window;k=h.nodeName&&h.nodeName.toLowerCase();if(\"select\"===k||\"input\"===k&&\"file\"===h.type)var na=ve;else if(me(h))if(we)na=Fe;else{na=De;var xa=Ce}else(k=h.nodeName)&&\"input\"===k.toLowerCase()&&(\"checkbox\"===h.type||\"radio\"===h.type)&&(na=Ee);if(na&&(na=na(a,d))){ne(g,na,c,e);break a}xa&&xa(a,h,d);\"focusout\"===a&&(xa=h._wrapperState)&&\nxa.controlled&&\"number\"===h.type&&cb(h,\"number\",h.value)}xa=d?ue(d):window;switch(a){case \"focusin\":if(me(xa)||\"true\"===xa.contentEditable)Qe=xa,Re=d,Se=null;break;case \"focusout\":Se=Re=Qe=null;break;case \"mousedown\":Te=!0;break;case \"contextmenu\":case \"mouseup\":case \"dragend\":Te=!1;Ue(g,c,e);break;case \"selectionchange\":if(Pe)break;case \"keydown\":case \"keyup\":Ue(g,c,e)}var $a;if(ae)b:{switch(a){case \"compositionstart\":var ba=\"onCompositionStart\";break b;case \"compositionend\":ba=\"onCompositionEnd\";\nbreak b;case \"compositionupdate\":ba=\"onCompositionUpdate\";break b}ba=void 0}else ie?ge(a,c)&&(ba=\"onCompositionEnd\"):\"keydown\"===a&&229===c.keyCode&&(ba=\"onCompositionStart\");ba&&(de&&\"ko\"!==c.locale&&(ie||\"onCompositionStart\"!==ba?\"onCompositionEnd\"===ba&&ie&&($a=nd()):(kd=e,ld=\"value\"in kd?kd.value:kd.textContent,ie=!0)),xa=oe(d,ba),0<xa.length&&(ba=new Ld(ba,a,null,c,e),g.push({event:ba,listeners:xa}),$a?ba.data=$a:($a=he(c),null!==$a&&(ba.data=$a))));if($a=ce?je(a,c):ke(a,c))d=oe(d,\"onBeforeInput\"),\n0<d.length&&(e=new Ld(\"onBeforeInput\",\"beforeinput\",null,c,e),g.push({event:e,listeners:d}),e.data=$a)}se(g,b)})}function tf(a,b,c){return{instance:a,listener:b,currentTarget:c}}function oe(a,b){for(var c=b+\"Capture\",d=[];null!==a;){var e=a,f=e.stateNode;5===e.tag&&null!==f&&(e=f,f=Kb(a,c),null!=f&&d.unshift(tf(a,f,e)),f=Kb(a,b),null!=f&&d.push(tf(a,f,e)));a=a.return}return d}function vf(a){if(null===a)return null;do a=a.return;while(a&&5!==a.tag);return a?a:null}\nfunction wf(a,b,c,d,e){for(var f=b._reactName,g=[];null!==c&&c!==d;){var h=c,k=h.alternate,l=h.stateNode;if(null!==k&&k===d)break;5===h.tag&&null!==l&&(h=l,e?(k=Kb(c,f),null!=k&&g.unshift(tf(c,k,h))):e||(k=Kb(c,f),null!=k&&g.push(tf(c,k,h))));c=c.return}0!==g.length&&a.push({event:b,listeners:g})}var xf=/\\r\\n?/g,yf=/\\u0000|\\uFFFD/g;function zf(a){return(\"string\"===typeof a?a:\"\"+a).replace(xf,\"\\n\").replace(yf,\"\")}function Af(a,b,c){b=zf(b);if(zf(a)!==b&&c)throw Error(p(425));}function Bf(){}\nvar Cf=null,Df=null;function Ef(a,b){return\"textarea\"===a||\"noscript\"===a||\"string\"===typeof b.children||\"number\"===typeof b.children||\"object\"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}\nvar Ff=\"function\"===typeof setTimeout?setTimeout:void 0,Gf=\"function\"===typeof clearTimeout?clearTimeout:void 0,Hf=\"function\"===typeof Promise?Promise:void 0,Jf=\"function\"===typeof queueMicrotask?queueMicrotask:\"undefined\"!==typeof Hf?function(a){return Hf.resolve(null).then(a).catch(If)}:Ff;function If(a){setTimeout(function(){throw a;})}\nfunction Kf(a,b){var c=b,d=0;do{var e=c.nextSibling;a.removeChild(c);if(e&&8===e.nodeType)if(c=e.data,\"/$\"===c){if(0===d){a.removeChild(e);bd(b);return}d--}else\"$\"!==c&&\"$?\"!==c&&\"$!\"!==c||d++;c=e}while(c);bd(b)}function Lf(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break;if(8===b){b=a.data;if(\"$\"===b||\"$!\"===b||\"$?\"===b)break;if(\"/$\"===b)return null}}return a}\nfunction Mf(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if(\"$\"===c||\"$!\"===c||\"$?\"===c){if(0===b)return a;b--}else\"/$\"===c&&b++}a=a.previousSibling}return null}var Nf=Math.random().toString(36).slice(2),Of=\"__reactFiber$\"+Nf,Pf=\"__reactProps$\"+Nf,uf=\"__reactContainer$\"+Nf,of=\"__reactEvents$\"+Nf,Qf=\"__reactListeners$\"+Nf,Rf=\"__reactHandles$\"+Nf;\nfunction Wc(a){var b=a[Of];if(b)return b;for(var c=a.parentNode;c;){if(b=c[uf]||c[Of]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=Mf(a);null!==a;){if(c=a[Of])return c;a=Mf(a)}return b}a=c;c=a.parentNode}return null}function Cb(a){a=a[Of]||a[uf];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function ue(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(p(33));}function Db(a){return a[Pf]||null}var Sf=[],Tf=-1;function Uf(a){return{current:a}}\nfunction E(a){0>Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a<c.length;a++){var d=c[a];do d=d(!0);while(null!==d)}eg=null;fg=!1}catch(e){throw null!==eg&&(eg=eg.slice(a+1)),ac(fc,jg),e;}finally{C=b,gg=!1}}return null}var kg=[],lg=0,mg=null,ng=0,og=[],pg=0,qg=null,rg=1,sg=\"\";function tg(a,b){kg[lg++]=ng;kg[lg++]=mg;mg=a;ng=b}\nfunction ug(a,b,c){og[pg++]=rg;og[pg++]=sg;og[pg++]=qg;qg=a;var d=rg;a=sg;var e=32-oc(d)-1;d&=~(1<<e);c+=1;var f=32-oc(b)+e;if(30<f){var g=e-e%5;f=(d&(1<<g)-1).toString(32);d>>=g;e-=g;rg=1<<32-oc(b)+e|c<<e|d;sg=f+a}else rg=1<<f|c<<e|d,sg=a}function vg(a){null!==a.return&&(tg(a,1),ug(a,1,0))}function wg(a){for(;a===mg;)mg=kg[--lg],kg[lg]=null,ng=kg[--lg],kg[lg]=null;for(;a===qg;)qg=og[--pg],og[pg]=null,sg=og[--pg],og[pg]=null,rg=og[--pg],og[pg]=null}var xg=null,yg=null,I=!1,zg=null;\nfunction Ag(a,b){var c=Bg(5,null,null,0);c.elementType=\"DELETED\";c.stateNode=b;c.return=a;b=a.deletions;null===b?(a.deletions=[c],a.flags|=16):b.push(c)}\nfunction Cg(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,xg=a,yg=Lf(b.firstChild),!0):!1;case 6:return b=\"\"===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,xg=a,yg=null,!0):!1;case 13:return b=8!==b.nodeType?null:b,null!==b?(c=null!==qg?{id:rg,overflow:sg}:null,a.memoizedState={dehydrated:b,treeContext:c,retryLane:1073741824},c=Bg(18,null,null,0),c.stateNode=b,c.return=a,a.child=c,xg=a,yg=\nnull,!0):!1;default:return!1}}function Dg(a){return 0!==(a.mode&1)&&0===(a.flags&128)}function Eg(a){if(I){var b=yg;if(b){var c=b;if(!Cg(a,b)){if(Dg(a))throw Error(p(418));b=Lf(c.nextSibling);var d=xg;b&&Cg(a,b)?Ag(d,c):(a.flags=a.flags&-4097|2,I=!1,xg=a)}}else{if(Dg(a))throw Error(p(418));a.flags=a.flags&-4097|2;I=!1;xg=a}}}function Fg(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;xg=a}\nfunction Gg(a){if(a!==xg)return!1;if(!I)return Fg(a),I=!0,!1;var b;(b=3!==a.tag)&&!(b=5!==a.tag)&&(b=a.type,b=\"head\"!==b&&\"body\"!==b&&!Ef(a.type,a.memoizedProps));if(b&&(b=yg)){if(Dg(a))throw Hg(),Error(p(418));for(;b;)Ag(a,b),b=Lf(b.nextSibling)}Fg(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(p(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if(\"/$\"===c){if(0===b){yg=Lf(a.nextSibling);break a}b--}else\"$\"!==c&&\"$!\"!==c&&\"$?\"!==c||b++}a=a.nextSibling}yg=\nnull}}else yg=xg?Lf(a.stateNode.nextSibling):null;return!0}function Hg(){for(var a=yg;a;)a=Lf(a.nextSibling)}function Ig(){yg=xg=null;I=!1}function Jg(a){null===zg?zg=[a]:zg.push(a)}var Kg=ua.ReactCurrentBatchConfig;\nfunction Lg(a,b,c){a=c.ref;if(null!==a&&\"function\"!==typeof a&&\"object\"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(p(309));var d=c.stateNode}if(!d)throw Error(p(147,a));var e=d,f=\"\"+a;if(null!==b&&null!==b.ref&&\"function\"===typeof b.ref&&b.ref._stringRef===f)return b.ref;b=function(a){var b=e.refs;null===a?delete b[f]:b[f]=a};b._stringRef=f;return b}if(\"string\"!==typeof a)throw Error(p(284));if(!c._owner)throw Error(p(290,a));}return a}\nfunction Mg(a,b){a=Object.prototype.toString.call(b);throw Error(p(31,\"[object Object]\"===a?\"object with keys {\"+Object.keys(b).join(\", \")+\"}\":a));}function Ng(a){var b=a._init;return b(a._payload)}\nfunction Og(a){function b(b,c){if(a){var d=b.deletions;null===d?(b.deletions=[c],b.flags|=16):d.push(c)}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Pg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return b.flags|=1048576,c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.flags|=2,c):d;b.flags|=2;return c}function g(b){a&&\nnull===b.alternate&&(b.flags|=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Qg(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){var f=c.type;if(f===ya)return m(a,b,c.props.children,d,c.key);if(null!==b&&(b.elementType===f||\"object\"===typeof f&&null!==f&&f.$$typeof===Ha&&Ng(f)===b.type))return d=e(b,c.props),d.ref=Lg(a,b,c),d.return=a,d;d=Rg(c.type,c.key,c.props,null,a.mode,d);d.ref=Lg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||\nb.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=Sg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function m(a,b,c,d,f){if(null===b||7!==b.tag)return b=Tg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function q(a,b,c){if(\"string\"===typeof b&&\"\"!==b||\"number\"===typeof b)return b=Qg(\"\"+b,a.mode,c),b.return=a,b;if(\"object\"===typeof b&&null!==b){switch(b.$$typeof){case va:return c=Rg(b.type,b.key,b.props,null,a.mode,c),\nc.ref=Lg(a,null,b),c.return=a,c;case wa:return b=Sg(b,a.mode,c),b.return=a,b;case Ha:var d=b._init;return q(a,d(b._payload),c)}if(eb(b)||Ka(b))return b=Tg(b,a.mode,c,null),b.return=a,b;Mg(a,b)}return null}function r(a,b,c,d){var e=null!==b?b.key:null;if(\"string\"===typeof c&&\"\"!==c||\"number\"===typeof c)return null!==e?null:h(a,b,\"\"+c,d);if(\"object\"===typeof c&&null!==c){switch(c.$$typeof){case va:return c.key===e?k(a,b,c,d):null;case wa:return c.key===e?l(a,b,c,d):null;case Ha:return e=c._init,r(a,\nb,e(c._payload),d)}if(eb(c)||Ka(c))return null!==e?null:m(a,b,c,d,null);Mg(a,c)}return null}function y(a,b,c,d,e){if(\"string\"===typeof d&&\"\"!==d||\"number\"===typeof d)return a=a.get(c)||null,h(b,a,\"\"+d,e);if(\"object\"===typeof d&&null!==d){switch(d.$$typeof){case va:return a=a.get(null===d.key?c:d.key)||null,k(b,a,d,e);case wa:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e);case Ha:var f=d._init;return y(a,b,c,f(d._payload),e)}if(eb(d)||Ka(d))return a=a.get(c)||null,m(b,a,d,e,null);Mg(b,d)}return null}\nfunction n(e,g,h,k){for(var l=null,m=null,u=g,w=g=0,x=null;null!==u&&w<h.length;w++){u.index>w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;w<h.length;w++)u=q(e,h[w],k),null!==u&&(g=f(u,g,w),null===m?l=u:m.sibling=u,m=u);I&&tg(e,w);return l}for(u=d(e,u);w<h.length;w++)x=y(u,e,w,h[w],k),null!==x&&(a&&null!==x.alternate&&u.delete(null===\nx.key?w:x.key),g=f(x,g,w),null===m?l=x:m.sibling=x,m=x);a&&u.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function t(e,g,h,k){var l=Ka(h);if(\"function\"!==typeof l)throw Error(p(150));h=l.call(h);if(null==h)throw Error(p(151));for(var u=l=null,m=g,w=g=0,x=null,n=h.next();null!==m&&!n.done;w++,n=h.next()){m.index>w?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=c;if(\"function\"!==typeof e)throw Error(p(191,e));e.call(d)}}}var th={},uh=Uf(th),vh=Uf(th),wh=Uf(th);function xh(a){if(a===th)throw Error(p(174));return a}\nfunction yh(a,b){G(wh,b);G(vh,a);G(uh,th);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(uh);G(uh,b)}function zh(){E(uh);E(vh);E(wh)}function Ah(a){xh(wh.current);var b=xh(uh.current);var c=lb(b,a.type);b!==c&&(G(vh,a),G(uh,c))}function Bh(a){vh.current===a&&(E(uh),E(vh))}var L=Uf(0);\nfunction Ch(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Dh=[];\nfunction Eh(){for(var a=0;a<Dh.length;a++)Dh[a]._workInProgressVersionPrimary=null;Dh.length=0}var Fh=ua.ReactCurrentDispatcher,Gh=ua.ReactCurrentBatchConfig,Hh=0,M=null,N=null,O=null,Ih=!1,Jh=!1,Kh=0,Lh=0;function P(){throw Error(p(321));}function Mh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!He(a[c],b[c]))return!1;return!0}\nfunction Nh(a,b,c,d,e,f){Hh=f;M=b;b.memoizedState=null;b.updateQueue=null;b.lanes=0;Fh.current=null===a||null===a.memoizedState?Oh:Ph;a=c(d,e);if(Jh){f=0;do{Jh=!1;Kh=0;if(25<=f)throw Error(p(301));f+=1;O=N=null;b.updateQueue=null;Fh.current=Qh;a=c(d,e)}while(Jh)}Fh.current=Rh;b=null!==N&&null!==N.next;Hh=0;O=N=M=null;Ih=!1;if(b)throw Error(p(300));return a}function Sh(){var a=0!==Kh;Kh=0;return a}\nfunction Th(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===O?M.memoizedState=O=a:O=O.next=a;return O}function Uh(){if(null===N){var a=M.alternate;a=null!==a?a.memoizedState:null}else a=N.next;var b=null===O?M.memoizedState:O.next;if(null!==b)O=b,N=a;else{if(null===a)throw Error(p(310));N=a;a={memoizedState:N.memoizedState,baseState:N.baseState,baseQueue:N.baseQueue,queue:N.queue,next:null};null===O?M.memoizedState=O=a:O=O.next=a}return O}\nfunction Vh(a,b){return\"function\"===typeof b?b(a):b}\nfunction Wh(a){var b=Uh(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=N,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){f=e.next;d=d.baseState;var h=g=null,k=null,l=f;do{var m=l.lane;if((Hh&m)===m)null!==k&&(k=k.next={lane:0,action:l.action,hasEagerState:l.hasEagerState,eagerState:l.eagerState,next:null}),d=l.hasEagerState?l.eagerState:a(d,l.action);else{var q={lane:m,action:l.action,hasEagerState:l.hasEagerState,\neagerState:l.eagerState,next:null};null===k?(h=k=q,g=d):k=k.next=q;M.lanes|=m;rh|=m}l=l.next}while(null!==l&&l!==f);null===k?g=d:k.next=h;He(d,b.memoizedState)||(dh=!0);b.memoizedState=d;b.baseState=g;b.baseQueue=k;c.lastRenderedState=d}a=c.interleaved;if(null!==a){e=a;do f=e.lane,M.lanes|=f,rh|=f,e=e.next;while(e!==a)}else null===e&&(c.lanes=0);return[b.memoizedState,c.dispatch]}\nfunction Xh(a){var b=Uh(),c=b.queue;if(null===c)throw Error(p(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(dh=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}function Yh(){}\nfunction Zh(a,b){var c=M,d=Uh(),e=b(),f=!He(d.memoizedState,e);f&&(d.memoizedState=e,dh=!0);d=d.queue;$h(ai.bind(null,c,d,a),[a]);if(d.getSnapshot!==b||f||null!==O&&O.memoizedState.tag&1){c.flags|=2048;bi(9,ci.bind(null,c,d,e,b),void 0,null);if(null===Q)throw Error(p(349));0!==(Hh&30)||di(c,b,e)}return e}function di(a,b,c){a.flags|=16384;a={getSnapshot:b,value:c};b=M.updateQueue;null===b?(b={lastEffect:null,stores:null},M.updateQueue=b,b.stores=[a]):(c=b.stores,null===c?b.stores=[a]:c.push(a))}\nfunction ci(a,b,c,d){b.value=c;b.getSnapshot=d;ei(b)&&fi(a)}function ai(a,b,c){return c(function(){ei(b)&&fi(a)})}function ei(a){var b=a.getSnapshot;a=a.value;try{var c=b();return!He(a,c)}catch(d){return!0}}function fi(a){var b=ih(a,1);null!==b&&gi(b,a,1,-1)}\nfunction hi(a){var b=Th();\"function\"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Vh,lastRenderedState:a};b.queue=a;a=a.dispatch=ii.bind(null,M,a);return[b.memoizedState,a]}\nfunction bi(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=M.updateQueue;null===b?(b={lastEffect:null,stores:null},M.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}function ji(){return Uh().memoizedState}function ki(a,b,c,d){var e=Th();M.flags|=a;e.memoizedState=bi(1|b,c,void 0,void 0===d?null:d)}\nfunction li(a,b,c,d){var e=Uh();d=void 0===d?null:d;var f=void 0;if(null!==N){var g=N.memoizedState;f=g.destroy;if(null!==d&&Mh(d,g.deps)){e.memoizedState=bi(b,c,f,d);return}}M.flags|=a;e.memoizedState=bi(1|b,c,f,d)}function mi(a,b){return ki(8390656,8,a,b)}function $h(a,b){return li(2048,8,a,b)}function ni(a,b){return li(4,2,a,b)}function oi(a,b){return li(4,4,a,b)}\nfunction pi(a,b){if(\"function\"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}function qi(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return li(4,4,pi.bind(null,b,a),c)}function ri(){}function si(a,b){var c=Uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Mh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}\nfunction ti(a,b){var c=Uh();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Mh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}function ui(a,b,c){if(0===(Hh&21))return a.baseState&&(a.baseState=!1,dh=!0),a.memoizedState=c;He(c,b)||(c=yc(),M.lanes|=c,rh|=c,a.baseState=!0);return b}function vi(a,b){var c=C;C=0!==c&&4>c?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0<c&&(b+=\"H\"+c.toString(32));b+=\":\"}else c=Lh++,b=\":\"+b+\"r\"+c.toString(32)+\":\";return a.memoizedState=b},unstable_isNewReconciler:!1},Ph={readContext:eh,useCallback:si,useContext:eh,useEffect:$h,useImperativeHandle:qi,useInsertionEffect:ni,useLayoutEffect:oi,useMemo:ti,useReducer:Wh,useRef:ji,useState:function(){return Wh(Vh)},\nuseDebugValue:ri,useDeferredValue:function(a){var b=Uh();return ui(b,N.memoizedState,a)},useTransition:function(){var a=Wh(Vh)[0],b=Uh().memoizedState;return[a,b]},useMutableSource:Yh,useSyncExternalStore:Zh,useId:wi,unstable_isNewReconciler:!1},Qh={readContext:eh,useCallback:si,useContext:eh,useEffect:$h,useImperativeHandle:qi,useInsertionEffect:ni,useLayoutEffect:oi,useMemo:ti,useReducer:Xh,useRef:ji,useState:function(){return Xh(Vh)},useDebugValue:ri,useDeferredValue:function(a){var b=Uh();return null===\nN?b.memoizedState=a:ui(b,N.memoizedState,a)},useTransition:function(){var a=Xh(Vh)[0],b=Uh().memoizedState;return[a,b]},useMutableSource:Yh,useSyncExternalStore:Zh,useId:wi,unstable_isNewReconciler:!1};function Ci(a,b){if(a&&a.defaultProps){b=A({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}function Di(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:A({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}\nvar Ei={isMounted:function(a){return(a=a._reactInternals)?Vb(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternals;var d=R(),e=yi(a),f=mh(d,e);f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=nh(a,f,e);null!==b&&(gi(b,a,e,d),oh(b,a,e))},enqueueReplaceState:function(a,b,c){a=a._reactInternals;var d=R(),e=yi(a),f=mh(d,e);f.tag=1;f.payload=b;void 0!==c&&null!==c&&(f.callback=c);b=nh(a,f,e);null!==b&&(gi(b,a,e,d),oh(b,a,e))},enqueueForceUpdate:function(a,b){a=a._reactInternals;var c=R(),d=\nyi(a),e=mh(c,d);e.tag=2;void 0!==b&&null!==b&&(e.callback=b);b=nh(a,e,d);null!==b&&(gi(b,a,d,c),oh(b,a,d))}};function Fi(a,b,c,d,e,f,g){a=a.stateNode;return\"function\"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!Ie(c,d)||!Ie(e,f):!0}\nfunction Gi(a,b,c){var d=!1,e=Vf;var f=b.contextType;\"object\"===typeof f&&null!==f?f=eh(f):(e=Zf(b)?Xf:H.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Yf(a,e):Vf);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Ei;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}\nfunction Hi(a,b,c,d){a=b.state;\"function\"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);\"function\"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Ei.enqueueReplaceState(b,b.state,null)}\nfunction Ii(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs={};kh(a);var f=b.contextType;\"object\"===typeof f&&null!==f?e.context=eh(f):(f=Zf(b)?Xf:H.current,e.context=Yf(a,f));e.state=a.memoizedState;f=b.getDerivedStateFromProps;\"function\"===typeof f&&(Di(a,b,f,c),e.state=a.memoizedState);\"function\"===typeof b.getDerivedStateFromProps||\"function\"===typeof e.getSnapshotBeforeUpdate||\"function\"!==typeof e.UNSAFE_componentWillMount&&\"function\"!==typeof e.componentWillMount||(b=e.state,\n\"function\"===typeof e.componentWillMount&&e.componentWillMount(),\"function\"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Ei.enqueueReplaceState(e,e.state,null),qh(a,c,e,d),e.state=a.memoizedState);\"function\"===typeof e.componentDidMount&&(a.flags|=4194308)}function Ji(a,b){try{var c=\"\",d=b;do c+=Pa(d),d=d.return;while(d);var e=c}catch(f){e=\"\\nError generating stack: \"+f.message+\"\\n\"+f.stack}return{value:a,source:b,stack:e,digest:null}}\nfunction Ki(a,b,c){return{value:a,source:null,stack:null!=c?c:null,digest:null!=b?b:null}}function Li(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Mi=\"function\"===typeof WeakMap?WeakMap:Map;function Ni(a,b,c){c=mh(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Oi||(Oi=!0,Pi=d);Li(a,b)};return c}\nfunction Qi(a,b,c){c=mh(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if(\"function\"===typeof d){var e=b.value;c.payload=function(){return d(e)};c.callback=function(){Li(a,b)}}var f=a.stateNode;null!==f&&\"function\"===typeof f.componentDidCatch&&(c.callback=function(){Li(a,b);\"function\"!==typeof d&&(null===Ri?Ri=new Set([this]):Ri.add(this));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:\"\"})});return c}\nfunction Si(a,b,c){var d=a.pingCache;if(null===d){d=a.pingCache=new Mi;var e=new Set;d.set(b,e)}else e=d.get(b),void 0===e&&(e=new Set,d.set(b,e));e.has(c)||(e.add(c),a=Ti.bind(null,a,b,c),b.then(a,a))}function Ui(a){do{var b;if(b=13===a.tag)b=a.memoizedState,b=null!==b?null!==b.dehydrated?!0:!1:!0;if(b)return a;a=a.return}while(null!==a);return null}\nfunction Vi(a,b,c,d,e){if(0===(a.mode&1))return a===b?a.flags|=65536:(a.flags|=128,c.flags|=131072,c.flags&=-52805,1===c.tag&&(null===c.alternate?c.tag=17:(b=mh(-1,1),b.tag=2,nh(c,b,1))),c.lanes|=1),a;a.flags|=65536;a.lanes=e;return a}var Wi=ua.ReactCurrentOwner,dh=!1;function Xi(a,b,c,d){b.child=null===a?Vg(b,null,c,d):Ug(b,a.child,c,d)}\nfunction Yi(a,b,c,d,e){c=c.render;var f=b.ref;ch(b,e);d=Nh(a,b,c,d,f,e);c=Sh();if(null!==a&&!dh)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zi(a,b,e);I&&c&&vg(b);b.flags|=1;Xi(a,b,d,e);return b.child}\nfunction $i(a,b,c,d,e){if(null===a){var f=c.type;if(\"function\"===typeof f&&!aj(f)&&void 0===f.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=f,bj(a,b,f,d,e);a=Rg(c.type,null,d,b,b.mode,e);a.ref=b.ref;a.return=b;return b.child=a}f=a.child;if(0===(a.lanes&e)){var g=f.memoizedProps;c=c.compare;c=null!==c?c:Ie;if(c(g,d)&&a.ref===b.ref)return Zi(a,b,e)}b.flags|=1;a=Pg(f,d);a.ref=b.ref;a.return=b;return b.child=a}\nfunction bj(a,b,c,d,e){if(null!==a){var f=a.memoizedProps;if(Ie(f,d)&&a.ref===b.ref)if(dh=!1,b.pendingProps=d=f,0!==(a.lanes&e))0!==(a.flags&131072)&&(dh=!0);else return b.lanes=a.lanes,Zi(a,b,e)}return cj(a,b,c,d,e)}\nfunction dj(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if(\"hidden\"===d.mode)if(0===(b.mode&1))b.memoizedState={baseLanes:0,cachePool:null,transitions:null},G(ej,fj),fj|=c;else{if(0===(c&1073741824))return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a,cachePool:null,transitions:null},b.updateQueue=null,G(ej,fj),fj|=a,null;b.memoizedState={baseLanes:0,cachePool:null,transitions:null};d=null!==f?f.baseLanes:c;G(ej,fj);fj|=d}else null!==\nf?(d=f.baseLanes|c,b.memoizedState=null):d=c,G(ej,fj),fj|=d;Xi(a,b,e,c);return b.child}function gj(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=512,b.flags|=2097152}function cj(a,b,c,d,e){var f=Zf(c)?Xf:H.current;f=Yf(b,f);ch(b,e);c=Nh(a,b,c,d,f,e);d=Sh();if(null!==a&&!dh)return b.updateQueue=a.updateQueue,b.flags&=-2053,a.lanes&=~e,Zi(a,b,e);I&&d&&vg(b);b.flags|=1;Xi(a,b,c,e);return b.child}\nfunction hj(a,b,c,d,e){if(Zf(c)){var f=!0;cg(b)}else f=!1;ch(b,e);if(null===b.stateNode)ij(a,b),Gi(b,c,d),Ii(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;\"object\"===typeof l&&null!==l?l=eh(l):(l=Zf(c)?Xf:H.current,l=Yf(b,l));var m=c.getDerivedStateFromProps,q=\"function\"===typeof m||\"function\"===typeof g.getSnapshotBeforeUpdate;q||\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||\n(h!==d||k!==l)&&Hi(b,g,d,l);jh=!1;var r=b.memoizedState;g.state=r;qh(b,d,g,e);k=b.memoizedState;h!==d||r!==k||Wf.current||jh?(\"function\"===typeof m&&(Di(b,c,m,d),k=b.memoizedState),(h=jh||Fi(b,c,h,d,r,k,l))?(q||\"function\"!==typeof g.UNSAFE_componentWillMount&&\"function\"!==typeof g.componentWillMount||(\"function\"===typeof g.componentWillMount&&g.componentWillMount(),\"function\"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),\"function\"===typeof g.componentDidMount&&(b.flags|=4194308)):\n(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):(\"function\"===typeof g.componentDidMount&&(b.flags|=4194308),d=!1)}else{g=b.stateNode;lh(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:Ci(b.type,h);g.props=l;q=b.pendingProps;r=g.context;k=c.contextType;\"object\"===typeof k&&null!==k?k=eh(k):(k=Zf(c)?Xf:H.current,k=Yf(b,k));var y=c.getDerivedStateFromProps;(m=\"function\"===typeof y||\"function\"===typeof g.getSnapshotBeforeUpdate)||\n\"function\"!==typeof g.UNSAFE_componentWillReceiveProps&&\"function\"!==typeof g.componentWillReceiveProps||(h!==q||r!==k)&&Hi(b,g,d,k);jh=!1;r=b.memoizedState;g.state=r;qh(b,d,g,e);var n=b.memoizedState;h!==q||r!==n||Wf.current||jh?(\"function\"===typeof y&&(Di(b,c,y,d),n=b.memoizedState),(l=jh||Fi(b,c,l,d,r,n,k)||!1)?(m||\"function\"!==typeof g.UNSAFE_componentWillUpdate&&\"function\"!==typeof g.componentWillUpdate||(\"function\"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,n,k),\"function\"===typeof g.UNSAFE_componentWillUpdate&&\ng.UNSAFE_componentWillUpdate(d,n,k)),\"function\"===typeof g.componentDidUpdate&&(b.flags|=4),\"function\"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=1024)):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),b.memoizedProps=d,b.memoizedState=n),g.props=d,g.state=n,g.context=k,d=l):(\"function\"!==typeof g.componentDidUpdate||h===a.memoizedProps&&r===\na.memoizedState||(b.flags|=4),\"function\"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&r===a.memoizedState||(b.flags|=1024),d=!1)}return jj(a,b,c,d,f,e)}\nfunction jj(a,b,c,d,e,f){gj(a,b);var g=0!==(b.flags&128);if(!d&&!g)return e&&dg(b,c,!1),Zi(a,b,f);d=b.stateNode;Wi.current=b;var h=g&&\"function\"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=Ug(b,a.child,null,f),b.child=Ug(b,null,h,f)):Xi(a,b,h,f);b.memoizedState=d.state;e&&dg(b,c,!0);return b.child}function kj(a){var b=a.stateNode;b.pendingContext?ag(a,b.pendingContext,b.pendingContext!==b.context):b.context&&ag(a,b.context,!1);yh(a,b.containerInfo)}\nfunction lj(a,b,c,d,e){Ig();Jg(e);b.flags|=256;Xi(a,b,c,d);return b.child}var mj={dehydrated:null,treeContext:null,retryLane:0};function nj(a){return{baseLanes:a,cachePool:null,transitions:null}}\nfunction oj(a,b,c){var d=b.pendingProps,e=L.current,f=!1,g=0!==(b.flags&128),h;(h=g)||(h=null!==a&&null===a.memoizedState?!1:0!==(e&2));if(h)f=!0,b.flags&=-129;else if(null===a||null!==a.memoizedState)e|=1;G(L,e&1);if(null===a){Eg(b);a=b.memoizedState;if(null!==a&&(a=a.dehydrated,null!==a))return 0===(b.mode&1)?b.lanes=1:\"$!\"===a.data?b.lanes=8:b.lanes=1073741824,null;g=d.children;a=d.fallback;return f?(d=b.mode,f=b.child,g={mode:\"hidden\",children:g},0===(d&1)&&null!==f?(f.childLanes=0,f.pendingProps=\ng):f=pj(g,d,0,null),a=Tg(a,d,c,null),f.return=b,a.return=b,f.sibling=a,b.child=f,b.child.memoizedState=nj(c),b.memoizedState=mj,a):qj(b,g)}e=a.memoizedState;if(null!==e&&(h=e.dehydrated,null!==h))return rj(a,b,g,d,h,e,c);if(f){f=d.fallback;g=b.mode;e=a.child;h=e.sibling;var k={mode:\"hidden\",children:d.children};0===(g&1)&&b.child!==e?(d=b.child,d.childLanes=0,d.pendingProps=k,b.deletions=null):(d=Pg(e,k),d.subtreeFlags=e.subtreeFlags&14680064);null!==h?f=Pg(h,f):(f=Tg(f,g,c,null),f.flags|=2);f.return=\nb;d.return=b;d.sibling=f;b.child=d;d=f;f=b.child;g=a.child.memoizedState;g=null===g?nj(c):{baseLanes:g.baseLanes|c,cachePool:null,transitions:g.transitions};f.memoizedState=g;f.childLanes=a.childLanes&~c;b.memoizedState=mj;return d}f=a.child;a=f.sibling;d=Pg(f,{mode:\"visible\",children:d.children});0===(b.mode&1)&&(d.lanes=c);d.return=b;d.sibling=null;null!==a&&(c=b.deletions,null===c?(b.deletions=[a],b.flags|=16):c.push(a));b.child=d;b.memoizedState=null;return d}\nfunction qj(a,b){b=pj({mode:\"visible\",children:b},a.mode,0,null);b.return=a;return a.child=b}function sj(a,b,c,d){null!==d&&Jg(d);Ug(b,a.child,null,c);a=qj(b,b.pendingProps.children);a.flags|=2;b.memoizedState=null;return a}\nfunction rj(a,b,c,d,e,f,g){if(c){if(b.flags&256)return b.flags&=-257,d=Ki(Error(p(422))),sj(a,b,g,d);if(null!==b.memoizedState)return b.child=a.child,b.flags|=128,null;f=d.fallback;e=b.mode;d=pj({mode:\"visible\",children:d.children},e,0,null);f=Tg(f,e,g,null);f.flags|=2;d.return=b;f.return=b;d.sibling=f;b.child=d;0!==(b.mode&1)&&Ug(b,a.child,null,g);b.child.memoizedState=nj(g);b.memoizedState=mj;return f}if(0===(b.mode&1))return sj(a,b,g,null);if(\"$!\"===e.data){d=e.nextSibling&&e.nextSibling.dataset;\nif(d)var h=d.dgst;d=h;f=Error(p(419));d=Ki(f,d,void 0);return sj(a,b,g,d)}h=0!==(g&a.childLanes);if(dh||h){d=Q;if(null!==d){switch(g&-g){case 4:e=2;break;case 16:e=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:e=32;break;case 536870912:e=268435456;break;default:e=0}e=0!==(e&(d.suspendedLanes|g))?0:e;\n0!==e&&e!==f.retryLane&&(f.retryLane=e,ih(a,e),gi(d,a,e,-1))}tj();d=Ki(Error(p(421)));return sj(a,b,g,d)}if(\"$?\"===e.data)return b.flags|=128,b.child=a.child,b=uj.bind(null,a),e._reactRetry=b,null;a=f.treeContext;yg=Lf(e.nextSibling);xg=b;I=!0;zg=null;null!==a&&(og[pg++]=rg,og[pg++]=sg,og[pg++]=qg,rg=a.id,sg=a.overflow,qg=b);b=qj(b,d.children);b.flags|=4096;return b}function vj(a,b,c){a.lanes|=b;var d=a.alternate;null!==d&&(d.lanes|=b);bh(a.return,b,c)}\nfunction wj(a,b,c,d,e){var f=a.memoizedState;null===f?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e}:(f.isBackwards=b,f.rendering=null,f.renderingStartTime=0,f.last=d,f.tail=c,f.tailMode=e)}\nfunction xj(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;Xi(a,b,d.children,c);d=L.current;if(0!==(d&2))d=d&1|2,b.flags|=128;else{if(null!==a&&0!==(a.flags&128))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&vj(a,c,b);else if(19===a.tag)vj(a,c,b);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}G(L,d);if(0===(b.mode&1))b.memoizedState=\nnull;else switch(e){case \"forwards\":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===Ch(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);wj(b,!1,e,c,f);break;case \"backwards\":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===Ch(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}wj(b,!0,c,null,f);break;case \"together\":wj(b,!1,null,null,void 0);break;default:b.memoizedState=null}return b.child}\nfunction ij(a,b){0===(b.mode&1)&&null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2)}function Zi(a,b,c){null!==a&&(b.dependencies=a.dependencies);rh|=b.lanes;if(0===(c&b.childLanes))return null;if(null!==a&&b.child!==a.child)throw Error(p(153));if(null!==b.child){a=b.child;c=Pg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Pg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}\nfunction yj(a,b,c){switch(b.tag){case 3:kj(b);Ig();break;case 5:Ah(b);break;case 1:Zf(b.type)&&cg(b);break;case 4:yh(b,b.stateNode.containerInfo);break;case 10:var d=b.type._context,e=b.memoizedProps.value;G(Wg,d._currentValue);d._currentValue=e;break;case 13:d=b.memoizedState;if(null!==d){if(null!==d.dehydrated)return G(L,L.current&1),b.flags|=128,null;if(0!==(c&b.child.childLanes))return oj(a,b,c);G(L,L.current&1);a=Zi(a,b,c);return null!==a?a.sibling:null}G(L,L.current&1);break;case 19:d=0!==(c&\nb.childLanes);if(0!==(a.flags&128)){if(d)return xj(a,b,c);b.flags|=128}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);G(L,L.current);if(d)break;else return null;case 22:case 23:return b.lanes=0,dj(a,b,c)}return Zi(a,b,c)}var zj,Aj,Bj,Cj;\nzj=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};Aj=function(){};\nBj=function(a,b,c,d){var e=a.memoizedProps;if(e!==d){a=b.stateNode;xh(uh.current);var f=null;switch(c){case \"input\":e=Ya(a,e);d=Ya(a,d);f=[];break;case \"select\":e=A({},e,{value:void 0});d=A({},d,{value:void 0});f=[];break;case \"textarea\":e=gb(a,e);d=gb(a,d);f=[];break;default:\"function\"!==typeof e.onClick&&\"function\"===typeof d.onClick&&(a.onclick=Bf)}ub(c,d);var g;c=null;for(l in e)if(!d.hasOwnProperty(l)&&e.hasOwnProperty(l)&&null!=e[l])if(\"style\"===l){var h=e[l];for(g in h)h.hasOwnProperty(g)&&\n(c||(c={}),c[g]=\"\")}else\"dangerouslySetInnerHTML\"!==l&&\"children\"!==l&&\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&\"autoFocus\"!==l&&(ea.hasOwnProperty(l)?f||(f=[]):(f=f||[]).push(l,null));for(l in d){var k=d[l];h=null!=e?e[l]:void 0;if(d.hasOwnProperty(l)&&k!==h&&(null!=k||null!=h))if(\"style\"===l)if(h){for(g in h)!h.hasOwnProperty(g)||k&&k.hasOwnProperty(g)||(c||(c={}),c[g]=\"\");for(g in k)k.hasOwnProperty(g)&&h[g]!==k[g]&&(c||(c={}),c[g]=k[g])}else c||(f||(f=[]),f.push(l,\nc)),c=k;else\"dangerouslySetInnerHTML\"===l?(k=k?k.__html:void 0,h=h?h.__html:void 0,null!=k&&h!==k&&(f=f||[]).push(l,k)):\"children\"===l?\"string\"!==typeof k&&\"number\"!==typeof k||(f=f||[]).push(l,\"\"+k):\"suppressContentEditableWarning\"!==l&&\"suppressHydrationWarning\"!==l&&(ea.hasOwnProperty(l)?(null!=k&&\"onScroll\"===l&&D(\"scroll\",a),f||h===k||(f=[])):(f=f||[]).push(l,k))}c&&(f=f||[]).push(\"style\",c);var l=f;if(b.updateQueue=l)b.flags|=4}};Cj=function(a,b,c,d){c!==d&&(b.flags|=4)};\nfunction Dj(a,b){if(!I)switch(a.tailMode){case \"hidden\":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case \"collapsed\":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}\nfunction S(a){var b=null!==a.alternate&&a.alternate.child===a.child,c=0,d=0;if(b)for(var e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags&14680064,d|=e.flags&14680064,e.return=a,e=e.sibling;else for(e=a.child;null!==e;)c|=e.lanes|e.childLanes,d|=e.subtreeFlags,d|=e.flags,e.return=a,e=e.sibling;a.subtreeFlags|=d;a.childLanes=c;return b}\nfunction Ej(a,b,c){var d=b.pendingProps;wg(b);switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return S(b),null;case 1:return Zf(b.type)&&$f(),S(b),null;case 3:d=b.stateNode;zh();E(Wf);E(H);Eh();d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)Gg(b)?b.flags|=4:null===a||a.memoizedState.isDehydrated&&0===(b.flags&256)||(b.flags|=1024,null!==zg&&(Fj(zg),zg=null));Aj(a,b);S(b);return null;case 5:Bh(b);var e=xh(wh.current);\nc=b.type;if(null!==a&&null!=b.stateNode)Bj(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=512,b.flags|=2097152);else{if(!d){if(null===b.stateNode)throw Error(p(166));S(b);return null}a=xh(uh.current);if(Gg(b)){d=b.stateNode;c=b.type;var f=b.memoizedProps;d[Of]=b;d[Pf]=f;a=0!==(b.mode&1);switch(c){case \"dialog\":D(\"cancel\",d);D(\"close\",d);break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",d);break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],d);break;case \"source\":D(\"error\",d);break;case \"img\":case \"image\":case \"link\":D(\"error\",\nd);D(\"load\",d);break;case \"details\":D(\"toggle\",d);break;case \"input\":Za(d,f);D(\"invalid\",d);break;case \"select\":d._wrapperState={wasMultiple:!!f.multiple};D(\"invalid\",d);break;case \"textarea\":hb(d,f),D(\"invalid\",d)}ub(c,f);e=null;for(var g in f)if(f.hasOwnProperty(g)){var h=f[g];\"children\"===g?\"string\"===typeof h?d.textContent!==h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,h,a),e=[\"children\",h]):\"number\"===typeof h&&d.textContent!==\"\"+h&&(!0!==f.suppressHydrationWarning&&Af(d.textContent,\nh,a),e=[\"children\",\"\"+h]):ea.hasOwnProperty(g)&&null!=h&&\"onScroll\"===g&&D(\"scroll\",d)}switch(c){case \"input\":Va(d);db(d,f,!0);break;case \"textarea\":Va(d);jb(d);break;case \"select\":case \"option\":break;default:\"function\"===typeof f.onClick&&(d.onclick=Bf)}d=e;b.updateQueue=d;null!==d&&(b.flags|=4)}else{g=9===e.nodeType?e:e.ownerDocument;\"http://www.w3.org/1999/xhtml\"===a&&(a=kb(c));\"http://www.w3.org/1999/xhtml\"===a?\"script\"===c?(a=g.createElement(\"div\"),a.innerHTML=\"<script>\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;e<lf.length;e++)D(lf[e],a);e=d;break;case \"source\":D(\"error\",a);e=d;break;case \"img\":case \"image\":case \"link\":D(\"error\",\na);D(\"load\",a);e=d;break;case \"details\":D(\"toggle\",a);e=d;break;case \"input\":Za(a,d);e=Ya(a,d);D(\"invalid\",a);break;case \"option\":e=d;break;case \"select\":a._wrapperState={wasMultiple:!!d.multiple};e=A({},d,{value:void 0});D(\"invalid\",a);break;case \"textarea\":hb(a,d);e=gb(a,d);D(\"invalid\",a);break;default:e=d}ub(c,e);h=e;for(f in h)if(h.hasOwnProperty(f)){var k=h[f];\"style\"===f?sb(a,k):\"dangerouslySetInnerHTML\"===f?(k=k?k.__html:void 0,null!=k&&nb(a,k)):\"children\"===f?\"string\"===typeof k?(\"textarea\"!==\nc||\"\"!==k)&&ob(a,k):\"number\"===typeof k&&ob(a,\"\"+k):\"suppressContentEditableWarning\"!==f&&\"suppressHydrationWarning\"!==f&&\"autoFocus\"!==f&&(ea.hasOwnProperty(f)?null!=k&&\"onScroll\"===f&&D(\"scroll\",a):null!=k&&ta(a,f,k,g))}switch(c){case \"input\":Va(a);db(a,d,!1);break;case \"textarea\":Va(a);jb(a);break;case \"option\":null!=d.value&&a.setAttribute(\"value\",\"\"+Sa(d.value));break;case \"select\":a.multiple=!!d.multiple;f=d.value;null!=f?fb(a,!!d.multiple,f,!1):null!=d.defaultValue&&fb(a,!!d.multiple,d.defaultValue,\n!0);break;default:\"function\"===typeof e.onClick&&(a.onclick=Bf)}switch(c){case \"button\":case \"input\":case \"select\":case \"textarea\":d=!!d.autoFocus;break a;case \"img\":d=!0;break a;default:d=!1}}d&&(b.flags|=4)}null!==b.ref&&(b.flags|=512,b.flags|=2097152)}S(b);return null;case 6:if(a&&null!=b.stateNode)Cj(a,b,a.memoizedProps,d);else{if(\"string\"!==typeof d&&null===b.stateNode)throw Error(p(166));c=xh(wh.current);xh(uh.current);if(Gg(b)){d=b.stateNode;c=b.memoizedProps;d[Of]=b;if(f=d.nodeValue!==c)if(a=\nxg,null!==a)switch(a.tag){case 3:Af(d.nodeValue,c,0!==(a.mode&1));break;case 5:!0!==a.memoizedProps.suppressHydrationWarning&&Af(d.nodeValue,c,0!==(a.mode&1))}f&&(b.flags|=4)}else d=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),d[Of]=b,b.stateNode=d}S(b);return null;case 13:E(L);d=b.memoizedState;if(null===a||null!==a.memoizedState&&null!==a.memoizedState.dehydrated){if(I&&null!==yg&&0!==(b.mode&1)&&0===(b.flags&128))Hg(),Ig(),b.flags|=98560,f=!1;else if(f=Gg(b),null!==d&&null!==d.dehydrated){if(null===\na){if(!f)throw Error(p(318));f=b.memoizedState;f=null!==f?f.dehydrated:null;if(!f)throw Error(p(317));f[Of]=b}else Ig(),0===(b.flags&128)&&(b.memoizedState=null),b.flags|=4;S(b);f=!1}else null!==zg&&(Fj(zg),zg=null),f=!0;if(!f)return b.flags&65536?b:null}if(0!==(b.flags&128))return b.lanes=c,b;d=null!==d;d!==(null!==a&&null!==a.memoizedState)&&d&&(b.child.flags|=8192,0!==(b.mode&1)&&(null===a||0!==(L.current&1)?0===T&&(T=3):tj()));null!==b.updateQueue&&(b.flags|=4);S(b);return null;case 4:return zh(),\nAj(a,b),null===a&&sf(b.stateNode.containerInfo),S(b),null;case 10:return ah(b.type._context),S(b),null;case 17:return Zf(b.type)&&$f(),S(b),null;case 19:E(L);f=b.memoizedState;if(null===f)return S(b),null;d=0!==(b.flags&128);g=f.rendering;if(null===g)if(d)Dj(f,!1);else{if(0!==T||null!==a&&0!==(a.flags&128))for(a=b.child;null!==a;){g=Ch(a);if(null!==g){b.flags|=128;Dj(f,!1);d=g.updateQueue;null!==d&&(b.updateQueue=d,b.flags|=4);b.subtreeFlags=0;d=c;for(c=b.child;null!==c;)f=c,a=d,f.flags&=14680066,\ng=f.alternate,null===g?(f.childLanes=0,f.lanes=a,f.child=null,f.subtreeFlags=0,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,f.stateNode=null):(f.childLanes=g.childLanes,f.lanes=g.lanes,f.child=g.child,f.subtreeFlags=0,f.deletions=null,f.memoizedProps=g.memoizedProps,f.memoizedState=g.memoizedState,f.updateQueue=g.updateQueue,f.type=g.type,a=g.dependencies,f.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),c=c.sibling;G(L,L.current&1|2);return b.child}a=\na.sibling}null!==f.tail&&B()>Gj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;d<c.length;d++){var e=c[d];try{var f=a,g=b,h=g;a:for(;null!==h;){switch(h.tag){case 5:X=h.stateNode;Xj=!1;break a;case 3:X=h.stateNode.containerInfo;Xj=!0;break a;case 4:X=h.stateNode.containerInfo;Xj=!0;break a}h=h.return}if(null===X)throw Error(p(160));Zj(f,g,e);X=null;Xj=!1;var k=e.alternate;null!==k&&(k.return=null);e.return=null}catch(l){W(e,b,l)}}if(b.subtreeFlags&12854)for(b=b.child;null!==b;)dk(b,a),b=b.sibling}\nfunction dk(a,b){var c=a.alternate,d=a.flags;switch(a.tag){case 0:case 11:case 14:case 15:ck(b,a);ek(a);if(d&4){try{Pj(3,a,a.return),Qj(3,a)}catch(t){W(a,a.return,t)}try{Pj(5,a,a.return)}catch(t){W(a,a.return,t)}}break;case 1:ck(b,a);ek(a);d&512&&null!==c&&Lj(c,c.return);break;case 5:ck(b,a);ek(a);d&512&&null!==c&&Lj(c,c.return);if(a.flags&32){var e=a.stateNode;try{ob(e,\"\")}catch(t){W(a,a.return,t)}}if(d&4&&(e=a.stateNode,null!=e)){var f=a.memoizedProps,g=null!==c?c.memoizedProps:f,h=a.type,k=a.updateQueue;\na.updateQueue=null;if(null!==k)try{\"input\"===h&&\"radio\"===f.type&&null!=f.name&&ab(e,f);vb(h,g);var l=vb(h,f);for(g=0;g<k.length;g+=2){var m=k[g],q=k[g+1];\"style\"===m?sb(e,q):\"dangerouslySetInnerHTML\"===m?nb(e,q):\"children\"===m?ob(e,q):ta(e,m,q,l)}switch(h){case \"input\":bb(e,f);break;case \"textarea\":ib(e,f);break;case \"select\":var r=e._wrapperState.wasMultiple;e._wrapperState.wasMultiple=!!f.multiple;var y=f.value;null!=y?fb(e,!!f.multiple,y,!1):r!==!!f.multiple&&(null!=f.defaultValue?fb(e,!!f.multiple,\nf.defaultValue,!0):fb(e,!!f.multiple,f.multiple?[]:\"\",!1))}e[Pf]=f}catch(t){W(a,a.return,t)}}break;case 6:ck(b,a);ek(a);if(d&4){if(null===a.stateNode)throw Error(p(162));e=a.stateNode;f=a.memoizedProps;try{e.nodeValue=f}catch(t){W(a,a.return,t)}}break;case 3:ck(b,a);ek(a);if(d&4&&null!==c&&c.memoizedState.isDehydrated)try{bd(b.containerInfo)}catch(t){W(a,a.return,t)}break;case 4:ck(b,a);ek(a);break;case 13:ck(b,a);ek(a);e=a.child;e.flags&8192&&(f=null!==e.memoizedState,e.stateNode.isHidden=f,!f||\nnull!==e.alternate&&null!==e.alternate.memoizedState||(fk=B()));d&4&&ak(a);break;case 22:m=null!==c&&null!==c.memoizedState;a.mode&1?(U=(l=U)||m,ck(b,a),U=l):ck(b,a);ek(a);if(d&8192){l=null!==a.memoizedState;if((a.stateNode.isHidden=l)&&!m&&0!==(a.mode&1))for(V=a,m=a.child;null!==m;){for(q=V=m;null!==V;){r=V;y=r.child;switch(r.tag){case 0:case 11:case 14:case 15:Pj(4,r,r.return);break;case 1:Lj(r,r.return);var n=r.stateNode;if(\"function\"===typeof n.componentWillUnmount){d=r;c=r.return;try{b=d,n.props=\nb.memoizedProps,n.state=b.memoizedState,n.componentWillUnmount()}catch(t){W(d,c,t)}}break;case 5:Lj(r,r.return);break;case 22:if(null!==r.memoizedState){gk(q);continue}}null!==y?(y.return=r,V=y):gk(q)}m=m.sibling}a:for(m=null,q=a;;){if(5===q.tag){if(null===m){m=q;try{e=q.stateNode,l?(f=e.style,\"function\"===typeof f.setProperty?f.setProperty(\"display\",\"none\",\"important\"):f.display=\"none\"):(h=q.stateNode,k=q.memoizedProps.style,g=void 0!==k&&null!==k&&k.hasOwnProperty(\"display\")?k.display:null,h.style.display=\nrb(\"display\",g))}catch(t){W(a,a.return,t)}}}else if(6===q.tag){if(null===m)try{q.stateNode.nodeValue=l?\"\":q.memoizedProps}catch(t){W(a,a.return,t)}}else if((22!==q.tag&&23!==q.tag||null===q.memoizedState||q===a)&&null!==q.child){q.child.return=q;q=q.child;continue}if(q===a)break a;for(;null===q.sibling;){if(null===q.return||q.return===a)break a;m===q&&(m=null);q=q.return}m===q&&(m=null);q.sibling.return=q.return;q=q.sibling}}break;case 19:ck(b,a);ek(a);d&4&&ak(a);break;case 21:break;default:ck(b,\na),ek(a)}}function ek(a){var b=a.flags;if(b&2){try{a:{for(var c=a.return;null!==c;){if(Tj(c)){var d=c;break a}c=c.return}throw Error(p(160));}switch(d.tag){case 5:var e=d.stateNode;d.flags&32&&(ob(e,\"\"),d.flags&=-33);var f=Uj(a);Wj(a,f,e);break;case 3:case 4:var g=d.stateNode.containerInfo,h=Uj(a);Vj(a,h,g);break;default:throw Error(p(161));}}catch(k){W(a,a.return,k)}a.flags&=-3}b&4096&&(a.flags&=-4097)}function hk(a,b,c){V=a;ik(a,b,c)}\nfunction ik(a,b,c){for(var d=0!==(a.mode&1);null!==V;){var e=V,f=e.child;if(22===e.tag&&d){var g=null!==e.memoizedState||Jj;if(!g){var h=e.alternate,k=null!==h&&null!==h.memoizedState||U;h=Jj;var l=U;Jj=g;if((U=k)&&!l)for(V=e;null!==V;)g=V,k=g.child,22===g.tag&&null!==g.memoizedState?jk(e):null!==k?(k.return=g,V=k):jk(e);for(;null!==f;)V=f,ik(f,b,c),f=f.sibling;V=e;Jj=h;U=l}kk(a,b,c)}else 0!==(e.subtreeFlags&8772)&&null!==f?(f.return=e,V=f):kk(a,b,c)}}\nfunction kk(a){for(;null!==V;){var b=V;if(0!==(b.flags&8772)){var c=b.alternate;try{if(0!==(b.flags&8772))switch(b.tag){case 0:case 11:case 15:U||Qj(5,b);break;case 1:var d=b.stateNode;if(b.flags&4&&!U)if(null===c)d.componentDidMount();else{var e=b.elementType===b.type?c.memoizedProps:Ci(b.type,c.memoizedProps);d.componentDidUpdate(e,c.memoizedState,d.__reactInternalSnapshotBeforeUpdate)}var f=b.updateQueue;null!==f&&sh(b,f,d);break;case 3:var g=b.updateQueue;if(null!==g){c=null;if(null!==b.child)switch(b.child.tag){case 5:c=\nb.child.stateNode;break;case 1:c=b.child.stateNode}sh(b,g,c)}break;case 5:var h=b.stateNode;if(null===c&&b.flags&4){c=h;var k=b.memoizedProps;switch(b.type){case \"button\":case \"input\":case \"select\":case \"textarea\":k.autoFocus&&c.focus();break;case \"img\":k.src&&(c.src=k.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(null===b.memoizedState){var l=b.alternate;if(null!==l){var m=l.memoizedState;if(null!==m){var q=m.dehydrated;null!==q&&bd(q)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;\ndefault:throw Error(p(163));}U||b.flags&512&&Rj(b)}catch(r){W(b,b.return,r)}}if(b===a){V=null;break}c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}function gk(a){for(;null!==V;){var b=V;if(b===a){V=null;break}var c=b.sibling;if(null!==c){c.return=b.return;V=c;break}V=b.return}}\nfunction jk(a){for(;null!==V;){var b=V;try{switch(b.tag){case 0:case 11:case 15:var c=b.return;try{Qj(4,b)}catch(k){W(b,c,k)}break;case 1:var d=b.stateNode;if(\"function\"===typeof d.componentDidMount){var e=b.return;try{d.componentDidMount()}catch(k){W(b,e,k)}}var f=b.return;try{Rj(b)}catch(k){W(b,f,k)}break;case 5:var g=b.return;try{Rj(b)}catch(k){W(b,g,k)}}}catch(k){W(b,b.return,k)}if(b===a){V=null;break}var h=b.sibling;if(null!==h){h.return=b.return;V=h;break}V=b.return}}\nvar lk=Math.ceil,mk=ua.ReactCurrentDispatcher,nk=ua.ReactCurrentOwner,ok=ua.ReactCurrentBatchConfig,K=0,Q=null,Y=null,Z=0,fj=0,ej=Uf(0),T=0,pk=null,rh=0,qk=0,rk=0,sk=null,tk=null,fk=0,Gj=Infinity,uk=null,Oi=!1,Pi=null,Ri=null,vk=!1,wk=null,xk=0,yk=0,zk=null,Ak=-1,Bk=0;function R(){return 0!==(K&6)?B():-1!==Ak?Ak:Ak=B()}\nfunction yi(a){if(0===(a.mode&1))return 1;if(0!==(K&2)&&0!==Z)return Z&-Z;if(null!==Kg.transition)return 0===Bk&&(Bk=yc()),Bk;a=C;if(0!==a)return a;a=window.event;a=void 0===a?16:jd(a.type);return a}function gi(a,b,c,d){if(50<yk)throw yk=0,zk=null,Error(p(185));Ac(a,c,d);if(0===(K&2)||a!==Q)a===Q&&(0===(K&2)&&(qk|=c),4===T&&Ck(a,Z)),Dk(a,d),1===c&&0===K&&0===(b.mode&1)&&(Gj=B()+500,fg&&jg())}\nfunction Dk(a,b){var c=a.callbackNode;wc(a,b);var d=uc(a,a===Q?Z:0);if(0===d)null!==c&&bc(c),a.callbackNode=null,a.callbackPriority=0;else if(b=d&-d,a.callbackPriority!==b){null!=c&&bc(c);if(1===b)0===a.tag?ig(Ek.bind(null,a)):hg(Ek.bind(null,a)),Jf(function(){0===(K&6)&&jg()}),c=null;else{switch(Dc(d)){case 1:c=fc;break;case 4:c=gc;break;case 16:c=hc;break;case 536870912:c=jc;break;default:c=hc}c=Fk(c,Gk.bind(null,a))}a.callbackPriority=b;a.callbackNode=c}}\nfunction Gk(a,b){Ak=-1;Bk=0;if(0!==(K&6))throw Error(p(327));var c=a.callbackNode;if(Hk()&&a.callbackNode!==c)return null;var d=uc(a,a===Q?Z:0);if(0===d)return null;if(0!==(d&30)||0!==(d&a.expiredLanes)||b)b=Ik(a,d);else{b=d;var e=K;K|=2;var f=Jk();if(Q!==a||Z!==b)uk=null,Gj=B()+500,Kk(a,b);do try{Lk();break}catch(h){Mk(a,h)}while(1);$g();mk.current=f;K=e;null!==Y?b=0:(Q=null,Z=0,b=T)}if(0!==b){2===b&&(e=xc(a),0!==e&&(d=e,b=Nk(a,e)));if(1===b)throw c=pk,Kk(a,0),Ck(a,d),Dk(a,B()),c;if(6===b)Ck(a,d);\nelse{e=a.current.alternate;if(0===(d&30)&&!Ok(e)&&(b=Ik(a,d),2===b&&(f=xc(a),0!==f&&(d=f,b=Nk(a,f))),1===b))throw c=pk,Kk(a,0),Ck(a,d),Dk(a,B()),c;a.finishedWork=e;a.finishedLanes=d;switch(b){case 0:case 1:throw Error(p(345));case 2:Pk(a,tk,uk);break;case 3:Ck(a,d);if((d&130023424)===d&&(b=fk+500-B(),10<b)){if(0!==uc(a,0))break;e=a.suspendedLanes;if((e&d)!==d){R();a.pingedLanes|=a.suspendedLanes&e;break}a.timeoutHandle=Ff(Pk.bind(null,a,tk,uk),b);break}Pk(a,tk,uk);break;case 4:Ck(a,d);if((d&4194240)===\nd)break;b=a.eventTimes;for(e=-1;0<d;){var g=31-oc(d);f=1<<g;g=b[g];g>e&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10<d){a.timeoutHandle=Ff(Pk.bind(null,a,tk,uk),d);break}Pk(a,tk,uk);break;case 5:Pk(a,tk,uk);break;default:throw Error(p(329));}}}Dk(a,B());return a.callbackNode===c?Gk.bind(null,a):null}\nfunction Nk(a,b){var c=sk;a.current.memoizedState.isDehydrated&&(Kk(a,b).flags|=256);a=Ik(a,b);2!==a&&(b=tk,tk=c,null!==b&&Fj(b));return a}function Fj(a){null===tk?tk=a:tk.push.apply(tk,a)}\nfunction Ok(a){for(var b=a;;){if(b.flags&16384){var c=b.updateQueue;if(null!==c&&(c=c.stores,null!==c))for(var d=0;d<c.length;d++){var e=c[d],f=e.getSnapshot;e=e.value;try{if(!He(f(),e))return!1}catch(g){return!1}}}c=b.child;if(b.subtreeFlags&16384&&null!==c)c.return=b,b=c;else{if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return!0;b=b.return}b.sibling.return=b.return;b=b.sibling}}return!0}\nfunction Ck(a,b){b&=~rk;b&=~qk;a.suspendedLanes|=b;a.pingedLanes&=~b;for(a=a.expirationTimes;0<b;){var c=31-oc(b),d=1<<c;a[c]=-1;b&=~d}}function Ek(a){if(0!==(K&6))throw Error(p(327));Hk();var b=uc(a,0);if(0===(b&1))return Dk(a,B()),null;var c=Ik(a,b);if(0!==a.tag&&2===c){var d=xc(a);0!==d&&(b=d,c=Nk(a,d))}if(1===c)throw c=pk,Kk(a,0),Ck(a,b),Dk(a,B()),c;if(6===c)throw Error(p(345));a.finishedWork=a.current.alternate;a.finishedLanes=b;Pk(a,tk,uk);Dk(a,B());return null}\nfunction Qk(a,b){var c=K;K|=1;try{return a(b)}finally{K=c,0===K&&(Gj=B()+500,fg&&jg())}}function Rk(a){null!==wk&&0===wk.tag&&0===(K&6)&&Hk();var b=K;K|=1;var c=ok.transition,d=C;try{if(ok.transition=null,C=1,a)return a()}finally{C=d,ok.transition=c,K=b,0===(K&6)&&jg()}}function Hj(){fj=ej.current;E(ej)}\nfunction Kk(a,b){a.finishedWork=null;a.finishedLanes=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,Gf(c));if(null!==Y)for(c=Y.return;null!==c;){var d=c;wg(d);switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&$f();break;case 3:zh();E(Wf);E(H);Eh();break;case 5:Bh(d);break;case 4:zh();break;case 13:E(L);break;case 19:E(L);break;case 10:ah(d.type._context);break;case 22:case 23:Hj()}c=c.return}Q=a;Y=a=Pg(a.current,null);Z=fj=b;T=0;pk=null;rk=qk=rh=0;tk=sk=null;if(null!==fh){for(b=\n0;b<fh.length;b++)if(c=fh[b],d=c.interleaved,null!==d){c.interleaved=null;var e=d.next,f=c.pending;if(null!==f){var g=f.next;f.next=e;d.next=g}c.pending=d}fh=null}return a}\nfunction Mk(a,b){do{var c=Y;try{$g();Fh.current=Rh;if(Ih){for(var d=M.memoizedState;null!==d;){var e=d.queue;null!==e&&(e.pending=null);d=d.next}Ih=!1}Hh=0;O=N=M=null;Jh=!1;Kh=0;nk.current=null;if(null===c||null===c.return){T=1;pk=b;Y=null;break}a:{var f=a,g=c.return,h=c,k=b;b=Z;h.flags|=32768;if(null!==k&&\"object\"===typeof k&&\"function\"===typeof k.then){var l=k,m=h,q=m.tag;if(0===(m.mode&1)&&(0===q||11===q||15===q)){var r=m.alternate;r?(m.updateQueue=r.updateQueue,m.memoizedState=r.memoizedState,\nm.lanes=r.lanes):(m.updateQueue=null,m.memoizedState=null)}var y=Ui(g);if(null!==y){y.flags&=-257;Vi(y,g,h,f,b);y.mode&1&&Si(f,l,b);b=y;k=l;var n=b.updateQueue;if(null===n){var t=new Set;t.add(k);b.updateQueue=t}else n.add(k);break a}else{if(0===(b&1)){Si(f,l,b);tj();break a}k=Error(p(426))}}else if(I&&h.mode&1){var J=Ui(g);if(null!==J){0===(J.flags&65536)&&(J.flags|=256);Vi(J,g,h,f,b);Jg(Ji(k,h));break a}}f=k=Ji(k,h);4!==T&&(T=2);null===sk?sk=[f]:sk.push(f);f=g;do{switch(f.tag){case 3:f.flags|=65536;\nb&=-b;f.lanes|=b;var x=Ni(f,k,b);ph(f,x);break a;case 1:h=k;var w=f.type,u=f.stateNode;if(0===(f.flags&128)&&(\"function\"===typeof w.getDerivedStateFromError||null!==u&&\"function\"===typeof u.componentDidCatch&&(null===Ri||!Ri.has(u)))){f.flags|=65536;b&=-b;f.lanes|=b;var F=Qi(f,h,b);ph(f,F);break a}}f=f.return}while(null!==f)}Sk(c)}catch(na){b=na;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}function Jk(){var a=mk.current;mk.current=Rh;return null===a?Rh:a}\nfunction tj(){if(0===T||3===T||2===T)T=4;null===Q||0===(rh&268435455)&&0===(qk&268435455)||Ck(Q,Z)}function Ik(a,b){var c=K;K|=2;var d=Jk();if(Q!==a||Z!==b)uk=null,Kk(a,b);do try{Tk();break}catch(e){Mk(a,e)}while(1);$g();K=c;mk.current=d;if(null!==Y)throw Error(p(261));Q=null;Z=0;return T}function Tk(){for(;null!==Y;)Uk(Y)}function Lk(){for(;null!==Y&&!cc();)Uk(Y)}function Uk(a){var b=Vk(a.alternate,a,fj);a.memoizedProps=a.pendingProps;null===b?Sk(a):Y=b;nk.current=null}\nfunction Sk(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&32768)){if(c=Ej(c,b,fj),null!==c){Y=c;return}}else{c=Ij(c,b);if(null!==c){c.flags&=32767;Y=c;return}if(null!==a)a.flags|=32768,a.subtreeFlags=0,a.deletions=null;else{T=6;Y=null;return}}b=b.sibling;if(null!==b){Y=b;return}Y=b=a}while(null!==b);0===T&&(T=5)}function Pk(a,b,c){var d=C,e=ok.transition;try{ok.transition=null,C=1,Wk(a,b,c,d)}finally{ok.transition=e,C=d}return null}\nfunction Wk(a,b,c,d){do Hk();while(null!==wk);if(0!==(K&6))throw Error(p(327));c=a.finishedWork;var e=a.finishedLanes;if(null===c)return null;a.finishedWork=null;a.finishedLanes=0;if(c===a.current)throw Error(p(177));a.callbackNode=null;a.callbackPriority=0;var f=c.lanes|c.childLanes;Bc(a,f);a===Q&&(Y=Q=null,Z=0);0===(c.subtreeFlags&2064)&&0===(c.flags&2064)||vk||(vk=!0,Fk(hc,function(){Hk();return null}));f=0!==(c.flags&15990);if(0!==(c.subtreeFlags&15990)||f){f=ok.transition;ok.transition=null;\nvar g=C;C=1;var h=K;K|=4;nk.current=null;Oj(a,c);dk(c,a);Oe(Df);dd=!!Cf;Df=Cf=null;a.current=c;hk(c,a,e);dc();K=h;C=g;ok.transition=f}else a.current=c;vk&&(vk=!1,wk=a,xk=e);f=a.pendingLanes;0===f&&(Ri=null);mc(c.stateNode,d);Dk(a,B());if(null!==b)for(d=a.onRecoverableError,c=0;c<b.length;c++)e=b[c],d(e.value,{componentStack:e.stack,digest:e.digest});if(Oi)throw Oi=!1,a=Pi,Pi=null,a;0!==(xk&1)&&0!==a.tag&&Hk();f=a.pendingLanes;0!==(f&1)?a===zk?yk++:(yk=0,zk=a):yk=0;jg();return null}\nfunction Hk(){if(null!==wk){var a=Dc(xk),b=ok.transition,c=C;try{ok.transition=null;C=16>a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;k<h.length;k++){var l=h[k];for(V=l;null!==V;){var m=V;switch(m.tag){case 0:case 11:case 15:Pj(8,m,f)}var q=m.child;if(null!==q)q.return=m,V=q;else for(;null!==V;){m=V;var r=m.sibling,y=m.return;Sj(m);if(m===\nl){V=null;break}if(null!==r){r.return=y;V=r;break}V=y}}}var n=f.alternate;if(null!==n){var t=n.child;if(null!==t){n.child=null;do{var J=t.sibling;t.sibling=null;t=J}while(null!==t)}}V=f}}if(0!==(f.subtreeFlags&2064)&&null!==g)g.return=f,V=g;else b:for(;null!==V;){f=V;if(0!==(f.flags&2048))switch(f.tag){case 0:case 11:case 15:Pj(9,f,f.return)}var x=f.sibling;if(null!==x){x.return=f.return;V=x;break b}V=f.return}}var w=a.current;for(V=w;null!==V;){g=V;var u=g.child;if(0!==(g.subtreeFlags&2064)&&null!==\nu)u.return=g,V=u;else b:for(g=w;null!==V;){h=V;if(0!==(h.flags&2048))try{switch(h.tag){case 0:case 11:case 15:Qj(9,h)}}catch(na){W(h,h.return,na)}if(h===g){V=null;break b}var F=h.sibling;if(null!==F){F.return=h.return;V=F;break b}V=h.return}}K=e;jg();if(lc&&\"function\"===typeof lc.onPostCommitFiberRoot)try{lc.onPostCommitFiberRoot(kc,a)}catch(na){}d=!0}return d}finally{C=c,ok.transition=b}}return!1}function Xk(a,b,c){b=Ji(c,b);b=Ni(a,b,1);a=nh(a,b,1);b=R();null!==a&&(Ac(a,1,b),Dk(a,b))}\nfunction W(a,b,c){if(3===a.tag)Xk(a,a,c);else for(;null!==b;){if(3===b.tag){Xk(b,a,c);break}else if(1===b.tag){var d=b.stateNode;if(\"function\"===typeof b.type.getDerivedStateFromError||\"function\"===typeof d.componentDidCatch&&(null===Ri||!Ri.has(d))){a=Ji(c,a);a=Qi(b,a,1);b=nh(b,a,1);a=R();null!==b&&(Ac(b,1,a),Dk(b,a));break}}b=b.return}}\nfunction Ti(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);b=R();a.pingedLanes|=a.suspendedLanes&c;Q===a&&(Z&c)===c&&(4===T||3===T&&(Z&130023424)===Z&&500>B()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:wa,key:null==d?null:\"\"+d,children:a,containerInfo:b,implementation:c}}\nfunction dl(a){if(!a)return Vf;a=a._reactInternals;a:{if(Vb(a)!==a||1!==a.tag)throw Error(p(170));var b=a;do{switch(b.tag){case 3:b=b.stateNode.context;break a;case 1:if(Zf(b.type)){b=b.stateNode.__reactInternalMemoizedMergedChildContext;break a}}b=b.return}while(null!==b);throw Error(p(171));}if(1===a.tag){var c=a.type;if(Zf(c))return bg(a,c,b)}return b}\nfunction el(a,b,c,d,e,f,g,h,k){a=bl(c,d,!0,a,e,f,g,h,k);a.context=dl(null);c=a.current;d=R();e=yi(c);f=mh(d,e);f.callback=void 0!==b&&null!==b?b:null;nh(c,f,e);a.current.lanes=e;Ac(a,e,d);Dk(a,d);return a}function fl(a,b,c,d){var e=b.current,f=R(),g=yi(e);c=dl(c);null===b.context?b.context=c:b.pendingContext=c;b=mh(f,g);b.payload={element:a};d=void 0===d?null:d;null!==d&&(b.callback=d);a=nh(e,b,g);null!==a&&(gi(a,e,g,f),oh(a,e,g));return g}\nfunction gl(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function hl(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c<b?c:b}}function il(a,b){hl(a,b);(a=a.alternate)&&hl(a,b)}function jl(){return null}var kl=\"function\"===typeof reportError?reportError:function(a){console.error(a)};function ll(a){this._internalRoot=a}\nml.prototype.render=ll.prototype.render=function(a){var b=this._internalRoot;if(null===b)throw Error(p(409));fl(a,b,null,null)};ml.prototype.unmount=ll.prototype.unmount=function(){var a=this._internalRoot;if(null!==a){this._internalRoot=null;var b=a.containerInfo;Rk(function(){fl(null,a,null,null)});b[uf]=null}};function ml(a){this._internalRoot=a}\nml.prototype.unstable_scheduleHydration=function(a){if(a){var b=Hc();a={blockedOn:null,target:a,priority:b};for(var c=0;c<Qc.length&&0!==b&&b<Qc[c].priority;c++);Qc.splice(c,0,a);0===c&&Vc(a)}};function nl(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType)}function ol(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||\" react-mount-point-unstable \"!==a.nodeValue))}function pl(){}\nfunction ql(a,b,c,d,e){if(e){if(\"function\"===typeof d){var f=d;d=function(){var a=gl(g);f.call(a)}}var g=el(b,d,a,0,null,!1,!1,\"\",pl);a._reactRootContainer=g;a[uf]=g.current;sf(8===a.nodeType?a.parentNode:a);Rk();return g}for(;e=a.lastChild;)a.removeChild(e);if(\"function\"===typeof d){var h=d;d=function(){var a=gl(k);h.call(a)}}var k=bl(a,0,!1,null,null,!1,!1,\"\",pl);a._reactRootContainer=k;a[uf]=k.current;sf(8===a.nodeType?a.parentNode:a);Rk(function(){fl(b,k,c,d)});return k}\nfunction rl(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f;if(\"function\"===typeof e){var h=e;e=function(){var a=gl(g);h.call(a)}}fl(b,g,a,e)}else g=ql(c,b,a,e,d);return gl(g)}Ec=function(a){switch(a.tag){case 3:var b=a.stateNode;if(b.current.memoizedState.isDehydrated){var c=tc(b.pendingLanes);0!==c&&(Cc(b,c|1),Dk(b,B()),0===(K&6)&&(Gj=B()+500,jg()))}break;case 13:Rk(function(){var b=ih(a,1);if(null!==b){var c=R();gi(b,a,1,c)}}),il(a,1)}};\nFc=function(a){if(13===a.tag){var b=ih(a,134217728);if(null!==b){var c=R();gi(b,a,134217728,c)}il(a,134217728)}};Gc=function(a){if(13===a.tag){var b=yi(a),c=ih(a,b);if(null!==c){var d=R();gi(c,a,b,d)}il(a,b)}};Hc=function(){return C};Ic=function(a,b){var c=C;try{return C=a,b()}finally{C=c}};\nyb=function(a,b,c){switch(b){case \"input\":bb(a,c);b=c.name;if(\"radio\"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll(\"input[name=\"+JSON.stringify(\"\"+b)+'][type=\"radio\"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Db(d);if(!e)throw Error(p(90));Wa(d);bb(d,e)}}}break;case \"textarea\":ib(a,c);break;case \"select\":b=c.value,null!=b&&fb(a,!!c.multiple,b,!1)}};Gb=Qk;Hb=Rk;\nvar sl={usingClientEntryPoint:!1,Events:[Cb,ue,Db,Eb,Fb,Qk]},tl={findFiberByHostInstance:Wc,bundleType:0,version:\"18.3.1\",rendererPackageName:\"react-dom\"};\nvar ul={bundleType:tl.bundleType,version:tl.version,rendererPackageName:tl.rendererPackageName,rendererConfig:tl.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ua.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=Zb(a);return null===a?null:a.stateNode},findFiberByHostInstance:tl.findFiberByHostInstance||\njl,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:\"18.3.1-next-f1338f8080-20240426\"};if(\"undefined\"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var vl=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!vl.isDisabled&&vl.supportsFiber)try{kc=vl.inject(ul),lc=vl}catch(a){}}exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=sl;\nexports.createPortal=function(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!nl(b))throw Error(p(200));return cl(a,b,null,c)};exports.createRoot=function(a,b){if(!nl(a))throw Error(p(299));var c=!1,d=\"\",e=kl;null!==b&&void 0!==b&&(!0===b.unstable_strictMode&&(c=!0),void 0!==b.identifierPrefix&&(d=b.identifierPrefix),void 0!==b.onRecoverableError&&(e=b.onRecoverableError));b=bl(a,1,!1,null,null,c,!1,d,e);a[uf]=b.current;sf(8===a.nodeType?a.parentNode:a);return new ll(b)};\nexports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternals;if(void 0===b){if(\"function\"===typeof a.render)throw Error(p(188));a=Object.keys(a).join(\",\");throw Error(p(268,a));}a=Zb(b);a=null===a?null:a.stateNode;return a};exports.flushSync=function(a){return Rk(a)};exports.hydrate=function(a,b,c){if(!ol(b))throw Error(p(200));return rl(null,a,b,!0,c)};\nexports.hydrateRoot=function(a,b,c){if(!nl(a))throw Error(p(405));var d=null!=c&&c.hydratedSources||null,e=!1,f=\"\",g=kl;null!==c&&void 0!==c&&(!0===c.unstable_strictMode&&(e=!0),void 0!==c.identifierPrefix&&(f=c.identifierPrefix),void 0!==c.onRecoverableError&&(g=c.onRecoverableError));b=el(b,null,a,1,null!=c?c:null,e,!1,f,g);a[uf]=b.current;sf(a);if(d)for(a=0;a<d.length;a++)c=d[a],e=c._getVersion,e=e(c._source),null==b.mutableSourceEagerHydrationData?b.mutableSourceEagerHydrationData=[c,e]:b.mutableSourceEagerHydrationData.push(c,\ne);return new ml(b)};exports.render=function(a,b,c){if(!ol(b))throw Error(p(200));return rl(null,a,b,!1,c)};exports.unmountComponentAtNode=function(a){if(!ol(a))throw Error(p(40));return a._reactRootContainer?(Rk(function(){rl(null,null,a,!1,function(){a._reactRootContainer=null;a[uf]=null})}),!0):!1};exports.unstable_batchedUpdates=Qk;\nexports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!ol(c))throw Error(p(200));if(null==a||void 0===a._reactInternals)throw Error(p(38));return rl(a,b,c,!1,d)};exports.version=\"18.3.1-next-f1338f8080-20240426\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.min.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n  exports.createRoot = m.createRoot;\n  exports.hydrateRoot = m.hydrateRoot;\n} else {\n  var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n  exports.createRoot = function(c, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.createRoot(c, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n  exports.hydrateRoot = function(c, h, o) {\n    i.usingClientEntryPoint = true;\n    try {\n      return m.hydrateRoot(c, h, o);\n    } finally {\n      i.usingClientEntryPoint = false;\n    }\n  };\n}\n","import * as React from \"react\"\n\nimport type {\n  ToastActionElement,\n  ToastProps,\n} from \"@/components/ui/toast\"\n\nconst TOAST_LIMIT = 1\nconst TOAST_REMOVE_DELAY = 1000000\n\ntype ToasterToast = ToastProps & {\n  id: string\n  title?: React.ReactNode\n  description?: React.ReactNode\n  action?: ToastActionElement\n}\n\nconst actionTypes = {\n  ADD_TOAST: \"ADD_TOAST\",\n  UPDATE_TOAST: \"UPDATE_TOAST\",\n  DISMISS_TOAST: \"DISMISS_TOAST\",\n  REMOVE_TOAST: \"REMOVE_TOAST\",\n} as const\n\nlet count = 0\n\nfunction genId() {\n  count = (count + 1) % Number.MAX_SAFE_INTEGER\n  return count.toString()\n}\n\ntype ActionType = typeof actionTypes\n\ntype Action =\n  | {\n      type: ActionType[\"ADD_TOAST\"]\n      toast: ToasterToast\n    }\n  | {\n      type: ActionType[\"UPDATE_TOAST\"]\n      toast: Partial<ToasterToast>\n    }\n  | {\n      type: ActionType[\"DISMISS_TOAST\"]\n      toastId?: ToasterToast[\"id\"]\n    }\n  | {\n      type: ActionType[\"REMOVE_TOAST\"]\n      toastId?: ToasterToast[\"id\"]\n    }\n\ninterface State {\n  toasts: ToasterToast[]\n}\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>()\n\nconst addToRemoveQueue = (toastId: string) => {\n  if (toastTimeouts.has(toastId)) {\n    return\n  }\n\n  const timeout = setTimeout(() => {\n    toastTimeouts.delete(toastId)\n    dispatch({\n      type: \"REMOVE_TOAST\",\n      toastId: toastId,\n    })\n  }, TOAST_REMOVE_DELAY)\n\n  toastTimeouts.set(toastId, timeout)\n}\n\nexport const reducer = (state: State, action: Action): State => {\n  switch (action.type) {\n    case \"ADD_TOAST\":\n      return {\n        ...state,\n        toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n      }\n\n    case \"UPDATE_TOAST\":\n      return {\n        ...state,\n        toasts: state.toasts.map((t) =>\n          t.id === action.toast.id ? { ...t, ...action.toast } : t\n        ),\n      }\n\n    case \"DISMISS_TOAST\": {\n      const { toastId } = action\n\n      // ! Side effects ! - This could be extracted into a dismissToast() action,\n      // but I'll keep it here for simplicity\n      if (toastId) {\n        addToRemoveQueue(toastId)\n      } else {\n        state.toasts.forEach((toast) => {\n          addToRemoveQueue(toast.id)\n        })\n      }\n\n      return {\n        ...state,\n        toasts: state.toasts.map((t) =>\n          t.id === toastId || toastId === undefined\n            ? {\n                ...t,\n                open: false,\n              }\n            : t\n        ),\n      }\n    }\n    case \"REMOVE_TOAST\":\n      if (action.toastId === undefined) {\n        return {\n          ...state,\n          toasts: [],\n        }\n      }\n      return {\n        ...state,\n        toasts: state.toasts.filter((t) => t.id !== action.toastId),\n      }\n  }\n}\n\nconst listeners: Array<(state: State) => void> = []\n\nlet memoryState: State = { toasts: [] }\n\nfunction dispatch(action: Action) {\n  memoryState = reducer(memoryState, action)\n  listeners.forEach((listener) => {\n    listener(memoryState)\n  })\n}\n\ntype Toast = Omit<ToasterToast, \"id\">\n\nfunction toast({ ...props }: Toast) {\n  const id = genId()\n\n  const update = (props: ToasterToast) =>\n    dispatch({\n      type: \"UPDATE_TOAST\",\n      toast: { ...props, id },\n    })\n  const dismiss = () => dispatch({ type: \"DISMISS_TOAST\", toastId: id })\n\n  dispatch({\n    type: \"ADD_TOAST\",\n    toast: {\n      ...props,\n      id,\n      open: true,\n      onOpenChange: (open) => {\n        if (!open) dismiss()\n      },\n    },\n  })\n\n  return {\n    id: id,\n    dismiss,\n    update,\n  }\n}\n\nfunction useToast() {\n  const [state, setState] = React.useState<State>(memoryState)\n\n  React.useEffect(() => {\n    listeners.push(setState)\n    return () => {\n      const index = listeners.indexOf(setState)\n      if (index > -1) {\n        listeners.splice(index, 1)\n      }\n    }\n  }, [state])\n\n  return {\n    ...state,\n    toast,\n    dismiss: (toastId?: string) => dispatch({ type: \"DISMISS_TOAST\", toastId }),\n  }\n}\n\nexport { useToast, toast }\n","// packages/core/primitive/src/primitive.tsx\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n  return function handleEvent(event) {\n    originalEventHandler?.(event);\n    if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n      return ourEventHandler?.(event);\n    }\n  };\n}\nexport {\n  composeEventHandlers\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/compose-refs/src/composeRefs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n  if (typeof ref === \"function\") {\n    ref(value);\n  } else if (ref !== null && ref !== void 0) {\n    ref.current = value;\n  }\n}\nfunction composeRefs(...refs) {\n  return (node) => refs.forEach((ref) => setRef(ref, node));\n}\nfunction useComposedRefs(...refs) {\n  return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n  composeRefs,\n  useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/createContext.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n  const Context = React.createContext(defaultContext);\n  function Provider(props) {\n    const { children, ...context } = props;\n    const value = React.useMemo(() => context, Object.values(context));\n    return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n  }\n  function useContext2(consumerName) {\n    const context = React.useContext(Context);\n    if (context) return context;\n    if (defaultContext !== void 0) return defaultContext;\n    throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n  }\n  Provider.displayName = rootComponentName + \"Provider\";\n  return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n  let defaultContexts = [];\n  function createContext3(rootComponentName, defaultContext) {\n    const BaseContext = React.createContext(defaultContext);\n    const index = defaultContexts.length;\n    defaultContexts = [...defaultContexts, defaultContext];\n    function Provider(props) {\n      const { scope, children, ...context } = props;\n      const Context = scope?.[scopeName][index] || BaseContext;\n      const value = React.useMemo(() => context, Object.values(context));\n      return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n    }\n    function useContext2(consumerName, scope) {\n      const Context = scope?.[scopeName][index] || BaseContext;\n      const context = React.useContext(Context);\n      if (context) return context;\n      if (defaultContext !== void 0) return defaultContext;\n      throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n    }\n    Provider.displayName = rootComponentName + \"Provider\";\n    return [Provider, useContext2];\n  }\n  const createScope = () => {\n    const scopeContexts = defaultContexts.map((defaultContext) => {\n      return React.createContext(defaultContext);\n    });\n    return function useScope(scope) {\n      const contexts = scope?.[scopeName] || scopeContexts;\n      return React.useMemo(\n        () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n        [scope, contexts]\n      );\n    };\n  };\n  createScope.scopeName = scopeName;\n  return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n  const baseScope = scopes[0];\n  if (scopes.length === 1) return baseScope;\n  const createScope = () => {\n    const scopeHooks = scopes.map((createScope2) => ({\n      useScope: createScope2(),\n      scopeName: createScope2.scopeName\n    }));\n    return function useComposedScopes(overrideScopes) {\n      const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n        const scopeProps = useScope(overrideScopes);\n        const currentScope = scopeProps[`__scope${scopeName}`];\n        return { ...nextScopes2, ...currentScope };\n      }, {});\n      return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n    };\n  };\n  createScope.scopeName = baseScope.scopeName;\n  return createScope;\n}\nexport {\n  createContext2 as createContext,\n  createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/slot/src/Slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment, jsx } from \"react/jsx-runtime\";\nvar Slot = React.forwardRef((props, forwardedRef) => {\n  const { children, ...slotProps } = props;\n  const childrenArray = React.Children.toArray(children);\n  const slottable = childrenArray.find(isSlottable);\n  if (slottable) {\n    const newElement = slottable.props.children;\n    const newChildren = childrenArray.map((child) => {\n      if (child === slottable) {\n        if (React.Children.count(newElement) > 1) return React.Children.only(null);\n        return React.isValidElement(newElement) ? newElement.props.children : null;\n      } else {\n        return child;\n      }\n    });\n    return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n  }\n  return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n});\nSlot.displayName = \"Slot\";\nvar SlotClone = React.forwardRef((props, forwardedRef) => {\n  const { children, ...slotProps } = props;\n  if (React.isValidElement(children)) {\n    const childrenRef = getElementRef(children);\n    return React.cloneElement(children, {\n      ...mergeProps(slotProps, children.props),\n      // @ts-ignore\n      ref: forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef\n    });\n  }\n  return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n});\nSlotClone.displayName = \"SlotClone\";\nvar Slottable = ({ children }) => {\n  return /* @__PURE__ */ jsx(Fragment, { children });\n};\nfunction isSlottable(child) {\n  return React.isValidElement(child) && child.type === Slottable;\n}\nfunction mergeProps(slotProps, childProps) {\n  const overrideProps = { ...childProps };\n  for (const propName in childProps) {\n    const slotPropValue = slotProps[propName];\n    const childPropValue = childProps[propName];\n    const isHandler = /^on[A-Z]/.test(propName);\n    if (isHandler) {\n      if (slotPropValue && childPropValue) {\n        overrideProps[propName] = (...args) => {\n          childPropValue(...args);\n          slotPropValue(...args);\n        };\n      } else if (slotPropValue) {\n        overrideProps[propName] = slotPropValue;\n      }\n    } else if (propName === \"style\") {\n      overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n    } else if (propName === \"className\") {\n      overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n    }\n  }\n  return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n  let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n  let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.ref;\n  }\n  getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n  mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n  return element.props.ref || element.ref;\n}\nvar Root = Slot;\nexport {\n  Root,\n  Slot,\n  Slottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/collection/src/Collection.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n  const PROVIDER_NAME = name + \"CollectionProvider\";\n  const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n  const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n    PROVIDER_NAME,\n    { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n  );\n  const CollectionProvider = (props) => {\n    const { scope, children } = props;\n    const ref = React.useRef(null);\n    const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n    return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n  };\n  CollectionProvider.displayName = PROVIDER_NAME;\n  const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n  const CollectionSlot = React.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children } = props;\n      const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n      const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n      return /* @__PURE__ */ jsx(Slot, { ref: composedRefs, children });\n    }\n  );\n  CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n  const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n  const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n  const CollectionItemSlot = React.forwardRef(\n    (props, forwardedRef) => {\n      const { scope, children, ...itemData } = props;\n      const ref = React.useRef(null);\n      const composedRefs = useComposedRefs(forwardedRef, ref);\n      const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n      React.useEffect(() => {\n        context.itemMap.set(ref, { ref, ...itemData });\n        return () => void context.itemMap.delete(ref);\n      });\n      return /* @__PURE__ */ jsx(Slot, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n    }\n  );\n  CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n  function useCollection(scope) {\n    const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n    const getItems = React.useCallback(() => {\n      const collectionNode = context.collectionRef.current;\n      if (!collectionNode) return [];\n      const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n      const items = Array.from(context.itemMap.values());\n      const orderedItems = items.sort(\n        (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n      );\n      return orderedItems;\n    }, [context.collectionRef, context.itemMap]);\n    return getItems;\n  }\n  return [\n    { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n    useCollection,\n    createCollectionScope\n  ];\n}\nexport {\n  createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/primitive/src/Primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n  \"a\",\n  \"button\",\n  \"div\",\n  \"form\",\n  \"h2\",\n  \"h3\",\n  \"img\",\n  \"input\",\n  \"label\",\n  \"li\",\n  \"nav\",\n  \"ol\",\n  \"p\",\n  \"span\",\n  \"svg\",\n  \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n  const Node = React.forwardRef((props, forwardedRef) => {\n    const { asChild, ...primitiveProps } = props;\n    const Comp = asChild ? Slot : node;\n    if (typeof window !== \"undefined\") {\n      window[Symbol.for(\"radix-ui\")] = true;\n    }\n    return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n  });\n  Node.displayName = `Primitive.${node}`;\n  return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n  if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n  Primitive,\n  Root,\n  dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-callback-ref/src/useCallbackRef.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n  const callbackRef = React.useRef(callback);\n  React.useEffect(() => {\n    callbackRef.current = callback;\n  });\n  return React.useMemo(() => (...args) => callbackRef.current?.(...args), []);\n}\nexport {\n  useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-escape-keydown/src/useEscapeKeydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n  const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n  React.useEffect(() => {\n    const handleKeyDown = (event) => {\n      if (event.key === \"Escape\") {\n        onEscapeKeyDown(event);\n      }\n    };\n    ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n    return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n  }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n  useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/dismissable-layer/src/DismissableLayer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n  layers: /* @__PURE__ */ new Set(),\n  layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n  branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      disableOutsidePointerEvents = false,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      onFocusOutside,\n      onInteractOutside,\n      onDismiss,\n      ...layerProps\n    } = props;\n    const context = React.useContext(DismissableLayerContext);\n    const [node, setNode] = React.useState(null);\n    const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n    const [, force] = React.useState({});\n    const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n    const layers = Array.from(context.layers);\n    const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n    const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n    const index = node ? layers.indexOf(node) : -1;\n    const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n    const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n    const pointerDownOutside = usePointerDownOutside((event) => {\n      const target = event.target;\n      const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n      if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n      onPointerDownOutside?.(event);\n      onInteractOutside?.(event);\n      if (!event.defaultPrevented) onDismiss?.();\n    }, ownerDocument);\n    const focusOutside = useFocusOutside((event) => {\n      const target = event.target;\n      const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n      if (isFocusInBranch) return;\n      onFocusOutside?.(event);\n      onInteractOutside?.(event);\n      if (!event.defaultPrevented) onDismiss?.();\n    }, ownerDocument);\n    useEscapeKeydown((event) => {\n      const isHighestLayer = index === context.layers.size - 1;\n      if (!isHighestLayer) return;\n      onEscapeKeyDown?.(event);\n      if (!event.defaultPrevented && onDismiss) {\n        event.preventDefault();\n        onDismiss();\n      }\n    }, ownerDocument);\n    React.useEffect(() => {\n      if (!node) return;\n      if (disableOutsidePointerEvents) {\n        if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n          originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n          ownerDocument.body.style.pointerEvents = \"none\";\n        }\n        context.layersWithOutsidePointerEventsDisabled.add(node);\n      }\n      context.layers.add(node);\n      dispatchUpdate();\n      return () => {\n        if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n          ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n        }\n      };\n    }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n    React.useEffect(() => {\n      return () => {\n        if (!node) return;\n        context.layers.delete(node);\n        context.layersWithOutsidePointerEventsDisabled.delete(node);\n        dispatchUpdate();\n      };\n    }, [node, context]);\n    React.useEffect(() => {\n      const handleUpdate = () => force({});\n      document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n      return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n    }, []);\n    return /* @__PURE__ */ jsx(\n      Primitive.div,\n      {\n        ...layerProps,\n        ref: composedRefs,\n        style: {\n          pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n          ...props.style\n        },\n        onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n        onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n        onPointerDownCapture: composeEventHandlers(\n          props.onPointerDownCapture,\n          pointerDownOutside.onPointerDownCapture\n        )\n      }\n    );\n  }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n  const context = React.useContext(DismissableLayerContext);\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  React.useEffect(() => {\n    const node = ref.current;\n    if (node) {\n      context.branches.add(node);\n      return () => {\n        context.branches.delete(node);\n      };\n    }\n  }, [context.branches]);\n  return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n  const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n  const isPointerInsideReactTreeRef = React.useRef(false);\n  const handleClickRef = React.useRef(() => {\n  });\n  React.useEffect(() => {\n    const handlePointerDown = (event) => {\n      if (event.target && !isPointerInsideReactTreeRef.current) {\n        let handleAndDispatchPointerDownOutsideEvent2 = function() {\n          handleAndDispatchCustomEvent(\n            POINTER_DOWN_OUTSIDE,\n            handlePointerDownOutside,\n            eventDetail,\n            { discrete: true }\n          );\n        };\n        var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n        const eventDetail = { originalEvent: event };\n        if (event.pointerType === \"touch\") {\n          ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n          handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n          ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n        } else {\n          handleAndDispatchPointerDownOutsideEvent2();\n        }\n      } else {\n        ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n      }\n      isPointerInsideReactTreeRef.current = false;\n    };\n    const timerId = window.setTimeout(() => {\n      ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n    }, 0);\n    return () => {\n      window.clearTimeout(timerId);\n      ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n      ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n    };\n  }, [ownerDocument, handlePointerDownOutside]);\n  return {\n    // ensures we check React component tree (not just DOM tree)\n    onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n  };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n  const handleFocusOutside = useCallbackRef(onFocusOutside);\n  const isFocusInsideReactTreeRef = React.useRef(false);\n  React.useEffect(() => {\n    const handleFocus = (event) => {\n      if (event.target && !isFocusInsideReactTreeRef.current) {\n        const eventDetail = { originalEvent: event };\n        handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n          discrete: false\n        });\n      }\n    };\n    ownerDocument.addEventListener(\"focusin\", handleFocus);\n    return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n  }, [ownerDocument, handleFocusOutside]);\n  return {\n    onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n    onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n  };\n}\nfunction dispatchUpdate() {\n  const event = new CustomEvent(CONTEXT_UPDATE);\n  document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n  const target = detail.originalEvent.target;\n  const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n  if (handler) target.addEventListener(name, handler, { once: true });\n  if (discrete) {\n    dispatchDiscreteCustomEvent(target, event);\n  } else {\n    target.dispatchEvent(event);\n  }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n  Branch,\n  DismissableLayer,\n  DismissableLayerBranch,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-layout-effect/src/useLayoutEffect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = Boolean(globalThis?.document) ? React.useLayoutEffect : () => {\n};\nexport {\n  useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/portal/src/Portal.tsx\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n  const { container: containerProp, ...portalProps } = props;\n  const [mounted, setMounted] = React.useState(false);\n  useLayoutEffect(() => setMounted(true), []);\n  const container = containerProp || mounted && globalThis?.document?.body;\n  return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n  Portal,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/presence/src/Presence.tsx\nimport * as React2 from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// packages/react/presence/src/useStateMachine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n  return React.useReducer((state, event) => {\n    const nextState = machine[state][event];\n    return nextState ?? state;\n  }, initialState);\n}\n\n// packages/react/presence/src/Presence.tsx\nvar Presence = (props) => {\n  const { present, children } = props;\n  const presence = usePresence(present);\n  const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n  const ref = useComposedRefs(presence.ref, getElementRef(child));\n  const forceMount = typeof children === \"function\";\n  return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n  const [node, setNode] = React2.useState();\n  const stylesRef = React2.useRef({});\n  const prevPresentRef = React2.useRef(present);\n  const prevAnimationNameRef = React2.useRef(\"none\");\n  const initialState = present ? \"mounted\" : \"unmounted\";\n  const [state, send] = useStateMachine(initialState, {\n    mounted: {\n      UNMOUNT: \"unmounted\",\n      ANIMATION_OUT: \"unmountSuspended\"\n    },\n    unmountSuspended: {\n      MOUNT: \"mounted\",\n      ANIMATION_END: \"unmounted\"\n    },\n    unmounted: {\n      MOUNT: \"mounted\"\n    }\n  });\n  React2.useEffect(() => {\n    const currentAnimationName = getAnimationName(stylesRef.current);\n    prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n  }, [state]);\n  useLayoutEffect(() => {\n    const styles = stylesRef.current;\n    const wasPresent = prevPresentRef.current;\n    const hasPresentChanged = wasPresent !== present;\n    if (hasPresentChanged) {\n      const prevAnimationName = prevAnimationNameRef.current;\n      const currentAnimationName = getAnimationName(styles);\n      if (present) {\n        send(\"MOUNT\");\n      } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n        send(\"UNMOUNT\");\n      } else {\n        const isAnimating = prevAnimationName !== currentAnimationName;\n        if (wasPresent && isAnimating) {\n          send(\"ANIMATION_OUT\");\n        } else {\n          send(\"UNMOUNT\");\n        }\n      }\n      prevPresentRef.current = present;\n    }\n  }, [present, send]);\n  useLayoutEffect(() => {\n    if (node) {\n      const handleAnimationEnd = (event) => {\n        const currentAnimationName = getAnimationName(stylesRef.current);\n        const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n        if (event.target === node && isCurrentAnimation) {\n          ReactDOM.flushSync(() => send(\"ANIMATION_END\"));\n        }\n      };\n      const handleAnimationStart = (event) => {\n        if (event.target === node) {\n          prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n        }\n      };\n      node.addEventListener(\"animationstart\", handleAnimationStart);\n      node.addEventListener(\"animationcancel\", handleAnimationEnd);\n      node.addEventListener(\"animationend\", handleAnimationEnd);\n      return () => {\n        node.removeEventListener(\"animationstart\", handleAnimationStart);\n        node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n        node.removeEventListener(\"animationend\", handleAnimationEnd);\n      };\n    } else {\n      send(\"ANIMATION_END\");\n    }\n  }, [node, send]);\n  return {\n    isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n    ref: React2.useCallback((node2) => {\n      if (node2) stylesRef.current = getComputedStyle(node2);\n      setNode(node2);\n    }, [])\n  };\n}\nfunction getAnimationName(styles) {\n  return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n  let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n  let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.ref;\n  }\n  getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n  mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n  return element.props.ref || element.ref;\n}\nexport {\n  Presence\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-controllable-state/src/useControllableState.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useControllableState({\n  prop,\n  defaultProp,\n  onChange = () => {\n  }\n}) {\n  const [uncontrolledProp, setUncontrolledProp] = useUncontrolledState({ defaultProp, onChange });\n  const isControlled = prop !== void 0;\n  const value = isControlled ? prop : uncontrolledProp;\n  const handleChange = useCallbackRef(onChange);\n  const setValue = React.useCallback(\n    (nextValue) => {\n      if (isControlled) {\n        const setter = nextValue;\n        const value2 = typeof nextValue === \"function\" ? setter(prop) : nextValue;\n        if (value2 !== prop) handleChange(value2);\n      } else {\n        setUncontrolledProp(nextValue);\n      }\n    },\n    [isControlled, prop, setUncontrolledProp, handleChange]\n  );\n  return [value, setValue];\n}\nfunction useUncontrolledState({\n  defaultProp,\n  onChange\n}) {\n  const uncontrolledState = React.useState(defaultProp);\n  const [value] = uncontrolledState;\n  const prevValueRef = React.useRef(value);\n  const handleChange = useCallbackRef(onChange);\n  React.useEffect(() => {\n    if (prevValueRef.current !== value) {\n      handleChange(value);\n      prevValueRef.current = value;\n    }\n  }, [value, prevValueRef, handleChange]);\n  return uncontrolledState;\n}\nexport {\n  useControllableState\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/visually-hidden/src/VisuallyHidden.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"VisuallyHidden\";\nvar VisuallyHidden = React.forwardRef(\n  (props, forwardedRef) => {\n    return /* @__PURE__ */ jsx(\n      Primitive.span,\n      {\n        ...props,\n        ref: forwardedRef,\n        style: {\n          // See: https://github.com/twbs/bootstrap/blob/master/scss/mixins/_screen-reader.scss\n          position: \"absolute\",\n          border: 0,\n          width: 1,\n          height: 1,\n          padding: 0,\n          margin: -1,\n          overflow: \"hidden\",\n          clip: \"rect(0, 0, 0, 0)\",\n          whiteSpace: \"nowrap\",\n          wordWrap: \"normal\",\n          ...props.style\n        }\n      }\n    );\n  }\n);\nVisuallyHidden.displayName = NAME;\nvar Root = VisuallyHidden;\nexport {\n  Root,\n  VisuallyHidden\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/toast/src/Toast.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport * as DismissableLayer from \"@radix-ui/react-dismissable-layer\";\nimport { Portal } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar PROVIDER_NAME = \"ToastProvider\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(\"Toast\");\nvar [createToastContext, createToastScope] = createContextScope(\"Toast\", [createCollectionScope]);\nvar [ToastProviderProvider, useToastProviderContext] = createToastContext(PROVIDER_NAME);\nvar ToastProvider = (props) => {\n  const {\n    __scopeToast,\n    label = \"Notification\",\n    duration = 5e3,\n    swipeDirection = \"right\",\n    swipeThreshold = 50,\n    children\n  } = props;\n  const [viewport, setViewport] = React.useState(null);\n  const [toastCount, setToastCount] = React.useState(0);\n  const isFocusedToastEscapeKeyDownRef = React.useRef(false);\n  const isClosePausedRef = React.useRef(false);\n  if (!label.trim()) {\n    console.error(\n      `Invalid prop \\`label\\` supplied to \\`${PROVIDER_NAME}\\`. Expected non-empty \\`string\\`.`\n    );\n  }\n  return /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeToast, children: /* @__PURE__ */ jsx(\n    ToastProviderProvider,\n    {\n      scope: __scopeToast,\n      label,\n      duration,\n      swipeDirection,\n      swipeThreshold,\n      toastCount,\n      viewport,\n      onViewportChange: setViewport,\n      onToastAdd: React.useCallback(() => setToastCount((prevCount) => prevCount + 1), []),\n      onToastRemove: React.useCallback(() => setToastCount((prevCount) => prevCount - 1), []),\n      isFocusedToastEscapeKeyDownRef,\n      isClosePausedRef,\n      children\n    }\n  ) });\n};\nToastProvider.displayName = PROVIDER_NAME;\nvar VIEWPORT_NAME = \"ToastViewport\";\nvar VIEWPORT_DEFAULT_HOTKEY = [\"F8\"];\nvar VIEWPORT_PAUSE = \"toast.viewportPause\";\nvar VIEWPORT_RESUME = \"toast.viewportResume\";\nvar ToastViewport = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeToast,\n      hotkey = VIEWPORT_DEFAULT_HOTKEY,\n      label = \"Notifications ({hotkey})\",\n      ...viewportProps\n    } = props;\n    const context = useToastProviderContext(VIEWPORT_NAME, __scopeToast);\n    const getItems = useCollection(__scopeToast);\n    const wrapperRef = React.useRef(null);\n    const headFocusProxyRef = React.useRef(null);\n    const tailFocusProxyRef = React.useRef(null);\n    const ref = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref, context.onViewportChange);\n    const hotkeyLabel = hotkey.join(\"+\").replace(/Key/g, \"\").replace(/Digit/g, \"\");\n    const hasToasts = context.toastCount > 0;\n    React.useEffect(() => {\n      const handleKeyDown = (event) => {\n        const isHotkeyPressed = hotkey.every((key) => event[key] || event.code === key);\n        if (isHotkeyPressed) ref.current?.focus();\n      };\n      document.addEventListener(\"keydown\", handleKeyDown);\n      return () => document.removeEventListener(\"keydown\", handleKeyDown);\n    }, [hotkey]);\n    React.useEffect(() => {\n      const wrapper = wrapperRef.current;\n      const viewport = ref.current;\n      if (hasToasts && wrapper && viewport) {\n        const handlePause = () => {\n          if (!context.isClosePausedRef.current) {\n            const pauseEvent = new CustomEvent(VIEWPORT_PAUSE);\n            viewport.dispatchEvent(pauseEvent);\n            context.isClosePausedRef.current = true;\n          }\n        };\n        const handleResume = () => {\n          if (context.isClosePausedRef.current) {\n            const resumeEvent = new CustomEvent(VIEWPORT_RESUME);\n            viewport.dispatchEvent(resumeEvent);\n            context.isClosePausedRef.current = false;\n          }\n        };\n        const handleFocusOutResume = (event) => {\n          const isFocusMovingOutside = !wrapper.contains(event.relatedTarget);\n          if (isFocusMovingOutside) handleResume();\n        };\n        const handlePointerLeaveResume = () => {\n          const isFocusInside = wrapper.contains(document.activeElement);\n          if (!isFocusInside) handleResume();\n        };\n        wrapper.addEventListener(\"focusin\", handlePause);\n        wrapper.addEventListener(\"focusout\", handleFocusOutResume);\n        wrapper.addEventListener(\"pointermove\", handlePause);\n        wrapper.addEventListener(\"pointerleave\", handlePointerLeaveResume);\n        window.addEventListener(\"blur\", handlePause);\n        window.addEventListener(\"focus\", handleResume);\n        return () => {\n          wrapper.removeEventListener(\"focusin\", handlePause);\n          wrapper.removeEventListener(\"focusout\", handleFocusOutResume);\n          wrapper.removeEventListener(\"pointermove\", handlePause);\n          wrapper.removeEventListener(\"pointerleave\", handlePointerLeaveResume);\n          window.removeEventListener(\"blur\", handlePause);\n          window.removeEventListener(\"focus\", handleResume);\n        };\n      }\n    }, [hasToasts, context.isClosePausedRef]);\n    const getSortedTabbableCandidates = React.useCallback(\n      ({ tabbingDirection }) => {\n        const toastItems = getItems();\n        const tabbableCandidates = toastItems.map((toastItem) => {\n          const toastNode = toastItem.ref.current;\n          const toastTabbableCandidates = [toastNode, ...getTabbableCandidates(toastNode)];\n          return tabbingDirection === \"forwards\" ? toastTabbableCandidates : toastTabbableCandidates.reverse();\n        });\n        return (tabbingDirection === \"forwards\" ? tabbableCandidates.reverse() : tabbableCandidates).flat();\n      },\n      [getItems]\n    );\n    React.useEffect(() => {\n      const viewport = ref.current;\n      if (viewport) {\n        const handleKeyDown = (event) => {\n          const isMetaKey = event.altKey || event.ctrlKey || event.metaKey;\n          const isTabKey = event.key === \"Tab\" && !isMetaKey;\n          if (isTabKey) {\n            const focusedElement = document.activeElement;\n            const isTabbingBackwards = event.shiftKey;\n            const targetIsViewport = event.target === viewport;\n            if (targetIsViewport && isTabbingBackwards) {\n              headFocusProxyRef.current?.focus();\n              return;\n            }\n            const tabbingDirection = isTabbingBackwards ? \"backwards\" : \"forwards\";\n            const sortedCandidates = getSortedTabbableCandidates({ tabbingDirection });\n            const index = sortedCandidates.findIndex((candidate) => candidate === focusedElement);\n            if (focusFirst(sortedCandidates.slice(index + 1))) {\n              event.preventDefault();\n            } else {\n              isTabbingBackwards ? headFocusProxyRef.current?.focus() : tailFocusProxyRef.current?.focus();\n            }\n          }\n        };\n        viewport.addEventListener(\"keydown\", handleKeyDown);\n        return () => viewport.removeEventListener(\"keydown\", handleKeyDown);\n      }\n    }, [getItems, getSortedTabbableCandidates]);\n    return /* @__PURE__ */ jsxs(\n      DismissableLayer.Branch,\n      {\n        ref: wrapperRef,\n        role: \"region\",\n        \"aria-label\": label.replace(\"{hotkey}\", hotkeyLabel),\n        tabIndex: -1,\n        style: { pointerEvents: hasToasts ? void 0 : \"none\" },\n        children: [\n          hasToasts && /* @__PURE__ */ jsx(\n            FocusProxy,\n            {\n              ref: headFocusProxyRef,\n              onFocusFromOutsideViewport: () => {\n                const tabbableCandidates = getSortedTabbableCandidates({\n                  tabbingDirection: \"forwards\"\n                });\n                focusFirst(tabbableCandidates);\n              }\n            }\n          ),\n          /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeToast, children: /* @__PURE__ */ jsx(Primitive.ol, { tabIndex: -1, ...viewportProps, ref: composedRefs }) }),\n          hasToasts && /* @__PURE__ */ jsx(\n            FocusProxy,\n            {\n              ref: tailFocusProxyRef,\n              onFocusFromOutsideViewport: () => {\n                const tabbableCandidates = getSortedTabbableCandidates({\n                  tabbingDirection: \"backwards\"\n                });\n                focusFirst(tabbableCandidates);\n              }\n            }\n          )\n        ]\n      }\n    );\n  }\n);\nToastViewport.displayName = VIEWPORT_NAME;\nvar FOCUS_PROXY_NAME = \"ToastFocusProxy\";\nvar FocusProxy = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeToast, onFocusFromOutsideViewport, ...proxyProps } = props;\n    const context = useToastProviderContext(FOCUS_PROXY_NAME, __scopeToast);\n    return /* @__PURE__ */ jsx(\n      VisuallyHidden,\n      {\n        \"aria-hidden\": true,\n        tabIndex: 0,\n        ...proxyProps,\n        ref: forwardedRef,\n        style: { position: \"fixed\" },\n        onFocus: (event) => {\n          const prevFocusedElement = event.relatedTarget;\n          const isFocusFromOutsideViewport = !context.viewport?.contains(prevFocusedElement);\n          if (isFocusFromOutsideViewport) onFocusFromOutsideViewport();\n        }\n      }\n    );\n  }\n);\nFocusProxy.displayName = FOCUS_PROXY_NAME;\nvar TOAST_NAME = \"Toast\";\nvar TOAST_SWIPE_START = \"toast.swipeStart\";\nvar TOAST_SWIPE_MOVE = \"toast.swipeMove\";\nvar TOAST_SWIPE_CANCEL = \"toast.swipeCancel\";\nvar TOAST_SWIPE_END = \"toast.swipeEnd\";\nvar Toast = React.forwardRef(\n  (props, forwardedRef) => {\n    const { forceMount, open: openProp, defaultOpen, onOpenChange, ...toastProps } = props;\n    const [open = true, setOpen] = useControllableState({\n      prop: openProp,\n      defaultProp: defaultOpen,\n      onChange: onOpenChange\n    });\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || open, children: /* @__PURE__ */ jsx(\n      ToastImpl,\n      {\n        open,\n        ...toastProps,\n        ref: forwardedRef,\n        onClose: () => setOpen(false),\n        onPause: useCallbackRef(props.onPause),\n        onResume: useCallbackRef(props.onResume),\n        onSwipeStart: composeEventHandlers(props.onSwipeStart, (event) => {\n          event.currentTarget.setAttribute(\"data-swipe\", \"start\");\n        }),\n        onSwipeMove: composeEventHandlers(props.onSwipeMove, (event) => {\n          const { x, y } = event.detail.delta;\n          event.currentTarget.setAttribute(\"data-swipe\", \"move\");\n          event.currentTarget.style.setProperty(\"--radix-toast-swipe-move-x\", `${x}px`);\n          event.currentTarget.style.setProperty(\"--radix-toast-swipe-move-y\", `${y}px`);\n        }),\n        onSwipeCancel: composeEventHandlers(props.onSwipeCancel, (event) => {\n          event.currentTarget.setAttribute(\"data-swipe\", \"cancel\");\n          event.currentTarget.style.removeProperty(\"--radix-toast-swipe-move-x\");\n          event.currentTarget.style.removeProperty(\"--radix-toast-swipe-move-y\");\n          event.currentTarget.style.removeProperty(\"--radix-toast-swipe-end-x\");\n          event.currentTarget.style.removeProperty(\"--radix-toast-swipe-end-y\");\n        }),\n        onSwipeEnd: composeEventHandlers(props.onSwipeEnd, (event) => {\n          const { x, y } = event.detail.delta;\n          event.currentTarget.setAttribute(\"data-swipe\", \"end\");\n          event.currentTarget.style.removeProperty(\"--radix-toast-swipe-move-x\");\n          event.currentTarget.style.removeProperty(\"--radix-toast-swipe-move-y\");\n          event.currentTarget.style.setProperty(\"--radix-toast-swipe-end-x\", `${x}px`);\n          event.currentTarget.style.setProperty(\"--radix-toast-swipe-end-y\", `${y}px`);\n          setOpen(false);\n        })\n      }\n    ) });\n  }\n);\nToast.displayName = TOAST_NAME;\nvar [ToastInteractiveProvider, useToastInteractiveContext] = createToastContext(TOAST_NAME, {\n  onClose() {\n  }\n});\nvar ToastImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeToast,\n      type = \"foreground\",\n      duration: durationProp,\n      open,\n      onClose,\n      onEscapeKeyDown,\n      onPause,\n      onResume,\n      onSwipeStart,\n      onSwipeMove,\n      onSwipeCancel,\n      onSwipeEnd,\n      ...toastProps\n    } = props;\n    const context = useToastProviderContext(TOAST_NAME, __scopeToast);\n    const [node, setNode] = React.useState(null);\n    const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n    const pointerStartRef = React.useRef(null);\n    const swipeDeltaRef = React.useRef(null);\n    const duration = durationProp || context.duration;\n    const closeTimerStartTimeRef = React.useRef(0);\n    const closeTimerRemainingTimeRef = React.useRef(duration);\n    const closeTimerRef = React.useRef(0);\n    const { onToastAdd, onToastRemove } = context;\n    const handleClose = useCallbackRef(() => {\n      const isFocusInToast = node?.contains(document.activeElement);\n      if (isFocusInToast) context.viewport?.focus();\n      onClose();\n    });\n    const startTimer = React.useCallback(\n      (duration2) => {\n        if (!duration2 || duration2 === Infinity) return;\n        window.clearTimeout(closeTimerRef.current);\n        closeTimerStartTimeRef.current = (/* @__PURE__ */ new Date()).getTime();\n        closeTimerRef.current = window.setTimeout(handleClose, duration2);\n      },\n      [handleClose]\n    );\n    React.useEffect(() => {\n      const viewport = context.viewport;\n      if (viewport) {\n        const handleResume = () => {\n          startTimer(closeTimerRemainingTimeRef.current);\n          onResume?.();\n        };\n        const handlePause = () => {\n          const elapsedTime = (/* @__PURE__ */ new Date()).getTime() - closeTimerStartTimeRef.current;\n          closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;\n          window.clearTimeout(closeTimerRef.current);\n          onPause?.();\n        };\n        viewport.addEventListener(VIEWPORT_PAUSE, handlePause);\n        viewport.addEventListener(VIEWPORT_RESUME, handleResume);\n        return () => {\n          viewport.removeEventListener(VIEWPORT_PAUSE, handlePause);\n          viewport.removeEventListener(VIEWPORT_RESUME, handleResume);\n        };\n      }\n    }, [context.viewport, duration, onPause, onResume, startTimer]);\n    React.useEffect(() => {\n      if (open && !context.isClosePausedRef.current) startTimer(duration);\n    }, [open, duration, context.isClosePausedRef, startTimer]);\n    React.useEffect(() => {\n      onToastAdd();\n      return () => onToastRemove();\n    }, [onToastAdd, onToastRemove]);\n    const announceTextContent = React.useMemo(() => {\n      return node ? getAnnounceTextContent(node) : null;\n    }, [node]);\n    if (!context.viewport) return null;\n    return /* @__PURE__ */ jsxs(Fragment, { children: [\n      announceTextContent && /* @__PURE__ */ jsx(\n        ToastAnnounce,\n        {\n          __scopeToast,\n          role: \"status\",\n          \"aria-live\": type === \"foreground\" ? \"assertive\" : \"polite\",\n          \"aria-atomic\": true,\n          children: announceTextContent\n        }\n      ),\n      /* @__PURE__ */ jsx(ToastInteractiveProvider, { scope: __scopeToast, onClose: handleClose, children: ReactDOM.createPortal(\n        /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeToast, children: /* @__PURE__ */ jsx(\n          DismissableLayer.Root,\n          {\n            asChild: true,\n            onEscapeKeyDown: composeEventHandlers(onEscapeKeyDown, () => {\n              if (!context.isFocusedToastEscapeKeyDownRef.current) handleClose();\n              context.isFocusedToastEscapeKeyDownRef.current = false;\n            }),\n            children: /* @__PURE__ */ jsx(\n              Primitive.li,\n              {\n                role: \"status\",\n                \"aria-live\": \"off\",\n                \"aria-atomic\": true,\n                tabIndex: 0,\n                \"data-state\": open ? \"open\" : \"closed\",\n                \"data-swipe-direction\": context.swipeDirection,\n                ...toastProps,\n                ref: composedRefs,\n                style: { userSelect: \"none\", touchAction: \"none\", ...props.style },\n                onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n                  if (event.key !== \"Escape\") return;\n                  onEscapeKeyDown?.(event.nativeEvent);\n                  if (!event.nativeEvent.defaultPrevented) {\n                    context.isFocusedToastEscapeKeyDownRef.current = true;\n                    handleClose();\n                  }\n                }),\n                onPointerDown: composeEventHandlers(props.onPointerDown, (event) => {\n                  if (event.button !== 0) return;\n                  pointerStartRef.current = { x: event.clientX, y: event.clientY };\n                }),\n                onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n                  if (!pointerStartRef.current) return;\n                  const x = event.clientX - pointerStartRef.current.x;\n                  const y = event.clientY - pointerStartRef.current.y;\n                  const hasSwipeMoveStarted = Boolean(swipeDeltaRef.current);\n                  const isHorizontalSwipe = [\"left\", \"right\"].includes(context.swipeDirection);\n                  const clamp = [\"left\", \"up\"].includes(context.swipeDirection) ? Math.min : Math.max;\n                  const clampedX = isHorizontalSwipe ? clamp(0, x) : 0;\n                  const clampedY = !isHorizontalSwipe ? clamp(0, y) : 0;\n                  const moveStartBuffer = event.pointerType === \"touch\" ? 10 : 2;\n                  const delta = { x: clampedX, y: clampedY };\n                  const eventDetail = { originalEvent: event, delta };\n                  if (hasSwipeMoveStarted) {\n                    swipeDeltaRef.current = delta;\n                    handleAndDispatchCustomEvent(TOAST_SWIPE_MOVE, onSwipeMove, eventDetail, {\n                      discrete: false\n                    });\n                  } else if (isDeltaInDirection(delta, context.swipeDirection, moveStartBuffer)) {\n                    swipeDeltaRef.current = delta;\n                    handleAndDispatchCustomEvent(TOAST_SWIPE_START, onSwipeStart, eventDetail, {\n                      discrete: false\n                    });\n                    event.target.setPointerCapture(event.pointerId);\n                  } else if (Math.abs(x) > moveStartBuffer || Math.abs(y) > moveStartBuffer) {\n                    pointerStartRef.current = null;\n                  }\n                }),\n                onPointerUp: composeEventHandlers(props.onPointerUp, (event) => {\n                  const delta = swipeDeltaRef.current;\n                  const target = event.target;\n                  if (target.hasPointerCapture(event.pointerId)) {\n                    target.releasePointerCapture(event.pointerId);\n                  }\n                  swipeDeltaRef.current = null;\n                  pointerStartRef.current = null;\n                  if (delta) {\n                    const toast = event.currentTarget;\n                    const eventDetail = { originalEvent: event, delta };\n                    if (isDeltaInDirection(delta, context.swipeDirection, context.swipeThreshold)) {\n                      handleAndDispatchCustomEvent(TOAST_SWIPE_END, onSwipeEnd, eventDetail, {\n                        discrete: true\n                      });\n                    } else {\n                      handleAndDispatchCustomEvent(\n                        TOAST_SWIPE_CANCEL,\n                        onSwipeCancel,\n                        eventDetail,\n                        {\n                          discrete: true\n                        }\n                      );\n                    }\n                    toast.addEventListener(\"click\", (event2) => event2.preventDefault(), {\n                      once: true\n                    });\n                  }\n                })\n              }\n            )\n          }\n        ) }),\n        context.viewport\n      ) })\n    ] });\n  }\n);\nvar ToastAnnounce = (props) => {\n  const { __scopeToast, children, ...announceProps } = props;\n  const context = useToastProviderContext(TOAST_NAME, __scopeToast);\n  const [renderAnnounceText, setRenderAnnounceText] = React.useState(false);\n  const [isAnnounced, setIsAnnounced] = React.useState(false);\n  useNextFrame(() => setRenderAnnounceText(true));\n  React.useEffect(() => {\n    const timer = window.setTimeout(() => setIsAnnounced(true), 1e3);\n    return () => window.clearTimeout(timer);\n  }, []);\n  return isAnnounced ? null : /* @__PURE__ */ jsx(Portal, { asChild: true, children: /* @__PURE__ */ jsx(VisuallyHidden, { ...announceProps, children: renderAnnounceText && /* @__PURE__ */ jsxs(Fragment, { children: [\n    context.label,\n    \" \",\n    children\n  ] }) }) });\n};\nvar TITLE_NAME = \"ToastTitle\";\nvar ToastTitle = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeToast, ...titleProps } = props;\n    return /* @__PURE__ */ jsx(Primitive.div, { ...titleProps, ref: forwardedRef });\n  }\n);\nToastTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"ToastDescription\";\nvar ToastDescription = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeToast, ...descriptionProps } = props;\n    return /* @__PURE__ */ jsx(Primitive.div, { ...descriptionProps, ref: forwardedRef });\n  }\n);\nToastDescription.displayName = DESCRIPTION_NAME;\nvar ACTION_NAME = \"ToastAction\";\nvar ToastAction = React.forwardRef(\n  (props, forwardedRef) => {\n    const { altText, ...actionProps } = props;\n    if (!altText.trim()) {\n      console.error(\n        `Invalid prop \\`altText\\` supplied to \\`${ACTION_NAME}\\`. Expected non-empty \\`string\\`.`\n      );\n      return null;\n    }\n    return /* @__PURE__ */ jsx(ToastAnnounceExclude, { altText, asChild: true, children: /* @__PURE__ */ jsx(ToastClose, { ...actionProps, ref: forwardedRef }) });\n  }\n);\nToastAction.displayName = ACTION_NAME;\nvar CLOSE_NAME = \"ToastClose\";\nvar ToastClose = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeToast, ...closeProps } = props;\n    const interactiveContext = useToastInteractiveContext(CLOSE_NAME, __scopeToast);\n    return /* @__PURE__ */ jsx(ToastAnnounceExclude, { asChild: true, children: /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        ...closeProps,\n        ref: forwardedRef,\n        onClick: composeEventHandlers(props.onClick, interactiveContext.onClose)\n      }\n    ) });\n  }\n);\nToastClose.displayName = CLOSE_NAME;\nvar ToastAnnounceExclude = React.forwardRef((props, forwardedRef) => {\n  const { __scopeToast, altText, ...announceExcludeProps } = props;\n  return /* @__PURE__ */ jsx(\n    Primitive.div,\n    {\n      \"data-radix-toast-announce-exclude\": \"\",\n      \"data-radix-toast-announce-alt\": altText || void 0,\n      ...announceExcludeProps,\n      ref: forwardedRef\n    }\n  );\n});\nfunction getAnnounceTextContent(container) {\n  const textContent = [];\n  const childNodes = Array.from(container.childNodes);\n  childNodes.forEach((node) => {\n    if (node.nodeType === node.TEXT_NODE && node.textContent) textContent.push(node.textContent);\n    if (isHTMLElement(node)) {\n      const isHidden = node.ariaHidden || node.hidden || node.style.display === \"none\";\n      const isExcluded = node.dataset.radixToastAnnounceExclude === \"\";\n      if (!isHidden) {\n        if (isExcluded) {\n          const altText = node.dataset.radixToastAnnounceAlt;\n          if (altText) textContent.push(altText);\n        } else {\n          textContent.push(...getAnnounceTextContent(node));\n        }\n      }\n    }\n  });\n  return textContent;\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n  const currentTarget = detail.originalEvent.currentTarget;\n  const event = new CustomEvent(name, { bubbles: true, cancelable: true, detail });\n  if (handler) currentTarget.addEventListener(name, handler, { once: true });\n  if (discrete) {\n    dispatchDiscreteCustomEvent(currentTarget, event);\n  } else {\n    currentTarget.dispatchEvent(event);\n  }\n}\nvar isDeltaInDirection = (delta, direction, threshold = 0) => {\n  const deltaX = Math.abs(delta.x);\n  const deltaY = Math.abs(delta.y);\n  const isDeltaX = deltaX > deltaY;\n  if (direction === \"left\" || direction === \"right\") {\n    return isDeltaX && deltaX > threshold;\n  } else {\n    return !isDeltaX && deltaY > threshold;\n  }\n};\nfunction useNextFrame(callback = () => {\n}) {\n  const fn = useCallbackRef(callback);\n  useLayoutEffect(() => {\n    let raf1 = 0;\n    let raf2 = 0;\n    raf1 = window.requestAnimationFrame(() => raf2 = window.requestAnimationFrame(fn));\n    return () => {\n      window.cancelAnimationFrame(raf1);\n      window.cancelAnimationFrame(raf2);\n    };\n  }, [fn]);\n}\nfunction isHTMLElement(node) {\n  return node.nodeType === node.ELEMENT_NODE;\n}\nfunction getTabbableCandidates(container) {\n  const nodes = [];\n  const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n    acceptNode: (node) => {\n      const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n      if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n      return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n    }\n  });\n  while (walker.nextNode()) nodes.push(walker.currentNode);\n  return nodes;\n}\nfunction focusFirst(candidates) {\n  const previouslyFocusedElement = document.activeElement;\n  return candidates.some((candidate) => {\n    if (candidate === previouslyFocusedElement) return true;\n    candidate.focus();\n    return document.activeElement !== previouslyFocusedElement;\n  });\n}\nvar Provider = ToastProvider;\nvar Viewport = ToastViewport;\nvar Root2 = Toast;\nvar Title = ToastTitle;\nvar Description = ToastDescription;\nvar Action = ToastAction;\nvar Close = ToastClose;\nexport {\n  Action,\n  Close,\n  Description,\n  Provider,\n  Root2 as Root,\n  Title,\n  Toast,\n  ToastAction,\n  ToastClose,\n  ToastDescription,\n  ToastProvider,\n  ToastTitle,\n  ToastViewport,\n  Viewport,\n  createToastScope\n};\n//# sourceMappingURL=index.mjs.map\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n *   http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n        var _config_compoundVariants;\n        if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n        const { variants, defaultVariants } = config;\n        const getVariantClassNames = Object.keys(variants).map((variant)=>{\n            const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n            const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n            if (variantProp === null) return null;\n            const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n            return variants[variant][variantKey];\n        });\n        const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n            let [key, value] = param;\n            if (value === undefined) {\n                return acc;\n            }\n            acc[key] = value;\n            return acc;\n        }, {});\n        const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n            let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n            return Object.entries(compoundVariantOptions).every((param)=>{\n                let [key, value] = param;\n                return Array.isArray(value) ? value.includes({\n                    ...defaultVariants,\n                    ...propsWithoutUndefined\n                }[key]) : ({\n                    ...defaultVariants,\n                    ...propsWithoutUndefined\n                })[key] === value;\n            }) ? [\n                ...acc,\n                cvClass,\n                cvClassName\n            ] : acc;\n        }, []);\n        return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n    };\n\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n  return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\n\nexport { mergeClasses, toKebabCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  width: 24,\n  height: 24,\n  viewBox: \"0 0 24 24\",\n  fill: \"none\",\n  stroke: \"currentColor\",\n  strokeWidth: 2,\n  strokeLinecap: \"round\",\n  strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n  ({\n    color = \"currentColor\",\n    size = 24,\n    strokeWidth = 2,\n    absoluteStrokeWidth,\n    className = \"\",\n    children,\n    iconNode,\n    ...rest\n  }, ref) => {\n    return createElement(\n      \"svg\",\n      {\n        ref,\n        ...defaultAttributes,\n        width: size,\n        height: size,\n        stroke: color,\n        strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n        className: mergeClasses(\"lucide\", className),\n        ...rest\n      },\n      [\n        ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n        ...Array.isArray(children) ? children : [children]\n      ]\n    );\n  }\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n  const Component = forwardRef(\n    ({ className, ...props }, ref) => createElement(Icon, {\n      ref,\n      iconNode,\n      className: mergeClasses(`lucide-${toKebabCase(iconName)}`, className),\n      ...props\n    })\n  );\n  Component.displayName = `${iconName}`;\n  return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ArrowLeft = createLucideIcon(\"ArrowLeft\", [\n  [\"path\", { d: \"m12 19-7-7 7-7\", key: \"1l729n\" }],\n  [\"path\", { d: \"M19 12H5\", key: \"x3x0zl\" }]\n]);\n\nexport { ArrowLeft as default };\n//# sourceMappingURL=arrow-left.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst BookOpen = createLucideIcon(\"BookOpen\", [\n  [\"path\", { d: \"M12 7v14\", key: \"1akyts\" }],\n  [\n    \"path\",\n    {\n      d: \"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z\",\n      key: \"ruj8y\"\n    }\n  ]\n]);\n\nexport { BookOpen as default };\n//# sourceMappingURL=book-open.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronDown = createLucideIcon(\"ChevronDown\", [\n  [\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]\n]);\n\nexport { ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleCheckBig = createLucideIcon(\"CircleCheckBig\", [\n  [\"path\", { d: \"M21.801 10A10 10 0 1 1 17 3.335\", key: \"yps3ct\" }],\n  [\"path\", { d: \"m9 11 3 3L22 4\", key: \"1pflzl\" }]\n]);\n\nexport { CircleCheckBig as default };\n//# sourceMappingURL=circle-check-big.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleHelp = createLucideIcon(\"CircleHelp\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n  [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n]);\n\nexport { CircleHelp as default };\n//# sourceMappingURL=circle-help.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CircleX = createLucideIcon(\"CircleX\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n  [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n]);\n\nexport { CircleX as default };\n//# sourceMappingURL=circle-x.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Clipboard = createLucideIcon(\"Clipboard\", [\n  [\"rect\", { width: \"8\", height: \"4\", x: \"8\", y: \"2\", rx: \"1\", ry: \"1\", key: \"tgr4d6\" }],\n  [\n    \"path\",\n    {\n      d: \"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\",\n      key: \"116196\"\n    }\n  ]\n]);\n\nexport { Clipboard as default };\n//# sourceMappingURL=clipboard.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Clock = createLucideIcon(\"Clock\", [\n  [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n  [\"polyline\", { points: \"12 6 12 12 16 14\", key: \"68esgv\" }]\n]);\n\nexport { Clock as default };\n//# sourceMappingURL=clock.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ExternalLink = createLucideIcon(\"ExternalLink\", [\n  [\"path\", { d: \"M15 3h6v6\", key: \"1q9fwt\" }],\n  [\"path\", { d: \"M10 14 21 3\", key: \"gplh6r\" }],\n  [\"path\", { d: \"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\", key: \"a6xqqp\" }]\n]);\n\nexport { ExternalLink as default };\n//# sourceMappingURL=external-link.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Flame = createLucideIcon(\"Flame\", [\n  [\n    \"path\",\n    {\n      d: \"M8.5 14.5A2.5 2.5 0 0 0 11 12c0-1.38-.5-2-1-3-1.072-2.143-.224-4.054 2-6 .5 2.5 2 4.9 4 6.5 2 1.6 3 3.5 3 5.5a7 7 0 1 1-14 0c0-1.153.433-2.294 1-3a2.5 2.5 0 0 0 2.5 2.5z\",\n      key: \"96xj49\"\n    }\n  ]\n]);\n\nexport { Flame as default };\n//# sourceMappingURL=flame.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Heart = createLucideIcon(\"Heart\", [\n  [\n    \"path\",\n    {\n      d: \"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z\",\n      key: \"c3ymky\"\n    }\n  ]\n]);\n\nexport { Heart as default };\n//# sourceMappingURL=heart.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst House = createLucideIcon(\"House\", [\n  [\"path\", { d: \"M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8\", key: \"5wwlr5\" }],\n  [\n    \"path\",\n    {\n      d: \"M3 10a2 2 0 0 1 .709-1.528l7-5.999a2 2 0 0 1 2.582 0l7 5.999A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\",\n      key: \"1d0kgt\"\n    }\n  ]\n]);\n\nexport { House as default };\n//# sourceMappingURL=house.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst LoaderCircle = createLucideIcon(\"LoaderCircle\", [\n  [\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]\n]);\n\nexport { LoaderCircle as default };\n//# sourceMappingURL=loader-circle.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MapPin = createLucideIcon(\"MapPin\", [\n  [\n    \"path\",\n    {\n      d: \"M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0\",\n      key: \"1r0f0z\"\n    }\n  ],\n  [\"circle\", { cx: \"12\", cy: \"10\", r: \"3\", key: \"ilqhr7\" }]\n]);\n\nexport { MapPin as default };\n//# sourceMappingURL=map-pin.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Menu = createLucideIcon(\"Menu\", [\n  [\"line\", { x1: \"4\", x2: \"20\", y1: \"12\", y2: \"12\", key: \"1e0a9i\" }],\n  [\"line\", { x1: \"4\", x2: \"20\", y1: \"6\", y2: \"6\", key: \"1owob3\" }],\n  [\"line\", { x1: \"4\", x2: \"20\", y1: \"18\", y2: \"18\", key: \"yk5zj1\" }]\n]);\n\nexport { Menu as default };\n//# sourceMappingURL=menu.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Mic = createLucideIcon(\"Mic\", [\n  [\"path\", { d: \"M12 2a3 3 0 0 0-3 3v7a3 3 0 0 0 6 0V5a3 3 0 0 0-3-3Z\", key: \"131961\" }],\n  [\"path\", { d: \"M19 10v2a7 7 0 0 1-14 0v-2\", key: \"1vc78b\" }],\n  [\"line\", { x1: \"12\", x2: \"12\", y1: \"19\", y2: \"22\", key: \"x3vr5v\" }]\n]);\n\nexport { Mic as default };\n//# sourceMappingURL=mic.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst PhoneOff = createLucideIcon(\"PhoneOff\", [\n  [\n    \"path\",\n    {\n      d: \"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\",\n      key: \"z86iuo\"\n    }\n  ],\n  [\"line\", { x1: \"22\", x2: \"2\", y1: \"2\", y2: \"22\", key: \"11kh81\" }]\n]);\n\nexport { PhoneOff as default };\n//# sourceMappingURL=phone-off.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Phone = createLucideIcon(\"Phone\", [\n  [\n    \"path\",\n    {\n      d: \"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\",\n      key: \"foiqr5\"\n    }\n  ]\n]);\n\nexport { Phone as default };\n//# sourceMappingURL=phone.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Shield = createLucideIcon(\"Shield\", [\n  [\n    \"path\",\n    {\n      d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n      key: \"oel41y\"\n    }\n  ]\n]);\n\nexport { Shield as default };\n//# sourceMappingURL=shield.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst TriangleAlert = createLucideIcon(\"TriangleAlert\", [\n  [\n    \"path\",\n    {\n      d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3\",\n      key: \"wmoenq\"\n    }\n  ],\n  [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n  [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n]);\n\nexport { TriangleAlert as default };\n//# sourceMappingURL=triangle-alert.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst User = createLucideIcon(\"User\", [\n  [\"path\", { d: \"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\", key: \"975kel\" }],\n  [\"circle\", { cx: \"12\", cy: \"7\", r: \"4\", key: \"17ys0d\" }]\n]);\n\nexport { User as default };\n//# sourceMappingURL=user.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Users = createLucideIcon(\"Users\", [\n  [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n  [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }],\n  [\"path\", { d: \"M22 21v-2a4 4 0 0 0-3-3.87\", key: \"kshegd\" }],\n  [\"path\", { d: \"M16 3.13a4 4 0 0 1 0 7.75\", key: \"1da9ce\" }]\n]);\n\nexport { Users as default };\n//# sourceMappingURL=users.js.map\n","/**\n * @license lucide-react v0.462.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst X = createLucideIcon(\"X\", [\n  [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n  [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n]);\n\nexport { X as default };\n//# sourceMappingURL=x.js.map\n","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n  const classMap = createClassMap(config);\n  const {\n    conflictingClassGroups,\n    conflictingClassGroupModifiers\n  } = config;\n  const getClassGroupId = className => {\n    const classParts = className.split(CLASS_PART_SEPARATOR);\n    // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n    if (classParts[0] === '' && classParts.length !== 1) {\n      classParts.shift();\n    }\n    return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n  };\n  const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n    const conflicts = conflictingClassGroups[classGroupId] || [];\n    if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n      return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n    }\n    return conflicts;\n  };\n  return {\n    getClassGroupId,\n    getConflictingClassGroupIds\n  };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n  if (classParts.length === 0) {\n    return classPartObject.classGroupId;\n  }\n  const currentClassPart = classParts[0];\n  const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n  const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n  if (classGroupFromNextClassPart) {\n    return classGroupFromNextClassPart;\n  }\n  if (classPartObject.validators.length === 0) {\n    return undefined;\n  }\n  const classRest = classParts.join(CLASS_PART_SEPARATOR);\n  return classPartObject.validators.find(({\n    validator\n  }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n  if (arbitraryPropertyRegex.test(className)) {\n    const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n    const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n    if (property) {\n      // I use two dots here because one dot is used as prefix for class groups in plugins\n      return 'arbitrary..' + property;\n    }\n  }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n  const {\n    theme,\n    prefix\n  } = config;\n  const classMap = {\n    nextPart: new Map(),\n    validators: []\n  };\n  const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n  prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n    processClassesRecursively(classGroup, classMap, classGroupId, theme);\n  });\n  return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n  classGroup.forEach(classDefinition => {\n    if (typeof classDefinition === 'string') {\n      const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n      classPartObjectToEdit.classGroupId = classGroupId;\n      return;\n    }\n    if (typeof classDefinition === 'function') {\n      if (isThemeGetter(classDefinition)) {\n        processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n        return;\n      }\n      classPartObject.validators.push({\n        validator: classDefinition,\n        classGroupId\n      });\n      return;\n    }\n    Object.entries(classDefinition).forEach(([key, classGroup]) => {\n      processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n    });\n  });\n};\nconst getPart = (classPartObject, path) => {\n  let currentClassPartObject = classPartObject;\n  path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n    if (!currentClassPartObject.nextPart.has(pathPart)) {\n      currentClassPartObject.nextPart.set(pathPart, {\n        nextPart: new Map(),\n        validators: []\n      });\n    }\n    currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n  });\n  return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n  if (!prefix) {\n    return classGroupEntries;\n  }\n  return classGroupEntries.map(([classGroupId, classGroup]) => {\n    const prefixedClassGroup = classGroup.map(classDefinition => {\n      if (typeof classDefinition === 'string') {\n        return prefix + classDefinition;\n      }\n      if (typeof classDefinition === 'object') {\n        return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n      }\n      return classDefinition;\n    });\n    return [classGroupId, prefixedClassGroup];\n  });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n  if (maxCacheSize < 1) {\n    return {\n      get: () => undefined,\n      set: () => {}\n    };\n  }\n  let cacheSize = 0;\n  let cache = new Map();\n  let previousCache = new Map();\n  const update = (key, value) => {\n    cache.set(key, value);\n    cacheSize++;\n    if (cacheSize > maxCacheSize) {\n      cacheSize = 0;\n      previousCache = cache;\n      cache = new Map();\n    }\n  };\n  return {\n    get(key) {\n      let value = cache.get(key);\n      if (value !== undefined) {\n        return value;\n      }\n      if ((value = previousCache.get(key)) !== undefined) {\n        update(key, value);\n        return value;\n      }\n    },\n    set(key, value) {\n      if (cache.has(key)) {\n        cache.set(key, value);\n      } else {\n        update(key, value);\n      }\n    }\n  };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n  const {\n    separator,\n    experimentalParseClassName\n  } = config;\n  const isSeparatorSingleCharacter = separator.length === 1;\n  const firstSeparatorCharacter = separator[0];\n  const separatorLength = separator.length;\n  // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n  const parseClassName = className => {\n    const modifiers = [];\n    let bracketDepth = 0;\n    let modifierStart = 0;\n    let postfixModifierPosition;\n    for (let index = 0; index < className.length; index++) {\n      let currentCharacter = className[index];\n      if (bracketDepth === 0) {\n        if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n          modifiers.push(className.slice(modifierStart, index));\n          modifierStart = index + separatorLength;\n          continue;\n        }\n        if (currentCharacter === '/') {\n          postfixModifierPosition = index;\n          continue;\n        }\n      }\n      if (currentCharacter === '[') {\n        bracketDepth++;\n      } else if (currentCharacter === ']') {\n        bracketDepth--;\n      }\n    }\n    const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n    const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n    const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n    const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n    return {\n      modifiers,\n      hasImportantModifier,\n      baseClassName,\n      maybePostfixModifierPosition\n    };\n  };\n  if (experimentalParseClassName) {\n    return className => experimentalParseClassName({\n      className,\n      parseClassName\n    });\n  }\n  return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n  if (modifiers.length <= 1) {\n    return modifiers;\n  }\n  const sortedModifiers = [];\n  let unsortedModifiers = [];\n  modifiers.forEach(modifier => {\n    const isArbitraryVariant = modifier[0] === '[';\n    if (isArbitraryVariant) {\n      sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n      unsortedModifiers = [];\n    } else {\n      unsortedModifiers.push(modifier);\n    }\n  });\n  sortedModifiers.push(...unsortedModifiers.sort());\n  return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n  cache: createLruCache(config.cacheSize),\n  parseClassName: createParseClassName(config),\n  ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n  const {\n    parseClassName,\n    getClassGroupId,\n    getConflictingClassGroupIds\n  } = configUtils;\n  /**\n   * Set of classGroupIds in following format:\n   * `{importantModifier}{variantModifiers}{classGroupId}`\n   * @example 'float'\n   * @example 'hover:focus:bg-color'\n   * @example 'md:!pr'\n   */\n  const classGroupsInConflict = [];\n  const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n  let result = '';\n  for (let index = classNames.length - 1; index >= 0; index -= 1) {\n    const originalClassName = classNames[index];\n    const {\n      modifiers,\n      hasImportantModifier,\n      baseClassName,\n      maybePostfixModifierPosition\n    } = parseClassName(originalClassName);\n    let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n    let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n    if (!classGroupId) {\n      if (!hasPostfixModifier) {\n        // Not a Tailwind class\n        result = originalClassName + (result.length > 0 ? ' ' + result : result);\n        continue;\n      }\n      classGroupId = getClassGroupId(baseClassName);\n      if (!classGroupId) {\n        // Not a Tailwind class\n        result = originalClassName + (result.length > 0 ? ' ' + result : result);\n        continue;\n      }\n      hasPostfixModifier = false;\n    }\n    const variantModifier = sortModifiers(modifiers).join(':');\n    const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n    const classId = modifierId + classGroupId;\n    if (classGroupsInConflict.includes(classId)) {\n      // Tailwind class omitted due to conflict\n      continue;\n    }\n    classGroupsInConflict.push(classId);\n    const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n    for (let i = 0; i < conflictGroups.length; ++i) {\n      const group = conflictGroups[i];\n      classGroupsInConflict.push(modifierId + group);\n    }\n    // Tailwind class not in conflict\n    result = originalClassName + (result.length > 0 ? ' ' + result : result);\n  }\n  return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n  let index = 0;\n  let argument;\n  let resolvedValue;\n  let string = '';\n  while (index < arguments.length) {\n    if (argument = arguments[index++]) {\n      if (resolvedValue = toValue(argument)) {\n        string && (string += ' ');\n        string += resolvedValue;\n      }\n    }\n  }\n  return string;\n}\nconst toValue = mix => {\n  if (typeof mix === 'string') {\n    return mix;\n  }\n  let resolvedValue;\n  let string = '';\n  for (let k = 0; k < mix.length; k++) {\n    if (mix[k]) {\n      if (resolvedValue = toValue(mix[k])) {\n        string && (string += ' ');\n        string += resolvedValue;\n      }\n    }\n  }\n  return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n  let configUtils;\n  let cacheGet;\n  let cacheSet;\n  let functionToCall = initTailwindMerge;\n  function initTailwindMerge(classList) {\n    const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n    configUtils = createConfigUtils(config);\n    cacheGet = configUtils.cache.get;\n    cacheSet = configUtils.cache.set;\n    functionToCall = tailwindMerge;\n    return tailwindMerge(classList);\n  }\n  function tailwindMerge(classList) {\n    const cachedResult = cacheGet(classList);\n    if (cachedResult) {\n      return cachedResult;\n    }\n    const result = mergeClassList(classList, configUtils);\n    cacheSet(classList, result);\n    return result;\n  }\n  return function callTailwindMerge() {\n    return functionToCall(twJoin.apply(null, arguments));\n  };\n}\nconst fromTheme = key => {\n  const themeGetter = theme => theme[key] || [];\n  themeGetter.isThemeGetter = true;\n  return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n  const result = arbitraryValueRegex.exec(value);\n  if (result) {\n    if (result[1]) {\n      return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n    }\n    return testValue(result[2]);\n  }\n  return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n  __proto__: null,\n  isAny,\n  isArbitraryImage,\n  isArbitraryLength,\n  isArbitraryNumber,\n  isArbitraryPosition,\n  isArbitraryShadow,\n  isArbitrarySize,\n  isArbitraryValue,\n  isInteger,\n  isLength,\n  isNumber,\n  isPercent,\n  isTshirtSize\n}, Symbol.toStringTag, {\n  value: 'Module'\n});\nconst getDefaultConfig = () => {\n  const colors = fromTheme('colors');\n  const spacing = fromTheme('spacing');\n  const blur = fromTheme('blur');\n  const brightness = fromTheme('brightness');\n  const borderColor = fromTheme('borderColor');\n  const borderRadius = fromTheme('borderRadius');\n  const borderSpacing = fromTheme('borderSpacing');\n  const borderWidth = fromTheme('borderWidth');\n  const contrast = fromTheme('contrast');\n  const grayscale = fromTheme('grayscale');\n  const hueRotate = fromTheme('hueRotate');\n  const invert = fromTheme('invert');\n  const gap = fromTheme('gap');\n  const gradientColorStops = fromTheme('gradientColorStops');\n  const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n  const inset = fromTheme('inset');\n  const margin = fromTheme('margin');\n  const opacity = fromTheme('opacity');\n  const padding = fromTheme('padding');\n  const saturate = fromTheme('saturate');\n  const scale = fromTheme('scale');\n  const sepia = fromTheme('sepia');\n  const skew = fromTheme('skew');\n  const space = fromTheme('space');\n  const translate = fromTheme('translate');\n  const getOverscroll = () => ['auto', 'contain', 'none'];\n  const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n  const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n  const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n  const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n  const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n  const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n  const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n  const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n  const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n  const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n  const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n  const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n  return {\n    cacheSize: 500,\n    separator: ':',\n    theme: {\n      colors: [isAny],\n      spacing: [isLength, isArbitraryLength],\n      blur: ['none', '', isTshirtSize, isArbitraryValue],\n      brightness: getNumberAndArbitrary(),\n      borderColor: [colors],\n      borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n      borderSpacing: getSpacingWithArbitrary(),\n      borderWidth: getLengthWithEmptyAndArbitrary(),\n      contrast: getNumberAndArbitrary(),\n      grayscale: getZeroAndEmpty(),\n      hueRotate: getNumberAndArbitrary(),\n      invert: getZeroAndEmpty(),\n      gap: getSpacingWithArbitrary(),\n      gradientColorStops: [colors],\n      gradientColorStopPositions: [isPercent, isArbitraryLength],\n      inset: getSpacingWithAutoAndArbitrary(),\n      margin: getSpacingWithAutoAndArbitrary(),\n      opacity: getNumberAndArbitrary(),\n      padding: getSpacingWithArbitrary(),\n      saturate: getNumberAndArbitrary(),\n      scale: getNumberAndArbitrary(),\n      sepia: getZeroAndEmpty(),\n      skew: getNumberAndArbitrary(),\n      space: getSpacingWithArbitrary(),\n      translate: getSpacingWithArbitrary()\n    },\n    classGroups: {\n      // Layout\n      /**\n       * Aspect Ratio\n       * @see https://tailwindcss.com/docs/aspect-ratio\n       */\n      aspect: [{\n        aspect: ['auto', 'square', 'video', isArbitraryValue]\n      }],\n      /**\n       * Container\n       * @see https://tailwindcss.com/docs/container\n       */\n      container: ['container'],\n      /**\n       * Columns\n       * @see https://tailwindcss.com/docs/columns\n       */\n      columns: [{\n        columns: [isTshirtSize]\n      }],\n      /**\n       * Break After\n       * @see https://tailwindcss.com/docs/break-after\n       */\n      'break-after': [{\n        'break-after': getBreaks()\n      }],\n      /**\n       * Break Before\n       * @see https://tailwindcss.com/docs/break-before\n       */\n      'break-before': [{\n        'break-before': getBreaks()\n      }],\n      /**\n       * Break Inside\n       * @see https://tailwindcss.com/docs/break-inside\n       */\n      'break-inside': [{\n        'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n      }],\n      /**\n       * Box Decoration Break\n       * @see https://tailwindcss.com/docs/box-decoration-break\n       */\n      'box-decoration': [{\n        'box-decoration': ['slice', 'clone']\n      }],\n      /**\n       * Box Sizing\n       * @see https://tailwindcss.com/docs/box-sizing\n       */\n      box: [{\n        box: ['border', 'content']\n      }],\n      /**\n       * Display\n       * @see https://tailwindcss.com/docs/display\n       */\n      display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n      /**\n       * Floats\n       * @see https://tailwindcss.com/docs/float\n       */\n      float: [{\n        float: ['right', 'left', 'none', 'start', 'end']\n      }],\n      /**\n       * Clear\n       * @see https://tailwindcss.com/docs/clear\n       */\n      clear: [{\n        clear: ['left', 'right', 'both', 'none', 'start', 'end']\n      }],\n      /**\n       * Isolation\n       * @see https://tailwindcss.com/docs/isolation\n       */\n      isolation: ['isolate', 'isolation-auto'],\n      /**\n       * Object Fit\n       * @see https://tailwindcss.com/docs/object-fit\n       */\n      'object-fit': [{\n        object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n      }],\n      /**\n       * Object Position\n       * @see https://tailwindcss.com/docs/object-position\n       */\n      'object-position': [{\n        object: [...getPositions(), isArbitraryValue]\n      }],\n      /**\n       * Overflow\n       * @see https://tailwindcss.com/docs/overflow\n       */\n      overflow: [{\n        overflow: getOverflow()\n      }],\n      /**\n       * Overflow X\n       * @see https://tailwindcss.com/docs/overflow\n       */\n      'overflow-x': [{\n        'overflow-x': getOverflow()\n      }],\n      /**\n       * Overflow Y\n       * @see https://tailwindcss.com/docs/overflow\n       */\n      'overflow-y': [{\n        'overflow-y': getOverflow()\n      }],\n      /**\n       * Overscroll Behavior\n       * @see https://tailwindcss.com/docs/overscroll-behavior\n       */\n      overscroll: [{\n        overscroll: getOverscroll()\n      }],\n      /**\n       * Overscroll Behavior X\n       * @see https://tailwindcss.com/docs/overscroll-behavior\n       */\n      'overscroll-x': [{\n        'overscroll-x': getOverscroll()\n      }],\n      /**\n       * Overscroll Behavior Y\n       * @see https://tailwindcss.com/docs/overscroll-behavior\n       */\n      'overscroll-y': [{\n        'overscroll-y': getOverscroll()\n      }],\n      /**\n       * Position\n       * @see https://tailwindcss.com/docs/position\n       */\n      position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n      /**\n       * Top / Right / Bottom / Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      inset: [{\n        inset: [inset]\n      }],\n      /**\n       * Right / Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      'inset-x': [{\n        'inset-x': [inset]\n      }],\n      /**\n       * Top / Bottom\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      'inset-y': [{\n        'inset-y': [inset]\n      }],\n      /**\n       * Start\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      start: [{\n        start: [inset]\n      }],\n      /**\n       * End\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      end: [{\n        end: [inset]\n      }],\n      /**\n       * Top\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      top: [{\n        top: [inset]\n      }],\n      /**\n       * Right\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      right: [{\n        right: [inset]\n      }],\n      /**\n       * Bottom\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      bottom: [{\n        bottom: [inset]\n      }],\n      /**\n       * Left\n       * @see https://tailwindcss.com/docs/top-right-bottom-left\n       */\n      left: [{\n        left: [inset]\n      }],\n      /**\n       * Visibility\n       * @see https://tailwindcss.com/docs/visibility\n       */\n      visibility: ['visible', 'invisible', 'collapse'],\n      /**\n       * Z-Index\n       * @see https://tailwindcss.com/docs/z-index\n       */\n      z: [{\n        z: ['auto', isInteger, isArbitraryValue]\n      }],\n      // Flexbox and Grid\n      /**\n       * Flex Basis\n       * @see https://tailwindcss.com/docs/flex-basis\n       */\n      basis: [{\n        basis: getSpacingWithAutoAndArbitrary()\n      }],\n      /**\n       * Flex Direction\n       * @see https://tailwindcss.com/docs/flex-direction\n       */\n      'flex-direction': [{\n        flex: ['row', 'row-reverse', 'col', 'col-reverse']\n      }],\n      /**\n       * Flex Wrap\n       * @see https://tailwindcss.com/docs/flex-wrap\n       */\n      'flex-wrap': [{\n        flex: ['wrap', 'wrap-reverse', 'nowrap']\n      }],\n      /**\n       * Flex\n       * @see https://tailwindcss.com/docs/flex\n       */\n      flex: [{\n        flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n      }],\n      /**\n       * Flex Grow\n       * @see https://tailwindcss.com/docs/flex-grow\n       */\n      grow: [{\n        grow: getZeroAndEmpty()\n      }],\n      /**\n       * Flex Shrink\n       * @see https://tailwindcss.com/docs/flex-shrink\n       */\n      shrink: [{\n        shrink: getZeroAndEmpty()\n      }],\n      /**\n       * Order\n       * @see https://tailwindcss.com/docs/order\n       */\n      order: [{\n        order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n      }],\n      /**\n       * Grid Template Columns\n       * @see https://tailwindcss.com/docs/grid-template-columns\n       */\n      'grid-cols': [{\n        'grid-cols': [isAny]\n      }],\n      /**\n       * Grid Column Start / End\n       * @see https://tailwindcss.com/docs/grid-column\n       */\n      'col-start-end': [{\n        col: ['auto', {\n          span: ['full', isInteger, isArbitraryValue]\n        }, isArbitraryValue]\n      }],\n      /**\n       * Grid Column Start\n       * @see https://tailwindcss.com/docs/grid-column\n       */\n      'col-start': [{\n        'col-start': getNumberWithAutoAndArbitrary()\n      }],\n      /**\n       * Grid Column End\n       * @see https://tailwindcss.com/docs/grid-column\n       */\n      'col-end': [{\n        'col-end': getNumberWithAutoAndArbitrary()\n      }],\n      /**\n       * Grid Template Rows\n       * @see https://tailwindcss.com/docs/grid-template-rows\n       */\n      'grid-rows': [{\n        'grid-rows': [isAny]\n      }],\n      /**\n       * Grid Row Start / End\n       * @see https://tailwindcss.com/docs/grid-row\n       */\n      'row-start-end': [{\n        row: ['auto', {\n          span: [isInteger, isArbitraryValue]\n        }, isArbitraryValue]\n      }],\n      /**\n       * Grid Row Start\n       * @see https://tailwindcss.com/docs/grid-row\n       */\n      'row-start': [{\n        'row-start': getNumberWithAutoAndArbitrary()\n      }],\n      /**\n       * Grid Row End\n       * @see https://tailwindcss.com/docs/grid-row\n       */\n      'row-end': [{\n        'row-end': getNumberWithAutoAndArbitrary()\n      }],\n      /**\n       * Grid Auto Flow\n       * @see https://tailwindcss.com/docs/grid-auto-flow\n       */\n      'grid-flow': [{\n        'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n      }],\n      /**\n       * Grid Auto Columns\n       * @see https://tailwindcss.com/docs/grid-auto-columns\n       */\n      'auto-cols': [{\n        'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n      }],\n      /**\n       * Grid Auto Rows\n       * @see https://tailwindcss.com/docs/grid-auto-rows\n       */\n      'auto-rows': [{\n        'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n      }],\n      /**\n       * Gap\n       * @see https://tailwindcss.com/docs/gap\n       */\n      gap: [{\n        gap: [gap]\n      }],\n      /**\n       * Gap X\n       * @see https://tailwindcss.com/docs/gap\n       */\n      'gap-x': [{\n        'gap-x': [gap]\n      }],\n      /**\n       * Gap Y\n       * @see https://tailwindcss.com/docs/gap\n       */\n      'gap-y': [{\n        'gap-y': [gap]\n      }],\n      /**\n       * Justify Content\n       * @see https://tailwindcss.com/docs/justify-content\n       */\n      'justify-content': [{\n        justify: ['normal', ...getAlign()]\n      }],\n      /**\n       * Justify Items\n       * @see https://tailwindcss.com/docs/justify-items\n       */\n      'justify-items': [{\n        'justify-items': ['start', 'end', 'center', 'stretch']\n      }],\n      /**\n       * Justify Self\n       * @see https://tailwindcss.com/docs/justify-self\n       */\n      'justify-self': [{\n        'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n      }],\n      /**\n       * Align Content\n       * @see https://tailwindcss.com/docs/align-content\n       */\n      'align-content': [{\n        content: ['normal', ...getAlign(), 'baseline']\n      }],\n      /**\n       * Align Items\n       * @see https://tailwindcss.com/docs/align-items\n       */\n      'align-items': [{\n        items: ['start', 'end', 'center', 'baseline', 'stretch']\n      }],\n      /**\n       * Align Self\n       * @see https://tailwindcss.com/docs/align-self\n       */\n      'align-self': [{\n        self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n      }],\n      /**\n       * Place Content\n       * @see https://tailwindcss.com/docs/place-content\n       */\n      'place-content': [{\n        'place-content': [...getAlign(), 'baseline']\n      }],\n      /**\n       * Place Items\n       * @see https://tailwindcss.com/docs/place-items\n       */\n      'place-items': [{\n        'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n      }],\n      /**\n       * Place Self\n       * @see https://tailwindcss.com/docs/place-self\n       */\n      'place-self': [{\n        'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n      }],\n      // Spacing\n      /**\n       * Padding\n       * @see https://tailwindcss.com/docs/padding\n       */\n      p: [{\n        p: [padding]\n      }],\n      /**\n       * Padding X\n       * @see https://tailwindcss.com/docs/padding\n       */\n      px: [{\n        px: [padding]\n      }],\n      /**\n       * Padding Y\n       * @see https://tailwindcss.com/docs/padding\n       */\n      py: [{\n        py: [padding]\n      }],\n      /**\n       * Padding Start\n       * @see https://tailwindcss.com/docs/padding\n       */\n      ps: [{\n        ps: [padding]\n      }],\n      /**\n       * Padding End\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pe: [{\n        pe: [padding]\n      }],\n      /**\n       * Padding Top\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pt: [{\n        pt: [padding]\n      }],\n      /**\n       * Padding Right\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pr: [{\n        pr: [padding]\n      }],\n      /**\n       * Padding Bottom\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pb: [{\n        pb: [padding]\n      }],\n      /**\n       * Padding Left\n       * @see https://tailwindcss.com/docs/padding\n       */\n      pl: [{\n        pl: [padding]\n      }],\n      /**\n       * Margin\n       * @see https://tailwindcss.com/docs/margin\n       */\n      m: [{\n        m: [margin]\n      }],\n      /**\n       * Margin X\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mx: [{\n        mx: [margin]\n      }],\n      /**\n       * Margin Y\n       * @see https://tailwindcss.com/docs/margin\n       */\n      my: [{\n        my: [margin]\n      }],\n      /**\n       * Margin Start\n       * @see https://tailwindcss.com/docs/margin\n       */\n      ms: [{\n        ms: [margin]\n      }],\n      /**\n       * Margin End\n       * @see https://tailwindcss.com/docs/margin\n       */\n      me: [{\n        me: [margin]\n      }],\n      /**\n       * Margin Top\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mt: [{\n        mt: [margin]\n      }],\n      /**\n       * Margin Right\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mr: [{\n        mr: [margin]\n      }],\n      /**\n       * Margin Bottom\n       * @see https://tailwindcss.com/docs/margin\n       */\n      mb: [{\n        mb: [margin]\n      }],\n      /**\n       * Margin Left\n       * @see https://tailwindcss.com/docs/margin\n       */\n      ml: [{\n        ml: [margin]\n      }],\n      /**\n       * Space Between X\n       * @see https://tailwindcss.com/docs/space\n       */\n      'space-x': [{\n        'space-x': [space]\n      }],\n      /**\n       * Space Between X Reverse\n       * @see https://tailwindcss.com/docs/space\n       */\n      'space-x-reverse': ['space-x-reverse'],\n      /**\n       * Space Between Y\n       * @see https://tailwindcss.com/docs/space\n       */\n      'space-y': [{\n        'space-y': [space]\n      }],\n      /**\n       * Space Between Y Reverse\n       * @see https://tailwindcss.com/docs/space\n       */\n      'space-y-reverse': ['space-y-reverse'],\n      // Sizing\n      /**\n       * Width\n       * @see https://tailwindcss.com/docs/width\n       */\n      w: [{\n        w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n      }],\n      /**\n       * Min-Width\n       * @see https://tailwindcss.com/docs/min-width\n       */\n      'min-w': [{\n        'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n      }],\n      /**\n       * Max-Width\n       * @see https://tailwindcss.com/docs/max-width\n       */\n      'max-w': [{\n        'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n          screen: [isTshirtSize]\n        }, isTshirtSize]\n      }],\n      /**\n       * Height\n       * @see https://tailwindcss.com/docs/height\n       */\n      h: [{\n        h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n      }],\n      /**\n       * Min-Height\n       * @see https://tailwindcss.com/docs/min-height\n       */\n      'min-h': [{\n        'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n      }],\n      /**\n       * Max-Height\n       * @see https://tailwindcss.com/docs/max-height\n       */\n      'max-h': [{\n        'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n      }],\n      /**\n       * Size\n       * @see https://tailwindcss.com/docs/size\n       */\n      size: [{\n        size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n      }],\n      // Typography\n      /**\n       * Font Size\n       * @see https://tailwindcss.com/docs/font-size\n       */\n      'font-size': [{\n        text: ['base', isTshirtSize, isArbitraryLength]\n      }],\n      /**\n       * Font Smoothing\n       * @see https://tailwindcss.com/docs/font-smoothing\n       */\n      'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n      /**\n       * Font Style\n       * @see https://tailwindcss.com/docs/font-style\n       */\n      'font-style': ['italic', 'not-italic'],\n      /**\n       * Font Weight\n       * @see https://tailwindcss.com/docs/font-weight\n       */\n      'font-weight': [{\n        font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n      }],\n      /**\n       * Font Family\n       * @see https://tailwindcss.com/docs/font-family\n       */\n      'font-family': [{\n        font: [isAny]\n      }],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-normal': ['normal-nums'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-ordinal': ['ordinal'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-slashed-zero': ['slashed-zero'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n      /**\n       * Font Variant Numeric\n       * @see https://tailwindcss.com/docs/font-variant-numeric\n       */\n      'fvn-fraction': ['diagonal-fractions', 'stacked-fractons'],\n      /**\n       * Letter Spacing\n       * @see https://tailwindcss.com/docs/letter-spacing\n       */\n      tracking: [{\n        tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n      }],\n      /**\n       * Line Clamp\n       * @see https://tailwindcss.com/docs/line-clamp\n       */\n      'line-clamp': [{\n        'line-clamp': ['none', isNumber, isArbitraryNumber]\n      }],\n      /**\n       * Line Height\n       * @see https://tailwindcss.com/docs/line-height\n       */\n      leading: [{\n        leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n      }],\n      /**\n       * List Style Image\n       * @see https://tailwindcss.com/docs/list-style-image\n       */\n      'list-image': [{\n        'list-image': ['none', isArbitraryValue]\n      }],\n      /**\n       * List Style Type\n       * @see https://tailwindcss.com/docs/list-style-type\n       */\n      'list-style-type': [{\n        list: ['none', 'disc', 'decimal', isArbitraryValue]\n      }],\n      /**\n       * List Style Position\n       * @see https://tailwindcss.com/docs/list-style-position\n       */\n      'list-style-position': [{\n        list: ['inside', 'outside']\n      }],\n      /**\n       * Placeholder Color\n       * @deprecated since Tailwind CSS v3.0.0\n       * @see https://tailwindcss.com/docs/placeholder-color\n       */\n      'placeholder-color': [{\n        placeholder: [colors]\n      }],\n      /**\n       * Placeholder Opacity\n       * @see https://tailwindcss.com/docs/placeholder-opacity\n       */\n      'placeholder-opacity': [{\n        'placeholder-opacity': [opacity]\n      }],\n      /**\n       * Text Alignment\n       * @see https://tailwindcss.com/docs/text-align\n       */\n      'text-alignment': [{\n        text: ['left', 'center', 'right', 'justify', 'start', 'end']\n      }],\n      /**\n       * Text Color\n       * @see https://tailwindcss.com/docs/text-color\n       */\n      'text-color': [{\n        text: [colors]\n      }],\n      /**\n       * Text Opacity\n       * @see https://tailwindcss.com/docs/text-opacity\n       */\n      'text-opacity': [{\n        'text-opacity': [opacity]\n      }],\n      /**\n       * Text Decoration\n       * @see https://tailwindcss.com/docs/text-decoration\n       */\n      'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n      /**\n       * Text Decoration Style\n       * @see https://tailwindcss.com/docs/text-decoration-style\n       */\n      'text-decoration-style': [{\n        decoration: [...getLineStyles(), 'wavy']\n      }],\n      /**\n       * Text Decoration Thickness\n       * @see https://tailwindcss.com/docs/text-decoration-thickness\n       */\n      'text-decoration-thickness': [{\n        decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n      }],\n      /**\n       * Text Underline Offset\n       * @see https://tailwindcss.com/docs/text-underline-offset\n       */\n      'underline-offset': [{\n        'underline-offset': ['auto', isLength, isArbitraryValue]\n      }],\n      /**\n       * Text Decoration Color\n       * @see https://tailwindcss.com/docs/text-decoration-color\n       */\n      'text-decoration-color': [{\n        decoration: [colors]\n      }],\n      /**\n       * Text Transform\n       * @see https://tailwindcss.com/docs/text-transform\n       */\n      'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n      /**\n       * Text Overflow\n       * @see https://tailwindcss.com/docs/text-overflow\n       */\n      'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n      /**\n       * Text Wrap\n       * @see https://tailwindcss.com/docs/text-wrap\n       */\n      'text-wrap': [{\n        text: ['wrap', 'nowrap', 'balance', 'pretty']\n      }],\n      /**\n       * Text Indent\n       * @see https://tailwindcss.com/docs/text-indent\n       */\n      indent: [{\n        indent: getSpacingWithArbitrary()\n      }],\n      /**\n       * Vertical Alignment\n       * @see https://tailwindcss.com/docs/vertical-align\n       */\n      'vertical-align': [{\n        align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n      }],\n      /**\n       * Whitespace\n       * @see https://tailwindcss.com/docs/whitespace\n       */\n      whitespace: [{\n        whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n      }],\n      /**\n       * Word Break\n       * @see https://tailwindcss.com/docs/word-break\n       */\n      break: [{\n        break: ['normal', 'words', 'all', 'keep']\n      }],\n      /**\n       * Hyphens\n       * @see https://tailwindcss.com/docs/hyphens\n       */\n      hyphens: [{\n        hyphens: ['none', 'manual', 'auto']\n      }],\n      /**\n       * Content\n       * @see https://tailwindcss.com/docs/content\n       */\n      content: [{\n        content: ['none', isArbitraryValue]\n      }],\n      // Backgrounds\n      /**\n       * Background Attachment\n       * @see https://tailwindcss.com/docs/background-attachment\n       */\n      'bg-attachment': [{\n        bg: ['fixed', 'local', 'scroll']\n      }],\n      /**\n       * Background Clip\n       * @see https://tailwindcss.com/docs/background-clip\n       */\n      'bg-clip': [{\n        'bg-clip': ['border', 'padding', 'content', 'text']\n      }],\n      /**\n       * Background Opacity\n       * @deprecated since Tailwind CSS v3.0.0\n       * @see https://tailwindcss.com/docs/background-opacity\n       */\n      'bg-opacity': [{\n        'bg-opacity': [opacity]\n      }],\n      /**\n       * Background Origin\n       * @see https://tailwindcss.com/docs/background-origin\n       */\n      'bg-origin': [{\n        'bg-origin': ['border', 'padding', 'content']\n      }],\n      /**\n       * Background Position\n       * @see https://tailwindcss.com/docs/background-position\n       */\n      'bg-position': [{\n        bg: [...getPositions(), isArbitraryPosition]\n      }],\n      /**\n       * Background Repeat\n       * @see https://tailwindcss.com/docs/background-repeat\n       */\n      'bg-repeat': [{\n        bg: ['no-repeat', {\n          repeat: ['', 'x', 'y', 'round', 'space']\n        }]\n      }],\n      /**\n       * Background Size\n       * @see https://tailwindcss.com/docs/background-size\n       */\n      'bg-size': [{\n        bg: ['auto', 'cover', 'contain', isArbitrarySize]\n      }],\n      /**\n       * Background Image\n       * @see https://tailwindcss.com/docs/background-image\n       */\n      'bg-image': [{\n        bg: ['none', {\n          'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n        }, isArbitraryImage]\n      }],\n      /**\n       * Background Color\n       * @see https://tailwindcss.com/docs/background-color\n       */\n      'bg-color': [{\n        bg: [colors]\n      }],\n      /**\n       * Gradient Color Stops From Position\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-from-pos': [{\n        from: [gradientColorStopPositions]\n      }],\n      /**\n       * Gradient Color Stops Via Position\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-via-pos': [{\n        via: [gradientColorStopPositions]\n      }],\n      /**\n       * Gradient Color Stops To Position\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-to-pos': [{\n        to: [gradientColorStopPositions]\n      }],\n      /**\n       * Gradient Color Stops From\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-from': [{\n        from: [gradientColorStops]\n      }],\n      /**\n       * Gradient Color Stops Via\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-via': [{\n        via: [gradientColorStops]\n      }],\n      /**\n       * Gradient Color Stops To\n       * @see https://tailwindcss.com/docs/gradient-color-stops\n       */\n      'gradient-to': [{\n        to: [gradientColorStops]\n      }],\n      // Borders\n      /**\n       * Border Radius\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      rounded: [{\n        rounded: [borderRadius]\n      }],\n      /**\n       * Border Radius Start\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-s': [{\n        'rounded-s': [borderRadius]\n      }],\n      /**\n       * Border Radius End\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-e': [{\n        'rounded-e': [borderRadius]\n      }],\n      /**\n       * Border Radius Top\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-t': [{\n        'rounded-t': [borderRadius]\n      }],\n      /**\n       * Border Radius Right\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-r': [{\n        'rounded-r': [borderRadius]\n      }],\n      /**\n       * Border Radius Bottom\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-b': [{\n        'rounded-b': [borderRadius]\n      }],\n      /**\n       * Border Radius Left\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-l': [{\n        'rounded-l': [borderRadius]\n      }],\n      /**\n       * Border Radius Start Start\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-ss': [{\n        'rounded-ss': [borderRadius]\n      }],\n      /**\n       * Border Radius Start End\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-se': [{\n        'rounded-se': [borderRadius]\n      }],\n      /**\n       * Border Radius End End\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-ee': [{\n        'rounded-ee': [borderRadius]\n      }],\n      /**\n       * Border Radius End Start\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-es': [{\n        'rounded-es': [borderRadius]\n      }],\n      /**\n       * Border Radius Top Left\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-tl': [{\n        'rounded-tl': [borderRadius]\n      }],\n      /**\n       * Border Radius Top Right\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-tr': [{\n        'rounded-tr': [borderRadius]\n      }],\n      /**\n       * Border Radius Bottom Right\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-br': [{\n        'rounded-br': [borderRadius]\n      }],\n      /**\n       * Border Radius Bottom Left\n       * @see https://tailwindcss.com/docs/border-radius\n       */\n      'rounded-bl': [{\n        'rounded-bl': [borderRadius]\n      }],\n      /**\n       * Border Width\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w': [{\n        border: [borderWidth]\n      }],\n      /**\n       * Border Width X\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-x': [{\n        'border-x': [borderWidth]\n      }],\n      /**\n       * Border Width Y\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-y': [{\n        'border-y': [borderWidth]\n      }],\n      /**\n       * Border Width Start\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-s': [{\n        'border-s': [borderWidth]\n      }],\n      /**\n       * Border Width End\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-e': [{\n        'border-e': [borderWidth]\n      }],\n      /**\n       * Border Width Top\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-t': [{\n        'border-t': [borderWidth]\n      }],\n      /**\n       * Border Width Right\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-r': [{\n        'border-r': [borderWidth]\n      }],\n      /**\n       * Border Width Bottom\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-b': [{\n        'border-b': [borderWidth]\n      }],\n      /**\n       * Border Width Left\n       * @see https://tailwindcss.com/docs/border-width\n       */\n      'border-w-l': [{\n        'border-l': [borderWidth]\n      }],\n      /**\n       * Border Opacity\n       * @see https://tailwindcss.com/docs/border-opacity\n       */\n      'border-opacity': [{\n        'border-opacity': [opacity]\n      }],\n      /**\n       * Border Style\n       * @see https://tailwindcss.com/docs/border-style\n       */\n      'border-style': [{\n        border: [...getLineStyles(), 'hidden']\n      }],\n      /**\n       * Divide Width X\n       * @see https://tailwindcss.com/docs/divide-width\n       */\n      'divide-x': [{\n        'divide-x': [borderWidth]\n      }],\n      /**\n       * Divide Width X Reverse\n       * @see https://tailwindcss.com/docs/divide-width\n       */\n      'divide-x-reverse': ['divide-x-reverse'],\n      /**\n       * Divide Width Y\n       * @see https://tailwindcss.com/docs/divide-width\n       */\n      'divide-y': [{\n        'divide-y': [borderWidth]\n      }],\n      /**\n       * Divide Width Y Reverse\n       * @see https://tailwindcss.com/docs/divide-width\n       */\n      'divide-y-reverse': ['divide-y-reverse'],\n      /**\n       * Divide Opacity\n       * @see https://tailwindcss.com/docs/divide-opacity\n       */\n      'divide-opacity': [{\n        'divide-opacity': [opacity]\n      }],\n      /**\n       * Divide Style\n       * @see https://tailwindcss.com/docs/divide-style\n       */\n      'divide-style': [{\n        divide: getLineStyles()\n      }],\n      /**\n       * Border Color\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color': [{\n        border: [borderColor]\n      }],\n      /**\n       * Border Color X\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-x': [{\n        'border-x': [borderColor]\n      }],\n      /**\n       * Border Color Y\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-y': [{\n        'border-y': [borderColor]\n      }],\n      /**\n       * Border Color Top\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-t': [{\n        'border-t': [borderColor]\n      }],\n      /**\n       * Border Color Right\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-r': [{\n        'border-r': [borderColor]\n      }],\n      /**\n       * Border Color Bottom\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-b': [{\n        'border-b': [borderColor]\n      }],\n      /**\n       * Border Color Left\n       * @see https://tailwindcss.com/docs/border-color\n       */\n      'border-color-l': [{\n        'border-l': [borderColor]\n      }],\n      /**\n       * Divide Color\n       * @see https://tailwindcss.com/docs/divide-color\n       */\n      'divide-color': [{\n        divide: [borderColor]\n      }],\n      /**\n       * Outline Style\n       * @see https://tailwindcss.com/docs/outline-style\n       */\n      'outline-style': [{\n        outline: ['', ...getLineStyles()]\n      }],\n      /**\n       * Outline Offset\n       * @see https://tailwindcss.com/docs/outline-offset\n       */\n      'outline-offset': [{\n        'outline-offset': [isLength, isArbitraryValue]\n      }],\n      /**\n       * Outline Width\n       * @see https://tailwindcss.com/docs/outline-width\n       */\n      'outline-w': [{\n        outline: [isLength, isArbitraryLength]\n      }],\n      /**\n       * Outline Color\n       * @see https://tailwindcss.com/docs/outline-color\n       */\n      'outline-color': [{\n        outline: [colors]\n      }],\n      /**\n       * Ring Width\n       * @see https://tailwindcss.com/docs/ring-width\n       */\n      'ring-w': [{\n        ring: getLengthWithEmptyAndArbitrary()\n      }],\n      /**\n       * Ring Width Inset\n       * @see https://tailwindcss.com/docs/ring-width\n       */\n      'ring-w-inset': ['ring-inset'],\n      /**\n       * Ring Color\n       * @see https://tailwindcss.com/docs/ring-color\n       */\n      'ring-color': [{\n        ring: [colors]\n      }],\n      /**\n       * Ring Opacity\n       * @see https://tailwindcss.com/docs/ring-opacity\n       */\n      'ring-opacity': [{\n        'ring-opacity': [opacity]\n      }],\n      /**\n       * Ring Offset Width\n       * @see https://tailwindcss.com/docs/ring-offset-width\n       */\n      'ring-offset-w': [{\n        'ring-offset': [isLength, isArbitraryLength]\n      }],\n      /**\n       * Ring Offset Color\n       * @see https://tailwindcss.com/docs/ring-offset-color\n       */\n      'ring-offset-color': [{\n        'ring-offset': [colors]\n      }],\n      // Effects\n      /**\n       * Box Shadow\n       * @see https://tailwindcss.com/docs/box-shadow\n       */\n      shadow: [{\n        shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n      }],\n      /**\n       * Box Shadow Color\n       * @see https://tailwindcss.com/docs/box-shadow-color\n       */\n      'shadow-color': [{\n        shadow: [isAny]\n      }],\n      /**\n       * Opacity\n       * @see https://tailwindcss.com/docs/opacity\n       */\n      opacity: [{\n        opacity: [opacity]\n      }],\n      /**\n       * Mix Blend Mode\n       * @see https://tailwindcss.com/docs/mix-blend-mode\n       */\n      'mix-blend': [{\n        'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n      }],\n      /**\n       * Background Blend Mode\n       * @see https://tailwindcss.com/docs/background-blend-mode\n       */\n      'bg-blend': [{\n        'bg-blend': getBlendModes()\n      }],\n      // Filters\n      /**\n       * Filter\n       * @deprecated since Tailwind CSS v3.0.0\n       * @see https://tailwindcss.com/docs/filter\n       */\n      filter: [{\n        filter: ['', 'none']\n      }],\n      /**\n       * Blur\n       * @see https://tailwindcss.com/docs/blur\n       */\n      blur: [{\n        blur: [blur]\n      }],\n      /**\n       * Brightness\n       * @see https://tailwindcss.com/docs/brightness\n       */\n      brightness: [{\n        brightness: [brightness]\n      }],\n      /**\n       * Contrast\n       * @see https://tailwindcss.com/docs/contrast\n       */\n      contrast: [{\n        contrast: [contrast]\n      }],\n      /**\n       * Drop Shadow\n       * @see https://tailwindcss.com/docs/drop-shadow\n       */\n      'drop-shadow': [{\n        'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n      }],\n      /**\n       * Grayscale\n       * @see https://tailwindcss.com/docs/grayscale\n       */\n      grayscale: [{\n        grayscale: [grayscale]\n      }],\n      /**\n       * Hue Rotate\n       * @see https://tailwindcss.com/docs/hue-rotate\n       */\n      'hue-rotate': [{\n        'hue-rotate': [hueRotate]\n      }],\n      /**\n       * Invert\n       * @see https://tailwindcss.com/docs/invert\n       */\n      invert: [{\n        invert: [invert]\n      }],\n      /**\n       * Saturate\n       * @see https://tailwindcss.com/docs/saturate\n       */\n      saturate: [{\n        saturate: [saturate]\n      }],\n      /**\n       * Sepia\n       * @see https://tailwindcss.com/docs/sepia\n       */\n      sepia: [{\n        sepia: [sepia]\n      }],\n      /**\n       * Backdrop Filter\n       * @deprecated since Tailwind CSS v3.0.0\n       * @see https://tailwindcss.com/docs/backdrop-filter\n       */\n      'backdrop-filter': [{\n        'backdrop-filter': ['', 'none']\n      }],\n      /**\n       * Backdrop Blur\n       * @see https://tailwindcss.com/docs/backdrop-blur\n       */\n      'backdrop-blur': [{\n        'backdrop-blur': [blur]\n      }],\n      /**\n       * Backdrop Brightness\n       * @see https://tailwindcss.com/docs/backdrop-brightness\n       */\n      'backdrop-brightness': [{\n        'backdrop-brightness': [brightness]\n      }],\n      /**\n       * Backdrop Contrast\n       * @see https://tailwindcss.com/docs/backdrop-contrast\n       */\n      'backdrop-contrast': [{\n        'backdrop-contrast': [contrast]\n      }],\n      /**\n       * Backdrop Grayscale\n       * @see https://tailwindcss.com/docs/backdrop-grayscale\n       */\n      'backdrop-grayscale': [{\n        'backdrop-grayscale': [grayscale]\n      }],\n      /**\n       * Backdrop Hue Rotate\n       * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n       */\n      'backdrop-hue-rotate': [{\n        'backdrop-hue-rotate': [hueRotate]\n      }],\n      /**\n       * Backdrop Invert\n       * @see https://tailwindcss.com/docs/backdrop-invert\n       */\n      'backdrop-invert': [{\n        'backdrop-invert': [invert]\n      }],\n      /**\n       * Backdrop Opacity\n       * @see https://tailwindcss.com/docs/backdrop-opacity\n       */\n      'backdrop-opacity': [{\n        'backdrop-opacity': [opacity]\n      }],\n      /**\n       * Backdrop Saturate\n       * @see https://tailwindcss.com/docs/backdrop-saturate\n       */\n      'backdrop-saturate': [{\n        'backdrop-saturate': [saturate]\n      }],\n      /**\n       * Backdrop Sepia\n       * @see https://tailwindcss.com/docs/backdrop-sepia\n       */\n      'backdrop-sepia': [{\n        'backdrop-sepia': [sepia]\n      }],\n      // Tables\n      /**\n       * Border Collapse\n       * @see https://tailwindcss.com/docs/border-collapse\n       */\n      'border-collapse': [{\n        border: ['collapse', 'separate']\n      }],\n      /**\n       * Border Spacing\n       * @see https://tailwindcss.com/docs/border-spacing\n       */\n      'border-spacing': [{\n        'border-spacing': [borderSpacing]\n      }],\n      /**\n       * Border Spacing X\n       * @see https://tailwindcss.com/docs/border-spacing\n       */\n      'border-spacing-x': [{\n        'border-spacing-x': [borderSpacing]\n      }],\n      /**\n       * Border Spacing Y\n       * @see https://tailwindcss.com/docs/border-spacing\n       */\n      'border-spacing-y': [{\n        'border-spacing-y': [borderSpacing]\n      }],\n      /**\n       * Table Layout\n       * @see https://tailwindcss.com/docs/table-layout\n       */\n      'table-layout': [{\n        table: ['auto', 'fixed']\n      }],\n      /**\n       * Caption Side\n       * @see https://tailwindcss.com/docs/caption-side\n       */\n      caption: [{\n        caption: ['top', 'bottom']\n      }],\n      // Transitions and Animation\n      /**\n       * Tranisition Property\n       * @see https://tailwindcss.com/docs/transition-property\n       */\n      transition: [{\n        transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n      }],\n      /**\n       * Transition Duration\n       * @see https://tailwindcss.com/docs/transition-duration\n       */\n      duration: [{\n        duration: getNumberAndArbitrary()\n      }],\n      /**\n       * Transition Timing Function\n       * @see https://tailwindcss.com/docs/transition-timing-function\n       */\n      ease: [{\n        ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n      }],\n      /**\n       * Transition Delay\n       * @see https://tailwindcss.com/docs/transition-delay\n       */\n      delay: [{\n        delay: getNumberAndArbitrary()\n      }],\n      /**\n       * Animation\n       * @see https://tailwindcss.com/docs/animation\n       */\n      animate: [{\n        animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n      }],\n      // Transforms\n      /**\n       * Transform\n       * @see https://tailwindcss.com/docs/transform\n       */\n      transform: [{\n        transform: ['', 'gpu', 'none']\n      }],\n      /**\n       * Scale\n       * @see https://tailwindcss.com/docs/scale\n       */\n      scale: [{\n        scale: [scale]\n      }],\n      /**\n       * Scale X\n       * @see https://tailwindcss.com/docs/scale\n       */\n      'scale-x': [{\n        'scale-x': [scale]\n      }],\n      /**\n       * Scale Y\n       * @see https://tailwindcss.com/docs/scale\n       */\n      'scale-y': [{\n        'scale-y': [scale]\n      }],\n      /**\n       * Rotate\n       * @see https://tailwindcss.com/docs/rotate\n       */\n      rotate: [{\n        rotate: [isInteger, isArbitraryValue]\n      }],\n      /**\n       * Translate X\n       * @see https://tailwindcss.com/docs/translate\n       */\n      'translate-x': [{\n        'translate-x': [translate]\n      }],\n      /**\n       * Translate Y\n       * @see https://tailwindcss.com/docs/translate\n       */\n      'translate-y': [{\n        'translate-y': [translate]\n      }],\n      /**\n       * Skew X\n       * @see https://tailwindcss.com/docs/skew\n       */\n      'skew-x': [{\n        'skew-x': [skew]\n      }],\n      /**\n       * Skew Y\n       * @see https://tailwindcss.com/docs/skew\n       */\n      'skew-y': [{\n        'skew-y': [skew]\n      }],\n      /**\n       * Transform Origin\n       * @see https://tailwindcss.com/docs/transform-origin\n       */\n      'transform-origin': [{\n        origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n      }],\n      // Interactivity\n      /**\n       * Accent Color\n       * @see https://tailwindcss.com/docs/accent-color\n       */\n      accent: [{\n        accent: ['auto', colors]\n      }],\n      /**\n       * Appearance\n       * @see https://tailwindcss.com/docs/appearance\n       */\n      appearance: [{\n        appearance: ['none', 'auto']\n      }],\n      /**\n       * Cursor\n       * @see https://tailwindcss.com/docs/cursor\n       */\n      cursor: [{\n        cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n      }],\n      /**\n       * Caret Color\n       * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n       */\n      'caret-color': [{\n        caret: [colors]\n      }],\n      /**\n       * Pointer Events\n       * @see https://tailwindcss.com/docs/pointer-events\n       */\n      'pointer-events': [{\n        'pointer-events': ['none', 'auto']\n      }],\n      /**\n       * Resize\n       * @see https://tailwindcss.com/docs/resize\n       */\n      resize: [{\n        resize: ['none', 'y', 'x', '']\n      }],\n      /**\n       * Scroll Behavior\n       * @see https://tailwindcss.com/docs/scroll-behavior\n       */\n      'scroll-behavior': [{\n        scroll: ['auto', 'smooth']\n      }],\n      /**\n       * Scroll Margin\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-m': [{\n        'scroll-m': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin X\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mx': [{\n        'scroll-mx': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Y\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-my': [{\n        'scroll-my': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Start\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-ms': [{\n        'scroll-ms': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin End\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-me': [{\n        'scroll-me': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Top\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mt': [{\n        'scroll-mt': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Right\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mr': [{\n        'scroll-mr': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Bottom\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-mb': [{\n        'scroll-mb': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Margin Left\n       * @see https://tailwindcss.com/docs/scroll-margin\n       */\n      'scroll-ml': [{\n        'scroll-ml': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-p': [{\n        'scroll-p': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding X\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-px': [{\n        'scroll-px': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Y\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-py': [{\n        'scroll-py': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Start\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-ps': [{\n        'scroll-ps': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding End\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pe': [{\n        'scroll-pe': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Top\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pt': [{\n        'scroll-pt': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Right\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pr': [{\n        'scroll-pr': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Bottom\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pb': [{\n        'scroll-pb': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Padding Left\n       * @see https://tailwindcss.com/docs/scroll-padding\n       */\n      'scroll-pl': [{\n        'scroll-pl': getSpacingWithArbitrary()\n      }],\n      /**\n       * Scroll Snap Align\n       * @see https://tailwindcss.com/docs/scroll-snap-align\n       */\n      'snap-align': [{\n        snap: ['start', 'end', 'center', 'align-none']\n      }],\n      /**\n       * Scroll Snap Stop\n       * @see https://tailwindcss.com/docs/scroll-snap-stop\n       */\n      'snap-stop': [{\n        snap: ['normal', 'always']\n      }],\n      /**\n       * Scroll Snap Type\n       * @see https://tailwindcss.com/docs/scroll-snap-type\n       */\n      'snap-type': [{\n        snap: ['none', 'x', 'y', 'both']\n      }],\n      /**\n       * Scroll Snap Type Strictness\n       * @see https://tailwindcss.com/docs/scroll-snap-type\n       */\n      'snap-strictness': [{\n        snap: ['mandatory', 'proximity']\n      }],\n      /**\n       * Touch Action\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      touch: [{\n        touch: ['auto', 'none', 'manipulation']\n      }],\n      /**\n       * Touch Action X\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      'touch-x': [{\n        'touch-pan': ['x', 'left', 'right']\n      }],\n      /**\n       * Touch Action Y\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      'touch-y': [{\n        'touch-pan': ['y', 'up', 'down']\n      }],\n      /**\n       * Touch Action Pinch Zoom\n       * @see https://tailwindcss.com/docs/touch-action\n       */\n      'touch-pz': ['touch-pinch-zoom'],\n      /**\n       * User Select\n       * @see https://tailwindcss.com/docs/user-select\n       */\n      select: [{\n        select: ['none', 'text', 'all', 'auto']\n      }],\n      /**\n       * Will Change\n       * @see https://tailwindcss.com/docs/will-change\n       */\n      'will-change': [{\n        'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n      }],\n      // SVG\n      /**\n       * Fill\n       * @see https://tailwindcss.com/docs/fill\n       */\n      fill: [{\n        fill: [colors, 'none']\n      }],\n      /**\n       * Stroke Width\n       * @see https://tailwindcss.com/docs/stroke-width\n       */\n      'stroke-w': [{\n        stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n      }],\n      /**\n       * Stroke\n       * @see https://tailwindcss.com/docs/stroke\n       */\n      stroke: [{\n        stroke: [colors, 'none']\n      }],\n      // Accessibility\n      /**\n       * Screen Readers\n       * @see https://tailwindcss.com/docs/screen-readers\n       */\n      sr: ['sr-only', 'not-sr-only'],\n      /**\n       * Forced Color Adjust\n       * @see https://tailwindcss.com/docs/forced-color-adjust\n       */\n      'forced-color-adjust': [{\n        'forced-color-adjust': ['auto', 'none']\n      }]\n    },\n    conflictingClassGroups: {\n      overflow: ['overflow-x', 'overflow-y'],\n      overscroll: ['overscroll-x', 'overscroll-y'],\n      inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n      'inset-x': ['right', 'left'],\n      'inset-y': ['top', 'bottom'],\n      flex: ['basis', 'grow', 'shrink'],\n      gap: ['gap-x', 'gap-y'],\n      p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n      px: ['pr', 'pl'],\n      py: ['pt', 'pb'],\n      m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n      mx: ['mr', 'ml'],\n      my: ['mt', 'mb'],\n      size: ['w', 'h'],\n      'font-size': ['leading'],\n      'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n      'fvn-ordinal': ['fvn-normal'],\n      'fvn-slashed-zero': ['fvn-normal'],\n      'fvn-figure': ['fvn-normal'],\n      'fvn-spacing': ['fvn-normal'],\n      'fvn-fraction': ['fvn-normal'],\n      'line-clamp': ['display', 'overflow'],\n      rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n      'rounded-s': ['rounded-ss', 'rounded-es'],\n      'rounded-e': ['rounded-se', 'rounded-ee'],\n      'rounded-t': ['rounded-tl', 'rounded-tr'],\n      'rounded-r': ['rounded-tr', 'rounded-br'],\n      'rounded-b': ['rounded-br', 'rounded-bl'],\n      'rounded-l': ['rounded-tl', 'rounded-bl'],\n      'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n      'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n      'border-w-x': ['border-w-r', 'border-w-l'],\n      'border-w-y': ['border-w-t', 'border-w-b'],\n      'border-color': ['border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n      'border-color-x': ['border-color-r', 'border-color-l'],\n      'border-color-y': ['border-color-t', 'border-color-b'],\n      'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n      'scroll-mx': ['scroll-mr', 'scroll-ml'],\n      'scroll-my': ['scroll-mt', 'scroll-mb'],\n      'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n      'scroll-px': ['scroll-pr', 'scroll-pl'],\n      'scroll-py': ['scroll-pt', 'scroll-pb'],\n      touch: ['touch-x', 'touch-y', 'touch-pz'],\n      'touch-x': ['touch'],\n      'touch-y': ['touch'],\n      'touch-pz': ['touch']\n    },\n    conflictingClassGroupModifiers: {\n      'font-size': ['leading']\n    }\n  };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n  cacheSize,\n  prefix,\n  separator,\n  experimentalParseClassName,\n  extend = {},\n  override = {}\n}) => {\n  overrideProperty(baseConfig, 'cacheSize', cacheSize);\n  overrideProperty(baseConfig, 'prefix', prefix);\n  overrideProperty(baseConfig, 'separator', separator);\n  overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n  for (const configKey in override) {\n    overrideConfigProperties(baseConfig[configKey], override[configKey]);\n  }\n  for (const key in extend) {\n    mergeConfigProperties(baseConfig[key], extend[key]);\n  }\n  return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n  if (overrideValue !== undefined) {\n    baseObject[overrideKey] = overrideValue;\n  }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n  if (overrideObject) {\n    for (const key in overrideObject) {\n      overrideProperty(baseObject, key, overrideObject[key]);\n    }\n  }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n  if (mergeObject) {\n    for (const key in mergeObject) {\n      const mergeValue = mergeObject[key];\n      if (mergeValue !== undefined) {\n        baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n      }\n    }\n  }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { clsx, type ClassValue } from \"clsx\"\nimport { twMerge } from \"tailwind-merge\"\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs))\n}\n","import * as React from \"react\"\nimport * as ToastPrimitives from \"@radix-ui/react-toast\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst ToastProvider = ToastPrimitives.Provider\n\nconst ToastViewport = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Viewport>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Viewport\n    ref={ref}\n    className={cn(\n      \"fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]\",\n      className\n    )}\n    {...props}\n  />\n))\nToastViewport.displayName = ToastPrimitives.Viewport.displayName\n\nconst toastVariants = cva(\n  \"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full\",\n  {\n    variants: {\n      variant: {\n        default: \"border bg-background text-foreground\",\n        destructive:\n          \"destructive group border-destructive bg-destructive text-destructive-foreground\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n    },\n  }\n)\n\nconst Toast = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Root>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> &\n    VariantProps<typeof toastVariants>\n>(({ className, variant, ...props }, ref) => {\n  return (\n    <ToastPrimitives.Root\n      ref={ref}\n      className={cn(toastVariants({ variant }), className)}\n      {...props}\n    />\n  )\n})\nToast.displayName = ToastPrimitives.Root.displayName\n\nconst ToastAction = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Action>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Action\n    ref={ref}\n    className={cn(\n      \"inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive\",\n      className\n    )}\n    {...props}\n  />\n))\nToastAction.displayName = ToastPrimitives.Action.displayName\n\nconst ToastClose = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Close>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Close\n    ref={ref}\n    className={cn(\n      \"absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600\",\n      className\n    )}\n    toast-close=\"\"\n    {...props}\n  >\n    <X className=\"h-4 w-4\" />\n  </ToastPrimitives.Close>\n))\nToastClose.displayName = ToastPrimitives.Close.displayName\n\nconst ToastTitle = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Title>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Title\n    ref={ref}\n    className={cn(\"text-sm font-semibold\", className)}\n    {...props}\n  />\n))\nToastTitle.displayName = ToastPrimitives.Title.displayName\n\nconst ToastDescription = React.forwardRef<\n  React.ElementRef<typeof ToastPrimitives.Description>,\n  React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description>\n>(({ className, ...props }, ref) => (\n  <ToastPrimitives.Description\n    ref={ref}\n    className={cn(\"text-sm opacity-90\", className)}\n    {...props}\n  />\n))\nToastDescription.displayName = ToastPrimitives.Description.displayName\n\ntype ToastProps = React.ComponentPropsWithoutRef<typeof Toast>\n\ntype ToastActionElement = React.ReactElement<typeof ToastAction>\n\nexport {\n  type ToastProps,\n  type ToastActionElement,\n  ToastProvider,\n  ToastViewport,\n  Toast,\n  ToastTitle,\n  ToastDescription,\n  ToastClose,\n  ToastAction,\n}\n","import { useToast } from \"@/hooks/use-toast\"\nimport {\n  Toast,\n  ToastClose,\n  ToastDescription,\n  ToastProvider,\n  ToastTitle,\n  ToastViewport,\n} from \"@/components/ui/toast\"\n\nexport function Toaster() {\n  const { toasts } = useToast()\n\n  return (\n    <ToastProvider>\n      {toasts.map(function ({ id, title, description, action, ...props }) {\n        return (\n          <Toast key={id} {...props}>\n            <div className=\"grid gap-1\">\n              {title && <ToastTitle>{title}</ToastTitle>}\n              {description && (\n                <ToastDescription>{description}</ToastDescription>\n              )}\n            </div>\n            {action}\n            <ToastClose />\n          </Toast>\n        )\n      })}\n      <ToastViewport />\n    </ToastProvider>\n  )\n}\n","\"use client\";import*as t from\"react\";var P=[\"light\",\"dark\"],E=\"(prefers-color-scheme: dark)\",Q=typeof window==\"undefined\",L=t.createContext(void 0),D={setTheme:e=>{},themes:[]},j=()=>{var e;return(e=t.useContext(L))!=null?e:D},z=e=>t.useContext(L)?e.children:t.createElement(O,{...e}),N=[\"light\",\"dark\"],O=({forcedTheme:e,disableTransitionOnChange:a=!1,enableSystem:n=!0,enableColorScheme:g=!0,storageKey:m=\"theme\",themes:c=N,defaultTheme:o=n?\"system\":\"light\",attribute:y=\"data-theme\",value:h,children:k,nonce:w})=>{let[i,d]=t.useState(()=>M(m,o)),[S,l]=t.useState(()=>M(m)),u=h?Object.values(h):c,R=t.useCallback(s=>{let r=s;if(!r)return;s===\"system\"&&n&&(r=T());let v=h?h[r]:r,C=a?_():null,x=document.documentElement;if(y===\"class\"?(x.classList.remove(...u),v&&x.classList.add(v)):v?x.setAttribute(y,v):x.removeAttribute(y),g){let I=P.includes(o)?o:null,A=P.includes(r)?r:I;x.style.colorScheme=A}C==null||C()},[]),f=t.useCallback(s=>{let r=typeof s==\"function\"?s(s):s;d(r);try{localStorage.setItem(m,r)}catch(v){}},[e]),p=t.useCallback(s=>{let r=T(s);l(r),i===\"system\"&&n&&!e&&R(\"system\")},[i,e]);t.useEffect(()=>{let s=window.matchMedia(E);return s.addListener(p),p(s),()=>s.removeListener(p)},[p]),t.useEffect(()=>{let s=r=>{if(r.key!==m)return;let v=r.newValue||o;f(v)};return window.addEventListener(\"storage\",s),()=>window.removeEventListener(\"storage\",s)},[f]),t.useEffect(()=>{R(e!=null?e:i)},[e,i]);let $=t.useMemo(()=>({theme:i,setTheme:f,forcedTheme:e,resolvedTheme:i===\"system\"?S:i,themes:n?[...c,\"system\"]:c,systemTheme:n?S:void 0}),[i,f,e,S,n,c]);return t.createElement(L.Provider,{value:$},t.createElement(U,{forcedTheme:e,disableTransitionOnChange:a,enableSystem:n,enableColorScheme:g,storageKey:m,themes:c,defaultTheme:o,attribute:y,value:h,children:k,attrs:u,nonce:w}),k)},U=t.memo(({forcedTheme:e,storageKey:a,attribute:n,enableSystem:g,enableColorScheme:m,defaultTheme:c,value:o,attrs:y,nonce:h})=>{let k=c===\"system\",w=n===\"class\"?`var d=document.documentElement,c=d.classList;${`c.remove(${y.map(u=>`'${u}'`).join(\",\")})`};`:`var d=document.documentElement,n='${n}',s='setAttribute';`,i=m?(P.includes(c)?c:null)?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${c}'`:\"if(e==='light'||e==='dark')d.style.colorScheme=e\":\"\",d=(l,u=!1,R=!0)=>{let f=o?o[l]:l,p=u?l+\"|| ''\":`'${f}'`,$=\"\";return m&&R&&!u&&P.includes(l)&&($+=`d.style.colorScheme = '${l}';`),n===\"class\"?u||f?$+=`c.add(${p})`:$+=\"null\":f&&($+=`d[s](n,${p})`),$},S=e?`!function(){${w}${d(e)}}()`:g?`!function(){try{${w}var e=localStorage.getItem('${a}');if('system'===e||(!e&&${k})){var t='${E}',m=window.matchMedia(t);if(m.media!==t||m.matches){${d(\"dark\")}}else{${d(\"light\")}}}else if(e){${o?`var x=${JSON.stringify(o)};`:\"\"}${d(o?\"x[e]\":\"e\",!0)}}${k?\"\":\"else{\"+d(c,!1,!1)+\"}\"}${i}}catch(e){}}()`:`!function(){try{${w}var e=localStorage.getItem('${a}');if(e){${o?`var x=${JSON.stringify(o)};`:\"\"}${d(o?\"x[e]\":\"e\",!0)}}else{${d(c,!1,!1)};}${i}}catch(t){}}();`;return t.createElement(\"script\",{nonce:h,dangerouslySetInnerHTML:{__html:S}})}),M=(e,a)=>{if(Q)return;let n;try{n=localStorage.getItem(e)||void 0}catch(g){}return n||a},_=()=>{let e=document.createElement(\"style\");return e.appendChild(document.createTextNode(\"*{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\")),document.head.appendChild(e),()=>{window.getComputedStyle(document.body),setTimeout(()=>{document.head.removeChild(e)},1)}},T=e=>(e||(e=window.matchMedia(E)),e.matches?\"dark\":\"light\");export{z as ThemeProvider,j as useTheme};\n","\"use client\";import e from\"react\";import Gt from\"react-dom\";import E from\"react\";var Ct=s=>{switch(s){case\"success\":return $t;case\"info\":return _t;case\"warning\":return Wt;case\"error\":return Ut;default:return null}},Ft=Array(12).fill(0),It=({visible:s})=>E.createElement(\"div\",{className:\"sonner-loading-wrapper\",\"data-visible\":s},E.createElement(\"div\",{className:\"sonner-spinner\"},Ft.map((o,t)=>E.createElement(\"div\",{className:\"sonner-loading-bar\",key:`spinner-bar-${t}`})))),$t=E.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\",fill:\"currentColor\",height:\"20\",width:\"20\"},E.createElement(\"path\",{fillRule:\"evenodd\",d:\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\",clipRule:\"evenodd\"})),Wt=E.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 24 24\",fill:\"currentColor\",height:\"20\",width:\"20\"},E.createElement(\"path\",{fillRule:\"evenodd\",d:\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\",clipRule:\"evenodd\"})),_t=E.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\",fill:\"currentColor\",height:\"20\",width:\"20\"},E.createElement(\"path\",{fillRule:\"evenodd\",d:\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\",clipRule:\"evenodd\"})),Ut=E.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",viewBox:\"0 0 20 20\",fill:\"currentColor\",height:\"20\",width:\"20\"},E.createElement(\"path\",{fillRule:\"evenodd\",d:\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\",clipRule:\"evenodd\"}));import kt from\"react\";var Dt=()=>{let[s,o]=kt.useState(document.hidden);return kt.useEffect(()=>{let t=()=>{o(document.hidden)};return document.addEventListener(\"visibilitychange\",t),()=>window.removeEventListener(\"visibilitychange\",t)},[]),s};var ct=1,ut=class{constructor(){this.subscribe=o=>(this.subscribers.push(o),()=>{let t=this.subscribers.indexOf(o);this.subscribers.splice(t,1)});this.publish=o=>{this.subscribers.forEach(t=>t(o))};this.addToast=o=>{this.publish(o),this.toasts=[...this.toasts,o]};this.create=o=>{var b;let{message:t,...n}=o,h=typeof(o==null?void 0:o.id)==\"number\"||((b=o.id)==null?void 0:b.length)>0?o.id:ct++,u=this.toasts.find(d=>d.id===h),g=o.dismissible===void 0?!0:o.dismissible;return u?this.toasts=this.toasts.map(d=>d.id===h?(this.publish({...d,...o,id:h,title:t}),{...d,...o,id:h,dismissible:g,title:t}):d):this.addToast({title:t,...n,dismissible:g,id:h}),h};this.dismiss=o=>(o||this.toasts.forEach(t=>{this.subscribers.forEach(n=>n({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:o,dismiss:!0})),o);this.message=(o,t)=>this.create({...t,message:o});this.error=(o,t)=>this.create({...t,message:o,type:\"error\"});this.success=(o,t)=>this.create({...t,type:\"success\",message:o});this.info=(o,t)=>this.create({...t,type:\"info\",message:o});this.warning=(o,t)=>this.create({...t,type:\"warning\",message:o});this.loading=(o,t)=>this.create({...t,type:\"loading\",message:o});this.promise=(o,t)=>{if(!t)return;let n;t.loading!==void 0&&(n=this.create({...t,promise:o,type:\"loading\",message:t.loading,description:typeof t.description!=\"function\"?t.description:void 0}));let h=o instanceof Promise?o:o(),u=n!==void 0;return h.then(async g=>{if(Ot(g)&&!g.ok){u=!1;let b=typeof t.error==\"function\"?await t.error(`HTTP error! status: ${g.status}`):t.error,d=typeof t.description==\"function\"?await t.description(`HTTP error! status: ${g.status}`):t.description;this.create({id:n,type:\"error\",message:b,description:d})}else if(t.success!==void 0){u=!1;let b=typeof t.success==\"function\"?await t.success(g):t.success,d=typeof t.description==\"function\"?await t.description(g):t.description;this.create({id:n,type:\"success\",message:b,description:d})}}).catch(async g=>{if(t.error!==void 0){u=!1;let b=typeof t.error==\"function\"?await t.error(g):t.error,d=typeof t.description==\"function\"?await t.description(g):t.description;this.create({id:n,type:\"error\",message:b,description:d})}}).finally(()=>{var g;u&&(this.dismiss(n),n=void 0),(g=t.finally)==null||g.call(t)}),n};this.custom=(o,t)=>{let n=(t==null?void 0:t.id)||ct++;return this.create({jsx:o(n),id:n,...t}),n};this.subscribers=[],this.toasts=[]}},v=new ut,Vt=(s,o)=>{let t=(o==null?void 0:o.id)||ct++;return v.addToast({title:s,...o,id:t}),t},Ot=s=>s&&typeof s==\"object\"&&\"ok\"in s&&typeof s.ok==\"boolean\"&&\"status\"in s&&typeof s.status==\"number\",Kt=Vt,Xt=()=>v.toasts,Jt=Object.assign(Kt,{success:v.success,info:v.info,warning:v.warning,error:v.error,custom:v.custom,message:v.message,promise:v.promise,dismiss:v.dismiss,loading:v.loading},{getHistory:Xt});function ft(s,{insertAt:o}={}){if(!s||typeof document==\"undefined\")return;let t=document.head||document.getElementsByTagName(\"head\")[0],n=document.createElement(\"style\");n.type=\"text/css\",o===\"top\"&&t.firstChild?t.insertBefore(n,t.firstChild):t.appendChild(n),n.styleSheet?n.styleSheet.cssText=s:n.appendChild(document.createTextNode(s))}ft(`:where(html[dir=\"ltr\"]),:where([data-sonner-toaster][dir=\"ltr\"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir=\"rtl\"]),:where([data-sonner-toaster][dir=\"rtl\"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}:where([data-sonner-toaster][data-x-position=\"right\"]){right:max(var(--offset),env(safe-area-inset-right))}:where([data-sonner-toaster][data-x-position=\"left\"]){left:max(var(--offset),env(safe-area-inset-left))}:where([data-sonner-toaster][data-x-position=\"center\"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position=\"top\"]){top:max(var(--offset),env(safe-area-inset-top))}:where([data-sonner-toaster][data-y-position=\"bottom\"]){bottom:max(var(--offset),env(safe-area-inset-bottom))}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled=\"true\"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position=\"top\"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position=\"bottom\"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise=\"true\"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme=\"dark\"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled=\"true\"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping=\"true\"]):before{content:\"\";position:absolute;left:0;right:0;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position=\"top\"][data-swiping=\"true\"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position=\"bottom\"][data-swiping=\"true\"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping=\"false\"][data-removed=\"true\"]):before{content:\"\";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:\"\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted=\"true\"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded=\"false\"][data-front=\"false\"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded=\"false\"][data-front=\"false\"][data-styled=\"true\"])>*{opacity:0}:where([data-sonner-toast][data-visible=\"false\"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted=\"true\"][data-expanded=\"true\"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed=\"true\"][data-front=\"true\"][data-swipe-out=\"false\"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed=\"true\"][data-front=\"false\"][data-swipe-out=\"false\"][data-expanded=\"true\"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed=\"true\"][data-front=\"false\"][data-swipe-out=\"false\"][data-expanded=\"false\"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed=\"true\"][data-front=\"false\"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\n`);function U(s){return s.label!==void 0}var qt=3,Qt=\"32px\",Zt=4e3,te=356,ee=14,oe=20,ae=200;function ne(...s){return s.filter(Boolean).join(\" \")}var se=s=>{var yt,xt,vt,wt,Tt,St,Rt,Et,Nt,Pt;let{invert:o,toast:t,unstyled:n,interacting:h,setHeights:u,visibleToasts:g,heights:b,index:d,toasts:q,expanded:$,removeToast:V,defaultRichColors:Q,closeButton:i,style:O,cancelButtonStyle:K,actionButtonStyle:Z,className:tt=\"\",descriptionClassName:et=\"\",duration:X,position:ot,gap:w,loadingIcon:j,expandByDefault:W,classNames:r,icons:I,closeButtonAriaLabel:at=\"Close toast\",pauseWhenPageIsHidden:k,cn:T}=s,[z,nt]=e.useState(!1),[D,H]=e.useState(!1),[st,N]=e.useState(!1),[M,rt]=e.useState(!1),[c,m]=e.useState(0),[y,S]=e.useState(0),A=e.useRef(null),l=e.useRef(null),_=d===0,J=d+1<=g,x=t.type,P=t.dismissible!==!1,Mt=t.className||\"\",At=t.descriptionClassName||\"\",G=e.useMemo(()=>b.findIndex(a=>a.toastId===t.id)||0,[b,t.id]),Lt=e.useMemo(()=>{var a;return(a=t.closeButton)!=null?a:i},[t.closeButton,i]),mt=e.useMemo(()=>t.duration||X||Zt,[t.duration,X]),it=e.useRef(0),Y=e.useRef(0),pt=e.useRef(0),F=e.useRef(null),[gt,zt]=ot.split(\"-\"),ht=e.useMemo(()=>b.reduce((a,f,p)=>p>=G?a:a+f.height,0),[b,G]),bt=Dt(),jt=t.invert||o,lt=x===\"loading\";Y.current=e.useMemo(()=>G*w+ht,[G,ht]),e.useEffect(()=>{nt(!0)},[]),e.useLayoutEffect(()=>{if(!z)return;let a=l.current,f=a.style.height;a.style.height=\"auto\";let p=a.getBoundingClientRect().height;a.style.height=f,S(p),u(B=>B.find(R=>R.toastId===t.id)?B.map(R=>R.toastId===t.id?{...R,height:p}:R):[{toastId:t.id,height:p,position:t.position},...B])},[z,t.title,t.description,u,t.id]);let L=e.useCallback(()=>{H(!0),m(Y.current),u(a=>a.filter(f=>f.toastId!==t.id)),setTimeout(()=>{V(t)},ae)},[t,V,u,Y]);e.useEffect(()=>{if(t.promise&&x===\"loading\"||t.duration===1/0||t.type===\"loading\")return;let a,f=mt;return $||h||k&&bt?(()=>{if(pt.current<it.current){let C=new Date().getTime()-it.current;f=f-C}pt.current=new Date().getTime()})():(()=>{f!==1/0&&(it.current=new Date().getTime(),a=setTimeout(()=>{var C;(C=t.onAutoClose)==null||C.call(t,t),L()},f))})(),()=>clearTimeout(a)},[$,h,W,t,mt,L,t.promise,x,k,bt]),e.useEffect(()=>{let a=l.current;if(a){let f=a.getBoundingClientRect().height;return S(f),u(p=>[{toastId:t.id,height:f,position:t.position},...p]),()=>u(p=>p.filter(B=>B.toastId!==t.id))}},[u,t.id]),e.useEffect(()=>{t.delete&&L()},[L,t.delete]);function Yt(){return I!=null&&I.loading?e.createElement(\"div\",{className:\"sonner-loader\",\"data-visible\":x===\"loading\"},I.loading):j?e.createElement(\"div\",{className:\"sonner-loader\",\"data-visible\":x===\"loading\"},j):e.createElement(It,{visible:x===\"loading\"})}return e.createElement(\"li\",{\"aria-live\":t.important?\"assertive\":\"polite\",\"aria-atomic\":\"true\",role:\"status\",tabIndex:0,ref:l,className:T(tt,Mt,r==null?void 0:r.toast,(yt=t==null?void 0:t.classNames)==null?void 0:yt.toast,r==null?void 0:r.default,r==null?void 0:r[x],(xt=t==null?void 0:t.classNames)==null?void 0:xt[x]),\"data-sonner-toast\":\"\",\"data-rich-colors\":(vt=t.richColors)!=null?vt:Q,\"data-styled\":!(t.jsx||t.unstyled||n),\"data-mounted\":z,\"data-promise\":!!t.promise,\"data-removed\":D,\"data-visible\":J,\"data-y-position\":gt,\"data-x-position\":zt,\"data-index\":d,\"data-front\":_,\"data-swiping\":st,\"data-dismissible\":P,\"data-type\":x,\"data-invert\":jt,\"data-swipe-out\":M,\"data-expanded\":!!($||W&&z),style:{\"--index\":d,\"--toasts-before\":d,\"--z-index\":q.length-d,\"--offset\":`${D?c:Y.current}px`,\"--initial-height\":W?\"auto\":`${y}px`,...O,...t.style},onPointerDown:a=>{lt||!P||(A.current=new Date,m(Y.current),a.target.setPointerCapture(a.pointerId),a.target.tagName!==\"BUTTON\"&&(N(!0),F.current={x:a.clientX,y:a.clientY}))},onPointerUp:()=>{var B,C,R,dt;if(M||!P)return;F.current=null;let a=Number(((B=l.current)==null?void 0:B.style.getPropertyValue(\"--swipe-amount\").replace(\"px\",\"\"))||0),f=new Date().getTime()-((C=A.current)==null?void 0:C.getTime()),p=Math.abs(a)/f;if(Math.abs(a)>=oe||p>.11){m(Y.current),(R=t.onDismiss)==null||R.call(t,t),L(),rt(!0);return}(dt=l.current)==null||dt.style.setProperty(\"--swipe-amount\",\"0px\"),N(!1)},onPointerMove:a=>{var Bt;if(!F.current||!P)return;let f=a.clientY-F.current.y,p=a.clientX-F.current.x,C=(gt===\"top\"?Math.min:Math.max)(0,f),R=a.pointerType===\"touch\"?10:2;Math.abs(C)>R?(Bt=l.current)==null||Bt.style.setProperty(\"--swipe-amount\",`${f}px`):Math.abs(p)>R&&(F.current=null)}},Lt&&!t.jsx?e.createElement(\"button\",{\"aria-label\":at,\"data-disabled\":lt,\"data-close-button\":!0,onClick:lt||!P?()=>{}:()=>{var a;L(),(a=t.onDismiss)==null||a.call(t,t)},className:T(r==null?void 0:r.closeButton,(wt=t==null?void 0:t.classNames)==null?void 0:wt.closeButton)},e.createElement(\"svg\",{xmlns:\"http://www.w3.org/2000/svg\",width:\"12\",height:\"12\",viewBox:\"0 0 24 24\",fill:\"none\",stroke:\"currentColor\",strokeWidth:\"1.5\",strokeLinecap:\"round\",strokeLinejoin:\"round\"},e.createElement(\"line\",{x1:\"18\",y1:\"6\",x2:\"6\",y2:\"18\"}),e.createElement(\"line\",{x1:\"6\",y1:\"6\",x2:\"18\",y2:\"18\"}))):null,t.jsx||e.isValidElement(t.title)?t.jsx||t.title:e.createElement(e.Fragment,null,x||t.icon||t.promise?e.createElement(\"div\",{\"data-icon\":\"\",className:T(r==null?void 0:r.icon,(Tt=t==null?void 0:t.classNames)==null?void 0:Tt.icon)},t.promise||t.type===\"loading\"&&!t.icon?t.icon||Yt():null,t.type!==\"loading\"?t.icon||(I==null?void 0:I[x])||Ct(x):null):null,e.createElement(\"div\",{\"data-content\":\"\",className:T(r==null?void 0:r.content,(St=t==null?void 0:t.classNames)==null?void 0:St.content)},e.createElement(\"div\",{\"data-title\":\"\",className:T(r==null?void 0:r.title,(Rt=t==null?void 0:t.classNames)==null?void 0:Rt.title)},t.title),t.description?e.createElement(\"div\",{\"data-description\":\"\",className:T(et,At,r==null?void 0:r.description,(Et=t==null?void 0:t.classNames)==null?void 0:Et.description)},t.description):null),e.isValidElement(t.cancel)?t.cancel:t.cancel&&U(t.cancel)?e.createElement(\"button\",{\"data-button\":!0,\"data-cancel\":!0,style:t.cancelButtonStyle||K,onClick:a=>{var f,p;U(t.cancel)&&P&&((p=(f=t.cancel).onClick)==null||p.call(f,a),L())},className:T(r==null?void 0:r.cancelButton,(Nt=t==null?void 0:t.classNames)==null?void 0:Nt.cancelButton)},t.cancel.label):null,e.isValidElement(t.action)?t.action:t.action&&U(t.action)?e.createElement(\"button\",{\"data-button\":!0,\"data-action\":!0,style:t.actionButtonStyle||Z,onClick:a=>{var f,p;U(t.action)&&(a.defaultPrevented||((p=(f=t.action).onClick)==null||p.call(f,a),L()))},className:T(r==null?void 0:r.actionButton,(Pt=t==null?void 0:t.classNames)==null?void 0:Pt.actionButton)},t.action.label):null))};function Ht(){if(typeof window==\"undefined\"||typeof document==\"undefined\")return\"ltr\";let s=document.documentElement.getAttribute(\"dir\");return s===\"auto\"||!s?window.getComputedStyle(document.documentElement).direction:s}function we(){let[s,o]=e.useState([]);return e.useEffect(()=>v.subscribe(t=>{o(n=>{if(\"dismiss\"in t&&t.dismiss)return n.filter(u=>u.id!==t.id);let h=n.findIndex(u=>u.id===t.id);if(h!==-1){let u=[...n];return u[h]={...u[h],...t},u}else return[t,...n]})}),[]),{toasts:s}}var Te=s=>{let{invert:o,position:t=\"bottom-right\",hotkey:n=[\"altKey\",\"KeyT\"],expand:h,closeButton:u,className:g,offset:b,theme:d=\"light\",richColors:q,duration:$,style:V,visibleToasts:Q=qt,toastOptions:i,dir:O=Ht(),gap:K=ee,loadingIcon:Z,icons:tt,containerAriaLabel:et=\"Notifications\",pauseWhenPageIsHidden:X,cn:ot=ne}=s,[w,j]=e.useState([]),W=e.useMemo(()=>Array.from(new Set([t].concat(w.filter(c=>c.position).map(c=>c.position)))),[w,t]),[r,I]=e.useState([]),[at,k]=e.useState(!1),[T,z]=e.useState(!1),[nt,D]=e.useState(d!==\"system\"?d:typeof window!=\"undefined\"&&window.matchMedia&&window.matchMedia(\"(prefers-color-scheme: dark)\").matches?\"dark\":\"light\"),H=e.useRef(null),st=n.join(\"+\").replace(/Key/g,\"\").replace(/Digit/g,\"\"),N=e.useRef(null),M=e.useRef(!1),rt=e.useCallback(c=>{var m;(m=w.find(y=>y.id===c.id))!=null&&m.delete||v.dismiss(c.id),j(y=>y.filter(({id:S})=>S!==c.id))},[w]);return e.useEffect(()=>v.subscribe(c=>{if(c.dismiss){j(m=>m.map(y=>y.id===c.id?{...y,delete:!0}:y));return}setTimeout(()=>{Gt.flushSync(()=>{j(m=>{let y=m.findIndex(S=>S.id===c.id);return y!==-1?[...m.slice(0,y),{...m[y],...c},...m.slice(y+1)]:[c,...m]})})})}),[]),e.useEffect(()=>{if(d!==\"system\"){D(d);return}d===\"system\"&&(window.matchMedia&&window.matchMedia(\"(prefers-color-scheme: dark)\").matches?D(\"dark\"):D(\"light\")),typeof window!=\"undefined\"&&window.matchMedia(\"(prefers-color-scheme: dark)\").addEventListener(\"change\",({matches:c})=>{D(c?\"dark\":\"light\")})},[d]),e.useEffect(()=>{w.length<=1&&k(!1)},[w]),e.useEffect(()=>{let c=m=>{var S,A;n.every(l=>m[l]||m.code===l)&&(k(!0),(S=H.current)==null||S.focus()),m.code===\"Escape\"&&(document.activeElement===H.current||(A=H.current)!=null&&A.contains(document.activeElement))&&k(!1)};return document.addEventListener(\"keydown\",c),()=>document.removeEventListener(\"keydown\",c)},[n]),e.useEffect(()=>{if(H.current)return()=>{N.current&&(N.current.focus({preventScroll:!0}),N.current=null,M.current=!1)}},[H.current]),w.length?e.createElement(\"section\",{\"aria-label\":`${et} ${st}`,tabIndex:-1},W.map((c,m)=>{var A;let[y,S]=c.split(\"-\");return e.createElement(\"ol\",{key:c,dir:O===\"auto\"?Ht():O,tabIndex:-1,ref:H,className:g,\"data-sonner-toaster\":!0,\"data-theme\":nt,\"data-y-position\":y,\"data-x-position\":S,style:{\"--front-toast-height\":`${((A=r[0])==null?void 0:A.height)||0}px`,\"--offset\":typeof b==\"number\"?`${b}px`:b||Qt,\"--width\":`${te}px`,\"--gap\":`${K}px`,...V},onBlur:l=>{M.current&&!l.currentTarget.contains(l.relatedTarget)&&(M.current=!1,N.current&&(N.current.focus({preventScroll:!0}),N.current=null))},onFocus:l=>{l.target instanceof HTMLElement&&l.target.dataset.dismissible===\"false\"||M.current||(M.current=!0,N.current=l.relatedTarget)},onMouseEnter:()=>k(!0),onMouseMove:()=>k(!0),onMouseLeave:()=>{T||k(!1)},onPointerDown:l=>{l.target instanceof HTMLElement&&l.target.dataset.dismissible===\"false\"||z(!0)},onPointerUp:()=>z(!1)},w.filter(l=>!l.position&&m===0||l.position===c).map((l,_)=>{var J,x;return e.createElement(se,{key:l.id,icons:tt,index:_,toast:l,defaultRichColors:q,duration:(J=i==null?void 0:i.duration)!=null?J:$,className:i==null?void 0:i.className,descriptionClassName:i==null?void 0:i.descriptionClassName,invert:o,visibleToasts:Q,closeButton:(x=i==null?void 0:i.closeButton)!=null?x:u,interacting:T,position:c,style:i==null?void 0:i.style,unstyled:i==null?void 0:i.unstyled,classNames:i==null?void 0:i.classNames,cancelButtonStyle:i==null?void 0:i.cancelButtonStyle,actionButtonStyle:i==null?void 0:i.actionButtonStyle,removeToast:rt,toasts:w.filter(P=>P.position==l.position),heights:r.filter(P=>P.position==l.position),setHeights:I,expandByDefault:h,gap:K,loadingIcon:Z,expanded:at,pauseWhenPageIsHidden:X,cn:ot})}))})):null};export{Te as Toaster,Jt as toast,we as useSonner};\n//# sourceMappingURL=index.mjs.map","import { useTheme } from \"next-themes\"\nimport { Toaster as Sonner } from \"sonner\"\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n  const { theme = \"system\" } = useTheme()\n\n  return (\n    <Sonner\n      theme={theme as ToasterProps[\"theme\"]}\n      className=\"toaster group\"\n      toastOptions={{\n        classNames: {\n          toast:\n            \"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg\",\n          description: \"group-[.toast]:text-muted-foreground\",\n          actionButton:\n            \"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground\",\n          cancelButton:\n            \"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground\",\n        },\n      }}\n      {...props}\n    />\n  )\n}\n\nexport { Toaster }\n","// packages/react/context/src/createContext.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n  const Context = React.createContext(defaultContext);\n  const Provider = (props) => {\n    const { children, ...context } = props;\n    const value = React.useMemo(() => context, Object.values(context));\n    return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n  };\n  Provider.displayName = rootComponentName + \"Provider\";\n  function useContext2(consumerName) {\n    const context = React.useContext(Context);\n    if (context) return context;\n    if (defaultContext !== void 0) return defaultContext;\n    throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n  }\n  return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n  let defaultContexts = [];\n  function createContext3(rootComponentName, defaultContext) {\n    const BaseContext = React.createContext(defaultContext);\n    const index = defaultContexts.length;\n    defaultContexts = [...defaultContexts, defaultContext];\n    const Provider = (props) => {\n      const { scope, children, ...context } = props;\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      const value = React.useMemo(() => context, Object.values(context));\n      return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n    };\n    Provider.displayName = rootComponentName + \"Provider\";\n    function useContext2(consumerName, scope) {\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      const context = React.useContext(Context);\n      if (context) return context;\n      if (defaultContext !== void 0) return defaultContext;\n      throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n    }\n    return [Provider, useContext2];\n  }\n  const createScope = () => {\n    const scopeContexts = defaultContexts.map((defaultContext) => {\n      return React.createContext(defaultContext);\n    });\n    return function useScope(scope) {\n      const contexts = scope?.[scopeName] || scopeContexts;\n      return React.useMemo(\n        () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n        [scope, contexts]\n      );\n    };\n  };\n  createScope.scopeName = scopeName;\n  return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n  const baseScope = scopes[0];\n  if (scopes.length === 1) return baseScope;\n  const createScope = () => {\n    const scopeHooks = scopes.map((createScope2) => ({\n      useScope: createScope2(),\n      scopeName: createScope2.scopeName\n    }));\n    return function useComposedScopes(overrideScopes) {\n      const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n        const scopeProps = useScope(overrideScopes);\n        const currentScope = scopeProps[`__scope${scopeName}`];\n        return { ...nextScopes2, ...currentScope };\n      }, {});\n      return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n    };\n  };\n  createScope.scopeName = baseScope.scopeName;\n  return createScope;\n}\nexport {\n  createContext2 as createContext,\n  createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/dismissable-layer/src/DismissableLayer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n  layers: /* @__PURE__ */ new Set(),\n  layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n  branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      disableOutsidePointerEvents = false,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      onFocusOutside,\n      onInteractOutside,\n      onDismiss,\n      ...layerProps\n    } = props;\n    const context = React.useContext(DismissableLayerContext);\n    const [node, setNode] = React.useState(null);\n    const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n    const [, force] = React.useState({});\n    const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n    const layers = Array.from(context.layers);\n    const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n    const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n    const index = node ? layers.indexOf(node) : -1;\n    const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n    const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n    const pointerDownOutside = usePointerDownOutside((event) => {\n      const target = event.target;\n      const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n      if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n      onPointerDownOutside?.(event);\n      onInteractOutside?.(event);\n      if (!event.defaultPrevented) onDismiss?.();\n    }, ownerDocument);\n    const focusOutside = useFocusOutside((event) => {\n      const target = event.target;\n      const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n      if (isFocusInBranch) return;\n      onFocusOutside?.(event);\n      onInteractOutside?.(event);\n      if (!event.defaultPrevented) onDismiss?.();\n    }, ownerDocument);\n    useEscapeKeydown((event) => {\n      const isHighestLayer = index === context.layers.size - 1;\n      if (!isHighestLayer) return;\n      onEscapeKeyDown?.(event);\n      if (!event.defaultPrevented && onDismiss) {\n        event.preventDefault();\n        onDismiss();\n      }\n    }, ownerDocument);\n    React.useEffect(() => {\n      if (!node) return;\n      if (disableOutsidePointerEvents) {\n        if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n          originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n          ownerDocument.body.style.pointerEvents = \"none\";\n        }\n        context.layersWithOutsidePointerEventsDisabled.add(node);\n      }\n      context.layers.add(node);\n      dispatchUpdate();\n      return () => {\n        if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n          ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n        }\n      };\n    }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n    React.useEffect(() => {\n      return () => {\n        if (!node) return;\n        context.layers.delete(node);\n        context.layersWithOutsidePointerEventsDisabled.delete(node);\n        dispatchUpdate();\n      };\n    }, [node, context]);\n    React.useEffect(() => {\n      const handleUpdate = () => force({});\n      document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n      return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n    }, []);\n    return /* @__PURE__ */ jsx(\n      Primitive.div,\n      {\n        ...layerProps,\n        ref: composedRefs,\n        style: {\n          pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n          ...props.style\n        },\n        onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n        onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n        onPointerDownCapture: composeEventHandlers(\n          props.onPointerDownCapture,\n          pointerDownOutside.onPointerDownCapture\n        )\n      }\n    );\n  }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n  const context = React.useContext(DismissableLayerContext);\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  React.useEffect(() => {\n    const node = ref.current;\n    if (node) {\n      context.branches.add(node);\n      return () => {\n        context.branches.delete(node);\n      };\n    }\n  }, [context.branches]);\n  return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n  const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n  const isPointerInsideReactTreeRef = React.useRef(false);\n  const handleClickRef = React.useRef(() => {\n  });\n  React.useEffect(() => {\n    const handlePointerDown = (event) => {\n      if (event.target && !isPointerInsideReactTreeRef.current) {\n        let handleAndDispatchPointerDownOutsideEvent2 = function() {\n          handleAndDispatchCustomEvent(\n            POINTER_DOWN_OUTSIDE,\n            handlePointerDownOutside,\n            eventDetail,\n            { discrete: true }\n          );\n        };\n        var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n        const eventDetail = { originalEvent: event };\n        if (event.pointerType === \"touch\") {\n          ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n          handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n          ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n        } else {\n          handleAndDispatchPointerDownOutsideEvent2();\n        }\n      } else {\n        ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n      }\n      isPointerInsideReactTreeRef.current = false;\n    };\n    const timerId = window.setTimeout(() => {\n      ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n    }, 0);\n    return () => {\n      window.clearTimeout(timerId);\n      ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n      ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n    };\n  }, [ownerDocument, handlePointerDownOutside]);\n  return {\n    // ensures we check React component tree (not just DOM tree)\n    onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n  };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n  const handleFocusOutside = useCallbackRef(onFocusOutside);\n  const isFocusInsideReactTreeRef = React.useRef(false);\n  React.useEffect(() => {\n    const handleFocus = (event) => {\n      if (event.target && !isFocusInsideReactTreeRef.current) {\n        const eventDetail = { originalEvent: event };\n        handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n          discrete: false\n        });\n      }\n    };\n    ownerDocument.addEventListener(\"focusin\", handleFocus);\n    return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n  }, [ownerDocument, handleFocusOutside]);\n  return {\n    onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n    onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n  };\n}\nfunction dispatchUpdate() {\n  const event = new CustomEvent(CONTEXT_UPDATE);\n  document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n  const target = detail.originalEvent.target;\n  const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n  if (handler) target.addEventListener(name, handler, { once: true });\n  if (discrete) {\n    dispatchDiscreteCustomEvent(target, event);\n  } else {\n    target.dispatchEvent(event);\n  }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n  Branch,\n  DismissableLayer,\n  DismissableLayerBranch,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/id/src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\"useId\".toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n  const [id, setId] = React.useState(useReactId());\n  useLayoutEffect(() => {\n    if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n  }, [deterministicId]);\n  return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n  useId\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nconst oppositeAlignmentMap = {\n  start: 'end',\n  end: 'start'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);\n}\nfunction getSideList(side, isStart, rtl) {\n  const lr = ['left', 'right'];\n  const rl = ['right', 'left'];\n  const tb = ['top', 'bottom'];\n  const bt = ['bottom', 'top'];\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rl : lr;\n      return isStart ? lr : rl;\n    case 'left':\n    case 'right':\n      return isStart ? tb : bt;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  return placement.replace(/left|right|bottom|top/g, side => oppositeSideMap[side]);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const validMiddleware = middleware.filter(Boolean);\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let middlewareData = {};\n  let resetCount = 0;\n  for (let i = 0; i < validMiddleware.length; i++) {\n    const {\n      name,\n      fn\n    } = validMiddleware[i];\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData = {\n      ...middlewareData,\n      [name]: {\n        ...middlewareData[name],\n        ...data\n      }\n    };\n    if (reset && resetCount <= 50) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          // Try next placement and re-run the lifecycle.\n          return {\n            data: {\n              index: nextIndex,\n              overflows: overflowsData\n            },\n            reset: {\n              placement: nextPlacement\n            }\n          };\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = ['top', 'left'].includes(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);\n}\nfunction isTableElement(element) {\n  return ['table', 'td', 'th'].includes(getNodeName(element));\n}\nfunction isTopLayer(element) {\n  return [':popover-open', ':modal'].some(selector => {\n    try {\n      return element.matches(selector);\n    } catch (e) {\n      return false;\n    }\n  });\n}\nfunction isContainingBlock(elementOrCss) {\n  const webkit = isWebKit();\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  return css.transform !== 'none' || css.perspective !== 'none' || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (typeof CSS === 'undefined' || !CSS.supports) return false;\n  return CSS.supports('-webkit-backdrop-filter', 'none');\n}\nfunction isLastTraversableNode(node) {\n  return ['html', 'body', '#document'].includes(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  }\n  return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, detectOverflow as detectOverflow$1, offset as offset$1, autoPlacement as autoPlacement$1, shift as shift$1, flip as flip$1, size as size$1, hide as hide$1, arrow as arrow$1, inline as inline$1, limitShift as limitShift$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getNodeScroll, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isHTMLElement(offsetParent)) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      ...clippingAncestor,\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstClippingAncestor = clippingAncestors[0];\n  const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy);\n    accRect.top = max(rect.top, accRect.top);\n    accRect.right = min(rect.right, accRect.right);\n    accRect.bottom = min(rect.bottom, accRect.bottom);\n    accRect.left = max(rect.left, accRect.left);\n    return accRect;\n  }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy));\n  return {\n    width: clippingRect.right - clippingRect.left,\n    height: clippingRect.bottom - clippingRect.top,\n    x: clippingRect.left,\n    y: clippingRect.top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n      // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n      offsets.x = getWindowScrollBarX(documentElement);\n    }\n  }\n  let htmlX = 0;\n  let htmlY = 0;\n  if (documentElement && !isOffsetParentAnElement && !isFixed) {\n    const htmlRect = documentElement.getBoundingClientRect();\n    htmlY = htmlRect.top + scroll.scrollTop;\n    htmlX = htmlRect.left + scroll.scrollLeft -\n    // RTL <body> scrollbar.\n    getWindowScrollBarX(documentElement, htmlRect);\n  }\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlX;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlY;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = element.getBoundingClientRect();\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...getOverflowAncestors(floating)] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    resizeObserver.observe(floating);\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","import { computePosition, arrow as arrow$2, offset as offset$1, shift as shift$1, limitShift as limitShift$1, flip as flip$1, size as size$1, autoPlacement as autoPlacement$1, hide as hide$1, inline as inline$1 } from '@floating-ui/dom';\nexport { autoUpdate, computePosition, detectOverflow, getOverflowAncestors, platform } from '@floating-ui/dom';\nimport * as React from 'react';\nimport { useLayoutEffect, useEffect } from 'react';\nimport * as ReactDOM from 'react-dom';\n\nvar index = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n\n// Fork of `fast-deep-equal` that only does the comparisons we need and compares\n// functions\nfunction deepEqual(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (typeof a !== typeof b) {\n    return false;\n  }\n  if (typeof a === 'function' && a.toString() === b.toString()) {\n    return true;\n  }\n  let length;\n  let i;\n  let keys;\n  if (a && b && typeof a === 'object') {\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length !== b.length) return false;\n      for (i = length; i-- !== 0;) {\n        if (!deepEqual(a[i], b[i])) {\n          return false;\n        }\n      }\n      return true;\n    }\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) {\n      return false;\n    }\n    for (i = length; i-- !== 0;) {\n      if (!{}.hasOwnProperty.call(b, keys[i])) {\n        return false;\n      }\n    }\n    for (i = length; i-- !== 0;) {\n      const key = keys[i];\n      if (key === '_owner' && a.$$typeof) {\n        continue;\n      }\n      if (!deepEqual(a[key], b[key])) {\n        return false;\n      }\n    }\n    return true;\n  }\n  return a !== a && b !== b;\n}\n\nfunction getDPR(element) {\n  if (typeof window === 'undefined') {\n    return 1;\n  }\n  const win = element.ownerDocument.defaultView || window;\n  return win.devicePixelRatio || 1;\n}\n\nfunction roundByDPR(element, value) {\n  const dpr = getDPR(element);\n  return Math.round(value * dpr) / dpr;\n}\n\nfunction useLatestRef(value) {\n  const ref = React.useRef(value);\n  index(() => {\n    ref.current = value;\n  });\n  return ref;\n}\n\n/**\n * Provides data to position a floating element.\n * @see https://floating-ui.com/docs/useFloating\n */\nfunction useFloating(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform,\n    elements: {\n      reference: externalReference,\n      floating: externalFloating\n    } = {},\n    transform = true,\n    whileElementsMounted,\n    open\n  } = options;\n  const [data, setData] = React.useState({\n    x: 0,\n    y: 0,\n    strategy,\n    placement,\n    middlewareData: {},\n    isPositioned: false\n  });\n  const [latestMiddleware, setLatestMiddleware] = React.useState(middleware);\n  if (!deepEqual(latestMiddleware, middleware)) {\n    setLatestMiddleware(middleware);\n  }\n  const [_reference, _setReference] = React.useState(null);\n  const [_floating, _setFloating] = React.useState(null);\n  const setReference = React.useCallback(node => {\n    if (node !== referenceRef.current) {\n      referenceRef.current = node;\n      _setReference(node);\n    }\n  }, []);\n  const setFloating = React.useCallback(node => {\n    if (node !== floatingRef.current) {\n      floatingRef.current = node;\n      _setFloating(node);\n    }\n  }, []);\n  const referenceEl = externalReference || _reference;\n  const floatingEl = externalFloating || _floating;\n  const referenceRef = React.useRef(null);\n  const floatingRef = React.useRef(null);\n  const dataRef = React.useRef(data);\n  const hasWhileElementsMounted = whileElementsMounted != null;\n  const whileElementsMountedRef = useLatestRef(whileElementsMounted);\n  const platformRef = useLatestRef(platform);\n  const openRef = useLatestRef(open);\n  const update = React.useCallback(() => {\n    if (!referenceRef.current || !floatingRef.current) {\n      return;\n    }\n    const config = {\n      placement,\n      strategy,\n      middleware: latestMiddleware\n    };\n    if (platformRef.current) {\n      config.platform = platformRef.current;\n    }\n    computePosition(referenceRef.current, floatingRef.current, config).then(data => {\n      const fullData = {\n        ...data,\n        // The floating element's position may be recomputed while it's closed\n        // but still mounted (such as when transitioning out). To ensure\n        // `isPositioned` will be `false` initially on the next open, avoid\n        // setting it to `true` when `open === false` (must be specified).\n        isPositioned: openRef.current !== false\n      };\n      if (isMountedRef.current && !deepEqual(dataRef.current, fullData)) {\n        dataRef.current = fullData;\n        ReactDOM.flushSync(() => {\n          setData(fullData);\n        });\n      }\n    });\n  }, [latestMiddleware, placement, strategy, platformRef, openRef]);\n  index(() => {\n    if (open === false && dataRef.current.isPositioned) {\n      dataRef.current.isPositioned = false;\n      setData(data => ({\n        ...data,\n        isPositioned: false\n      }));\n    }\n  }, [open]);\n  const isMountedRef = React.useRef(false);\n  index(() => {\n    isMountedRef.current = true;\n    return () => {\n      isMountedRef.current = false;\n    };\n  }, []);\n  index(() => {\n    if (referenceEl) referenceRef.current = referenceEl;\n    if (floatingEl) floatingRef.current = floatingEl;\n    if (referenceEl && floatingEl) {\n      if (whileElementsMountedRef.current) {\n        return whileElementsMountedRef.current(referenceEl, floatingEl, update);\n      }\n      update();\n    }\n  }, [referenceEl, floatingEl, update, whileElementsMountedRef, hasWhileElementsMounted]);\n  const refs = React.useMemo(() => ({\n    reference: referenceRef,\n    floating: floatingRef,\n    setReference,\n    setFloating\n  }), [setReference, setFloating]);\n  const elements = React.useMemo(() => ({\n    reference: referenceEl,\n    floating: floatingEl\n  }), [referenceEl, floatingEl]);\n  const floatingStyles = React.useMemo(() => {\n    const initialStyles = {\n      position: strategy,\n      left: 0,\n      top: 0\n    };\n    if (!elements.floating) {\n      return initialStyles;\n    }\n    const x = roundByDPR(elements.floating, data.x);\n    const y = roundByDPR(elements.floating, data.y);\n    if (transform) {\n      return {\n        ...initialStyles,\n        transform: \"translate(\" + x + \"px, \" + y + \"px)\",\n        ...(getDPR(elements.floating) >= 1.5 && {\n          willChange: 'transform'\n        })\n      };\n    }\n    return {\n      position: strategy,\n      left: x,\n      top: y\n    };\n  }, [strategy, transform, elements.floating, data.x, data.y]);\n  return React.useMemo(() => ({\n    ...data,\n    update,\n    refs,\n    elements,\n    floatingStyles\n  }), [data, update, refs, elements, floatingStyles]);\n}\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow$1 = options => {\n  function isRef(value) {\n    return {}.hasOwnProperty.call(value, 'current');\n  }\n  return {\n    name: 'arrow',\n    options,\n    fn(state) {\n      const {\n        element,\n        padding\n      } = typeof options === 'function' ? options(state) : options;\n      if (element && isRef(element)) {\n        if (element.current != null) {\n          return arrow$2({\n            element: element.current,\n            padding\n          }).fn(state);\n        }\n        return {};\n      }\n      if (element) {\n        return arrow$2({\n          element,\n          padding\n        }).fn(state);\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = (options, deps) => ({\n  ...offset$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = (options, deps) => ({\n  ...shift$1(options),\n  options: [options, deps]\n});\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = (options, deps) => ({\n  ...limitShift$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = (options, deps) => ({\n  ...flip$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = (options, deps) => ({\n  ...size$1(options),\n  options: [options, deps]\n});\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = (options, deps) => ({\n  ...autoPlacement$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = (options, deps) => ({\n  ...hide$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = (options, deps) => ({\n  ...inline$1(options),\n  options: [options, deps]\n});\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * This wraps the core `arrow` middleware to allow React refs as the element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = (options, deps) => ({\n  ...arrow$1(options),\n  options: [options, deps]\n});\n\nexport { arrow, autoPlacement, flip, hide, inline, limitShift, offset, shift, size, useFloating };\n","// packages/react/arrow/src/Arrow.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Arrow\";\nvar Arrow = React.forwardRef((props, forwardedRef) => {\n  const { children, width = 10, height = 5, ...arrowProps } = props;\n  return /* @__PURE__ */ jsx(\n    Primitive.svg,\n    {\n      ...arrowProps,\n      ref: forwardedRef,\n      width,\n      height,\n      viewBox: \"0 0 30 10\",\n      preserveAspectRatio: \"none\",\n      children: props.asChild ? children : /* @__PURE__ */ jsx(\"polygon\", { points: \"0,0 30,0 15,10\" })\n    }\n  );\n});\nArrow.displayName = NAME;\nvar Root = Arrow;\nexport {\n  Arrow,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-size/src/useSize.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n  const [size, setSize] = React.useState(void 0);\n  useLayoutEffect(() => {\n    if (element) {\n      setSize({ width: element.offsetWidth, height: element.offsetHeight });\n      const resizeObserver = new ResizeObserver((entries) => {\n        if (!Array.isArray(entries)) {\n          return;\n        }\n        if (!entries.length) {\n          return;\n        }\n        const entry = entries[0];\n        let width;\n        let height;\n        if (\"borderBoxSize\" in entry) {\n          const borderSizeEntry = entry[\"borderBoxSize\"];\n          const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n          width = borderSize[\"inlineSize\"];\n          height = borderSize[\"blockSize\"];\n        } else {\n          width = element.offsetWidth;\n          height = element.offsetHeight;\n        }\n        setSize({ width, height });\n      });\n      resizeObserver.observe(element, { box: \"border-box\" });\n      return () => resizeObserver.unobserve(element);\n    } else {\n      setSize(void 0);\n    }\n  }, [element]);\n  return size;\n}\nexport {\n  useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/popper/src/Popper.tsx\nimport * as React from \"react\";\nimport {\n  useFloating,\n  autoUpdate,\n  offset,\n  shift,\n  limitShift,\n  hide,\n  arrow as floatingUIarrow,\n  flip,\n  size\n} from \"@floating-ui/react-dom\";\nimport * as ArrowPrimitive from \"@radix-ui/react-arrow\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { jsx } from \"react/jsx-runtime\";\nvar SIDE_OPTIONS = [\"top\", \"right\", \"bottom\", \"left\"];\nvar ALIGN_OPTIONS = [\"start\", \"center\", \"end\"];\nvar POPPER_NAME = \"Popper\";\nvar [createPopperContext, createPopperScope] = createContextScope(POPPER_NAME);\nvar [PopperProvider, usePopperContext] = createPopperContext(POPPER_NAME);\nvar Popper = (props) => {\n  const { __scopePopper, children } = props;\n  const [anchor, setAnchor] = React.useState(null);\n  return /* @__PURE__ */ jsx(PopperProvider, { scope: __scopePopper, anchor, onAnchorChange: setAnchor, children });\n};\nPopper.displayName = POPPER_NAME;\nvar ANCHOR_NAME = \"PopperAnchor\";\nvar PopperAnchor = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopePopper, virtualRef, ...anchorProps } = props;\n    const context = usePopperContext(ANCHOR_NAME, __scopePopper);\n    const ref = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref);\n    React.useEffect(() => {\n      context.onAnchorChange(virtualRef?.current || ref.current);\n    });\n    return virtualRef ? null : /* @__PURE__ */ jsx(Primitive.div, { ...anchorProps, ref: composedRefs });\n  }\n);\nPopperAnchor.displayName = ANCHOR_NAME;\nvar CONTENT_NAME = \"PopperContent\";\nvar [PopperContentProvider, useContentContext] = createPopperContext(CONTENT_NAME);\nvar PopperContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopePopper,\n      side = \"bottom\",\n      sideOffset = 0,\n      align = \"center\",\n      alignOffset = 0,\n      arrowPadding = 0,\n      avoidCollisions = true,\n      collisionBoundary = [],\n      collisionPadding: collisionPaddingProp = 0,\n      sticky = \"partial\",\n      hideWhenDetached = false,\n      updatePositionStrategy = \"optimized\",\n      onPlaced,\n      ...contentProps\n    } = props;\n    const context = usePopperContext(CONTENT_NAME, __scopePopper);\n    const [content, setContent] = React.useState(null);\n    const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n    const [arrow, setArrow] = React.useState(null);\n    const arrowSize = useSize(arrow);\n    const arrowWidth = arrowSize?.width ?? 0;\n    const arrowHeight = arrowSize?.height ?? 0;\n    const desiredPlacement = side + (align !== \"center\" ? \"-\" + align : \"\");\n    const collisionPadding = typeof collisionPaddingProp === \"number\" ? collisionPaddingProp : { top: 0, right: 0, bottom: 0, left: 0, ...collisionPaddingProp };\n    const boundary = Array.isArray(collisionBoundary) ? collisionBoundary : [collisionBoundary];\n    const hasExplicitBoundaries = boundary.length > 0;\n    const detectOverflowOptions = {\n      padding: collisionPadding,\n      boundary: boundary.filter(isNotNull),\n      // with `strategy: 'fixed'`, this is the only way to get it to respect boundaries\n      altBoundary: hasExplicitBoundaries\n    };\n    const { refs, floatingStyles, placement, isPositioned, middlewareData } = useFloating({\n      // default to `fixed` strategy so users don't have to pick and we also avoid focus scroll issues\n      strategy: \"fixed\",\n      placement: desiredPlacement,\n      whileElementsMounted: (...args) => {\n        const cleanup = autoUpdate(...args, {\n          animationFrame: updatePositionStrategy === \"always\"\n        });\n        return cleanup;\n      },\n      elements: {\n        reference: context.anchor\n      },\n      middleware: [\n        offset({ mainAxis: sideOffset + arrowHeight, alignmentAxis: alignOffset }),\n        avoidCollisions && shift({\n          mainAxis: true,\n          crossAxis: false,\n          limiter: sticky === \"partial\" ? limitShift() : void 0,\n          ...detectOverflowOptions\n        }),\n        avoidCollisions && flip({ ...detectOverflowOptions }),\n        size({\n          ...detectOverflowOptions,\n          apply: ({ elements, rects, availableWidth, availableHeight }) => {\n            const { width: anchorWidth, height: anchorHeight } = rects.reference;\n            const contentStyle = elements.floating.style;\n            contentStyle.setProperty(\"--radix-popper-available-width\", `${availableWidth}px`);\n            contentStyle.setProperty(\"--radix-popper-available-height\", `${availableHeight}px`);\n            contentStyle.setProperty(\"--radix-popper-anchor-width\", `${anchorWidth}px`);\n            contentStyle.setProperty(\"--radix-popper-anchor-height\", `${anchorHeight}px`);\n          }\n        }),\n        arrow && floatingUIarrow({ element: arrow, padding: arrowPadding }),\n        transformOrigin({ arrowWidth, arrowHeight }),\n        hideWhenDetached && hide({ strategy: \"referenceHidden\", ...detectOverflowOptions })\n      ]\n    });\n    const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n    const handlePlaced = useCallbackRef(onPlaced);\n    useLayoutEffect(() => {\n      if (isPositioned) {\n        handlePlaced?.();\n      }\n    }, [isPositioned, handlePlaced]);\n    const arrowX = middlewareData.arrow?.x;\n    const arrowY = middlewareData.arrow?.y;\n    const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n    const [contentZIndex, setContentZIndex] = React.useState();\n    useLayoutEffect(() => {\n      if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n    }, [content]);\n    return /* @__PURE__ */ jsx(\n      \"div\",\n      {\n        ref: refs.setFloating,\n        \"data-radix-popper-content-wrapper\": \"\",\n        style: {\n          ...floatingStyles,\n          transform: isPositioned ? floatingStyles.transform : \"translate(0, -200%)\",\n          // keep off the page when measuring\n          minWidth: \"max-content\",\n          zIndex: contentZIndex,\n          [\"--radix-popper-transform-origin\"]: [\n            middlewareData.transformOrigin?.x,\n            middlewareData.transformOrigin?.y\n          ].join(\" \"),\n          // hide the content if using the hide middleware and should be hidden\n          // set visibility to hidden and disable pointer events so the UI behaves\n          // as if the PopperContent isn't there at all\n          ...middlewareData.hide?.referenceHidden && {\n            visibility: \"hidden\",\n            pointerEvents: \"none\"\n          }\n        },\n        dir: props.dir,\n        children: /* @__PURE__ */ jsx(\n          PopperContentProvider,\n          {\n            scope: __scopePopper,\n            placedSide,\n            onArrowChange: setArrow,\n            arrowX,\n            arrowY,\n            shouldHideArrow: cannotCenterArrow,\n            children: /* @__PURE__ */ jsx(\n              Primitive.div,\n              {\n                \"data-side\": placedSide,\n                \"data-align\": placedAlign,\n                ...contentProps,\n                ref: composedRefs,\n                style: {\n                  ...contentProps.style,\n                  // if the PopperContent hasn't been placed yet (not all measurements done)\n                  // we prevent animations so that users's animation don't kick in too early referring wrong sides\n                  animation: !isPositioned ? \"none\" : void 0\n                }\n              }\n            )\n          }\n        )\n      }\n    );\n  }\n);\nPopperContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"PopperArrow\";\nvar OPPOSITE_SIDE = {\n  top: \"bottom\",\n  right: \"left\",\n  bottom: \"top\",\n  left: \"right\"\n};\nvar PopperArrow = React.forwardRef(function PopperArrow2(props, forwardedRef) {\n  const { __scopePopper, ...arrowProps } = props;\n  const contentContext = useContentContext(ARROW_NAME, __scopePopper);\n  const baseSide = OPPOSITE_SIDE[contentContext.placedSide];\n  return (\n    // we have to use an extra wrapper because `ResizeObserver` (used by `useSize`)\n    // doesn't report size as we'd expect on SVG elements.\n    // it reports their bounding box which is effectively the largest path inside the SVG.\n    /* @__PURE__ */ jsx(\n      \"span\",\n      {\n        ref: contentContext.onArrowChange,\n        style: {\n          position: \"absolute\",\n          left: contentContext.arrowX,\n          top: contentContext.arrowY,\n          [baseSide]: 0,\n          transformOrigin: {\n            top: \"\",\n            right: \"0 0\",\n            bottom: \"center 0\",\n            left: \"100% 0\"\n          }[contentContext.placedSide],\n          transform: {\n            top: \"translateY(100%)\",\n            right: \"translateY(50%) rotate(90deg) translateX(-50%)\",\n            bottom: `rotate(180deg)`,\n            left: \"translateY(50%) rotate(-90deg) translateX(50%)\"\n          }[contentContext.placedSide],\n          visibility: contentContext.shouldHideArrow ? \"hidden\" : void 0\n        },\n        children: /* @__PURE__ */ jsx(\n          ArrowPrimitive.Root,\n          {\n            ...arrowProps,\n            ref: forwardedRef,\n            style: {\n              ...arrowProps.style,\n              // ensures the element can be measured correctly (mostly for if SVG)\n              display: \"block\"\n            }\n          }\n        )\n      }\n    )\n  );\n});\nPopperArrow.displayName = ARROW_NAME;\nfunction isNotNull(value) {\n  return value !== null;\n}\nvar transformOrigin = (options) => ({\n  name: \"transformOrigin\",\n  options,\n  fn(data) {\n    const { placement, rects, middlewareData } = data;\n    const cannotCenterArrow = middlewareData.arrow?.centerOffset !== 0;\n    const isArrowHidden = cannotCenterArrow;\n    const arrowWidth = isArrowHidden ? 0 : options.arrowWidth;\n    const arrowHeight = isArrowHidden ? 0 : options.arrowHeight;\n    const [placedSide, placedAlign] = getSideAndAlignFromPlacement(placement);\n    const noArrowAlign = { start: \"0%\", center: \"50%\", end: \"100%\" }[placedAlign];\n    const arrowXCenter = (middlewareData.arrow?.x ?? 0) + arrowWidth / 2;\n    const arrowYCenter = (middlewareData.arrow?.y ?? 0) + arrowHeight / 2;\n    let x = \"\";\n    let y = \"\";\n    if (placedSide === \"bottom\") {\n      x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n      y = `${-arrowHeight}px`;\n    } else if (placedSide === \"top\") {\n      x = isArrowHidden ? noArrowAlign : `${arrowXCenter}px`;\n      y = `${rects.floating.height + arrowHeight}px`;\n    } else if (placedSide === \"right\") {\n      x = `${-arrowHeight}px`;\n      y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n    } else if (placedSide === \"left\") {\n      x = `${rects.floating.width + arrowHeight}px`;\n      y = isArrowHidden ? noArrowAlign : `${arrowYCenter}px`;\n    }\n    return { data: { x, y } };\n  }\n});\nfunction getSideAndAlignFromPlacement(placement) {\n  const [side, align = \"center\"] = placement.split(\"-\");\n  return [side, align];\n}\nvar Root2 = Popper;\nvar Anchor = PopperAnchor;\nvar Content = PopperContent;\nvar Arrow = PopperArrow;\nexport {\n  ALIGN_OPTIONS,\n  Anchor,\n  Arrow,\n  Content,\n  Popper,\n  PopperAnchor,\n  PopperArrow,\n  PopperContent,\n  Root2 as Root,\n  SIDE_OPTIONS,\n  createPopperScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/portal/src/Portal.tsx\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n  const { container: containerProp, ...portalProps } = props;\n  const [mounted, setMounted] = React.useState(false);\n  useLayoutEffect(() => setMounted(true), []);\n  const container = containerProp || mounted && globalThis?.document?.body;\n  return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n  Portal,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/presence/src/Presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// packages/react/presence/src/useStateMachine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n  return React.useReducer((state, event) => {\n    const nextState = machine[state][event];\n    return nextState ?? state;\n  }, initialState);\n}\n\n// packages/react/presence/src/Presence.tsx\nvar Presence = (props) => {\n  const { present, children } = props;\n  const presence = usePresence(present);\n  const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n  const ref = useComposedRefs(presence.ref, getElementRef(child));\n  const forceMount = typeof children === \"function\";\n  return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n  const [node, setNode] = React2.useState();\n  const stylesRef = React2.useRef({});\n  const prevPresentRef = React2.useRef(present);\n  const prevAnimationNameRef = React2.useRef(\"none\");\n  const initialState = present ? \"mounted\" : \"unmounted\";\n  const [state, send] = useStateMachine(initialState, {\n    mounted: {\n      UNMOUNT: \"unmounted\",\n      ANIMATION_OUT: \"unmountSuspended\"\n    },\n    unmountSuspended: {\n      MOUNT: \"mounted\",\n      ANIMATION_END: \"unmounted\"\n    },\n    unmounted: {\n      MOUNT: \"mounted\"\n    }\n  });\n  React2.useEffect(() => {\n    const currentAnimationName = getAnimationName(stylesRef.current);\n    prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n  }, [state]);\n  useLayoutEffect(() => {\n    const styles = stylesRef.current;\n    const wasPresent = prevPresentRef.current;\n    const hasPresentChanged = wasPresent !== present;\n    if (hasPresentChanged) {\n      const prevAnimationName = prevAnimationNameRef.current;\n      const currentAnimationName = getAnimationName(styles);\n      if (present) {\n        send(\"MOUNT\");\n      } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n        send(\"UNMOUNT\");\n      } else {\n        const isAnimating = prevAnimationName !== currentAnimationName;\n        if (wasPresent && isAnimating) {\n          send(\"ANIMATION_OUT\");\n        } else {\n          send(\"UNMOUNT\");\n        }\n      }\n      prevPresentRef.current = present;\n    }\n  }, [present, send]);\n  useLayoutEffect(() => {\n    if (node) {\n      let timeoutId;\n      const ownerWindow = node.ownerDocument.defaultView ?? window;\n      const handleAnimationEnd = (event) => {\n        const currentAnimationName = getAnimationName(stylesRef.current);\n        const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n        if (event.target === node && isCurrentAnimation) {\n          send(\"ANIMATION_END\");\n          if (!prevPresentRef.current) {\n            const currentFillMode = node.style.animationFillMode;\n            node.style.animationFillMode = \"forwards\";\n            timeoutId = ownerWindow.setTimeout(() => {\n              if (node.style.animationFillMode === \"forwards\") {\n                node.style.animationFillMode = currentFillMode;\n              }\n            });\n          }\n        }\n      };\n      const handleAnimationStart = (event) => {\n        if (event.target === node) {\n          prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n        }\n      };\n      node.addEventListener(\"animationstart\", handleAnimationStart);\n      node.addEventListener(\"animationcancel\", handleAnimationEnd);\n      node.addEventListener(\"animationend\", handleAnimationEnd);\n      return () => {\n        ownerWindow.clearTimeout(timeoutId);\n        node.removeEventListener(\"animationstart\", handleAnimationStart);\n        node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n        node.removeEventListener(\"animationend\", handleAnimationEnd);\n      };\n    } else {\n      send(\"ANIMATION_END\");\n    }\n  }, [node, send]);\n  return {\n    isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n    ref: React2.useCallback((node2) => {\n      if (node2) stylesRef.current = getComputedStyle(node2);\n      setNode(node2);\n    }, [])\n  };\n}\nfunction getAnimationName(styles) {\n  return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n  let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n  let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.ref;\n  }\n  getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n  mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n  return element.props.ref || element.ref;\n}\nexport {\n  Presence\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/tooltip/src/Tooltip.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Slottable } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar [createTooltipContext, createTooltipScope] = createContextScope(\"Tooltip\", [\n  createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar PROVIDER_NAME = \"TooltipProvider\";\nvar DEFAULT_DELAY_DURATION = 700;\nvar TOOLTIP_OPEN = \"tooltip.open\";\nvar [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);\nvar TooltipProvider = (props) => {\n  const {\n    __scopeTooltip,\n    delayDuration = DEFAULT_DELAY_DURATION,\n    skipDelayDuration = 300,\n    disableHoverableContent = false,\n    children\n  } = props;\n  const [isOpenDelayed, setIsOpenDelayed] = React.useState(true);\n  const isPointerInTransitRef = React.useRef(false);\n  const skipDelayTimerRef = React.useRef(0);\n  React.useEffect(() => {\n    const skipDelayTimer = skipDelayTimerRef.current;\n    return () => window.clearTimeout(skipDelayTimer);\n  }, []);\n  return /* @__PURE__ */ jsx(\n    TooltipProviderContextProvider,\n    {\n      scope: __scopeTooltip,\n      isOpenDelayed,\n      delayDuration,\n      onOpen: React.useCallback(() => {\n        window.clearTimeout(skipDelayTimerRef.current);\n        setIsOpenDelayed(false);\n      }, []),\n      onClose: React.useCallback(() => {\n        window.clearTimeout(skipDelayTimerRef.current);\n        skipDelayTimerRef.current = window.setTimeout(\n          () => setIsOpenDelayed(true),\n          skipDelayDuration\n        );\n      }, [skipDelayDuration]),\n      isPointerInTransitRef,\n      onPointerInTransitChange: React.useCallback((inTransit) => {\n        isPointerInTransitRef.current = inTransit;\n      }, []),\n      disableHoverableContent,\n      children\n    }\n  );\n};\nTooltipProvider.displayName = PROVIDER_NAME;\nvar TOOLTIP_NAME = \"Tooltip\";\nvar [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);\nvar Tooltip = (props) => {\n  const {\n    __scopeTooltip,\n    children,\n    open: openProp,\n    defaultOpen = false,\n    onOpenChange,\n    disableHoverableContent: disableHoverableContentProp,\n    delayDuration: delayDurationProp\n  } = props;\n  const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n  const popperScope = usePopperScope(__scopeTooltip);\n  const [trigger, setTrigger] = React.useState(null);\n  const contentId = useId();\n  const openTimerRef = React.useRef(0);\n  const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;\n  const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n  const wasOpenDelayedRef = React.useRef(false);\n  const [open = false, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen,\n    onChange: (open2) => {\n      if (open2) {\n        providerContext.onOpen();\n        document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n      } else {\n        providerContext.onClose();\n      }\n      onOpenChange?.(open2);\n    }\n  });\n  const stateAttribute = React.useMemo(() => {\n    return open ? wasOpenDelayedRef.current ? \"delayed-open\" : \"instant-open\" : \"closed\";\n  }, [open]);\n  const handleOpen = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    openTimerRef.current = 0;\n    wasOpenDelayedRef.current = false;\n    setOpen(true);\n  }, [setOpen]);\n  const handleClose = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    openTimerRef.current = 0;\n    setOpen(false);\n  }, [setOpen]);\n  const handleDelayedOpen = React.useCallback(() => {\n    window.clearTimeout(openTimerRef.current);\n    openTimerRef.current = window.setTimeout(() => {\n      wasOpenDelayedRef.current = true;\n      setOpen(true);\n      openTimerRef.current = 0;\n    }, delayDuration);\n  }, [delayDuration, setOpen]);\n  React.useEffect(() => {\n    return () => {\n      if (openTimerRef.current) {\n        window.clearTimeout(openTimerRef.current);\n        openTimerRef.current = 0;\n      }\n    };\n  }, []);\n  return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n    TooltipContextProvider,\n    {\n      scope: __scopeTooltip,\n      contentId,\n      open,\n      stateAttribute,\n      trigger,\n      onTriggerChange: setTrigger,\n      onTriggerEnter: React.useCallback(() => {\n        if (providerContext.isOpenDelayed) handleDelayedOpen();\n        else handleOpen();\n      }, [providerContext.isOpenDelayed, handleDelayedOpen, handleOpen]),\n      onTriggerLeave: React.useCallback(() => {\n        if (disableHoverableContent) {\n          handleClose();\n        } else {\n          window.clearTimeout(openTimerRef.current);\n          openTimerRef.current = 0;\n        }\n      }, [handleClose, disableHoverableContent]),\n      onOpen: handleOpen,\n      onClose: handleClose,\n      disableHoverableContent,\n      children\n    }\n  ) });\n};\nTooltip.displayName = TOOLTIP_NAME;\nvar TRIGGER_NAME = \"TooltipTrigger\";\nvar TooltipTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTooltip, ...triggerProps } = props;\n    const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n    const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n    const popperScope = usePopperScope(__scopeTooltip);\n    const ref = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n    const isPointerDownRef = React.useRef(false);\n    const hasPointerMoveOpenedRef = React.useRef(false);\n    const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);\n    React.useEffect(() => {\n      return () => document.removeEventListener(\"pointerup\", handlePointerUp);\n    }, [handlePointerUp]);\n    return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        \"aria-describedby\": context.open ? context.contentId : void 0,\n        \"data-state\": context.stateAttribute,\n        ...triggerProps,\n        ref: composedRefs,\n        onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n          if (event.pointerType === \"touch\") return;\n          if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {\n            context.onTriggerEnter();\n            hasPointerMoveOpenedRef.current = true;\n          }\n        }),\n        onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {\n          context.onTriggerLeave();\n          hasPointerMoveOpenedRef.current = false;\n        }),\n        onPointerDown: composeEventHandlers(props.onPointerDown, () => {\n          isPointerDownRef.current = true;\n          document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n        }),\n        onFocus: composeEventHandlers(props.onFocus, () => {\n          if (!isPointerDownRef.current) context.onOpen();\n        }),\n        onBlur: composeEventHandlers(props.onBlur, context.onClose),\n        onClick: composeEventHandlers(props.onClick, context.onClose)\n      }\n    ) });\n  }\n);\nTooltipTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"TooltipPortal\";\nvar [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n  forceMount: void 0\n});\nvar TooltipPortal = (props) => {\n  const { __scopeTooltip, forceMount, children, container } = props;\n  const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n  return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nTooltipPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"TooltipContent\";\nvar TooltipContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n    const { forceMount = portalContext.forceMount, side = \"top\", ...contentProps } = props;\n    const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });\n  }\n);\nvar TooltipContentHoverable = React.forwardRef((props, forwardedRef) => {\n  const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n  const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n  const { trigger, onClose } = context;\n  const content = ref.current;\n  const { onPointerInTransitChange } = providerContext;\n  const handleRemoveGraceArea = React.useCallback(() => {\n    setPointerGraceArea(null);\n    onPointerInTransitChange(false);\n  }, [onPointerInTransitChange]);\n  const handleCreateGraceArea = React.useCallback(\n    (event, hoverTarget) => {\n      const currentTarget = event.currentTarget;\n      const exitPoint = { x: event.clientX, y: event.clientY };\n      const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n      const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n      const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n      const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n      setPointerGraceArea(graceArea);\n      onPointerInTransitChange(true);\n    },\n    [onPointerInTransitChange]\n  );\n  React.useEffect(() => {\n    return () => handleRemoveGraceArea();\n  }, [handleRemoveGraceArea]);\n  React.useEffect(() => {\n    if (trigger && content) {\n      const handleTriggerLeave = (event) => handleCreateGraceArea(event, content);\n      const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);\n      trigger.addEventListener(\"pointerleave\", handleTriggerLeave);\n      content.addEventListener(\"pointerleave\", handleContentLeave);\n      return () => {\n        trigger.removeEventListener(\"pointerleave\", handleTriggerLeave);\n        content.removeEventListener(\"pointerleave\", handleContentLeave);\n      };\n    }\n  }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n  React.useEffect(() => {\n    if (pointerGraceArea) {\n      const handleTrackPointerGrace = (event) => {\n        const target = event.target;\n        const pointerPosition = { x: event.clientX, y: event.clientY };\n        const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n        const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n        if (hasEnteredTarget) {\n          handleRemoveGraceArea();\n        } else if (isPointerOutsideGraceArea) {\n          handleRemoveGraceArea();\n          onClose();\n        }\n      };\n      document.addEventListener(\"pointermove\", handleTrackPointerGrace);\n      return () => document.removeEventListener(\"pointermove\", handleTrackPointerGrace);\n    }\n  }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n  return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });\n});\nvar [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false });\nvar TooltipContentImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeTooltip,\n      children,\n      \"aria-label\": ariaLabel,\n      onEscapeKeyDown,\n      onPointerDownOutside,\n      ...contentProps\n    } = props;\n    const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n    const popperScope = usePopperScope(__scopeTooltip);\n    const { onClose } = context;\n    React.useEffect(() => {\n      document.addEventListener(TOOLTIP_OPEN, onClose);\n      return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n    }, [onClose]);\n    React.useEffect(() => {\n      if (context.trigger) {\n        const handleScroll = (event) => {\n          const target = event.target;\n          if (target?.contains(context.trigger)) onClose();\n        };\n        window.addEventListener(\"scroll\", handleScroll, { capture: true });\n        return () => window.removeEventListener(\"scroll\", handleScroll, { capture: true });\n      }\n    }, [context.trigger, onClose]);\n    return /* @__PURE__ */ jsx(\n      DismissableLayer,\n      {\n        asChild: true,\n        disableOutsidePointerEvents: false,\n        onEscapeKeyDown,\n        onPointerDownOutside,\n        onFocusOutside: (event) => event.preventDefault(),\n        onDismiss: onClose,\n        children: /* @__PURE__ */ jsxs(\n          PopperPrimitive.Content,\n          {\n            \"data-state\": context.stateAttribute,\n            ...popperScope,\n            ...contentProps,\n            ref: forwardedRef,\n            style: {\n              ...contentProps.style,\n              // re-namespace exposed content custom properties\n              ...{\n                \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n                \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n                \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n                \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n                \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n              }\n            },\n            children: [\n              /* @__PURE__ */ jsx(Slottable, { children }),\n              /* @__PURE__ */ jsx(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { id: context.contentId, role: \"tooltip\", children: ariaLabel || children }) })\n            ]\n          }\n        )\n      }\n    );\n  }\n);\nTooltipContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"TooltipArrow\";\nvar TooltipArrow = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeTooltip, ...arrowProps } = props;\n    const popperScope = usePopperScope(__scopeTooltip);\n    const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n      ARROW_NAME,\n      __scopeTooltip\n    );\n    return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n  }\n);\nTooltipArrow.displayName = ARROW_NAME;\nfunction getExitSideFromRect(point, rect) {\n  const top = Math.abs(rect.top - point.y);\n  const bottom = Math.abs(rect.bottom - point.y);\n  const right = Math.abs(rect.right - point.x);\n  const left = Math.abs(rect.left - point.x);\n  switch (Math.min(top, bottom, right, left)) {\n    case left:\n      return \"left\";\n    case right:\n      return \"right\";\n    case top:\n      return \"top\";\n    case bottom:\n      return \"bottom\";\n    default:\n      throw new Error(\"unreachable\");\n  }\n}\nfunction getPaddedExitPoints(exitPoint, exitSide, padding = 5) {\n  const paddedExitPoints = [];\n  switch (exitSide) {\n    case \"top\":\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y + padding },\n        { x: exitPoint.x + padding, y: exitPoint.y + padding }\n      );\n      break;\n    case \"bottom\":\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y - padding },\n        { x: exitPoint.x + padding, y: exitPoint.y - padding }\n      );\n      break;\n    case \"left\":\n      paddedExitPoints.push(\n        { x: exitPoint.x + padding, y: exitPoint.y - padding },\n        { x: exitPoint.x + padding, y: exitPoint.y + padding }\n      );\n      break;\n    case \"right\":\n      paddedExitPoints.push(\n        { x: exitPoint.x - padding, y: exitPoint.y - padding },\n        { x: exitPoint.x - padding, y: exitPoint.y + padding }\n      );\n      break;\n  }\n  return paddedExitPoints;\n}\nfunction getPointsFromRect(rect) {\n  const { top, right, bottom, left } = rect;\n  return [\n    { x: left, y: top },\n    { x: right, y: top },\n    { x: right, y: bottom },\n    { x: left, y: bottom }\n  ];\n}\nfunction isPointInPolygon(point, polygon) {\n  const { x, y } = point;\n  let inside = false;\n  for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n    const xi = polygon[i].x;\n    const yi = polygon[i].y;\n    const xj = polygon[j].x;\n    const yj = polygon[j].y;\n    const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n    if (intersect) inside = !inside;\n  }\n  return inside;\n}\nfunction getHull(points) {\n  const newPoints = points.slice();\n  newPoints.sort((a, b) => {\n    if (a.x < b.x) return -1;\n    else if (a.x > b.x) return 1;\n    else if (a.y < b.y) return -1;\n    else if (a.y > b.y) return 1;\n    else return 0;\n  });\n  return getHullPresorted(newPoints);\n}\nfunction getHullPresorted(points) {\n  if (points.length <= 1) return points.slice();\n  const upperHull = [];\n  for (let i = 0; i < points.length; i++) {\n    const p = points[i];\n    while (upperHull.length >= 2) {\n      const q = upperHull[upperHull.length - 1];\n      const r = upperHull[upperHull.length - 2];\n      if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n      else break;\n    }\n    upperHull.push(p);\n  }\n  upperHull.pop();\n  const lowerHull = [];\n  for (let i = points.length - 1; i >= 0; i--) {\n    const p = points[i];\n    while (lowerHull.length >= 2) {\n      const q = lowerHull[lowerHull.length - 1];\n      const r = lowerHull[lowerHull.length - 2];\n      if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n      else break;\n    }\n    lowerHull.push(p);\n  }\n  lowerHull.pop();\n  if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {\n    return upperHull;\n  } else {\n    return upperHull.concat(lowerHull);\n  }\n}\nvar Provider = TooltipProvider;\nvar Root3 = Tooltip;\nvar Trigger = TooltipTrigger;\nvar Portal = TooltipPortal;\nvar Content2 = TooltipContent;\nvar Arrow2 = TooltipArrow;\nexport {\n  Arrow2 as Arrow,\n  Content2 as Content,\n  Portal,\n  Provider,\n  Root3 as Root,\n  Tooltip,\n  TooltipArrow,\n  TooltipContent,\n  TooltipPortal,\n  TooltipProvider,\n  TooltipTrigger,\n  Trigger,\n  createTooltipScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst TooltipProvider = TooltipPrimitive.Provider\n\nconst Tooltip = TooltipPrimitive.Root\n\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n  React.ElementRef<typeof TooltipPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n  <TooltipPrimitive.Content\n    ref={ref}\n    sideOffset={sideOffset}\n    className={cn(\n      \"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\",\n      className\n    )}\n    {...props}\n  />\n))\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","// src/subscribable.ts\nvar Subscribable = class {\n  constructor() {\n    this.listeners = /* @__PURE__ */ new Set();\n    this.subscribe = this.subscribe.bind(this);\n  }\n  subscribe(listener) {\n    this.listeners.add(listener);\n    this.onSubscribe();\n    return () => {\n      this.listeners.delete(listener);\n      this.onUnsubscribe();\n    };\n  }\n  hasListeners() {\n    return this.listeners.size > 0;\n  }\n  onSubscribe() {\n  }\n  onUnsubscribe() {\n  }\n};\nexport {\n  Subscribable\n};\n//# sourceMappingURL=subscribable.js.map","// src/utils.ts\nvar isServer = typeof window === \"undefined\" || \"Deno\" in globalThis;\nfunction noop() {\n  return void 0;\n}\nfunction functionalUpdate(updater, input) {\n  return typeof updater === \"function\" ? updater(input) : updater;\n}\nfunction isValidTimeout(value) {\n  return typeof value === \"number\" && value >= 0 && value !== Infinity;\n}\nfunction timeUntilStale(updatedAt, staleTime) {\n  return Math.max(updatedAt + (staleTime || 0) - Date.now(), 0);\n}\nfunction resolveStaleTime(staleTime, query) {\n  return typeof staleTime === \"function\" ? staleTime(query) : staleTime;\n}\nfunction resolveEnabled(enabled, query) {\n  return typeof enabled === \"function\" ? enabled(query) : enabled;\n}\nfunction matchQuery(filters, query) {\n  const {\n    type = \"all\",\n    exact,\n    fetchStatus,\n    predicate,\n    queryKey,\n    stale\n  } = filters;\n  if (queryKey) {\n    if (exact) {\n      if (query.queryHash !== hashQueryKeyByOptions(queryKey, query.options)) {\n        return false;\n      }\n    } else if (!partialMatchKey(query.queryKey, queryKey)) {\n      return false;\n    }\n  }\n  if (type !== \"all\") {\n    const isActive = query.isActive();\n    if (type === \"active\" && !isActive) {\n      return false;\n    }\n    if (type === \"inactive\" && isActive) {\n      return false;\n    }\n  }\n  if (typeof stale === \"boolean\" && query.isStale() !== stale) {\n    return false;\n  }\n  if (fetchStatus && fetchStatus !== query.state.fetchStatus) {\n    return false;\n  }\n  if (predicate && !predicate(query)) {\n    return false;\n  }\n  return true;\n}\nfunction matchMutation(filters, mutation) {\n  const { exact, status, predicate, mutationKey } = filters;\n  if (mutationKey) {\n    if (!mutation.options.mutationKey) {\n      return false;\n    }\n    if (exact) {\n      if (hashKey(mutation.options.mutationKey) !== hashKey(mutationKey)) {\n        return false;\n      }\n    } else if (!partialMatchKey(mutation.options.mutationKey, mutationKey)) {\n      return false;\n    }\n  }\n  if (status && mutation.state.status !== status) {\n    return false;\n  }\n  if (predicate && !predicate(mutation)) {\n    return false;\n  }\n  return true;\n}\nfunction hashQueryKeyByOptions(queryKey, options) {\n  const hashFn = options?.queryKeyHashFn || hashKey;\n  return hashFn(queryKey);\n}\nfunction hashKey(queryKey) {\n  return JSON.stringify(\n    queryKey,\n    (_, val) => isPlainObject(val) ? Object.keys(val).sort().reduce((result, key) => {\n      result[key] = val[key];\n      return result;\n    }, {}) : val\n  );\n}\nfunction partialMatchKey(a, b) {\n  if (a === b) {\n    return true;\n  }\n  if (typeof a !== typeof b) {\n    return false;\n  }\n  if (a && b && typeof a === \"object\" && typeof b === \"object\") {\n    return !Object.keys(b).some((key) => !partialMatchKey(a[key], b[key]));\n  }\n  return false;\n}\nfunction replaceEqualDeep(a, b) {\n  if (a === b) {\n    return a;\n  }\n  const array = isPlainArray(a) && isPlainArray(b);\n  if (array || isPlainObject(a) && isPlainObject(b)) {\n    const aItems = array ? a : Object.keys(a);\n    const aSize = aItems.length;\n    const bItems = array ? b : Object.keys(b);\n    const bSize = bItems.length;\n    const copy = array ? [] : {};\n    let equalItems = 0;\n    for (let i = 0; i < bSize; i++) {\n      const key = array ? i : bItems[i];\n      if ((!array && aItems.includes(key) || array) && a[key] === void 0 && b[key] === void 0) {\n        copy[key] = void 0;\n        equalItems++;\n      } else {\n        copy[key] = replaceEqualDeep(a[key], b[key]);\n        if (copy[key] === a[key] && a[key] !== void 0) {\n          equalItems++;\n        }\n      }\n    }\n    return aSize === bSize && equalItems === aSize ? a : copy;\n  }\n  return b;\n}\nfunction shallowEqualObjects(a, b) {\n  if (!b || Object.keys(a).length !== Object.keys(b).length) {\n    return false;\n  }\n  for (const key in a) {\n    if (a[key] !== b[key]) {\n      return false;\n    }\n  }\n  return true;\n}\nfunction isPlainArray(value) {\n  return Array.isArray(value) && value.length === Object.keys(value).length;\n}\nfunction isPlainObject(o) {\n  if (!hasObjectPrototype(o)) {\n    return false;\n  }\n  const ctor = o.constructor;\n  if (ctor === void 0) {\n    return true;\n  }\n  const prot = ctor.prototype;\n  if (!hasObjectPrototype(prot)) {\n    return false;\n  }\n  if (!prot.hasOwnProperty(\"isPrototypeOf\")) {\n    return false;\n  }\n  if (Object.getPrototypeOf(o) !== Object.prototype) {\n    return false;\n  }\n  return true;\n}\nfunction hasObjectPrototype(o) {\n  return Object.prototype.toString.call(o) === \"[object Object]\";\n}\nfunction sleep(timeout) {\n  return new Promise((resolve) => {\n    setTimeout(resolve, timeout);\n  });\n}\nfunction replaceData(prevData, data, options) {\n  if (typeof options.structuralSharing === \"function\") {\n    return options.structuralSharing(prevData, data);\n  } else if (options.structuralSharing !== false) {\n    if (process.env.NODE_ENV !== \"production\") {\n      try {\n        return replaceEqualDeep(prevData, data);\n      } catch (error) {\n        console.error(\n          `Structural sharing requires data to be JSON serializable. To fix this, turn off structuralSharing or return JSON-serializable data from your queryFn. [${options.queryHash}]: ${error}`\n        );\n      }\n    }\n    return replaceEqualDeep(prevData, data);\n  }\n  return data;\n}\nfunction keepPreviousData(previousData) {\n  return previousData;\n}\nfunction addToEnd(items, item, max = 0) {\n  const newItems = [...items, item];\n  return max && newItems.length > max ? newItems.slice(1) : newItems;\n}\nfunction addToStart(items, item, max = 0) {\n  const newItems = [item, ...items];\n  return max && newItems.length > max ? newItems.slice(0, -1) : newItems;\n}\nvar skipToken = Symbol();\nfunction ensureQueryFn(options, fetchOptions) {\n  if (process.env.NODE_ENV !== \"production\") {\n    if (options.queryFn === skipToken) {\n      console.error(\n        `Attempted to invoke queryFn when set to skipToken. This is likely a configuration error. Query hash: '${options.queryHash}'`\n      );\n    }\n  }\n  if (!options.queryFn && fetchOptions?.initialPromise) {\n    return () => fetchOptions.initialPromise;\n  }\n  if (!options.queryFn || options.queryFn === skipToken) {\n    return () => Promise.reject(new Error(`Missing queryFn: '${options.queryHash}'`));\n  }\n  return options.queryFn;\n}\nexport {\n  addToEnd,\n  addToStart,\n  ensureQueryFn,\n  functionalUpdate,\n  hashKey,\n  hashQueryKeyByOptions,\n  isPlainArray,\n  isPlainObject,\n  isServer,\n  isValidTimeout,\n  keepPreviousData,\n  matchMutation,\n  matchQuery,\n  noop,\n  partialMatchKey,\n  replaceData,\n  replaceEqualDeep,\n  resolveEnabled,\n  resolveStaleTime,\n  shallowEqualObjects,\n  skipToken,\n  sleep,\n  timeUntilStale\n};\n//# sourceMappingURL=utils.js.map","// src/focusManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar FocusManager = class extends Subscribable {\n  #focused;\n  #cleanup;\n  #setup;\n  constructor() {\n    super();\n    this.#setup = (onFocus) => {\n      if (!isServer && window.addEventListener) {\n        const listener = () => onFocus();\n        window.addEventListener(\"visibilitychange\", listener, false);\n        return () => {\n          window.removeEventListener(\"visibilitychange\", listener);\n        };\n      }\n      return;\n    };\n  }\n  onSubscribe() {\n    if (!this.#cleanup) {\n      this.setEventListener(this.#setup);\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.#cleanup?.();\n      this.#cleanup = void 0;\n    }\n  }\n  setEventListener(setup) {\n    this.#setup = setup;\n    this.#cleanup?.();\n    this.#cleanup = setup((focused) => {\n      if (typeof focused === \"boolean\") {\n        this.setFocused(focused);\n      } else {\n        this.onFocus();\n      }\n    });\n  }\n  setFocused(focused) {\n    const changed = this.#focused !== focused;\n    if (changed) {\n      this.#focused = focused;\n      this.onFocus();\n    }\n  }\n  onFocus() {\n    const isFocused = this.isFocused();\n    this.listeners.forEach((listener) => {\n      listener(isFocused);\n    });\n  }\n  isFocused() {\n    if (typeof this.#focused === \"boolean\") {\n      return this.#focused;\n    }\n    return globalThis.document?.visibilityState !== \"hidden\";\n  }\n};\nvar focusManager = new FocusManager();\nexport {\n  FocusManager,\n  focusManager\n};\n//# sourceMappingURL=focusManager.js.map","// src/onlineManager.ts\nimport { Subscribable } from \"./subscribable.js\";\nimport { isServer } from \"./utils.js\";\nvar OnlineManager = class extends Subscribable {\n  #online = true;\n  #cleanup;\n  #setup;\n  constructor() {\n    super();\n    this.#setup = (onOnline) => {\n      if (!isServer && window.addEventListener) {\n        const onlineListener = () => onOnline(true);\n        const offlineListener = () => onOnline(false);\n        window.addEventListener(\"online\", onlineListener, false);\n        window.addEventListener(\"offline\", offlineListener, false);\n        return () => {\n          window.removeEventListener(\"online\", onlineListener);\n          window.removeEventListener(\"offline\", offlineListener);\n        };\n      }\n      return;\n    };\n  }\n  onSubscribe() {\n    if (!this.#cleanup) {\n      this.setEventListener(this.#setup);\n    }\n  }\n  onUnsubscribe() {\n    if (!this.hasListeners()) {\n      this.#cleanup?.();\n      this.#cleanup = void 0;\n    }\n  }\n  setEventListener(setup) {\n    this.#setup = setup;\n    this.#cleanup?.();\n    this.#cleanup = setup(this.setOnline.bind(this));\n  }\n  setOnline(online) {\n    const changed = this.#online !== online;\n    if (changed) {\n      this.#online = online;\n      this.listeners.forEach((listener) => {\n        listener(online);\n      });\n    }\n  }\n  isOnline() {\n    return this.#online;\n  }\n};\nvar onlineManager = new OnlineManager();\nexport {\n  OnlineManager,\n  onlineManager\n};\n//# sourceMappingURL=onlineManager.js.map","// src/retryer.ts\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { isServer, sleep } from \"./utils.js\";\nfunction defaultRetryDelay(failureCount) {\n  return Math.min(1e3 * 2 ** failureCount, 3e4);\n}\nfunction canFetch(networkMode) {\n  return (networkMode ?? \"online\") === \"online\" ? onlineManager.isOnline() : true;\n}\nvar CancelledError = class extends Error {\n  constructor(options) {\n    super(\"CancelledError\");\n    this.revert = options?.revert;\n    this.silent = options?.silent;\n  }\n};\nfunction isCancelledError(value) {\n  return value instanceof CancelledError;\n}\nfunction createRetryer(config) {\n  let isRetryCancelled = false;\n  let failureCount = 0;\n  let isResolved = false;\n  let continueFn;\n  let promiseResolve;\n  let promiseReject;\n  const promise = new Promise((outerResolve, outerReject) => {\n    promiseResolve = outerResolve;\n    promiseReject = outerReject;\n  });\n  const cancel = (cancelOptions) => {\n    if (!isResolved) {\n      reject(new CancelledError(cancelOptions));\n      config.abort?.();\n    }\n  };\n  const cancelRetry = () => {\n    isRetryCancelled = true;\n  };\n  const continueRetry = () => {\n    isRetryCancelled = false;\n  };\n  const canContinue = () => focusManager.isFocused() && (config.networkMode === \"always\" || onlineManager.isOnline()) && config.canRun();\n  const canStart = () => canFetch(config.networkMode) && config.canRun();\n  const resolve = (value) => {\n    if (!isResolved) {\n      isResolved = true;\n      config.onSuccess?.(value);\n      continueFn?.();\n      promiseResolve(value);\n    }\n  };\n  const reject = (value) => {\n    if (!isResolved) {\n      isResolved = true;\n      config.onError?.(value);\n      continueFn?.();\n      promiseReject(value);\n    }\n  };\n  const pause = () => {\n    return new Promise((continueResolve) => {\n      continueFn = (value) => {\n        if (isResolved || canContinue()) {\n          continueResolve(value);\n        }\n      };\n      config.onPause?.();\n    }).then(() => {\n      continueFn = void 0;\n      if (!isResolved) {\n        config.onContinue?.();\n      }\n    });\n  };\n  const run = () => {\n    if (isResolved) {\n      return;\n    }\n    let promiseOrValue;\n    const initialPromise = failureCount === 0 ? config.initialPromise : void 0;\n    try {\n      promiseOrValue = initialPromise ?? config.fn();\n    } catch (error) {\n      promiseOrValue = Promise.reject(error);\n    }\n    Promise.resolve(promiseOrValue).then(resolve).catch((error) => {\n      if (isResolved) {\n        return;\n      }\n      const retry = config.retry ?? (isServer ? 0 : 3);\n      const retryDelay = config.retryDelay ?? defaultRetryDelay;\n      const delay = typeof retryDelay === \"function\" ? retryDelay(failureCount, error) : retryDelay;\n      const shouldRetry = retry === true || typeof retry === \"number\" && failureCount < retry || typeof retry === \"function\" && retry(failureCount, error);\n      if (isRetryCancelled || !shouldRetry) {\n        reject(error);\n        return;\n      }\n      failureCount++;\n      config.onFail?.(failureCount, error);\n      sleep(delay).then(() => {\n        return canContinue() ? void 0 : pause();\n      }).then(() => {\n        if (isRetryCancelled) {\n          reject(error);\n        } else {\n          run();\n        }\n      });\n    });\n  };\n  return {\n    promise,\n    cancel,\n    continue: () => {\n      continueFn?.();\n      return promise;\n    },\n    cancelRetry,\n    continueRetry,\n    canStart,\n    start: () => {\n      if (canStart()) {\n        run();\n      } else {\n        pause().then(run);\n      }\n      return promise;\n    }\n  };\n}\nexport {\n  CancelledError,\n  canFetch,\n  createRetryer,\n  isCancelledError\n};\n//# sourceMappingURL=retryer.js.map","// src/notifyManager.ts\nfunction createNotifyManager() {\n  let queue = [];\n  let transactions = 0;\n  let notifyFn = (callback) => {\n    callback();\n  };\n  let batchNotifyFn = (callback) => {\n    callback();\n  };\n  let scheduleFn = (cb) => setTimeout(cb, 0);\n  const schedule = (callback) => {\n    if (transactions) {\n      queue.push(callback);\n    } else {\n      scheduleFn(() => {\n        notifyFn(callback);\n      });\n    }\n  };\n  const flush = () => {\n    const originalQueue = queue;\n    queue = [];\n    if (originalQueue.length) {\n      scheduleFn(() => {\n        batchNotifyFn(() => {\n          originalQueue.forEach((callback) => {\n            notifyFn(callback);\n          });\n        });\n      });\n    }\n  };\n  return {\n    batch: (callback) => {\n      let result;\n      transactions++;\n      try {\n        result = callback();\n      } finally {\n        transactions--;\n        if (!transactions) {\n          flush();\n        }\n      }\n      return result;\n    },\n    /**\n     * All calls to the wrapped function will be batched.\n     */\n    batchCalls: (callback) => {\n      return (...args) => {\n        schedule(() => {\n          callback(...args);\n        });\n      };\n    },\n    schedule,\n    /**\n     * Use this method to set a custom notify function.\n     * This can be used to for example wrap notifications with `React.act` while running tests.\n     */\n    setNotifyFunction: (fn) => {\n      notifyFn = fn;\n    },\n    /**\n     * Use this method to set a custom function to batch notifications together into a single tick.\n     * By default React Query will use the batch function provided by ReactDOM or React Native.\n     */\n    setBatchNotifyFunction: (fn) => {\n      batchNotifyFn = fn;\n    },\n    setScheduler: (fn) => {\n      scheduleFn = fn;\n    }\n  };\n}\nvar notifyManager = createNotifyManager();\nexport {\n  createNotifyManager,\n  notifyManager\n};\n//# sourceMappingURL=notifyManager.js.map","// src/removable.ts\nimport { isServer, isValidTimeout } from \"./utils.js\";\nvar Removable = class {\n  #gcTimeout;\n  destroy() {\n    this.clearGcTimeout();\n  }\n  scheduleGc() {\n    this.clearGcTimeout();\n    if (isValidTimeout(this.gcTime)) {\n      this.#gcTimeout = setTimeout(() => {\n        this.optionalRemove();\n      }, this.gcTime);\n    }\n  }\n  updateGcTime(newGcTime) {\n    this.gcTime = Math.max(\n      this.gcTime || 0,\n      newGcTime ?? (isServer ? Infinity : 5 * 60 * 1e3)\n    );\n  }\n  clearGcTimeout() {\n    if (this.#gcTimeout) {\n      clearTimeout(this.#gcTimeout);\n      this.#gcTimeout = void 0;\n    }\n  }\n};\nexport {\n  Removable\n};\n//# sourceMappingURL=removable.js.map","// src/query.ts\nimport {\n  ensureQueryFn,\n  noop,\n  replaceData,\n  resolveEnabled,\n  timeUntilStale\n} from \"./utils.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { canFetch, createRetryer, isCancelledError } from \"./retryer.js\";\nimport { Removable } from \"./removable.js\";\nvar Query = class extends Removable {\n  #initialState;\n  #revertState;\n  #cache;\n  #retryer;\n  #defaultOptions;\n  #abortSignalConsumed;\n  constructor(config) {\n    super();\n    this.#abortSignalConsumed = false;\n    this.#defaultOptions = config.defaultOptions;\n    this.setOptions(config.options);\n    this.observers = [];\n    this.#cache = config.cache;\n    this.queryKey = config.queryKey;\n    this.queryHash = config.queryHash;\n    this.#initialState = getDefaultState(this.options);\n    this.state = config.state ?? this.#initialState;\n    this.scheduleGc();\n  }\n  get meta() {\n    return this.options.meta;\n  }\n  get promise() {\n    return this.#retryer?.promise;\n  }\n  setOptions(options) {\n    this.options = { ...this.#defaultOptions, ...options };\n    this.updateGcTime(this.options.gcTime);\n  }\n  optionalRemove() {\n    if (!this.observers.length && this.state.fetchStatus === \"idle\") {\n      this.#cache.remove(this);\n    }\n  }\n  setData(newData, options) {\n    const data = replaceData(this.state.data, newData, this.options);\n    this.#dispatch({\n      data,\n      type: \"success\",\n      dataUpdatedAt: options?.updatedAt,\n      manual: options?.manual\n    });\n    return data;\n  }\n  setState(state, setStateOptions) {\n    this.#dispatch({ type: \"setState\", state, setStateOptions });\n  }\n  cancel(options) {\n    const promise = this.#retryer?.promise;\n    this.#retryer?.cancel(options);\n    return promise ? promise.then(noop).catch(noop) : Promise.resolve();\n  }\n  destroy() {\n    super.destroy();\n    this.cancel({ silent: true });\n  }\n  reset() {\n    this.destroy();\n    this.setState(this.#initialState);\n  }\n  isActive() {\n    return this.observers.some(\n      (observer) => resolveEnabled(observer.options.enabled, this) !== false\n    );\n  }\n  isDisabled() {\n    return this.getObserversCount() > 0 && !this.isActive();\n  }\n  isStale() {\n    if (this.state.isInvalidated) {\n      return true;\n    }\n    if (this.getObserversCount() > 0) {\n      return this.observers.some(\n        (observer) => observer.getCurrentResult().isStale\n      );\n    }\n    return this.state.data === void 0;\n  }\n  isStaleByTime(staleTime = 0) {\n    return this.state.isInvalidated || this.state.data === void 0 || !timeUntilStale(this.state.dataUpdatedAt, staleTime);\n  }\n  onFocus() {\n    const observer = this.observers.find((x) => x.shouldFetchOnWindowFocus());\n    observer?.refetch({ cancelRefetch: false });\n    this.#retryer?.continue();\n  }\n  onOnline() {\n    const observer = this.observers.find((x) => x.shouldFetchOnReconnect());\n    observer?.refetch({ cancelRefetch: false });\n    this.#retryer?.continue();\n  }\n  addObserver(observer) {\n    if (!this.observers.includes(observer)) {\n      this.observers.push(observer);\n      this.clearGcTimeout();\n      this.#cache.notify({ type: \"observerAdded\", query: this, observer });\n    }\n  }\n  removeObserver(observer) {\n    if (this.observers.includes(observer)) {\n      this.observers = this.observers.filter((x) => x !== observer);\n      if (!this.observers.length) {\n        if (this.#retryer) {\n          if (this.#abortSignalConsumed) {\n            this.#retryer.cancel({ revert: true });\n          } else {\n            this.#retryer.cancelRetry();\n          }\n        }\n        this.scheduleGc();\n      }\n      this.#cache.notify({ type: \"observerRemoved\", query: this, observer });\n    }\n  }\n  getObserversCount() {\n    return this.observers.length;\n  }\n  invalidate() {\n    if (!this.state.isInvalidated) {\n      this.#dispatch({ type: \"invalidate\" });\n    }\n  }\n  fetch(options, fetchOptions) {\n    if (this.state.fetchStatus !== \"idle\") {\n      if (this.state.data !== void 0 && fetchOptions?.cancelRefetch) {\n        this.cancel({ silent: true });\n      } else if (this.#retryer) {\n        this.#retryer.continueRetry();\n        return this.#retryer.promise;\n      }\n    }\n    if (options) {\n      this.setOptions(options);\n    }\n    if (!this.options.queryFn) {\n      const observer = this.observers.find((x) => x.options.queryFn);\n      if (observer) {\n        this.setOptions(observer.options);\n      }\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n      if (!Array.isArray(this.options.queryKey)) {\n        console.error(\n          `As of v4, queryKey needs to be an Array. If you are using a string like 'repoData', please change it to an Array, e.g. ['repoData']`\n        );\n      }\n    }\n    const abortController = new AbortController();\n    const addSignalProperty = (object) => {\n      Object.defineProperty(object, \"signal\", {\n        enumerable: true,\n        get: () => {\n          this.#abortSignalConsumed = true;\n          return abortController.signal;\n        }\n      });\n    };\n    const fetchFn = () => {\n      const queryFn = ensureQueryFn(this.options, fetchOptions);\n      const queryFnContext = {\n        queryKey: this.queryKey,\n        meta: this.meta\n      };\n      addSignalProperty(queryFnContext);\n      this.#abortSignalConsumed = false;\n      if (this.options.persister) {\n        return this.options.persister(\n          queryFn,\n          queryFnContext,\n          this\n        );\n      }\n      return queryFn(queryFnContext);\n    };\n    const context = {\n      fetchOptions,\n      options: this.options,\n      queryKey: this.queryKey,\n      state: this.state,\n      fetchFn\n    };\n    addSignalProperty(context);\n    this.options.behavior?.onFetch(\n      context,\n      this\n    );\n    this.#revertState = this.state;\n    if (this.state.fetchStatus === \"idle\" || this.state.fetchMeta !== context.fetchOptions?.meta) {\n      this.#dispatch({ type: \"fetch\", meta: context.fetchOptions?.meta });\n    }\n    const onError = (error) => {\n      if (!(isCancelledError(error) && error.silent)) {\n        this.#dispatch({\n          type: \"error\",\n          error\n        });\n      }\n      if (!isCancelledError(error)) {\n        this.#cache.config.onError?.(\n          error,\n          this\n        );\n        this.#cache.config.onSettled?.(\n          this.state.data,\n          error,\n          this\n        );\n      }\n      if (!this.isFetchingOptimistic) {\n        this.scheduleGc();\n      }\n      this.isFetchingOptimistic = false;\n    };\n    this.#retryer = createRetryer({\n      initialPromise: fetchOptions?.initialPromise,\n      fn: context.fetchFn,\n      abort: abortController.abort.bind(abortController),\n      onSuccess: (data) => {\n        if (data === void 0) {\n          if (process.env.NODE_ENV !== \"production\") {\n            console.error(\n              `Query data cannot be undefined. Please make sure to return a value other than undefined from your query function. Affected query key: ${this.queryHash}`\n            );\n          }\n          onError(new Error(`${this.queryHash} data is undefined`));\n          return;\n        }\n        try {\n          this.setData(data);\n        } catch (error) {\n          onError(error);\n          return;\n        }\n        this.#cache.config.onSuccess?.(data, this);\n        this.#cache.config.onSettled?.(\n          data,\n          this.state.error,\n          this\n        );\n        if (!this.isFetchingOptimistic) {\n          this.scheduleGc();\n        }\n        this.isFetchingOptimistic = false;\n      },\n      onError,\n      onFail: (failureCount, error) => {\n        this.#dispatch({ type: \"failed\", failureCount, error });\n      },\n      onPause: () => {\n        this.#dispatch({ type: \"pause\" });\n      },\n      onContinue: () => {\n        this.#dispatch({ type: \"continue\" });\n      },\n      retry: context.options.retry,\n      retryDelay: context.options.retryDelay,\n      networkMode: context.options.networkMode,\n      canRun: () => true\n    });\n    return this.#retryer.start();\n  }\n  #dispatch(action) {\n    const reducer = (state) => {\n      switch (action.type) {\n        case \"failed\":\n          return {\n            ...state,\n            fetchFailureCount: action.failureCount,\n            fetchFailureReason: action.error\n          };\n        case \"pause\":\n          return {\n            ...state,\n            fetchStatus: \"paused\"\n          };\n        case \"continue\":\n          return {\n            ...state,\n            fetchStatus: \"fetching\"\n          };\n        case \"fetch\":\n          return {\n            ...state,\n            ...fetchState(state.data, this.options),\n            fetchMeta: action.meta ?? null\n          };\n        case \"success\":\n          return {\n            ...state,\n            data: action.data,\n            dataUpdateCount: state.dataUpdateCount + 1,\n            dataUpdatedAt: action.dataUpdatedAt ?? Date.now(),\n            error: null,\n            isInvalidated: false,\n            status: \"success\",\n            ...!action.manual && {\n              fetchStatus: \"idle\",\n              fetchFailureCount: 0,\n              fetchFailureReason: null\n            }\n          };\n        case \"error\":\n          const error = action.error;\n          if (isCancelledError(error) && error.revert && this.#revertState) {\n            return { ...this.#revertState, fetchStatus: \"idle\" };\n          }\n          return {\n            ...state,\n            error,\n            errorUpdateCount: state.errorUpdateCount + 1,\n            errorUpdatedAt: Date.now(),\n            fetchFailureCount: state.fetchFailureCount + 1,\n            fetchFailureReason: error,\n            fetchStatus: \"idle\",\n            status: \"error\"\n          };\n        case \"invalidate\":\n          return {\n            ...state,\n            isInvalidated: true\n          };\n        case \"setState\":\n          return {\n            ...state,\n            ...action.state\n          };\n      }\n    };\n    this.state = reducer(this.state);\n    notifyManager.batch(() => {\n      this.observers.forEach((observer) => {\n        observer.onQueryUpdate();\n      });\n      this.#cache.notify({ query: this, type: \"updated\", action });\n    });\n  }\n};\nfunction fetchState(data, options) {\n  return {\n    fetchFailureCount: 0,\n    fetchFailureReason: null,\n    fetchStatus: canFetch(options.networkMode) ? \"fetching\" : \"paused\",\n    ...data === void 0 && {\n      error: null,\n      status: \"pending\"\n    }\n  };\n}\nfunction getDefaultState(options) {\n  const data = typeof options.initialData === \"function\" ? options.initialData() : options.initialData;\n  const hasData = data !== void 0;\n  const initialDataUpdatedAt = hasData ? typeof options.initialDataUpdatedAt === \"function\" ? options.initialDataUpdatedAt() : options.initialDataUpdatedAt : 0;\n  return {\n    data,\n    dataUpdateCount: 0,\n    dataUpdatedAt: hasData ? initialDataUpdatedAt ?? Date.now() : 0,\n    error: null,\n    errorUpdateCount: 0,\n    errorUpdatedAt: 0,\n    fetchFailureCount: 0,\n    fetchFailureReason: null,\n    fetchMeta: null,\n    isInvalidated: false,\n    status: hasData ? \"success\" : \"pending\",\n    fetchStatus: \"idle\"\n  };\n}\nexport {\n  Query,\n  fetchState\n};\n//# sourceMappingURL=query.js.map","// src/queryCache.ts\nimport { hashQueryKeyByOptions, matchQuery } from \"./utils.js\";\nimport { Query } from \"./query.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar QueryCache = class extends Subscribable {\n  constructor(config = {}) {\n    super();\n    this.config = config;\n    this.#queries = /* @__PURE__ */ new Map();\n  }\n  #queries;\n  build(client, options, state) {\n    const queryKey = options.queryKey;\n    const queryHash = options.queryHash ?? hashQueryKeyByOptions(queryKey, options);\n    let query = this.get(queryHash);\n    if (!query) {\n      query = new Query({\n        cache: this,\n        queryKey,\n        queryHash,\n        options: client.defaultQueryOptions(options),\n        state,\n        defaultOptions: client.getQueryDefaults(queryKey)\n      });\n      this.add(query);\n    }\n    return query;\n  }\n  add(query) {\n    if (!this.#queries.has(query.queryHash)) {\n      this.#queries.set(query.queryHash, query);\n      this.notify({\n        type: \"added\",\n        query\n      });\n    }\n  }\n  remove(query) {\n    const queryInMap = this.#queries.get(query.queryHash);\n    if (queryInMap) {\n      query.destroy();\n      if (queryInMap === query) {\n        this.#queries.delete(query.queryHash);\n      }\n      this.notify({ type: \"removed\", query });\n    }\n  }\n  clear() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        this.remove(query);\n      });\n    });\n  }\n  get(queryHash) {\n    return this.#queries.get(queryHash);\n  }\n  getAll() {\n    return [...this.#queries.values()];\n  }\n  find(filters) {\n    const defaultedFilters = { exact: true, ...filters };\n    return this.getAll().find(\n      (query) => matchQuery(defaultedFilters, query)\n    );\n  }\n  findAll(filters = {}) {\n    const queries = this.getAll();\n    return Object.keys(filters).length > 0 ? queries.filter((query) => matchQuery(filters, query)) : queries;\n  }\n  notify(event) {\n    notifyManager.batch(() => {\n      this.listeners.forEach((listener) => {\n        listener(event);\n      });\n    });\n  }\n  onFocus() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        query.onFocus();\n      });\n    });\n  }\n  onOnline() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((query) => {\n        query.onOnline();\n      });\n    });\n  }\n};\nexport {\n  QueryCache\n};\n//# sourceMappingURL=queryCache.js.map","// src/mutation.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Removable } from \"./removable.js\";\nimport { createRetryer } from \"./retryer.js\";\nvar Mutation = class extends Removable {\n  #observers;\n  #mutationCache;\n  #retryer;\n  constructor(config) {\n    super();\n    this.mutationId = config.mutationId;\n    this.#mutationCache = config.mutationCache;\n    this.#observers = [];\n    this.state = config.state || getDefaultState();\n    this.setOptions(config.options);\n    this.scheduleGc();\n  }\n  setOptions(options) {\n    this.options = options;\n    this.updateGcTime(this.options.gcTime);\n  }\n  get meta() {\n    return this.options.meta;\n  }\n  addObserver(observer) {\n    if (!this.#observers.includes(observer)) {\n      this.#observers.push(observer);\n      this.clearGcTimeout();\n      this.#mutationCache.notify({\n        type: \"observerAdded\",\n        mutation: this,\n        observer\n      });\n    }\n  }\n  removeObserver(observer) {\n    this.#observers = this.#observers.filter((x) => x !== observer);\n    this.scheduleGc();\n    this.#mutationCache.notify({\n      type: \"observerRemoved\",\n      mutation: this,\n      observer\n    });\n  }\n  optionalRemove() {\n    if (!this.#observers.length) {\n      if (this.state.status === \"pending\") {\n        this.scheduleGc();\n      } else {\n        this.#mutationCache.remove(this);\n      }\n    }\n  }\n  continue() {\n    return this.#retryer?.continue() ?? // continuing a mutation assumes that variables are set, mutation must have been dehydrated before\n    this.execute(this.state.variables);\n  }\n  async execute(variables) {\n    this.#retryer = createRetryer({\n      fn: () => {\n        if (!this.options.mutationFn) {\n          return Promise.reject(new Error(\"No mutationFn found\"));\n        }\n        return this.options.mutationFn(variables);\n      },\n      onFail: (failureCount, error) => {\n        this.#dispatch({ type: \"failed\", failureCount, error });\n      },\n      onPause: () => {\n        this.#dispatch({ type: \"pause\" });\n      },\n      onContinue: () => {\n        this.#dispatch({ type: \"continue\" });\n      },\n      retry: this.options.retry ?? 0,\n      retryDelay: this.options.retryDelay,\n      networkMode: this.options.networkMode,\n      canRun: () => this.#mutationCache.canRun(this)\n    });\n    const restored = this.state.status === \"pending\";\n    const isPaused = !this.#retryer.canStart();\n    try {\n      if (!restored) {\n        this.#dispatch({ type: \"pending\", variables, isPaused });\n        await this.#mutationCache.config.onMutate?.(\n          variables,\n          this\n        );\n        const context = await this.options.onMutate?.(variables);\n        if (context !== this.state.context) {\n          this.#dispatch({\n            type: \"pending\",\n            context,\n            variables,\n            isPaused\n          });\n        }\n      }\n      const data = await this.#retryer.start();\n      await this.#mutationCache.config.onSuccess?.(\n        data,\n        variables,\n        this.state.context,\n        this\n      );\n      await this.options.onSuccess?.(data, variables, this.state.context);\n      await this.#mutationCache.config.onSettled?.(\n        data,\n        null,\n        this.state.variables,\n        this.state.context,\n        this\n      );\n      await this.options.onSettled?.(data, null, variables, this.state.context);\n      this.#dispatch({ type: \"success\", data });\n      return data;\n    } catch (error) {\n      try {\n        await this.#mutationCache.config.onError?.(\n          error,\n          variables,\n          this.state.context,\n          this\n        );\n        await this.options.onError?.(\n          error,\n          variables,\n          this.state.context\n        );\n        await this.#mutationCache.config.onSettled?.(\n          void 0,\n          error,\n          this.state.variables,\n          this.state.context,\n          this\n        );\n        await this.options.onSettled?.(\n          void 0,\n          error,\n          variables,\n          this.state.context\n        );\n        throw error;\n      } finally {\n        this.#dispatch({ type: \"error\", error });\n      }\n    } finally {\n      this.#mutationCache.runNext(this);\n    }\n  }\n  #dispatch(action) {\n    const reducer = (state) => {\n      switch (action.type) {\n        case \"failed\":\n          return {\n            ...state,\n            failureCount: action.failureCount,\n            failureReason: action.error\n          };\n        case \"pause\":\n          return {\n            ...state,\n            isPaused: true\n          };\n        case \"continue\":\n          return {\n            ...state,\n            isPaused: false\n          };\n        case \"pending\":\n          return {\n            ...state,\n            context: action.context,\n            data: void 0,\n            failureCount: 0,\n            failureReason: null,\n            error: null,\n            isPaused: action.isPaused,\n            status: \"pending\",\n            variables: action.variables,\n            submittedAt: Date.now()\n          };\n        case \"success\":\n          return {\n            ...state,\n            data: action.data,\n            failureCount: 0,\n            failureReason: null,\n            error: null,\n            status: \"success\",\n            isPaused: false\n          };\n        case \"error\":\n          return {\n            ...state,\n            data: void 0,\n            error: action.error,\n            failureCount: state.failureCount + 1,\n            failureReason: action.error,\n            isPaused: false,\n            status: \"error\"\n          };\n      }\n    };\n    this.state = reducer(this.state);\n    notifyManager.batch(() => {\n      this.#observers.forEach((observer) => {\n        observer.onMutationUpdate(action);\n      });\n      this.#mutationCache.notify({\n        mutation: this,\n        type: \"updated\",\n        action\n      });\n    });\n  }\n};\nfunction getDefaultState() {\n  return {\n    context: void 0,\n    data: void 0,\n    error: null,\n    failureCount: 0,\n    failureReason: null,\n    isPaused: false,\n    status: \"idle\",\n    variables: void 0,\n    submittedAt: 0\n  };\n}\nexport {\n  Mutation,\n  getDefaultState\n};\n//# sourceMappingURL=mutation.js.map","// src/mutationCache.ts\nimport { notifyManager } from \"./notifyManager.js\";\nimport { Mutation } from \"./mutation.js\";\nimport { matchMutation, noop } from \"./utils.js\";\nimport { Subscribable } from \"./subscribable.js\";\nvar MutationCache = class extends Subscribable {\n  constructor(config = {}) {\n    super();\n    this.config = config;\n    this.#mutations = /* @__PURE__ */ new Map();\n    this.#mutationId = Date.now();\n  }\n  #mutations;\n  #mutationId;\n  build(client, options, state) {\n    const mutation = new Mutation({\n      mutationCache: this,\n      mutationId: ++this.#mutationId,\n      options: client.defaultMutationOptions(options),\n      state\n    });\n    this.add(mutation);\n    return mutation;\n  }\n  add(mutation) {\n    const scope = scopeFor(mutation);\n    const mutations = this.#mutations.get(scope) ?? [];\n    mutations.push(mutation);\n    this.#mutations.set(scope, mutations);\n    this.notify({ type: \"added\", mutation });\n  }\n  remove(mutation) {\n    const scope = scopeFor(mutation);\n    if (this.#mutations.has(scope)) {\n      const mutations = this.#mutations.get(scope)?.filter((x) => x !== mutation);\n      if (mutations) {\n        if (mutations.length === 0) {\n          this.#mutations.delete(scope);\n        } else {\n          this.#mutations.set(scope, mutations);\n        }\n      }\n    }\n    this.notify({ type: \"removed\", mutation });\n  }\n  canRun(mutation) {\n    const firstPendingMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m.state.status === \"pending\");\n    return !firstPendingMutation || firstPendingMutation === mutation;\n  }\n  runNext(mutation) {\n    const foundMutation = this.#mutations.get(scopeFor(mutation))?.find((m) => m !== mutation && m.state.isPaused);\n    return foundMutation?.continue() ?? Promise.resolve();\n  }\n  clear() {\n    notifyManager.batch(() => {\n      this.getAll().forEach((mutation) => {\n        this.remove(mutation);\n      });\n    });\n  }\n  getAll() {\n    return [...this.#mutations.values()].flat();\n  }\n  find(filters) {\n    const defaultedFilters = { exact: true, ...filters };\n    return this.getAll().find(\n      (mutation) => matchMutation(defaultedFilters, mutation)\n    );\n  }\n  findAll(filters = {}) {\n    return this.getAll().filter((mutation) => matchMutation(filters, mutation));\n  }\n  notify(event) {\n    notifyManager.batch(() => {\n      this.listeners.forEach((listener) => {\n        listener(event);\n      });\n    });\n  }\n  resumePausedMutations() {\n    const pausedMutations = this.getAll().filter((x) => x.state.isPaused);\n    return notifyManager.batch(\n      () => Promise.all(\n        pausedMutations.map((mutation) => mutation.continue().catch(noop))\n      )\n    );\n  }\n};\nfunction scopeFor(mutation) {\n  return mutation.options.scope?.id ?? String(mutation.mutationId);\n}\nexport {\n  MutationCache\n};\n//# sourceMappingURL=mutationCache.js.map","// src/infiniteQueryBehavior.ts\nimport { addToEnd, addToStart, ensureQueryFn } from \"./utils.js\";\nfunction infiniteQueryBehavior(pages) {\n  return {\n    onFetch: (context, query) => {\n      const options = context.options;\n      const direction = context.fetchOptions?.meta?.fetchMore?.direction;\n      const oldPages = context.state.data?.pages || [];\n      const oldPageParams = context.state.data?.pageParams || [];\n      let result = { pages: [], pageParams: [] };\n      let currentPage = 0;\n      const fetchFn = async () => {\n        let cancelled = false;\n        const addSignalProperty = (object) => {\n          Object.defineProperty(object, \"signal\", {\n            enumerable: true,\n            get: () => {\n              if (context.signal.aborted) {\n                cancelled = true;\n              } else {\n                context.signal.addEventListener(\"abort\", () => {\n                  cancelled = true;\n                });\n              }\n              return context.signal;\n            }\n          });\n        };\n        const queryFn = ensureQueryFn(context.options, context.fetchOptions);\n        const fetchPage = async (data, param, previous) => {\n          if (cancelled) {\n            return Promise.reject();\n          }\n          if (param == null && data.pages.length) {\n            return Promise.resolve(data);\n          }\n          const queryFnContext = {\n            queryKey: context.queryKey,\n            pageParam: param,\n            direction: previous ? \"backward\" : \"forward\",\n            meta: context.options.meta\n          };\n          addSignalProperty(queryFnContext);\n          const page = await queryFn(\n            queryFnContext\n          );\n          const { maxPages } = context.options;\n          const addTo = previous ? addToStart : addToEnd;\n          return {\n            pages: addTo(data.pages, page, maxPages),\n            pageParams: addTo(data.pageParams, param, maxPages)\n          };\n        };\n        if (direction && oldPages.length) {\n          const previous = direction === \"backward\";\n          const pageParamFn = previous ? getPreviousPageParam : getNextPageParam;\n          const oldData = {\n            pages: oldPages,\n            pageParams: oldPageParams\n          };\n          const param = pageParamFn(options, oldData);\n          result = await fetchPage(oldData, param, previous);\n        } else {\n          const remainingPages = pages ?? oldPages.length;\n          do {\n            const param = currentPage === 0 ? oldPageParams[0] ?? options.initialPageParam : getNextPageParam(options, result);\n            if (currentPage > 0 && param == null) {\n              break;\n            }\n            result = await fetchPage(result, param);\n            currentPage++;\n          } while (currentPage < remainingPages);\n        }\n        return result;\n      };\n      if (context.options.persister) {\n        context.fetchFn = () => {\n          return context.options.persister?.(\n            fetchFn,\n            {\n              queryKey: context.queryKey,\n              meta: context.options.meta,\n              signal: context.signal\n            },\n            query\n          );\n        };\n      } else {\n        context.fetchFn = fetchFn;\n      }\n    }\n  };\n}\nfunction getNextPageParam(options, { pages, pageParams }) {\n  const lastIndex = pages.length - 1;\n  return pages.length > 0 ? options.getNextPageParam(\n    pages[lastIndex],\n    pages,\n    pageParams[lastIndex],\n    pageParams\n  ) : void 0;\n}\nfunction getPreviousPageParam(options, { pages, pageParams }) {\n  return pages.length > 0 ? options.getPreviousPageParam?.(pages[0], pages, pageParams[0], pageParams) : void 0;\n}\nfunction hasNextPage(options, data) {\n  if (!data)\n    return false;\n  return getNextPageParam(options, data) != null;\n}\nfunction hasPreviousPage(options, data) {\n  if (!data || !options.getPreviousPageParam)\n    return false;\n  return getPreviousPageParam(options, data) != null;\n}\nexport {\n  hasNextPage,\n  hasPreviousPage,\n  infiniteQueryBehavior\n};\n//# sourceMappingURL=infiniteQueryBehavior.js.map","// src/queryClient.ts\nimport {\n  functionalUpdate,\n  hashKey,\n  hashQueryKeyByOptions,\n  noop,\n  partialMatchKey,\n  resolveStaleTime,\n  skipToken\n} from \"./utils.js\";\nimport { QueryCache } from \"./queryCache.js\";\nimport { MutationCache } from \"./mutationCache.js\";\nimport { focusManager } from \"./focusManager.js\";\nimport { onlineManager } from \"./onlineManager.js\";\nimport { notifyManager } from \"./notifyManager.js\";\nimport { infiniteQueryBehavior } from \"./infiniteQueryBehavior.js\";\nvar QueryClient = class {\n  #queryCache;\n  #mutationCache;\n  #defaultOptions;\n  #queryDefaults;\n  #mutationDefaults;\n  #mountCount;\n  #unsubscribeFocus;\n  #unsubscribeOnline;\n  constructor(config = {}) {\n    this.#queryCache = config.queryCache || new QueryCache();\n    this.#mutationCache = config.mutationCache || new MutationCache();\n    this.#defaultOptions = config.defaultOptions || {};\n    this.#queryDefaults = /* @__PURE__ */ new Map();\n    this.#mutationDefaults = /* @__PURE__ */ new Map();\n    this.#mountCount = 0;\n  }\n  mount() {\n    this.#mountCount++;\n    if (this.#mountCount !== 1)\n      return;\n    this.#unsubscribeFocus = focusManager.subscribe(async (focused) => {\n      if (focused) {\n        await this.resumePausedMutations();\n        this.#queryCache.onFocus();\n      }\n    });\n    this.#unsubscribeOnline = onlineManager.subscribe(async (online) => {\n      if (online) {\n        await this.resumePausedMutations();\n        this.#queryCache.onOnline();\n      }\n    });\n  }\n  unmount() {\n    this.#mountCount--;\n    if (this.#mountCount !== 0)\n      return;\n    this.#unsubscribeFocus?.();\n    this.#unsubscribeFocus = void 0;\n    this.#unsubscribeOnline?.();\n    this.#unsubscribeOnline = void 0;\n  }\n  isFetching(filters) {\n    return this.#queryCache.findAll({ ...filters, fetchStatus: \"fetching\" }).length;\n  }\n  isMutating(filters) {\n    return this.#mutationCache.findAll({ ...filters, status: \"pending\" }).length;\n  }\n  getQueryData(queryKey) {\n    const options = this.defaultQueryOptions({ queryKey });\n    return this.#queryCache.get(options.queryHash)?.state.data;\n  }\n  ensureQueryData(options) {\n    const cachedData = this.getQueryData(options.queryKey);\n    if (cachedData === void 0)\n      return this.fetchQuery(options);\n    else {\n      const defaultedOptions = this.defaultQueryOptions(options);\n      const query = this.#queryCache.build(this, defaultedOptions);\n      if (options.revalidateIfStale && query.isStaleByTime(resolveStaleTime(defaultedOptions.staleTime, query))) {\n        void this.prefetchQuery(defaultedOptions);\n      }\n      return Promise.resolve(cachedData);\n    }\n  }\n  getQueriesData(filters) {\n    return this.#queryCache.findAll(filters).map(({ queryKey, state }) => {\n      const data = state.data;\n      return [queryKey, data];\n    });\n  }\n  setQueryData(queryKey, updater, options) {\n    const defaultedOptions = this.defaultQueryOptions({ queryKey });\n    const query = this.#queryCache.get(\n      defaultedOptions.queryHash\n    );\n    const prevData = query?.state.data;\n    const data = functionalUpdate(updater, prevData);\n    if (data === void 0) {\n      return void 0;\n    }\n    return this.#queryCache.build(this, defaultedOptions).setData(data, { ...options, manual: true });\n  }\n  setQueriesData(filters, updater, options) {\n    return notifyManager.batch(\n      () => this.#queryCache.findAll(filters).map(({ queryKey }) => [\n        queryKey,\n        this.setQueryData(queryKey, updater, options)\n      ])\n    );\n  }\n  getQueryState(queryKey) {\n    const options = this.defaultQueryOptions({ queryKey });\n    return this.#queryCache.get(options.queryHash)?.state;\n  }\n  removeQueries(filters) {\n    const queryCache = this.#queryCache;\n    notifyManager.batch(() => {\n      queryCache.findAll(filters).forEach((query) => {\n        queryCache.remove(query);\n      });\n    });\n  }\n  resetQueries(filters, options) {\n    const queryCache = this.#queryCache;\n    const refetchFilters = {\n      type: \"active\",\n      ...filters\n    };\n    return notifyManager.batch(() => {\n      queryCache.findAll(filters).forEach((query) => {\n        query.reset();\n      });\n      return this.refetchQueries(refetchFilters, options);\n    });\n  }\n  cancelQueries(filters = {}, cancelOptions = {}) {\n    const defaultedCancelOptions = { revert: true, ...cancelOptions };\n    const promises = notifyManager.batch(\n      () => this.#queryCache.findAll(filters).map((query) => query.cancel(defaultedCancelOptions))\n    );\n    return Promise.all(promises).then(noop).catch(noop);\n  }\n  invalidateQueries(filters = {}, options = {}) {\n    return notifyManager.batch(() => {\n      this.#queryCache.findAll(filters).forEach((query) => {\n        query.invalidate();\n      });\n      if (filters.refetchType === \"none\") {\n        return Promise.resolve();\n      }\n      const refetchFilters = {\n        ...filters,\n        type: filters.refetchType ?? filters.type ?? \"active\"\n      };\n      return this.refetchQueries(refetchFilters, options);\n    });\n  }\n  refetchQueries(filters = {}, options) {\n    const fetchOptions = {\n      ...options,\n      cancelRefetch: options?.cancelRefetch ?? true\n    };\n    const promises = notifyManager.batch(\n      () => this.#queryCache.findAll(filters).filter((query) => !query.isDisabled()).map((query) => {\n        let promise = query.fetch(void 0, fetchOptions);\n        if (!fetchOptions.throwOnError) {\n          promise = promise.catch(noop);\n        }\n        return query.state.fetchStatus === \"paused\" ? Promise.resolve() : promise;\n      })\n    );\n    return Promise.all(promises).then(noop);\n  }\n  fetchQuery(options) {\n    const defaultedOptions = this.defaultQueryOptions(options);\n    if (defaultedOptions.retry === void 0) {\n      defaultedOptions.retry = false;\n    }\n    const query = this.#queryCache.build(this, defaultedOptions);\n    return query.isStaleByTime(\n      resolveStaleTime(defaultedOptions.staleTime, query)\n    ) ? query.fetch(defaultedOptions) : Promise.resolve(query.state.data);\n  }\n  prefetchQuery(options) {\n    return this.fetchQuery(options).then(noop).catch(noop);\n  }\n  fetchInfiniteQuery(options) {\n    options.behavior = infiniteQueryBehavior(options.pages);\n    return this.fetchQuery(options);\n  }\n  prefetchInfiniteQuery(options) {\n    return this.fetchInfiniteQuery(options).then(noop).catch(noop);\n  }\n  ensureInfiniteQueryData(options) {\n    options.behavior = infiniteQueryBehavior(options.pages);\n    return this.ensureQueryData(options);\n  }\n  resumePausedMutations() {\n    if (onlineManager.isOnline()) {\n      return this.#mutationCache.resumePausedMutations();\n    }\n    return Promise.resolve();\n  }\n  getQueryCache() {\n    return this.#queryCache;\n  }\n  getMutationCache() {\n    return this.#mutationCache;\n  }\n  getDefaultOptions() {\n    return this.#defaultOptions;\n  }\n  setDefaultOptions(options) {\n    this.#defaultOptions = options;\n  }\n  setQueryDefaults(queryKey, options) {\n    this.#queryDefaults.set(hashKey(queryKey), {\n      queryKey,\n      defaultOptions: options\n    });\n  }\n  getQueryDefaults(queryKey) {\n    const defaults = [...this.#queryDefaults.values()];\n    let result = {};\n    defaults.forEach((queryDefault) => {\n      if (partialMatchKey(queryKey, queryDefault.queryKey)) {\n        result = { ...result, ...queryDefault.defaultOptions };\n      }\n    });\n    return result;\n  }\n  setMutationDefaults(mutationKey, options) {\n    this.#mutationDefaults.set(hashKey(mutationKey), {\n      mutationKey,\n      defaultOptions: options\n    });\n  }\n  getMutationDefaults(mutationKey) {\n    const defaults = [...this.#mutationDefaults.values()];\n    let result = {};\n    defaults.forEach((queryDefault) => {\n      if (partialMatchKey(mutationKey, queryDefault.mutationKey)) {\n        result = { ...result, ...queryDefault.defaultOptions };\n      }\n    });\n    return result;\n  }\n  defaultQueryOptions(options) {\n    if (options._defaulted) {\n      return options;\n    }\n    const defaultedOptions = {\n      ...this.#defaultOptions.queries,\n      ...this.getQueryDefaults(options.queryKey),\n      ...options,\n      _defaulted: true\n    };\n    if (!defaultedOptions.queryHash) {\n      defaultedOptions.queryHash = hashQueryKeyByOptions(\n        defaultedOptions.queryKey,\n        defaultedOptions\n      );\n    }\n    if (defaultedOptions.refetchOnReconnect === void 0) {\n      defaultedOptions.refetchOnReconnect = defaultedOptions.networkMode !== \"always\";\n    }\n    if (defaultedOptions.throwOnError === void 0) {\n      defaultedOptions.throwOnError = !!defaultedOptions.suspense;\n    }\n    if (!defaultedOptions.networkMode && defaultedOptions.persister) {\n      defaultedOptions.networkMode = \"offlineFirst\";\n    }\n    if (defaultedOptions.enabled !== true && defaultedOptions.queryFn === skipToken) {\n      defaultedOptions.enabled = false;\n    }\n    return defaultedOptions;\n  }\n  defaultMutationOptions(options) {\n    if (options?._defaulted) {\n      return options;\n    }\n    return {\n      ...this.#defaultOptions.mutations,\n      ...options?.mutationKey && this.getMutationDefaults(options.mutationKey),\n      ...options,\n      _defaulted: true\n    };\n  }\n  clear() {\n    this.#queryCache.clear();\n    this.#mutationCache.clear();\n  }\n};\nexport {\n  QueryClient\n};\n//# sourceMappingURL=queryClient.js.map","\"use client\";\n\n// src/QueryClientProvider.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar QueryClientContext = React.createContext(\n  void 0\n);\nvar useQueryClient = (queryClient) => {\n  const client = React.useContext(QueryClientContext);\n  if (queryClient) {\n    return queryClient;\n  }\n  if (!client) {\n    throw new Error(\"No QueryClient set, use QueryClientProvider to set one\");\n  }\n  return client;\n};\nvar QueryClientProvider = ({\n  client,\n  children\n}) => {\n  React.useEffect(() => {\n    client.mount();\n    return () => {\n      client.unmount();\n    };\n  }, [client]);\n  return /* @__PURE__ */ jsx(QueryClientContext.Provider, { value: client, children });\n};\nexport {\n  QueryClientContext,\n  QueryClientProvider,\n  useQueryClient\n};\n//# sourceMappingURL=QueryClientProvider.js.map","/**\n * @remix-run/router v1.19.2\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\n\n////////////////////////////////////////////////////////////////////////////////\n//#region Types and Constants\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Actions represent the type of change to a location value.\n */\nvar Action;\n(function (Action) {\n  /**\n   * A POP indicates a change to an arbitrary index in the history stack, such\n   * as a back or forward navigation. It does not describe the direction of the\n   * navigation, only that the current index changed.\n   *\n   * Note: This is the default action for newly created history objects.\n   */\n  Action[\"Pop\"] = \"POP\";\n  /**\n   * A PUSH indicates a new entry being added to the history stack, such as when\n   * a link is clicked and a new page loads. When this happens, all subsequent\n   * entries in the stack are lost.\n   */\n  Action[\"Push\"] = \"PUSH\";\n  /**\n   * A REPLACE indicates the entry at the current index in the history stack\n   * being replaced by a new one.\n   */\n  Action[\"Replace\"] = \"REPLACE\";\n})(Action || (Action = {}));\nconst PopStateEventType = \"popstate\";\n/**\n * Memory history stores the current location in memory. It is designed for use\n * in stateful non-browser environments like tests and React Native.\n */\nfunction createMemoryHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  let {\n    initialEntries = [\"/\"],\n    initialIndex,\n    v5Compat = false\n  } = options;\n  let entries; // Declare so we can access from createMemoryLocation\n  entries = initialEntries.map((entry, index) => createMemoryLocation(entry, typeof entry === \"string\" ? null : entry.state, index === 0 ? \"default\" : undefined));\n  let index = clampIndex(initialIndex == null ? entries.length - 1 : initialIndex);\n  let action = Action.Pop;\n  let listener = null;\n  function clampIndex(n) {\n    return Math.min(Math.max(n, 0), entries.length - 1);\n  }\n  function getCurrentLocation() {\n    return entries[index];\n  }\n  function createMemoryLocation(to, state, key) {\n    if (state === void 0) {\n      state = null;\n    }\n    let location = createLocation(entries ? getCurrentLocation().pathname : \"/\", to, state, key);\n    warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in memory history: \" + JSON.stringify(to));\n    return location;\n  }\n  function createHref(to) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n  let history = {\n    get index() {\n      return index;\n    },\n    get action() {\n      return action;\n    },\n    get location() {\n      return getCurrentLocation();\n    },\n    createHref,\n    createURL(to) {\n      return new URL(createHref(to), \"http://localhost\");\n    },\n    encodeLocation(to) {\n      let path = typeof to === \"string\" ? parsePath(to) : to;\n      return {\n        pathname: path.pathname || \"\",\n        search: path.search || \"\",\n        hash: path.hash || \"\"\n      };\n    },\n    push(to, state) {\n      action = Action.Push;\n      let nextLocation = createMemoryLocation(to, state);\n      index += 1;\n      entries.splice(index, entries.length, nextLocation);\n      if (v5Compat && listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta: 1\n        });\n      }\n    },\n    replace(to, state) {\n      action = Action.Replace;\n      let nextLocation = createMemoryLocation(to, state);\n      entries[index] = nextLocation;\n      if (v5Compat && listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta: 0\n        });\n      }\n    },\n    go(delta) {\n      action = Action.Pop;\n      let nextIndex = clampIndex(index + delta);\n      let nextLocation = entries[nextIndex];\n      index = nextIndex;\n      if (listener) {\n        listener({\n          action,\n          location: nextLocation,\n          delta\n        });\n      }\n    },\n    listen(fn) {\n      listener = fn;\n      return () => {\n        listener = null;\n      };\n    }\n  };\n  return history;\n}\n/**\n * Browser history stores the location in regular URLs. This is the standard for\n * most web apps, but it requires some configuration on the server to ensure you\n * serve the same app at multiple URLs.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createbrowserhistory\n */\nfunction createBrowserHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  function createBrowserLocation(window, globalHistory) {\n    let {\n      pathname,\n      search,\n      hash\n    } = window.location;\n    return createLocation(\"\", {\n      pathname,\n      search,\n      hash\n    },\n    // state defaults to `null` because `window.history.state` does\n    globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n  }\n  function createBrowserHref(window, to) {\n    return typeof to === \"string\" ? to : createPath(to);\n  }\n  return getUrlBasedHistory(createBrowserLocation, createBrowserHref, null, options);\n}\n/**\n * Hash history stores the location in window.location.hash. This makes it ideal\n * for situations where you don't want to send the location to the server for\n * some reason, either because you do cannot configure it or the URL space is\n * reserved for something else.\n *\n * @see https://github.com/remix-run/history/tree/main/docs/api-reference.md#createhashhistory\n */\nfunction createHashHistory(options) {\n  if (options === void 0) {\n    options = {};\n  }\n  function createHashLocation(window, globalHistory) {\n    let {\n      pathname = \"/\",\n      search = \"\",\n      hash = \"\"\n    } = parsePath(window.location.hash.substr(1));\n    // Hash URL should always have a leading / just like window.location.pathname\n    // does, so if an app ends up at a route like /#something then we add a\n    // leading slash so all of our path-matching behaves the same as if it would\n    // in a browser router.  This is particularly important when there exists a\n    // root splat route (<Route path=\"*\">) since that matches internally against\n    // \"/*\" and we'd expect /#something to 404 in a hash router app.\n    if (!pathname.startsWith(\"/\") && !pathname.startsWith(\".\")) {\n      pathname = \"/\" + pathname;\n    }\n    return createLocation(\"\", {\n      pathname,\n      search,\n      hash\n    },\n    // state defaults to `null` because `window.history.state` does\n    globalHistory.state && globalHistory.state.usr || null, globalHistory.state && globalHistory.state.key || \"default\");\n  }\n  function createHashHref(window, to) {\n    let base = window.document.querySelector(\"base\");\n    let href = \"\";\n    if (base && base.getAttribute(\"href\")) {\n      let url = window.location.href;\n      let hashIndex = url.indexOf(\"#\");\n      href = hashIndex === -1 ? url : url.slice(0, hashIndex);\n    }\n    return href + \"#\" + (typeof to === \"string\" ? to : createPath(to));\n  }\n  function validateHashLocation(location, to) {\n    warning(location.pathname.charAt(0) === \"/\", \"relative pathnames are not supported in hash history.push(\" + JSON.stringify(to) + \")\");\n  }\n  return getUrlBasedHistory(createHashLocation, createHashHref, validateHashLocation, options);\n}\nfunction invariant(value, message) {\n  if (value === false || value === null || typeof value === \"undefined\") {\n    throw new Error(message);\n  }\n}\nfunction warning(cond, message) {\n  if (!cond) {\n    // eslint-disable-next-line no-console\n    if (typeof console !== \"undefined\") console.warn(message);\n    try {\n      // Welcome to debugging history!\n      //\n      // This error is thrown as a convenience, so you can more easily\n      // find the source for a warning that appears in the console by\n      // enabling \"pause on exceptions\" in your JavaScript debugger.\n      throw new Error(message);\n      // eslint-disable-next-line no-empty\n    } catch (e) {}\n  }\n}\nfunction createKey() {\n  return Math.random().toString(36).substr(2, 8);\n}\n/**\n * For browser-based histories, we combine the state and key into an object\n */\nfunction getHistoryState(location, index) {\n  return {\n    usr: location.state,\n    key: location.key,\n    idx: index\n  };\n}\n/**\n * Creates a Location object with a unique key from the given Path\n */\nfunction createLocation(current, to, state, key) {\n  if (state === void 0) {\n    state = null;\n  }\n  let location = _extends({\n    pathname: typeof current === \"string\" ? current : current.pathname,\n    search: \"\",\n    hash: \"\"\n  }, typeof to === \"string\" ? parsePath(to) : to, {\n    state,\n    // TODO: This could be cleaned up.  push/replace should probably just take\n    // full Locations now and avoid the need to run through this flow at all\n    // But that's a pretty big refactor to the current test suite so going to\n    // keep as is for the time being and just let any incoming keys take precedence\n    key: to && to.key || key || createKey()\n  });\n  return location;\n}\n/**\n * Creates a string URL path from the given pathname, search, and hash components.\n */\nfunction createPath(_ref) {\n  let {\n    pathname = \"/\",\n    search = \"\",\n    hash = \"\"\n  } = _ref;\n  if (search && search !== \"?\") pathname += search.charAt(0) === \"?\" ? search : \"?\" + search;\n  if (hash && hash !== \"#\") pathname += hash.charAt(0) === \"#\" ? hash : \"#\" + hash;\n  return pathname;\n}\n/**\n * Parses a string URL path into its separate pathname, search, and hash components.\n */\nfunction parsePath(path) {\n  let parsedPath = {};\n  if (path) {\n    let hashIndex = path.indexOf(\"#\");\n    if (hashIndex >= 0) {\n      parsedPath.hash = path.substr(hashIndex);\n      path = path.substr(0, hashIndex);\n    }\n    let searchIndex = path.indexOf(\"?\");\n    if (searchIndex >= 0) {\n      parsedPath.search = path.substr(searchIndex);\n      path = path.substr(0, searchIndex);\n    }\n    if (path) {\n      parsedPath.pathname = path;\n    }\n  }\n  return parsedPath;\n}\nfunction getUrlBasedHistory(getLocation, createHref, validateLocation, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  let {\n    window = document.defaultView,\n    v5Compat = false\n  } = options;\n  let globalHistory = window.history;\n  let action = Action.Pop;\n  let listener = null;\n  let index = getIndex();\n  // Index should only be null when we initialize. If not, it's because the\n  // user called history.pushState or history.replaceState directly, in which\n  // case we should log a warning as it will result in bugs.\n  if (index == null) {\n    index = 0;\n    globalHistory.replaceState(_extends({}, globalHistory.state, {\n      idx: index\n    }), \"\");\n  }\n  function getIndex() {\n    let state = globalHistory.state || {\n      idx: null\n    };\n    return state.idx;\n  }\n  function handlePop() {\n    action = Action.Pop;\n    let nextIndex = getIndex();\n    let delta = nextIndex == null ? null : nextIndex - index;\n    index = nextIndex;\n    if (listener) {\n      listener({\n        action,\n        location: history.location,\n        delta\n      });\n    }\n  }\n  function push(to, state) {\n    action = Action.Push;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n    index = getIndex() + 1;\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n    // try...catch because iOS limits us to 100 pushState calls :/\n    try {\n      globalHistory.pushState(historyState, \"\", url);\n    } catch (error) {\n      // If the exception is because `state` can't be serialized, let that throw\n      // outwards just like a replace call would so the dev knows the cause\n      // https://html.spec.whatwg.org/multipage/nav-history-apis.html#shared-history-push/replace-state-steps\n      // https://html.spec.whatwg.org/multipage/structured-data.html#structuredserializeinternal\n      if (error instanceof DOMException && error.name === \"DataCloneError\") {\n        throw error;\n      }\n      // They are going to lose state here, but there is no real\n      // way to warn them about it since the page will refresh...\n      window.location.assign(url);\n    }\n    if (v5Compat && listener) {\n      listener({\n        action,\n        location: history.location,\n        delta: 1\n      });\n    }\n  }\n  function replace(to, state) {\n    action = Action.Replace;\n    let location = createLocation(history.location, to, state);\n    if (validateLocation) validateLocation(location, to);\n    index = getIndex();\n    let historyState = getHistoryState(location, index);\n    let url = history.createHref(location);\n    globalHistory.replaceState(historyState, \"\", url);\n    if (v5Compat && listener) {\n      listener({\n        action,\n        location: history.location,\n        delta: 0\n      });\n    }\n  }\n  function createURL(to) {\n    // window.location.origin is \"null\" (the literal string value) in Firefox\n    // under certain conditions, notably when serving from a local HTML file\n    // See https://bugzilla.mozilla.org/show_bug.cgi?id=878297\n    let base = window.location.origin !== \"null\" ? window.location.origin : window.location.href;\n    let href = typeof to === \"string\" ? to : createPath(to);\n    // Treating this as a full URL will strip any trailing spaces so we need to\n    // pre-encode them since they might be part of a matching splat param from\n    // an ancestor route\n    href = href.replace(/ $/, \"%20\");\n    invariant(base, \"No window.location.(origin|href) available to create URL for href: \" + href);\n    return new URL(href, base);\n  }\n  let history = {\n    get action() {\n      return action;\n    },\n    get location() {\n      return getLocation(window, globalHistory);\n    },\n    listen(fn) {\n      if (listener) {\n        throw new Error(\"A history only accepts one active listener\");\n      }\n      window.addEventListener(PopStateEventType, handlePop);\n      listener = fn;\n      return () => {\n        window.removeEventListener(PopStateEventType, handlePop);\n        listener = null;\n      };\n    },\n    createHref(to) {\n      return createHref(window, to);\n    },\n    createURL,\n    encodeLocation(to) {\n      // Encode a Location the same way window.location would\n      let url = createURL(to);\n      return {\n        pathname: url.pathname,\n        search: url.search,\n        hash: url.hash\n      };\n    },\n    push,\n    replace,\n    go(n) {\n      return globalHistory.go(n);\n    }\n  };\n  return history;\n}\n//#endregion\n\nvar ResultType;\n(function (ResultType) {\n  ResultType[\"data\"] = \"data\";\n  ResultType[\"deferred\"] = \"deferred\";\n  ResultType[\"redirect\"] = \"redirect\";\n  ResultType[\"error\"] = \"error\";\n})(ResultType || (ResultType = {}));\nconst immutableRouteKeys = new Set([\"lazy\", \"caseSensitive\", \"path\", \"id\", \"index\", \"children\"]);\nfunction isIndexRoute(route) {\n  return route.index === true;\n}\n// Walk the route tree generating unique IDs where necessary, so we are working\n// solely with AgnosticDataRouteObject's within the Router\nfunction convertRoutesToDataRoutes(routes, mapRouteProperties, parentPath, manifest) {\n  if (parentPath === void 0) {\n    parentPath = [];\n  }\n  if (manifest === void 0) {\n    manifest = {};\n  }\n  return routes.map((route, index) => {\n    let treePath = [...parentPath, String(index)];\n    let id = typeof route.id === \"string\" ? route.id : treePath.join(\"-\");\n    invariant(route.index !== true || !route.children, \"Cannot specify children on an index route\");\n    invariant(!manifest[id], \"Found a route id collision on id \\\"\" + id + \"\\\".  Route \" + \"id's must be globally unique within Data Router usages\");\n    if (isIndexRoute(route)) {\n      let indexRoute = _extends({}, route, mapRouteProperties(route), {\n        id\n      });\n      manifest[id] = indexRoute;\n      return indexRoute;\n    } else {\n      let pathOrLayoutRoute = _extends({}, route, mapRouteProperties(route), {\n        id,\n        children: undefined\n      });\n      manifest[id] = pathOrLayoutRoute;\n      if (route.children) {\n        pathOrLayoutRoute.children = convertRoutesToDataRoutes(route.children, mapRouteProperties, treePath, manifest);\n      }\n      return pathOrLayoutRoute;\n    }\n  });\n}\n/**\n * Matches the given routes to a location and returns the match data.\n *\n * @see https://reactrouter.com/utils/match-routes\n */\nfunction matchRoutes(routes, locationArg, basename) {\n  if (basename === void 0) {\n    basename = \"/\";\n  }\n  return matchRoutesImpl(routes, locationArg, basename, false);\n}\nfunction matchRoutesImpl(routes, locationArg, basename, allowPartial) {\n  let location = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n  let pathname = stripBasename(location.pathname || \"/\", basename);\n  if (pathname == null) {\n    return null;\n  }\n  let branches = flattenRoutes(routes);\n  rankRouteBranches(branches);\n  let matches = null;\n  for (let i = 0; matches == null && i < branches.length; ++i) {\n    // Incoming pathnames are generally encoded from either window.location\n    // or from router.navigate, but we want to match against the unencoded\n    // paths in the route definitions.  Memory router locations won't be\n    // encoded here but there also shouldn't be anything to decode so this\n    // should be a safe operation.  This avoids needing matchRoutes to be\n    // history-aware.\n    let decoded = decodePath(pathname);\n    matches = matchRouteBranch(branches[i], decoded, allowPartial);\n  }\n  return matches;\n}\nfunction convertRouteMatchToUiMatch(match, loaderData) {\n  let {\n    route,\n    pathname,\n    params\n  } = match;\n  return {\n    id: route.id,\n    pathname,\n    params,\n    data: loaderData[route.id],\n    handle: route.handle\n  };\n}\nfunction flattenRoutes(routes, branches, parentsMeta, parentPath) {\n  if (branches === void 0) {\n    branches = [];\n  }\n  if (parentsMeta === void 0) {\n    parentsMeta = [];\n  }\n  if (parentPath === void 0) {\n    parentPath = \"\";\n  }\n  let flattenRoute = (route, index, relativePath) => {\n    let meta = {\n      relativePath: relativePath === undefined ? route.path || \"\" : relativePath,\n      caseSensitive: route.caseSensitive === true,\n      childrenIndex: index,\n      route\n    };\n    if (meta.relativePath.startsWith(\"/\")) {\n      invariant(meta.relativePath.startsWith(parentPath), \"Absolute route path \\\"\" + meta.relativePath + \"\\\" nested under path \" + (\"\\\"\" + parentPath + \"\\\" is not valid. An absolute child route path \") + \"must start with the combined path of all its parent routes.\");\n      meta.relativePath = meta.relativePath.slice(parentPath.length);\n    }\n    let path = joinPaths([parentPath, meta.relativePath]);\n    let routesMeta = parentsMeta.concat(meta);\n    // Add the children before adding this route to the array, so we traverse the\n    // route tree depth-first and child routes appear before their parents in\n    // the \"flattened\" version.\n    if (route.children && route.children.length > 0) {\n      invariant(\n      // Our types know better, but runtime JS may not!\n      // @ts-expect-error\n      route.index !== true, \"Index routes must not have child routes. Please remove \" + (\"all child routes from route path \\\"\" + path + \"\\\".\"));\n      flattenRoutes(route.children, branches, routesMeta, path);\n    }\n    // Routes without a path shouldn't ever match by themselves unless they are\n    // index routes, so don't add them to the list of possible branches.\n    if (route.path == null && !route.index) {\n      return;\n    }\n    branches.push({\n      path,\n      score: computeScore(path, route.index),\n      routesMeta\n    });\n  };\n  routes.forEach((route, index) => {\n    var _route$path;\n    // coarse-grain check for optional params\n    if (route.path === \"\" || !((_route$path = route.path) != null && _route$path.includes(\"?\"))) {\n      flattenRoute(route, index);\n    } else {\n      for (let exploded of explodeOptionalSegments(route.path)) {\n        flattenRoute(route, index, exploded);\n      }\n    }\n  });\n  return branches;\n}\n/**\n * Computes all combinations of optional path segments for a given path,\n * excluding combinations that are ambiguous and of lower priority.\n *\n * For example, `/one/:two?/three/:four?/:five?` explodes to:\n * - `/one/three`\n * - `/one/:two/three`\n * - `/one/three/:four`\n * - `/one/three/:five`\n * - `/one/:two/three/:four`\n * - `/one/:two/three/:five`\n * - `/one/three/:four/:five`\n * - `/one/:two/three/:four/:five`\n */\nfunction explodeOptionalSegments(path) {\n  let segments = path.split(\"/\");\n  if (segments.length === 0) return [];\n  let [first, ...rest] = segments;\n  // Optional path segments are denoted by a trailing `?`\n  let isOptional = first.endsWith(\"?\");\n  // Compute the corresponding required segment: `foo?` -> `foo`\n  let required = first.replace(/\\?$/, \"\");\n  if (rest.length === 0) {\n    // Intepret empty string as omitting an optional segment\n    // `[\"one\", \"\", \"three\"]` corresponds to omitting `:two` from `/one/:two?/three` -> `/one/three`\n    return isOptional ? [required, \"\"] : [required];\n  }\n  let restExploded = explodeOptionalSegments(rest.join(\"/\"));\n  let result = [];\n  // All child paths with the prefix.  Do this for all children before the\n  // optional version for all children, so we get consistent ordering where the\n  // parent optional aspect is preferred as required.  Otherwise, we can get\n  // child sections interspersed where deeper optional segments are higher than\n  // parent optional segments, where for example, /:two would explode _earlier_\n  // then /:one.  By always including the parent as required _for all children_\n  // first, we avoid this issue\n  result.push(...restExploded.map(subpath => subpath === \"\" ? required : [required, subpath].join(\"/\")));\n  // Then, if this is an optional value, add all child versions without\n  if (isOptional) {\n    result.push(...restExploded);\n  }\n  // for absolute paths, ensure `/` instead of empty segment\n  return result.map(exploded => path.startsWith(\"/\") && exploded === \"\" ? \"/\" : exploded);\n}\nfunction rankRouteBranches(branches) {\n  branches.sort((a, b) => a.score !== b.score ? b.score - a.score // Higher score first\n  : compareIndexes(a.routesMeta.map(meta => meta.childrenIndex), b.routesMeta.map(meta => meta.childrenIndex)));\n}\nconst paramRe = /^:[\\w-]+$/;\nconst dynamicSegmentValue = 3;\nconst indexRouteValue = 2;\nconst emptySegmentValue = 1;\nconst staticSegmentValue = 10;\nconst splatPenalty = -2;\nconst isSplat = s => s === \"*\";\nfunction computeScore(path, index) {\n  let segments = path.split(\"/\");\n  let initialScore = segments.length;\n  if (segments.some(isSplat)) {\n    initialScore += splatPenalty;\n  }\n  if (index) {\n    initialScore += indexRouteValue;\n  }\n  return segments.filter(s => !isSplat(s)).reduce((score, segment) => score + (paramRe.test(segment) ? dynamicSegmentValue : segment === \"\" ? emptySegmentValue : staticSegmentValue), initialScore);\n}\nfunction compareIndexes(a, b) {\n  let siblings = a.length === b.length && a.slice(0, -1).every((n, i) => n === b[i]);\n  return siblings ?\n  // If two routes are siblings, we should try to match the earlier sibling\n  // first. This allows people to have fine-grained control over the matching\n  // behavior by simply putting routes with identical paths in the order they\n  // want them tried.\n  a[a.length - 1] - b[b.length - 1] :\n  // Otherwise, it doesn't really make sense to rank non-siblings by index,\n  // so they sort equally.\n  0;\n}\nfunction matchRouteBranch(branch, pathname, allowPartial) {\n  if (allowPartial === void 0) {\n    allowPartial = false;\n  }\n  let {\n    routesMeta\n  } = branch;\n  let matchedParams = {};\n  let matchedPathname = \"/\";\n  let matches = [];\n  for (let i = 0; i < routesMeta.length; ++i) {\n    let meta = routesMeta[i];\n    let end = i === routesMeta.length - 1;\n    let remainingPathname = matchedPathname === \"/\" ? pathname : pathname.slice(matchedPathname.length) || \"/\";\n    let match = matchPath({\n      path: meta.relativePath,\n      caseSensitive: meta.caseSensitive,\n      end\n    }, remainingPathname);\n    let route = meta.route;\n    if (!match && end && allowPartial && !routesMeta[routesMeta.length - 1].route.index) {\n      match = matchPath({\n        path: meta.relativePath,\n        caseSensitive: meta.caseSensitive,\n        end: false\n      }, remainingPathname);\n    }\n    if (!match) {\n      return null;\n    }\n    Object.assign(matchedParams, match.params);\n    matches.push({\n      // TODO: Can this as be avoided?\n      params: matchedParams,\n      pathname: joinPaths([matchedPathname, match.pathname]),\n      pathnameBase: normalizePathname(joinPaths([matchedPathname, match.pathnameBase])),\n      route\n    });\n    if (match.pathnameBase !== \"/\") {\n      matchedPathname = joinPaths([matchedPathname, match.pathnameBase]);\n    }\n  }\n  return matches;\n}\n/**\n * Returns a path with params interpolated.\n *\n * @see https://reactrouter.com/utils/generate-path\n */\nfunction generatePath(originalPath, params) {\n  if (params === void 0) {\n    params = {};\n  }\n  let path = originalPath;\n  if (path.endsWith(\"*\") && path !== \"*\" && !path.endsWith(\"/*\")) {\n    warning(false, \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n    path = path.replace(/\\*$/, \"/*\");\n  }\n  // ensure `/` is added at the beginning if the path is absolute\n  const prefix = path.startsWith(\"/\") ? \"/\" : \"\";\n  const stringify = p => p == null ? \"\" : typeof p === \"string\" ? p : String(p);\n  const segments = path.split(/\\/+/).map((segment, index, array) => {\n    const isLastSegment = index === array.length - 1;\n    // only apply the splat if it's the last segment\n    if (isLastSegment && segment === \"*\") {\n      const star = \"*\";\n      // Apply the splat\n      return stringify(params[star]);\n    }\n    const keyMatch = segment.match(/^:([\\w-]+)(\\??)$/);\n    if (keyMatch) {\n      const [, key, optional] = keyMatch;\n      let param = params[key];\n      invariant(optional === \"?\" || param != null, \"Missing \\\":\" + key + \"\\\" param\");\n      return stringify(param);\n    }\n    // Remove any optional markers from optional static segments\n    return segment.replace(/\\?$/g, \"\");\n  })\n  // Remove empty segments\n  .filter(segment => !!segment);\n  return prefix + segments.join(\"/\");\n}\n/**\n * Performs pattern matching on a URL pathname and returns information about\n * the match.\n *\n * @see https://reactrouter.com/utils/match-path\n */\nfunction matchPath(pattern, pathname) {\n  if (typeof pattern === \"string\") {\n    pattern = {\n      path: pattern,\n      caseSensitive: false,\n      end: true\n    };\n  }\n  let [matcher, compiledParams] = compilePath(pattern.path, pattern.caseSensitive, pattern.end);\n  let match = pathname.match(matcher);\n  if (!match) return null;\n  let matchedPathname = match[0];\n  let pathnameBase = matchedPathname.replace(/(.)\\/+$/, \"$1\");\n  let captureGroups = match.slice(1);\n  let params = compiledParams.reduce((memo, _ref, index) => {\n    let {\n      paramName,\n      isOptional\n    } = _ref;\n    // We need to compute the pathnameBase here using the raw splat value\n    // instead of using params[\"*\"] later because it will be decoded then\n    if (paramName === \"*\") {\n      let splatValue = captureGroups[index] || \"\";\n      pathnameBase = matchedPathname.slice(0, matchedPathname.length - splatValue.length).replace(/(.)\\/+$/, \"$1\");\n    }\n    const value = captureGroups[index];\n    if (isOptional && !value) {\n      memo[paramName] = undefined;\n    } else {\n      memo[paramName] = (value || \"\").replace(/%2F/g, \"/\");\n    }\n    return memo;\n  }, {});\n  return {\n    params,\n    pathname: matchedPathname,\n    pathnameBase,\n    pattern\n  };\n}\nfunction compilePath(path, caseSensitive, end) {\n  if (caseSensitive === void 0) {\n    caseSensitive = false;\n  }\n  if (end === void 0) {\n    end = true;\n  }\n  warning(path === \"*\" || !path.endsWith(\"*\") || path.endsWith(\"/*\"), \"Route path \\\"\" + path + \"\\\" will be treated as if it were \" + (\"\\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\" because the `*` character must \") + \"always follow a `/` in the pattern. To get rid of this warning, \" + (\"please change the route path to \\\"\" + path.replace(/\\*$/, \"/*\") + \"\\\".\"));\n  let params = [];\n  let regexpSource = \"^\" + path.replace(/\\/*\\*?$/, \"\") // Ignore trailing / and /*, we'll handle it below\n  .replace(/^\\/*/, \"/\") // Make sure it has a leading /\n  .replace(/[\\\\.*+^${}|()[\\]]/g, \"\\\\$&\") // Escape special regex chars\n  .replace(/\\/:([\\w-]+)(\\?)?/g, (_, paramName, isOptional) => {\n    params.push({\n      paramName,\n      isOptional: isOptional != null\n    });\n    return isOptional ? \"/?([^\\\\/]+)?\" : \"/([^\\\\/]+)\";\n  });\n  if (path.endsWith(\"*\")) {\n    params.push({\n      paramName: \"*\"\n    });\n    regexpSource += path === \"*\" || path === \"/*\" ? \"(.*)$\" // Already matched the initial /, just match the rest\n    : \"(?:\\\\/(.+)|\\\\/*)$\"; // Don't include the / in params[\"*\"]\n  } else if (end) {\n    // When matching to the end, ignore trailing slashes\n    regexpSource += \"\\\\/*$\";\n  } else if (path !== \"\" && path !== \"/\") {\n    // If our path is non-empty and contains anything beyond an initial slash,\n    // then we have _some_ form of path in our regex, so we should expect to\n    // match only if we find the end of this path segment.  Look for an optional\n    // non-captured trailing slash (to match a portion of the URL) or the end\n    // of the path (if we've matched to the end).  We used to do this with a\n    // word boundary but that gives false positives on routes like\n    // /user-preferences since `-` counts as a word boundary.\n    regexpSource += \"(?:(?=\\\\/|$))\";\n  } else ;\n  let matcher = new RegExp(regexpSource, caseSensitive ? undefined : \"i\");\n  return [matcher, params];\n}\nfunction decodePath(value) {\n  try {\n    return value.split(\"/\").map(v => decodeURIComponent(v).replace(/\\//g, \"%2F\")).join(\"/\");\n  } catch (error) {\n    warning(false, \"The URL path \\\"\" + value + \"\\\" could not be decoded because it is is a \" + \"malformed URL segment. This is probably due to a bad percent \" + (\"encoding (\" + error + \").\"));\n    return value;\n  }\n}\n/**\n * @private\n */\nfunction stripBasename(pathname, basename) {\n  if (basename === \"/\") return pathname;\n  if (!pathname.toLowerCase().startsWith(basename.toLowerCase())) {\n    return null;\n  }\n  // We want to leave trailing slash behavior in the user's control, so if they\n  // specify a basename with a trailing slash, we should support it\n  let startIndex = basename.endsWith(\"/\") ? basename.length - 1 : basename.length;\n  let nextChar = pathname.charAt(startIndex);\n  if (nextChar && nextChar !== \"/\") {\n    // pathname does not start with basename/\n    return null;\n  }\n  return pathname.slice(startIndex) || \"/\";\n}\n/**\n * Returns a resolved path object relative to the given pathname.\n *\n * @see https://reactrouter.com/utils/resolve-path\n */\nfunction resolvePath(to, fromPathname) {\n  if (fromPathname === void 0) {\n    fromPathname = \"/\";\n  }\n  let {\n    pathname: toPathname,\n    search = \"\",\n    hash = \"\"\n  } = typeof to === \"string\" ? parsePath(to) : to;\n  let pathname = toPathname ? toPathname.startsWith(\"/\") ? toPathname : resolvePathname(toPathname, fromPathname) : fromPathname;\n  return {\n    pathname,\n    search: normalizeSearch(search),\n    hash: normalizeHash(hash)\n  };\n}\nfunction resolvePathname(relativePath, fromPathname) {\n  let segments = fromPathname.replace(/\\/+$/, \"\").split(\"/\");\n  let relativeSegments = relativePath.split(\"/\");\n  relativeSegments.forEach(segment => {\n    if (segment === \"..\") {\n      // Keep the root \"\" segment so the pathname starts at /\n      if (segments.length > 1) segments.pop();\n    } else if (segment !== \".\") {\n      segments.push(segment);\n    }\n  });\n  return segments.length > 1 ? segments.join(\"/\") : \"/\";\n}\nfunction getInvalidPathError(char, field, dest, path) {\n  return \"Cannot include a '\" + char + \"' character in a manually specified \" + (\"`to.\" + field + \"` field [\" + JSON.stringify(path) + \"].  Please separate it out to the \") + (\"`to.\" + dest + \"` field. Alternatively you may provide the full path as \") + \"a string in <Link to=\\\"...\\\"> and the router will parse it for you.\";\n}\n/**\n * @private\n *\n * When processing relative navigation we want to ignore ancestor routes that\n * do not contribute to the path, such that index/pathless layout routes don't\n * interfere.\n *\n * For example, when moving a route element into an index route and/or a\n * pathless layout route, relative link behavior contained within should stay\n * the same.  Both of the following examples should link back to the root:\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\" element={<Link to=\"..\"}>\n *   </Route>\n *\n *   <Route path=\"/\">\n *     <Route path=\"accounts\">\n *       <Route element={<AccountsLayout />}>       // <-- Does not contribute\n *         <Route index element={<Link to=\"..\"} />  // <-- Does not contribute\n *       </Route\n *     </Route>\n *   </Route>\n */\nfunction getPathContributingMatches(matches) {\n  return matches.filter((match, index) => index === 0 || match.route.path && match.route.path.length > 0);\n}\n// Return the array of pathnames for the current route matches - used to\n// generate the routePathnames input for resolveTo()\nfunction getResolveToMatches(matches, v7_relativeSplatPath) {\n  let pathMatches = getPathContributingMatches(matches);\n  // When v7_relativeSplatPath is enabled, use the full pathname for the leaf\n  // match so we include splat values for \".\" links.  See:\n  // https://github.com/remix-run/react-router/issues/11052#issuecomment-1836589329\n  if (v7_relativeSplatPath) {\n    return pathMatches.map((match, idx) => idx === pathMatches.length - 1 ? match.pathname : match.pathnameBase);\n  }\n  return pathMatches.map(match => match.pathnameBase);\n}\n/**\n * @private\n */\nfunction resolveTo(toArg, routePathnames, locationPathname, isPathRelative) {\n  if (isPathRelative === void 0) {\n    isPathRelative = false;\n  }\n  let to;\n  if (typeof toArg === \"string\") {\n    to = parsePath(toArg);\n  } else {\n    to = _extends({}, toArg);\n    invariant(!to.pathname || !to.pathname.includes(\"?\"), getInvalidPathError(\"?\", \"pathname\", \"search\", to));\n    invariant(!to.pathname || !to.pathname.includes(\"#\"), getInvalidPathError(\"#\", \"pathname\", \"hash\", to));\n    invariant(!to.search || !to.search.includes(\"#\"), getInvalidPathError(\"#\", \"search\", \"hash\", to));\n  }\n  let isEmptyPath = toArg === \"\" || to.pathname === \"\";\n  let toPathname = isEmptyPath ? \"/\" : to.pathname;\n  let from;\n  // Routing is relative to the current pathname if explicitly requested.\n  //\n  // If a pathname is explicitly provided in `to`, it should be relative to the\n  // route context. This is explained in `Note on `<Link to>` values` in our\n  // migration guide from v5 as a means of disambiguation between `to` values\n  // that begin with `/` and those that do not. However, this is problematic for\n  // `to` values that do not provide a pathname. `to` can simply be a search or\n  // hash string, in which case we should assume that the navigation is relative\n  // to the current location's pathname and *not* the route pathname.\n  if (toPathname == null) {\n    from = locationPathname;\n  } else {\n    let routePathnameIndex = routePathnames.length - 1;\n    // With relative=\"route\" (the default), each leading .. segment means\n    // \"go up one route\" instead of \"go up one URL segment\".  This is a key\n    // difference from how <a href> works and a major reason we call this a\n    // \"to\" value instead of a \"href\".\n    if (!isPathRelative && toPathname.startsWith(\"..\")) {\n      let toSegments = toPathname.split(\"/\");\n      while (toSegments[0] === \"..\") {\n        toSegments.shift();\n        routePathnameIndex -= 1;\n      }\n      to.pathname = toSegments.join(\"/\");\n    }\n    from = routePathnameIndex >= 0 ? routePathnames[routePathnameIndex] : \"/\";\n  }\n  let path = resolvePath(to, from);\n  // Ensure the pathname has a trailing slash if the original \"to\" had one\n  let hasExplicitTrailingSlash = toPathname && toPathname !== \"/\" && toPathname.endsWith(\"/\");\n  // Or if this was a link to the current path which has a trailing slash\n  let hasCurrentTrailingSlash = (isEmptyPath || toPathname === \".\") && locationPathname.endsWith(\"/\");\n  if (!path.pathname.endsWith(\"/\") && (hasExplicitTrailingSlash || hasCurrentTrailingSlash)) {\n    path.pathname += \"/\";\n  }\n  return path;\n}\n/**\n * @private\n */\nfunction getToPathname(to) {\n  // Empty strings should be treated the same as / paths\n  return to === \"\" || to.pathname === \"\" ? \"/\" : typeof to === \"string\" ? parsePath(to).pathname : to.pathname;\n}\n/**\n * @private\n */\nconst joinPaths = paths => paths.join(\"/\").replace(/\\/\\/+/g, \"/\");\n/**\n * @private\n */\nconst normalizePathname = pathname => pathname.replace(/\\/+$/, \"\").replace(/^\\/*/, \"/\");\n/**\n * @private\n */\nconst normalizeSearch = search => !search || search === \"?\" ? \"\" : search.startsWith(\"?\") ? search : \"?\" + search;\n/**\n * @private\n */\nconst normalizeHash = hash => !hash || hash === \"#\" ? \"\" : hash.startsWith(\"#\") ? hash : \"#\" + hash;\n/**\n * This is a shortcut for creating `application/json` responses. Converts `data`\n * to JSON and sets the `Content-Type` header.\n */\nconst json = function json(data, init) {\n  if (init === void 0) {\n    init = {};\n  }\n  let responseInit = typeof init === \"number\" ? {\n    status: init\n  } : init;\n  let headers = new Headers(responseInit.headers);\n  if (!headers.has(\"Content-Type\")) {\n    headers.set(\"Content-Type\", \"application/json; charset=utf-8\");\n  }\n  return new Response(JSON.stringify(data), _extends({}, responseInit, {\n    headers\n  }));\n};\nclass DataWithResponseInit {\n  constructor(data, init) {\n    this.type = \"DataWithResponseInit\";\n    this.data = data;\n    this.init = init || null;\n  }\n}\n/**\n * Create \"responses\" that contain `status`/`headers` without forcing\n * serialization into an actual `Response` - used by Remix single fetch\n */\nfunction data(data, init) {\n  return new DataWithResponseInit(data, typeof init === \"number\" ? {\n    status: init\n  } : init);\n}\nclass AbortedDeferredError extends Error {}\nclass DeferredData {\n  constructor(data, responseInit) {\n    this.pendingKeysSet = new Set();\n    this.subscribers = new Set();\n    this.deferredKeys = [];\n    invariant(data && typeof data === \"object\" && !Array.isArray(data), \"defer() only accepts plain objects\");\n    // Set up an AbortController + Promise we can race against to exit early\n    // cancellation\n    let reject;\n    this.abortPromise = new Promise((_, r) => reject = r);\n    this.controller = new AbortController();\n    let onAbort = () => reject(new AbortedDeferredError(\"Deferred data aborted\"));\n    this.unlistenAbortSignal = () => this.controller.signal.removeEventListener(\"abort\", onAbort);\n    this.controller.signal.addEventListener(\"abort\", onAbort);\n    this.data = Object.entries(data).reduce((acc, _ref2) => {\n      let [key, value] = _ref2;\n      return Object.assign(acc, {\n        [key]: this.trackPromise(key, value)\n      });\n    }, {});\n    if (this.done) {\n      // All incoming values were resolved\n      this.unlistenAbortSignal();\n    }\n    this.init = responseInit;\n  }\n  trackPromise(key, value) {\n    if (!(value instanceof Promise)) {\n      return value;\n    }\n    this.deferredKeys.push(key);\n    this.pendingKeysSet.add(key);\n    // We store a little wrapper promise that will be extended with\n    // _data/_error props upon resolve/reject\n    let promise = Promise.race([value, this.abortPromise]).then(data => this.onSettle(promise, key, undefined, data), error => this.onSettle(promise, key, error));\n    // Register rejection listeners to avoid uncaught promise rejections on\n    // errors or aborted deferred values\n    promise.catch(() => {});\n    Object.defineProperty(promise, \"_tracked\", {\n      get: () => true\n    });\n    return promise;\n  }\n  onSettle(promise, key, error, data) {\n    if (this.controller.signal.aborted && error instanceof AbortedDeferredError) {\n      this.unlistenAbortSignal();\n      Object.defineProperty(promise, \"_error\", {\n        get: () => error\n      });\n      return Promise.reject(error);\n    }\n    this.pendingKeysSet.delete(key);\n    if (this.done) {\n      // Nothing left to abort!\n      this.unlistenAbortSignal();\n    }\n    // If the promise was resolved/rejected with undefined, we'll throw an error as you\n    // should always resolve with a value or null\n    if (error === undefined && data === undefined) {\n      let undefinedError = new Error(\"Deferred data for key \\\"\" + key + \"\\\" resolved/rejected with `undefined`, \" + \"you must resolve/reject with a value or `null`.\");\n      Object.defineProperty(promise, \"_error\", {\n        get: () => undefinedError\n      });\n      this.emit(false, key);\n      return Promise.reject(undefinedError);\n    }\n    if (data === undefined) {\n      Object.defineProperty(promise, \"_error\", {\n        get: () => error\n      });\n      this.emit(false, key);\n      return Promise.reject(error);\n    }\n    Object.defineProperty(promise, \"_data\", {\n      get: () => data\n    });\n    this.emit(false, key);\n    return data;\n  }\n  emit(aborted, settledKey) {\n    this.subscribers.forEach(subscriber => subscriber(aborted, settledKey));\n  }\n  subscribe(fn) {\n    this.subscribers.add(fn);\n    return () => this.subscribers.delete(fn);\n  }\n  cancel() {\n    this.controller.abort();\n    this.pendingKeysSet.forEach((v, k) => this.pendingKeysSet.delete(k));\n    this.emit(true);\n  }\n  async resolveData(signal) {\n    let aborted = false;\n    if (!this.done) {\n      let onAbort = () => this.cancel();\n      signal.addEventListener(\"abort\", onAbort);\n      aborted = await new Promise(resolve => {\n        this.subscribe(aborted => {\n          signal.removeEventListener(\"abort\", onAbort);\n          if (aborted || this.done) {\n            resolve(aborted);\n          }\n        });\n      });\n    }\n    return aborted;\n  }\n  get done() {\n    return this.pendingKeysSet.size === 0;\n  }\n  get unwrappedData() {\n    invariant(this.data !== null && this.done, \"Can only unwrap data on initialized and settled deferreds\");\n    return Object.entries(this.data).reduce((acc, _ref3) => {\n      let [key, value] = _ref3;\n      return Object.assign(acc, {\n        [key]: unwrapTrackedPromise(value)\n      });\n    }, {});\n  }\n  get pendingKeys() {\n    return Array.from(this.pendingKeysSet);\n  }\n}\nfunction isTrackedPromise(value) {\n  return value instanceof Promise && value._tracked === true;\n}\nfunction unwrapTrackedPromise(value) {\n  if (!isTrackedPromise(value)) {\n    return value;\n  }\n  if (value._error) {\n    throw value._error;\n  }\n  return value._data;\n}\nconst defer = function defer(data, init) {\n  if (init === void 0) {\n    init = {};\n  }\n  let responseInit = typeof init === \"number\" ? {\n    status: init\n  } : init;\n  return new DeferredData(data, responseInit);\n};\n/**\n * A redirect response. Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirect = function redirect(url, init) {\n  if (init === void 0) {\n    init = 302;\n  }\n  let responseInit = init;\n  if (typeof responseInit === \"number\") {\n    responseInit = {\n      status: responseInit\n    };\n  } else if (typeof responseInit.status === \"undefined\") {\n    responseInit.status = 302;\n  }\n  let headers = new Headers(responseInit.headers);\n  headers.set(\"Location\", url);\n  return new Response(null, _extends({}, responseInit, {\n    headers\n  }));\n};\n/**\n * A redirect response that will force a document reload to the new location.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst redirectDocument = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Reload-Document\", \"true\");\n  return response;\n};\n/**\n * A redirect response that will perform a `history.replaceState` instead of a\n * `history.pushState` for client-side navigation redirects.\n * Sets the status code and the `Location` header.\n * Defaults to \"302 Found\".\n */\nconst replace = (url, init) => {\n  let response = redirect(url, init);\n  response.headers.set(\"X-Remix-Replace\", \"true\");\n  return response;\n};\n/**\n * @private\n * Utility class we use to hold auto-unwrapped 4xx/5xx Response bodies\n *\n * We don't export the class for public use since it's an implementation\n * detail, but we export the interface above so folks can build their own\n * abstractions around instances via isRouteErrorResponse()\n */\nclass ErrorResponseImpl {\n  constructor(status, statusText, data, internal) {\n    if (internal === void 0) {\n      internal = false;\n    }\n    this.status = status;\n    this.statusText = statusText || \"\";\n    this.internal = internal;\n    if (data instanceof Error) {\n      this.data = data.toString();\n      this.error = data;\n    } else {\n      this.data = data;\n    }\n  }\n}\n/**\n * Check if the given error is an ErrorResponse generated from a 4xx/5xx\n * Response thrown from an action/loader\n */\nfunction isRouteErrorResponse(error) {\n  return error != null && typeof error.status === \"number\" && typeof error.statusText === \"string\" && typeof error.internal === \"boolean\" && \"data\" in error;\n}\n\nconst validMutationMethodsArr = [\"post\", \"put\", \"patch\", \"delete\"];\nconst validMutationMethods = new Set(validMutationMethodsArr);\nconst validRequestMethodsArr = [\"get\", ...validMutationMethodsArr];\nconst validRequestMethods = new Set(validRequestMethodsArr);\nconst redirectStatusCodes = new Set([301, 302, 303, 307, 308]);\nconst redirectPreserveMethodStatusCodes = new Set([307, 308]);\nconst IDLE_NAVIGATION = {\n  state: \"idle\",\n  location: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined\n};\nconst IDLE_FETCHER = {\n  state: \"idle\",\n  data: undefined,\n  formMethod: undefined,\n  formAction: undefined,\n  formEncType: undefined,\n  formData: undefined,\n  json: undefined,\n  text: undefined\n};\nconst IDLE_BLOCKER = {\n  state: \"unblocked\",\n  proceed: undefined,\n  reset: undefined,\n  location: undefined\n};\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\nconst defaultMapRouteProperties = route => ({\n  hasErrorBoundary: Boolean(route.hasErrorBoundary)\n});\nconst TRANSITIONS_STORAGE_KEY = \"remix-router-transitions\";\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createRouter\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Create a router and listen to history POP navigations\n */\nfunction createRouter(init) {\n  const routerWindow = init.window ? init.window : typeof window !== \"undefined\" ? window : undefined;\n  const isBrowser = typeof routerWindow !== \"undefined\" && typeof routerWindow.document !== \"undefined\" && typeof routerWindow.document.createElement !== \"undefined\";\n  const isServer = !isBrowser;\n  invariant(init.routes.length > 0, \"You must provide a non-empty routes array to createRouter\");\n  let mapRouteProperties;\n  if (init.mapRouteProperties) {\n    mapRouteProperties = init.mapRouteProperties;\n  } else if (init.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = init.detectErrorBoundary;\n    mapRouteProperties = route => ({\n      hasErrorBoundary: detectErrorBoundary(route)\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n  // Routes keyed by ID\n  let manifest = {};\n  // Routes in tree format for matching\n  let dataRoutes = convertRoutesToDataRoutes(init.routes, mapRouteProperties, undefined, manifest);\n  let inFlightDataRoutes;\n  let basename = init.basename || \"/\";\n  let dataStrategyImpl = init.unstable_dataStrategy || defaultDataStrategy;\n  let patchRoutesOnNavigationImpl = init.unstable_patchRoutesOnNavigation;\n  // Config driven behavior flags\n  let future = _extends({\n    v7_fetcherPersist: false,\n    v7_normalizeFormMethod: false,\n    v7_partialHydration: false,\n    v7_prependBasename: false,\n    v7_relativeSplatPath: false,\n    v7_skipActionErrorRevalidation: false\n  }, init.future);\n  // Cleanup function for history\n  let unlistenHistory = null;\n  // Externally-provided functions to call on all state changes\n  let subscribers = new Set();\n  // FIFO queue of previously discovered routes to prevent re-calling on\n  // subsequent navigations to the same path\n  let discoveredRoutesMaxSize = 1000;\n  let discoveredRoutes = new Set();\n  // Externally-provided object to hold scroll restoration locations during routing\n  let savedScrollPositions = null;\n  // Externally-provided function to get scroll restoration keys\n  let getScrollRestorationKey = null;\n  // Externally-provided function to get current scroll position\n  let getScrollPosition = null;\n  // One-time flag to control the initial hydration scroll restoration.  Because\n  // we don't get the saved positions from <ScrollRestoration /> until _after_\n  // the initial render, we need to manually trigger a separate updateState to\n  // send along the restoreScrollPosition\n  // Set to true if we have `hydrationData` since we assume we were SSR'd and that\n  // SSR did the initial scroll restoration.\n  let initialScrollRestored = init.hydrationData != null;\n  let initialMatches = matchRoutes(dataRoutes, init.history.location, basename);\n  let initialErrors = null;\n  if (initialMatches == null && !patchRoutesOnNavigationImpl) {\n    // If we do not match a user-provided-route, fall back to the root\n    // to allow the error boundary to take over\n    let error = getInternalRouterError(404, {\n      pathname: init.history.location.pathname\n    });\n    let {\n      matches,\n      route\n    } = getShortCircuitMatches(dataRoutes);\n    initialMatches = matches;\n    initialErrors = {\n      [route.id]: error\n    };\n  }\n  // In SPA apps, if the user provided a patchRoutesOnNavigation implementation and\n  // our initial match is a splat route, clear them out so we run through lazy\n  // discovery on hydration in case there's a more accurate lazy route match.\n  // In SSR apps (with `hydrationData`), we expect that the server will send\n  // up the proper matched routes so we don't want to run lazy discovery on\n  // initial hydration and want to hydrate into the splat route.\n  if (initialMatches && !init.hydrationData) {\n    let fogOfWar = checkFogOfWar(initialMatches, dataRoutes, init.history.location.pathname);\n    if (fogOfWar.active) {\n      initialMatches = null;\n    }\n  }\n  let initialized;\n  if (!initialMatches) {\n    initialized = false;\n    initialMatches = [];\n    // If partial hydration and fog of war is enabled, we will be running\n    // `patchRoutesOnNavigation` during hydration so include any partial matches as\n    // the initial matches so we can properly render `HydrateFallback`'s\n    if (future.v7_partialHydration) {\n      let fogOfWar = checkFogOfWar(null, dataRoutes, init.history.location.pathname);\n      if (fogOfWar.active && fogOfWar.matches) {\n        initialMatches = fogOfWar.matches;\n      }\n    }\n  } else if (initialMatches.some(m => m.route.lazy)) {\n    // All initialMatches need to be loaded before we're ready.  If we have lazy\n    // functions around still then we'll need to run them in initialize()\n    initialized = false;\n  } else if (!initialMatches.some(m => m.route.loader)) {\n    // If we've got no loaders to run, then we're good to go\n    initialized = true;\n  } else if (future.v7_partialHydration) {\n    // If partial hydration is enabled, we're initialized so long as we were\n    // provided with hydrationData for every route with a loader, and no loaders\n    // were marked for explicit hydration\n    let loaderData = init.hydrationData ? init.hydrationData.loaderData : null;\n    let errors = init.hydrationData ? init.hydrationData.errors : null;\n    let isRouteInitialized = m => {\n      // No loader, nothing to initialize\n      if (!m.route.loader) {\n        return true;\n      }\n      // Explicitly opting-in to running on hydration\n      if (typeof m.route.loader === \"function\" && m.route.loader.hydrate === true) {\n        return false;\n      }\n      // Otherwise, initialized if hydrated with data or an error\n      return loaderData && loaderData[m.route.id] !== undefined || errors && errors[m.route.id] !== undefined;\n    };\n    // If errors exist, don't consider routes below the boundary\n    if (errors) {\n      let idx = initialMatches.findIndex(m => errors[m.route.id] !== undefined);\n      initialized = initialMatches.slice(0, idx + 1).every(isRouteInitialized);\n    } else {\n      initialized = initialMatches.every(isRouteInitialized);\n    }\n  } else {\n    // Without partial hydration - we're initialized if we were provided any\n    // hydrationData - which is expected to be complete\n    initialized = init.hydrationData != null;\n  }\n  let router;\n  let state = {\n    historyAction: init.history.action,\n    location: init.history.location,\n    matches: initialMatches,\n    initialized,\n    navigation: IDLE_NAVIGATION,\n    // Don't restore on initial updateState() if we were SSR'd\n    restoreScrollPosition: init.hydrationData != null ? false : null,\n    preventScrollReset: false,\n    revalidation: \"idle\",\n    loaderData: init.hydrationData && init.hydrationData.loaderData || {},\n    actionData: init.hydrationData && init.hydrationData.actionData || null,\n    errors: init.hydrationData && init.hydrationData.errors || initialErrors,\n    fetchers: new Map(),\n    blockers: new Map()\n  };\n  // -- Stateful internal variables to manage navigations --\n  // Current navigation in progress (to be committed in completeNavigation)\n  let pendingAction = Action.Pop;\n  // Should the current navigation prevent the scroll reset if scroll cannot\n  // be restored?\n  let pendingPreventScrollReset = false;\n  // AbortController for the active navigation\n  let pendingNavigationController;\n  // Should the current navigation enable document.startViewTransition?\n  let pendingViewTransitionEnabled = false;\n  // Store applied view transitions so we can apply them on POP\n  let appliedViewTransitions = new Map();\n  // Cleanup function for persisting applied transitions to sessionStorage\n  let removePageHideEventListener = null;\n  // We use this to avoid touching history in completeNavigation if a\n  // revalidation is entirely uninterrupted\n  let isUninterruptedRevalidation = false;\n  // Use this internal flag to force revalidation of all loaders:\n  //  - submissions (completed or interrupted)\n  //  - useRevalidator()\n  //  - X-Remix-Revalidate (from redirect)\n  let isRevalidationRequired = false;\n  // Use this internal array to capture routes that require revalidation due\n  // to a cancelled deferred on action submission\n  let cancelledDeferredRoutes = [];\n  // Use this internal array to capture fetcher loads that were cancelled by an\n  // action navigation and require revalidation\n  let cancelledFetcherLoads = new Set();\n  // AbortControllers for any in-flight fetchers\n  let fetchControllers = new Map();\n  // Track loads based on the order in which they started\n  let incrementingLoadId = 0;\n  // Track the outstanding pending navigation data load to be compared against\n  // the globally incrementing load when a fetcher load lands after a completed\n  // navigation\n  let pendingNavigationLoadId = -1;\n  // Fetchers that triggered data reloads as a result of their actions\n  let fetchReloadIds = new Map();\n  // Fetchers that triggered redirect navigations\n  let fetchRedirectIds = new Set();\n  // Most recent href/match for fetcher.load calls for fetchers\n  let fetchLoadMatches = new Map();\n  // Ref-count mounted fetchers so we know when it's ok to clean them up\n  let activeFetchers = new Map();\n  // Fetchers that have requested a delete when using v7_fetcherPersist,\n  // they'll be officially removed after they return to idle\n  let deletedFetchers = new Set();\n  // Store DeferredData instances for active route matches.  When a\n  // route loader returns defer() we stick one in here.  Then, when a nested\n  // promise resolves we update loaderData.  If a new navigation starts we\n  // cancel active deferreds for eliminated routes.\n  let activeDeferreds = new Map();\n  // Store blocker functions in a separate Map outside of router state since\n  // we don't need to update UI state if they change\n  let blockerFunctions = new Map();\n  // Map of pending patchRoutesOnNavigation() promises (keyed by path/matches) so\n  // that we only kick them off once for a given combo\n  let pendingPatchRoutes = new Map();\n  // Flag to ignore the next history update, so we can revert the URL change on\n  // a POP navigation that was blocked by the user without touching router state\n  let unblockBlockerHistoryUpdate = undefined;\n  // Initialize the router, all side effects should be kicked off from here.\n  // Implemented as a Fluent API for ease of:\n  //   let router = createRouter(init).initialize();\n  function initialize() {\n    // If history informs us of a POP navigation, start the navigation but do not update\n    // state.  We'll update our own state once the navigation completes\n    unlistenHistory = init.history.listen(_ref => {\n      let {\n        action: historyAction,\n        location,\n        delta\n      } = _ref;\n      // Ignore this event if it was just us resetting the URL from a\n      // blocked POP navigation\n      if (unblockBlockerHistoryUpdate) {\n        unblockBlockerHistoryUpdate();\n        unblockBlockerHistoryUpdate = undefined;\n        return;\n      }\n      warning(blockerFunctions.size === 0 || delta != null, \"You are trying to use a blocker on a POP navigation to a location \" + \"that was not created by @remix-run/router. This will fail silently in \" + \"production. This can happen if you are navigating outside the router \" + \"via `window.history.pushState`/`window.location.hash` instead of using \" + \"router navigation APIs.  This can also happen if you are using \" + \"createHashRouter and the user manually changes the URL.\");\n      let blockerKey = shouldBlockNavigation({\n        currentLocation: state.location,\n        nextLocation: location,\n        historyAction\n      });\n      if (blockerKey && delta != null) {\n        // Restore the URL to match the current UI, but don't update router state\n        let nextHistoryUpdatePromise = new Promise(resolve => {\n          unblockBlockerHistoryUpdate = resolve;\n        });\n        init.history.go(delta * -1);\n        // Put the blocker into a blocked state\n        updateBlocker(blockerKey, {\n          state: \"blocked\",\n          location,\n          proceed() {\n            updateBlocker(blockerKey, {\n              state: \"proceeding\",\n              proceed: undefined,\n              reset: undefined,\n              location\n            });\n            // Re-do the same POP navigation we just blocked, after the url\n            // restoration is also complete.  See:\n            // https://github.com/remix-run/react-router/issues/11613\n            nextHistoryUpdatePromise.then(() => init.history.go(delta));\n          },\n          reset() {\n            let blockers = new Map(state.blockers);\n            blockers.set(blockerKey, IDLE_BLOCKER);\n            updateState({\n              blockers\n            });\n          }\n        });\n        return;\n      }\n      return startNavigation(historyAction, location);\n    });\n    if (isBrowser) {\n      // FIXME: This feels gross.  How can we cleanup the lines between\n      // scrollRestoration/appliedTransitions persistance?\n      restoreAppliedTransitions(routerWindow, appliedViewTransitions);\n      let _saveAppliedTransitions = () => persistAppliedTransitions(routerWindow, appliedViewTransitions);\n      routerWindow.addEventListener(\"pagehide\", _saveAppliedTransitions);\n      removePageHideEventListener = () => routerWindow.removeEventListener(\"pagehide\", _saveAppliedTransitions);\n    }\n    // Kick off initial data load if needed.  Use Pop to avoid modifying history\n    // Note we don't do any handling of lazy here.  For SPA's it'll get handled\n    // in the normal navigation flow.  For SSR it's expected that lazy modules are\n    // resolved prior to router creation since we can't go into a fallbackElement\n    // UI for SSR'd apps\n    if (!state.initialized) {\n      startNavigation(Action.Pop, state.location, {\n        initialHydration: true\n      });\n    }\n    return router;\n  }\n  // Clean up a router and it's side effects\n  function dispose() {\n    if (unlistenHistory) {\n      unlistenHistory();\n    }\n    if (removePageHideEventListener) {\n      removePageHideEventListener();\n    }\n    subscribers.clear();\n    pendingNavigationController && pendingNavigationController.abort();\n    state.fetchers.forEach((_, key) => deleteFetcher(key));\n    state.blockers.forEach((_, key) => deleteBlocker(key));\n  }\n  // Subscribe to state updates for the router\n  function subscribe(fn) {\n    subscribers.add(fn);\n    return () => subscribers.delete(fn);\n  }\n  // Update our state and notify the calling context of the change\n  function updateState(newState, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    state = _extends({}, state, newState);\n    // Prep fetcher cleanup so we can tell the UI which fetcher data entries\n    // can be removed\n    let completedFetchers = [];\n    let deletedFetchersKeys = [];\n    if (future.v7_fetcherPersist) {\n      state.fetchers.forEach((fetcher, key) => {\n        if (fetcher.state === \"idle\") {\n          if (deletedFetchers.has(key)) {\n            // Unmounted from the UI and can be totally removed\n            deletedFetchersKeys.push(key);\n          } else {\n            // Returned to idle but still mounted in the UI, so semi-remains for\n            // revalidations and such\n            completedFetchers.push(key);\n          }\n        }\n      });\n    }\n    // Iterate over a local copy so that if flushSync is used and we end up\n    // removing and adding a new subscriber due to the useCallback dependencies,\n    // we don't get ourselves into a loop calling the new subscriber immediately\n    [...subscribers].forEach(subscriber => subscriber(state, {\n      deletedFetchers: deletedFetchersKeys,\n      unstable_viewTransitionOpts: opts.viewTransitionOpts,\n      unstable_flushSync: opts.flushSync === true\n    }));\n    // Remove idle fetchers from state since we only care about in-flight fetchers.\n    if (future.v7_fetcherPersist) {\n      completedFetchers.forEach(key => state.fetchers.delete(key));\n      deletedFetchersKeys.forEach(key => deleteFetcher(key));\n    }\n  }\n  // Complete a navigation returning the state.navigation back to the IDLE_NAVIGATION\n  // and setting state.[historyAction/location/matches] to the new route.\n  // - Location is a required param\n  // - Navigation will always be set to IDLE_NAVIGATION\n  // - Can pass any other state in newState\n  function completeNavigation(location, newState, _temp) {\n    var _location$state, _location$state2;\n    let {\n      flushSync\n    } = _temp === void 0 ? {} : _temp;\n    // Deduce if we're in a loading/actionReload state:\n    // - We have committed actionData in the store\n    // - The current navigation was a mutation submission\n    // - We're past the submitting state and into the loading state\n    // - The location being loaded is not the result of a redirect\n    let isActionReload = state.actionData != null && state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && state.navigation.state === \"loading\" && ((_location$state = location.state) == null ? void 0 : _location$state._isRedirect) !== true;\n    let actionData;\n    if (newState.actionData) {\n      if (Object.keys(newState.actionData).length > 0) {\n        actionData = newState.actionData;\n      } else {\n        // Empty actionData -> clear prior actionData due to an action error\n        actionData = null;\n      }\n    } else if (isActionReload) {\n      // Keep the current data if we're wrapping up the action reload\n      actionData = state.actionData;\n    } else {\n      // Clear actionData on any other completed navigations\n      actionData = null;\n    }\n    // Always preserve any existing loaderData from re-used routes\n    let loaderData = newState.loaderData ? mergeLoaderData(state.loaderData, newState.loaderData, newState.matches || [], newState.errors) : state.loaderData;\n    // On a successful navigation we can assume we got through all blockers\n    // so we can start fresh\n    let blockers = state.blockers;\n    if (blockers.size > 0) {\n      blockers = new Map(blockers);\n      blockers.forEach((_, k) => blockers.set(k, IDLE_BLOCKER));\n    }\n    // Always respect the user flag.  Otherwise don't reset on mutation\n    // submission navigations unless they redirect\n    let preventScrollReset = pendingPreventScrollReset === true || state.navigation.formMethod != null && isMutationMethod(state.navigation.formMethod) && ((_location$state2 = location.state) == null ? void 0 : _location$state2._isRedirect) !== true;\n    // Commit any in-flight routes at the end of the HMR revalidation \"navigation\"\n    if (inFlightDataRoutes) {\n      dataRoutes = inFlightDataRoutes;\n      inFlightDataRoutes = undefined;\n    }\n    if (isUninterruptedRevalidation) ; else if (pendingAction === Action.Pop) ; else if (pendingAction === Action.Push) {\n      init.history.push(location, location.state);\n    } else if (pendingAction === Action.Replace) {\n      init.history.replace(location, location.state);\n    }\n    let viewTransitionOpts;\n    // On POP, enable transitions if they were enabled on the original navigation\n    if (pendingAction === Action.Pop) {\n      // Forward takes precedence so they behave like the original navigation\n      let priorPaths = appliedViewTransitions.get(state.location.pathname);\n      if (priorPaths && priorPaths.has(location.pathname)) {\n        viewTransitionOpts = {\n          currentLocation: state.location,\n          nextLocation: location\n        };\n      } else if (appliedViewTransitions.has(location.pathname)) {\n        // If we don't have a previous forward nav, assume we're popping back to\n        // the new location and enable if that location previously enabled\n        viewTransitionOpts = {\n          currentLocation: location,\n          nextLocation: state.location\n        };\n      }\n    } else if (pendingViewTransitionEnabled) {\n      // Store the applied transition on PUSH/REPLACE\n      let toPaths = appliedViewTransitions.get(state.location.pathname);\n      if (toPaths) {\n        toPaths.add(location.pathname);\n      } else {\n        toPaths = new Set([location.pathname]);\n        appliedViewTransitions.set(state.location.pathname, toPaths);\n      }\n      viewTransitionOpts = {\n        currentLocation: state.location,\n        nextLocation: location\n      };\n    }\n    updateState(_extends({}, newState, {\n      actionData,\n      loaderData,\n      historyAction: pendingAction,\n      location,\n      initialized: true,\n      navigation: IDLE_NAVIGATION,\n      revalidation: \"idle\",\n      restoreScrollPosition: getSavedScrollPosition(location, newState.matches || state.matches),\n      preventScrollReset,\n      blockers\n    }), {\n      viewTransitionOpts,\n      flushSync: flushSync === true\n    });\n    // Reset stateful navigation vars\n    pendingAction = Action.Pop;\n    pendingPreventScrollReset = false;\n    pendingViewTransitionEnabled = false;\n    isUninterruptedRevalidation = false;\n    isRevalidationRequired = false;\n    cancelledDeferredRoutes = [];\n  }\n  // Trigger a navigation event, which can either be a numerical POP or a PUSH\n  // replace with an optional submission\n  async function navigate(to, opts) {\n    if (typeof to === \"number\") {\n      init.history.go(to);\n      return;\n    }\n    let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, to, future.v7_relativeSplatPath, opts == null ? void 0 : opts.fromRouteId, opts == null ? void 0 : opts.relative);\n    let {\n      path,\n      submission,\n      error\n    } = normalizeNavigateOptions(future.v7_normalizeFormMethod, false, normalizedPath, opts);\n    let currentLocation = state.location;\n    let nextLocation = createLocation(state.location, path, opts && opts.state);\n    // When using navigate as a PUSH/REPLACE we aren't reading an already-encoded\n    // URL from window.location, so we need to encode it here so the behavior\n    // remains the same as POP and non-data-router usages.  new URL() does all\n    // the same encoding we'd get from a history.pushState/window.location read\n    // without having to touch history\n    nextLocation = _extends({}, nextLocation, init.history.encodeLocation(nextLocation));\n    let userReplace = opts && opts.replace != null ? opts.replace : undefined;\n    let historyAction = Action.Push;\n    if (userReplace === true) {\n      historyAction = Action.Replace;\n    } else if (userReplace === false) ; else if (submission != null && isMutationMethod(submission.formMethod) && submission.formAction === state.location.pathname + state.location.search) {\n      // By default on submissions to the current location we REPLACE so that\n      // users don't have to double-click the back button to get to the prior\n      // location.  If the user redirects to a different location from the\n      // action/loader this will be ignored and the redirect will be a PUSH\n      historyAction = Action.Replace;\n    }\n    let preventScrollReset = opts && \"preventScrollReset\" in opts ? opts.preventScrollReset === true : undefined;\n    let flushSync = (opts && opts.unstable_flushSync) === true;\n    let blockerKey = shouldBlockNavigation({\n      currentLocation,\n      nextLocation,\n      historyAction\n    });\n    if (blockerKey) {\n      // Put the blocker into a blocked state\n      updateBlocker(blockerKey, {\n        state: \"blocked\",\n        location: nextLocation,\n        proceed() {\n          updateBlocker(blockerKey, {\n            state: \"proceeding\",\n            proceed: undefined,\n            reset: undefined,\n            location: nextLocation\n          });\n          // Send the same navigation through\n          navigate(to, opts);\n        },\n        reset() {\n          let blockers = new Map(state.blockers);\n          blockers.set(blockerKey, IDLE_BLOCKER);\n          updateState({\n            blockers\n          });\n        }\n      });\n      return;\n    }\n    return await startNavigation(historyAction, nextLocation, {\n      submission,\n      // Send through the formData serialization error if we have one so we can\n      // render at the right error boundary after we match routes\n      pendingError: error,\n      preventScrollReset,\n      replace: opts && opts.replace,\n      enableViewTransition: opts && opts.unstable_viewTransition,\n      flushSync\n    });\n  }\n  // Revalidate all current loaders.  If a navigation is in progress or if this\n  // is interrupted by a navigation, allow this to \"succeed\" by calling all\n  // loaders during the next loader round\n  function revalidate() {\n    interruptActiveLoads();\n    updateState({\n      revalidation: \"loading\"\n    });\n    // If we're currently submitting an action, we don't need to start a new\n    // navigation, we'll just let the follow up loader execution call all loaders\n    if (state.navigation.state === \"submitting\") {\n      return;\n    }\n    // If we're currently in an idle state, start a new navigation for the current\n    // action/location and mark it as uninterrupted, which will skip the history\n    // update in completeNavigation\n    if (state.navigation.state === \"idle\") {\n      startNavigation(state.historyAction, state.location, {\n        startUninterruptedRevalidation: true\n      });\n      return;\n    }\n    // Otherwise, if we're currently in a loading state, just start a new\n    // navigation to the navigation.location but do not trigger an uninterrupted\n    // revalidation so that history correctly updates once the navigation completes\n    startNavigation(pendingAction || state.historyAction, state.navigation.location, {\n      overrideNavigation: state.navigation,\n      // Proxy through any rending view transition\n      enableViewTransition: pendingViewTransitionEnabled === true\n    });\n  }\n  // Start a navigation to the given action/location.  Can optionally provide a\n  // overrideNavigation which will override the normalLoad in the case of a redirect\n  // navigation\n  async function startNavigation(historyAction, location, opts) {\n    // Abort any in-progress navigations and start a new one. Unset any ongoing\n    // uninterrupted revalidations unless told otherwise, since we want this\n    // new navigation to update history normally\n    pendingNavigationController && pendingNavigationController.abort();\n    pendingNavigationController = null;\n    pendingAction = historyAction;\n    isUninterruptedRevalidation = (opts && opts.startUninterruptedRevalidation) === true;\n    // Save the current scroll position every time we start a new navigation,\n    // and track whether we should reset scroll on completion\n    saveScrollPosition(state.location, state.matches);\n    pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n    pendingViewTransitionEnabled = (opts && opts.enableViewTransition) === true;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let loadingNavigation = opts && opts.overrideNavigation;\n    let matches = matchRoutes(routesToUse, location, basename);\n    let flushSync = (opts && opts.flushSync) === true;\n    let fogOfWar = checkFogOfWar(matches, routesToUse, location.pathname);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n    // Short circuit with a 404 on the root error boundary if we match nothing\n    if (!matches) {\n      let {\n        error,\n        notFoundMatches,\n        route\n      } = handleNavigational404(location.pathname);\n      completeNavigation(location, {\n        matches: notFoundMatches,\n        loaderData: {},\n        errors: {\n          [route.id]: error\n        }\n      }, {\n        flushSync\n      });\n      return;\n    }\n    // Short circuit if it's only a hash change and not a revalidation or\n    // mutation submission.\n    //\n    // Ignore on initial page loads because since the initial load will always\n    // be \"same hash\".  For example, on /page#hash and submit a <Form method=\"post\">\n    // which will default to a navigation to /page\n    if (state.initialized && !isRevalidationRequired && isHashChangeOnly(state.location, location) && !(opts && opts.submission && isMutationMethod(opts.submission.formMethod))) {\n      completeNavigation(location, {\n        matches\n      }, {\n        flushSync\n      });\n      return;\n    }\n    // Create a controller/Request for this navigation\n    pendingNavigationController = new AbortController();\n    let request = createClientSideRequest(init.history, location, pendingNavigationController.signal, opts && opts.submission);\n    let pendingActionResult;\n    if (opts && opts.pendingError) {\n      // If we have a pendingError, it means the user attempted a GET submission\n      // with binary FormData so assign here and skip to handleLoaders.  That\n      // way we handle calling loaders above the boundary etc.  It's not really\n      // different from an actionError in that sense.\n      pendingActionResult = [findNearestBoundary(matches).route.id, {\n        type: ResultType.error,\n        error: opts.pendingError\n      }];\n    } else if (opts && opts.submission && isMutationMethod(opts.submission.formMethod)) {\n      // Call action if we received an action submission\n      let actionResult = await handleAction(request, location, opts.submission, matches, fogOfWar.active, {\n        replace: opts.replace,\n        flushSync\n      });\n      if (actionResult.shortCircuited) {\n        return;\n      }\n      // If we received a 404 from handleAction, it's because we couldn't lazily\n      // discover the destination route so we don't want to call loaders\n      if (actionResult.pendingActionResult) {\n        let [routeId, result] = actionResult.pendingActionResult;\n        if (isErrorResult(result) && isRouteErrorResponse(result.error) && result.error.status === 404) {\n          pendingNavigationController = null;\n          completeNavigation(location, {\n            matches: actionResult.matches,\n            loaderData: {},\n            errors: {\n              [routeId]: result.error\n            }\n          });\n          return;\n        }\n      }\n      matches = actionResult.matches || matches;\n      pendingActionResult = actionResult.pendingActionResult;\n      loadingNavigation = getLoadingNavigation(location, opts.submission);\n      flushSync = false;\n      // No need to do fog of war matching again on loader execution\n      fogOfWar.active = false;\n      // Create a GET request for the loaders\n      request = createClientSideRequest(init.history, request.url, request.signal);\n    }\n    // Call loaders\n    let {\n      shortCircuited,\n      matches: updatedMatches,\n      loaderData,\n      errors\n    } = await handleLoaders(request, location, matches, fogOfWar.active, loadingNavigation, opts && opts.submission, opts && opts.fetcherSubmission, opts && opts.replace, opts && opts.initialHydration === true, flushSync, pendingActionResult);\n    if (shortCircuited) {\n      return;\n    }\n    // Clean up now that the action/loaders have completed.  Don't clean up if\n    // we short circuited because pendingNavigationController will have already\n    // been assigned to a new controller for the next navigation\n    pendingNavigationController = null;\n    completeNavigation(location, _extends({\n      matches: updatedMatches || matches\n    }, getActionDataForCommit(pendingActionResult), {\n      loaderData,\n      errors\n    }));\n  }\n  // Call the action matched by the leaf route for this navigation and handle\n  // redirects/errors\n  async function handleAction(request, location, submission, matches, isFogOfWar, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    interruptActiveLoads();\n    // Put us in a submitting state\n    let navigation = getSubmittingNavigation(location, submission);\n    updateState({\n      navigation\n    }, {\n      flushSync: opts.flushSync === true\n    });\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n      if (discoverResult.type === \"aborted\") {\n        return {\n          shortCircuited: true\n        };\n      } else if (discoverResult.type === \"error\") {\n        let {\n          boundaryId,\n          error\n        } = handleDiscoverRouteError(location.pathname, discoverResult);\n        return {\n          matches: discoverResult.partialMatches,\n          pendingActionResult: [boundaryId, {\n            type: ResultType.error,\n            error\n          }]\n        };\n      } else if (!discoverResult.matches) {\n        let {\n          notFoundMatches,\n          error,\n          route\n        } = handleNavigational404(location.pathname);\n        return {\n          matches: notFoundMatches,\n          pendingActionResult: [route.id, {\n            type: ResultType.error,\n            error\n          }]\n        };\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n    // Call our action and get the result\n    let result;\n    let actionMatch = getTargetMatch(matches, location);\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      result = {\n        type: ResultType.error,\n        error: getInternalRouterError(405, {\n          method: request.method,\n          pathname: location.pathname,\n          routeId: actionMatch.route.id\n        })\n      };\n    } else {\n      let results = await callDataStrategy(\"action\", state, request, [actionMatch], matches, null);\n      result = results[actionMatch.route.id];\n      if (request.signal.aborted) {\n        return {\n          shortCircuited: true\n        };\n      }\n    }\n    if (isRedirectResult(result)) {\n      let replace;\n      if (opts && opts.replace != null) {\n        replace = opts.replace;\n      } else {\n        // If the user didn't explicity indicate replace behavior, replace if\n        // we redirected to the exact same location we're currently at to avoid\n        // double back-buttons\n        let location = normalizeRedirectLocation(result.response.headers.get(\"Location\"), new URL(request.url), basename);\n        replace = location === state.location.pathname + state.location.search;\n      }\n      await startRedirectNavigation(request, result, true, {\n        submission,\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    if (isDeferredResult(result)) {\n      throw getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n    }\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = findNearestBoundary(matches, actionMatch.route.id);\n      // By default, all submissions to the current location are REPLACE\n      // navigations, but if the action threw an error that'll be rendered in\n      // an errorElement, we fall back to PUSH so that the user can use the\n      // back button to get back to the pre-submission form location to try\n      // again\n      if ((opts && opts.replace) !== true) {\n        pendingAction = Action.Push;\n      }\n      return {\n        matches,\n        pendingActionResult: [boundaryMatch.route.id, result]\n      };\n    }\n    return {\n      matches,\n      pendingActionResult: [actionMatch.route.id, result]\n    };\n  }\n  // Call all applicable loaders for the given matches, handling redirects,\n  // errors, etc.\n  async function handleLoaders(request, location, matches, isFogOfWar, overrideNavigation, submission, fetcherSubmission, replace, initialHydration, flushSync, pendingActionResult) {\n    // Figure out the right navigation we want to use for data loading\n    let loadingNavigation = overrideNavigation || getLoadingNavigation(location, submission);\n    // If this was a redirect from an action we don't have a \"submission\" but\n    // we have it on the loading navigation so use that if available\n    let activeSubmission = submission || fetcherSubmission || getSubmissionFromNavigation(loadingNavigation);\n    // If this is an uninterrupted revalidation, we remain in our current idle\n    // state.  If not, we need to switch to our loading state and load data,\n    // preserving any new action data or existing action data (in the case of\n    // a revalidation interrupting an actionReload)\n    // If we have partialHydration enabled, then don't update the state for the\n    // initial data load since it's not a \"navigation\"\n    let shouldUpdateNavigationState = !isUninterruptedRevalidation && (!future.v7_partialHydration || !initialHydration);\n    // When fog of war is enabled, we enter our `loading` state earlier so we\n    // can discover new routes during the `loading` state.  We skip this if\n    // we've already run actions since we would have done our matching already.\n    // If the children() function threw then, we want to proceed with the\n    // partial matches it discovered.\n    if (isFogOfWar) {\n      if (shouldUpdateNavigationState) {\n        let actionData = getUpdatedActionData(pendingActionResult);\n        updateState(_extends({\n          navigation: loadingNavigation\n        }, actionData !== undefined ? {\n          actionData\n        } : {}), {\n          flushSync\n        });\n      }\n      let discoverResult = await discoverRoutes(matches, location.pathname, request.signal);\n      if (discoverResult.type === \"aborted\") {\n        return {\n          shortCircuited: true\n        };\n      } else if (discoverResult.type === \"error\") {\n        let {\n          boundaryId,\n          error\n        } = handleDiscoverRouteError(location.pathname, discoverResult);\n        return {\n          matches: discoverResult.partialMatches,\n          loaderData: {},\n          errors: {\n            [boundaryId]: error\n          }\n        };\n      } else if (!discoverResult.matches) {\n        let {\n          error,\n          notFoundMatches,\n          route\n        } = handleNavigational404(location.pathname);\n        return {\n          matches: notFoundMatches,\n          loaderData: {},\n          errors: {\n            [route.id]: error\n          }\n        };\n      } else {\n        matches = discoverResult.matches;\n      }\n    }\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, activeSubmission, location, future.v7_partialHydration && initialHydration === true, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult);\n    // Cancel pending deferreds for no-longer-matched routes or routes we're\n    // about to reload.  Note that if this is an action reload we would have\n    // already cancelled all pending deferreds so this would be a no-op\n    cancelActiveDeferreds(routeId => !(matches && matches.some(m => m.route.id === routeId)) || matchesToLoad && matchesToLoad.some(m => m.route.id === routeId));\n    pendingNavigationLoadId = ++incrementingLoadId;\n    // Short circuit if we have no loaders to run\n    if (matchesToLoad.length === 0 && revalidatingFetchers.length === 0) {\n      let updatedFetchers = markFetchRedirectsDone();\n      completeNavigation(location, _extends({\n        matches,\n        loaderData: {},\n        // Commit pending error if we're short circuiting\n        errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n          [pendingActionResult[0]]: pendingActionResult[1].error\n        } : null\n      }, getActionDataForCommit(pendingActionResult), updatedFetchers ? {\n        fetchers: new Map(state.fetchers)\n      } : {}), {\n        flushSync\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    if (shouldUpdateNavigationState) {\n      let updates = {};\n      if (!isFogOfWar) {\n        // Only update navigation/actionNData if we didn't already do it above\n        updates.navigation = loadingNavigation;\n        let actionData = getUpdatedActionData(pendingActionResult);\n        if (actionData !== undefined) {\n          updates.actionData = actionData;\n        }\n      }\n      if (revalidatingFetchers.length > 0) {\n        updates.fetchers = getUpdatedRevalidatingFetchers(revalidatingFetchers);\n      }\n      updateState(updates, {\n        flushSync\n      });\n    }\n    revalidatingFetchers.forEach(rf => {\n      if (fetchControllers.has(rf.key)) {\n        abortFetcher(rf.key);\n      }\n      if (rf.controller) {\n        // Fetchers use an independent AbortController so that aborting a fetcher\n        // (via deleteFetcher) does not abort the triggering navigation that\n        // triggered the revalidation\n        fetchControllers.set(rf.key, rf.controller);\n      }\n    });\n    // Proxy navigation abort through to revalidation fetchers\n    let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(f => abortFetcher(f.key));\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n    }\n    let {\n      loaderResults,\n      fetcherResults\n    } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, request);\n    if (request.signal.aborted) {\n      return {\n        shortCircuited: true\n      };\n    }\n    // Clean up _after_ loaders have completed.  Don't clean up if we short\n    // circuited because fetchControllers would have been aborted and\n    // reassigned to new controllers for the next navigation\n    if (pendingNavigationController) {\n      pendingNavigationController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n    }\n    revalidatingFetchers.forEach(rf => fetchControllers.delete(rf.key));\n    // If any loaders returned a redirect Response, start a new REPLACE navigation\n    let redirect = findRedirect(loaderResults);\n    if (redirect) {\n      await startRedirectNavigation(request, redirect.result, true, {\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    redirect = findRedirect(fetcherResults);\n    if (redirect) {\n      // If this redirect came from a fetcher make sure we mark it in\n      // fetchRedirectIds so it doesn't get revalidated on the next set of\n      // loader executions\n      fetchRedirectIds.add(redirect.key);\n      await startRedirectNavigation(request, redirect.result, true, {\n        replace\n      });\n      return {\n        shortCircuited: true\n      };\n    }\n    // Process and commit output from loaders\n    let {\n      loaderData,\n      errors\n    } = processLoaderData(state, matches, matchesToLoad, loaderResults, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds);\n    // Wire up subscribers to update loaderData as promises settle\n    activeDeferreds.forEach((deferredData, routeId) => {\n      deferredData.subscribe(aborted => {\n        // Note: No need to updateState here since the TrackedPromise on\n        // loaderData is stable across resolve/reject\n        // Remove this instance if we were aborted or if promises have settled\n        if (aborted || deferredData.done) {\n          activeDeferreds.delete(routeId);\n        }\n      });\n    });\n    // During partial hydration, preserve SSR errors for routes that don't re-run\n    if (future.v7_partialHydration && initialHydration && state.errors) {\n      Object.entries(state.errors).filter(_ref2 => {\n        let [id] = _ref2;\n        return !matchesToLoad.some(m => m.route.id === id);\n      }).forEach(_ref3 => {\n        let [routeId, error] = _ref3;\n        errors = Object.assign(errors || {}, {\n          [routeId]: error\n        });\n      });\n    }\n    let updatedFetchers = markFetchRedirectsDone();\n    let didAbortFetchLoads = abortStaleFetchLoads(pendingNavigationLoadId);\n    let shouldUpdateFetchers = updatedFetchers || didAbortFetchLoads || revalidatingFetchers.length > 0;\n    return _extends({\n      matches,\n      loaderData,\n      errors\n    }, shouldUpdateFetchers ? {\n      fetchers: new Map(state.fetchers)\n    } : {});\n  }\n  function getUpdatedActionData(pendingActionResult) {\n    if (pendingActionResult && !isErrorResult(pendingActionResult[1])) {\n      // This is cast to `any` currently because `RouteData`uses any and it\n      // would be a breaking change to use any.\n      // TODO: v7 - change `RouteData` to use `unknown` instead of `any`\n      return {\n        [pendingActionResult[0]]: pendingActionResult[1].data\n      };\n    } else if (state.actionData) {\n      if (Object.keys(state.actionData).length === 0) {\n        return null;\n      } else {\n        return state.actionData;\n      }\n    }\n  }\n  function getUpdatedRevalidatingFetchers(revalidatingFetchers) {\n    revalidatingFetchers.forEach(rf => {\n      let fetcher = state.fetchers.get(rf.key);\n      let revalidatingFetcher = getLoadingFetcher(undefined, fetcher ? fetcher.data : undefined);\n      state.fetchers.set(rf.key, revalidatingFetcher);\n    });\n    return new Map(state.fetchers);\n  }\n  // Trigger a fetcher load/submit for the given fetcher key\n  function fetch(key, routeId, href, opts) {\n    if (isServer) {\n      throw new Error(\"router.fetch() was called during the server render, but it shouldn't be. \" + \"You are likely calling a useFetcher() method in the body of your component. \" + \"Try moving it to a useEffect or a callback.\");\n    }\n    if (fetchControllers.has(key)) abortFetcher(key);\n    let flushSync = (opts && opts.unstable_flushSync) === true;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let normalizedPath = normalizeTo(state.location, state.matches, basename, future.v7_prependBasename, href, future.v7_relativeSplatPath, routeId, opts == null ? void 0 : opts.relative);\n    let matches = matchRoutes(routesToUse, normalizedPath, basename);\n    let fogOfWar = checkFogOfWar(matches, routesToUse, normalizedPath);\n    if (fogOfWar.active && fogOfWar.matches) {\n      matches = fogOfWar.matches;\n    }\n    if (!matches) {\n      setFetcherError(key, routeId, getInternalRouterError(404, {\n        pathname: normalizedPath\n      }), {\n        flushSync\n      });\n      return;\n    }\n    let {\n      path,\n      submission,\n      error\n    } = normalizeNavigateOptions(future.v7_normalizeFormMethod, true, normalizedPath, opts);\n    if (error) {\n      setFetcherError(key, routeId, error, {\n        flushSync\n      });\n      return;\n    }\n    let match = getTargetMatch(matches, path);\n    pendingPreventScrollReset = (opts && opts.preventScrollReset) === true;\n    if (submission && isMutationMethod(submission.formMethod)) {\n      handleFetcherAction(key, routeId, path, match, matches, fogOfWar.active, flushSync, submission);\n      return;\n    }\n    // Store off the match so we can call it's shouldRevalidate on subsequent\n    // revalidations\n    fetchLoadMatches.set(key, {\n      routeId,\n      path\n    });\n    handleFetcherLoader(key, routeId, path, match, matches, fogOfWar.active, flushSync, submission);\n  }\n  // Call the action for the matched fetcher.submit(), and then handle redirects,\n  // errors, and revalidation\n  async function handleFetcherAction(key, routeId, path, match, requestMatches, isFogOfWar, flushSync, submission) {\n    interruptActiveLoads();\n    fetchLoadMatches.delete(key);\n    function detectAndHandle405Error(m) {\n      if (!m.route.action && !m.route.lazy) {\n        let error = getInternalRouterError(405, {\n          method: submission.formMethod,\n          pathname: path,\n          routeId: routeId\n        });\n        setFetcherError(key, routeId, error, {\n          flushSync\n        });\n        return true;\n      }\n      return false;\n    }\n    if (!isFogOfWar && detectAndHandle405Error(match)) {\n      return;\n    }\n    // Put this fetcher into it's submitting state\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(key, getSubmittingFetcher(submission, existingFetcher), {\n      flushSync\n    });\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(init.history, path, abortController.signal, submission);\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(requestMatches, path, fetchRequest.signal);\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        let {\n          error\n        } = handleDiscoverRouteError(path, discoverResult);\n        setFetcherError(key, routeId, error, {\n          flushSync\n        });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(key, routeId, getInternalRouterError(404, {\n          pathname: path\n        }), {\n          flushSync\n        });\n        return;\n      } else {\n        requestMatches = discoverResult.matches;\n        match = getTargetMatch(requestMatches, path);\n        if (detectAndHandle405Error(match)) {\n          return;\n        }\n      }\n    }\n    // Call the action for the fetcher\n    fetchControllers.set(key, abortController);\n    let originatingLoadId = incrementingLoadId;\n    let actionResults = await callDataStrategy(\"action\", state, fetchRequest, [match], requestMatches, key);\n    let actionResult = actionResults[match.route.id];\n    if (fetchRequest.signal.aborted) {\n      // We can delete this so long as we weren't aborted by our own fetcher\n      // re-submit which would have put _new_ controller is in fetchControllers\n      if (fetchControllers.get(key) === abortController) {\n        fetchControllers.delete(key);\n      }\n      return;\n    }\n    // When using v7_fetcherPersist, we don't want errors bubbling up to the UI\n    // or redirects processed for unmounted fetchers so we just revert them to\n    // idle\n    if (future.v7_fetcherPersist && deletedFetchers.has(key)) {\n      if (isRedirectResult(actionResult) || isErrorResult(actionResult)) {\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      }\n      // Let SuccessResult's fall through for revalidation\n    } else {\n      if (isRedirectResult(actionResult)) {\n        fetchControllers.delete(key);\n        if (pendingNavigationLoadId > originatingLoadId) {\n          // A new navigation was kicked off after our action started, so that\n          // should take precedence over this redirect navigation.  We already\n          // set isRevalidationRequired so all loaders for the new route should\n          // fire unless opted out via shouldRevalidate\n          updateFetcherState(key, getDoneFetcher(undefined));\n          return;\n        } else {\n          fetchRedirectIds.add(key);\n          updateFetcherState(key, getLoadingFetcher(submission));\n          return startRedirectNavigation(fetchRequest, actionResult, false, {\n            fetcherSubmission: submission\n          });\n        }\n      }\n      // Process any non-redirect errors thrown\n      if (isErrorResult(actionResult)) {\n        setFetcherError(key, routeId, actionResult.error);\n        return;\n      }\n    }\n    if (isDeferredResult(actionResult)) {\n      throw getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n    }\n    // Start the data load for current matches, or the next location if we're\n    // in the middle of a navigation\n    let nextLocation = state.navigation.location || state.location;\n    let revalidationRequest = createClientSideRequest(init.history, nextLocation, abortController.signal);\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let matches = state.navigation.state !== \"idle\" ? matchRoutes(routesToUse, state.navigation.location, basename) : state.matches;\n    invariant(matches, \"Didn't find any matches after fetcher action\");\n    let loadId = ++incrementingLoadId;\n    fetchReloadIds.set(key, loadId);\n    let loadFetcher = getLoadingFetcher(submission, actionResult.data);\n    state.fetchers.set(key, loadFetcher);\n    let [matchesToLoad, revalidatingFetchers] = getMatchesToLoad(init.history, state, matches, submission, nextLocation, false, future.v7_skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, [match.route.id, actionResult]);\n    // Put all revalidating fetchers into the loading state, except for the\n    // current fetcher which we want to keep in it's current loading state which\n    // contains it's action submission info + action data\n    revalidatingFetchers.filter(rf => rf.key !== key).forEach(rf => {\n      let staleKey = rf.key;\n      let existingFetcher = state.fetchers.get(staleKey);\n      let revalidatingFetcher = getLoadingFetcher(undefined, existingFetcher ? existingFetcher.data : undefined);\n      state.fetchers.set(staleKey, revalidatingFetcher);\n      if (fetchControllers.has(staleKey)) {\n        abortFetcher(staleKey);\n      }\n      if (rf.controller) {\n        fetchControllers.set(staleKey, rf.controller);\n      }\n    });\n    updateState({\n      fetchers: new Map(state.fetchers)\n    });\n    let abortPendingFetchRevalidations = () => revalidatingFetchers.forEach(rf => abortFetcher(rf.key));\n    abortController.signal.addEventListener(\"abort\", abortPendingFetchRevalidations);\n    let {\n      loaderResults,\n      fetcherResults\n    } = await callLoadersAndMaybeResolveData(state, matches, matchesToLoad, revalidatingFetchers, revalidationRequest);\n    if (abortController.signal.aborted) {\n      return;\n    }\n    abortController.signal.removeEventListener(\"abort\", abortPendingFetchRevalidations);\n    fetchReloadIds.delete(key);\n    fetchControllers.delete(key);\n    revalidatingFetchers.forEach(r => fetchControllers.delete(r.key));\n    let redirect = findRedirect(loaderResults);\n    if (redirect) {\n      return startRedirectNavigation(revalidationRequest, redirect.result, false);\n    }\n    redirect = findRedirect(fetcherResults);\n    if (redirect) {\n      // If this redirect came from a fetcher make sure we mark it in\n      // fetchRedirectIds so it doesn't get revalidated on the next set of\n      // loader executions\n      fetchRedirectIds.add(redirect.key);\n      return startRedirectNavigation(revalidationRequest, redirect.result, false);\n    }\n    // Process and commit output from loaders\n    let {\n      loaderData,\n      errors\n    } = processLoaderData(state, matches, matchesToLoad, loaderResults, undefined, revalidatingFetchers, fetcherResults, activeDeferreds);\n    // Since we let revalidations complete even if the submitting fetcher was\n    // deleted, only put it back to idle if it hasn't been deleted\n    if (state.fetchers.has(key)) {\n      let doneFetcher = getDoneFetcher(actionResult.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n    abortStaleFetchLoads(loadId);\n    // If we are currently in a navigation loading state and this fetcher is\n    // more recent than the navigation, we want the newer data so abort the\n    // navigation and complete it with the fetcher data\n    if (state.navigation.state === \"loading\" && loadId > pendingNavigationLoadId) {\n      invariant(pendingAction, \"Expected pending action\");\n      pendingNavigationController && pendingNavigationController.abort();\n      completeNavigation(state.navigation.location, {\n        matches,\n        loaderData,\n        errors,\n        fetchers: new Map(state.fetchers)\n      });\n    } else {\n      // otherwise just update with the fetcher data, preserving any existing\n      // loaderData for loaders that did not need to reload.  We have to\n      // manually merge here since we aren't going through completeNavigation\n      updateState({\n        errors,\n        loaderData: mergeLoaderData(state.loaderData, loaderData, matches, errors),\n        fetchers: new Map(state.fetchers)\n      });\n      isRevalidationRequired = false;\n    }\n  }\n  // Call the matched loader for fetcher.load(), handling redirects, errors, etc.\n  async function handleFetcherLoader(key, routeId, path, match, matches, isFogOfWar, flushSync, submission) {\n    let existingFetcher = state.fetchers.get(key);\n    updateFetcherState(key, getLoadingFetcher(submission, existingFetcher ? existingFetcher.data : undefined), {\n      flushSync\n    });\n    let abortController = new AbortController();\n    let fetchRequest = createClientSideRequest(init.history, path, abortController.signal);\n    if (isFogOfWar) {\n      let discoverResult = await discoverRoutes(matches, path, fetchRequest.signal);\n      if (discoverResult.type === \"aborted\") {\n        return;\n      } else if (discoverResult.type === \"error\") {\n        let {\n          error\n        } = handleDiscoverRouteError(path, discoverResult);\n        setFetcherError(key, routeId, error, {\n          flushSync\n        });\n        return;\n      } else if (!discoverResult.matches) {\n        setFetcherError(key, routeId, getInternalRouterError(404, {\n          pathname: path\n        }), {\n          flushSync\n        });\n        return;\n      } else {\n        matches = discoverResult.matches;\n        match = getTargetMatch(matches, path);\n      }\n    }\n    // Call the loader for this fetcher route match\n    fetchControllers.set(key, abortController);\n    let originatingLoadId = incrementingLoadId;\n    let results = await callDataStrategy(\"loader\", state, fetchRequest, [match], matches, key);\n    let result = results[match.route.id];\n    // Deferred isn't supported for fetcher loads, await everything and treat it\n    // as a normal load.  resolveDeferredData will return undefined if this\n    // fetcher gets aborted, so we just leave result untouched and short circuit\n    // below if that happens\n    if (isDeferredResult(result)) {\n      result = (await resolveDeferredData(result, fetchRequest.signal, true)) || result;\n    }\n    // We can delete this so long as we weren't aborted by our our own fetcher\n    // re-load which would have put _new_ controller is in fetchControllers\n    if (fetchControllers.get(key) === abortController) {\n      fetchControllers.delete(key);\n    }\n    if (fetchRequest.signal.aborted) {\n      return;\n    }\n    // We don't want errors bubbling up or redirects followed for unmounted\n    // fetchers, so short circuit here if it was removed from the UI\n    if (deletedFetchers.has(key)) {\n      updateFetcherState(key, getDoneFetcher(undefined));\n      return;\n    }\n    // If the loader threw a redirect Response, start a new REPLACE navigation\n    if (isRedirectResult(result)) {\n      if (pendingNavigationLoadId > originatingLoadId) {\n        // A new navigation was kicked off after our loader started, so that\n        // should take precedence over this redirect navigation\n        updateFetcherState(key, getDoneFetcher(undefined));\n        return;\n      } else {\n        fetchRedirectIds.add(key);\n        await startRedirectNavigation(fetchRequest, result, false);\n        return;\n      }\n    }\n    // Process any non-redirect errors thrown\n    if (isErrorResult(result)) {\n      setFetcherError(key, routeId, result.error);\n      return;\n    }\n    invariant(!isDeferredResult(result), \"Unhandled fetcher deferred data\");\n    // Put the fetcher back into an idle state\n    updateFetcherState(key, getDoneFetcher(result.data));\n  }\n  /**\n   * Utility function to handle redirects returned from an action or loader.\n   * Normally, a redirect \"replaces\" the navigation that triggered it.  So, for\n   * example:\n   *\n   *  - user is on /a\n   *  - user clicks a link to /b\n   *  - loader for /b redirects to /c\n   *\n   * In a non-JS app the browser would track the in-flight navigation to /b and\n   * then replace it with /c when it encountered the redirect response.  In\n   * the end it would only ever update the URL bar with /c.\n   *\n   * In client-side routing using pushState/replaceState, we aim to emulate\n   * this behavior and we also do not update history until the end of the\n   * navigation (including processed redirects).  This means that we never\n   * actually touch history until we've processed redirects, so we just use\n   * the history action from the original navigation (PUSH or REPLACE).\n   */\n  async function startRedirectNavigation(request, redirect, isNavigation, _temp2) {\n    let {\n      submission,\n      fetcherSubmission,\n      replace\n    } = _temp2 === void 0 ? {} : _temp2;\n    if (redirect.response.headers.has(\"X-Remix-Revalidate\")) {\n      isRevalidationRequired = true;\n    }\n    let location = redirect.response.headers.get(\"Location\");\n    invariant(location, \"Expected a Location header on the redirect Response\");\n    location = normalizeRedirectLocation(location, new URL(request.url), basename);\n    let redirectLocation = createLocation(state.location, location, {\n      _isRedirect: true\n    });\n    if (isBrowser) {\n      let isDocumentReload = false;\n      if (redirect.response.headers.has(\"X-Remix-Reload-Document\")) {\n        // Hard reload if the response contained X-Remix-Reload-Document\n        isDocumentReload = true;\n      } else if (ABSOLUTE_URL_REGEX.test(location)) {\n        const url = init.history.createURL(location);\n        isDocumentReload =\n        // Hard reload if it's an absolute URL to a new origin\n        url.origin !== routerWindow.location.origin ||\n        // Hard reload if it's an absolute URL that does not match our basename\n        stripBasename(url.pathname, basename) == null;\n      }\n      if (isDocumentReload) {\n        if (replace) {\n          routerWindow.location.replace(location);\n        } else {\n          routerWindow.location.assign(location);\n        }\n        return;\n      }\n    }\n    // There's no need to abort on redirects, since we don't detect the\n    // redirect until the action/loaders have settled\n    pendingNavigationController = null;\n    let redirectHistoryAction = replace === true || redirect.response.headers.has(\"X-Remix-Replace\") ? Action.Replace : Action.Push;\n    // Use the incoming submission if provided, fallback on the active one in\n    // state.navigation\n    let {\n      formMethod,\n      formAction,\n      formEncType\n    } = state.navigation;\n    if (!submission && !fetcherSubmission && formMethod && formAction && formEncType) {\n      submission = getSubmissionFromNavigation(state.navigation);\n    }\n    // If this was a 307/308 submission we want to preserve the HTTP method and\n    // re-submit the GET/POST/PUT/PATCH/DELETE as a submission navigation to the\n    // redirected location\n    let activeSubmission = submission || fetcherSubmission;\n    if (redirectPreserveMethodStatusCodes.has(redirect.response.status) && activeSubmission && isMutationMethod(activeSubmission.formMethod)) {\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        submission: _extends({}, activeSubmission, {\n          formAction: location\n        }),\n        // Preserve these flags across redirects\n        preventScrollReset: pendingPreventScrollReset,\n        enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined\n      });\n    } else {\n      // If we have a navigation submission, we will preserve it through the\n      // redirect navigation\n      let overrideNavigation = getLoadingNavigation(redirectLocation, submission);\n      await startNavigation(redirectHistoryAction, redirectLocation, {\n        overrideNavigation,\n        // Send fetcher submissions through for shouldRevalidate\n        fetcherSubmission,\n        // Preserve these flags across redirects\n        preventScrollReset: pendingPreventScrollReset,\n        enableViewTransition: isNavigation ? pendingViewTransitionEnabled : undefined\n      });\n    }\n  }\n  // Utility wrapper for calling dataStrategy client-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(type, state, request, matchesToLoad, matches, fetcherKey) {\n    let results;\n    let dataResults = {};\n    try {\n      results = await callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties);\n    } catch (e) {\n      // If the outer dataStrategy method throws, just return the error for all\n      // matches - and it'll naturally bubble to the root\n      matchesToLoad.forEach(m => {\n        dataResults[m.route.id] = {\n          type: ResultType.error,\n          error: e\n        };\n      });\n      return dataResults;\n    }\n    for (let [routeId, result] of Object.entries(results)) {\n      if (isRedirectDataStrategyResultResult(result)) {\n        let response = result.result;\n        dataResults[routeId] = {\n          type: ResultType.redirect,\n          response: normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, future.v7_relativeSplatPath)\n        };\n      } else {\n        dataResults[routeId] = await convertDataStrategyResultToDataResult(result);\n      }\n    }\n    return dataResults;\n  }\n  async function callLoadersAndMaybeResolveData(state, matches, matchesToLoad, fetchersToLoad, request) {\n    let currentMatches = state.matches;\n    // Kick off loaders and fetchers in parallel\n    let loaderResultsPromise = callDataStrategy(\"loader\", state, request, matchesToLoad, matches, null);\n    let fetcherResultsPromise = Promise.all(fetchersToLoad.map(async f => {\n      if (f.matches && f.match && f.controller) {\n        let results = await callDataStrategy(\"loader\", state, createClientSideRequest(init.history, f.path, f.controller.signal), [f.match], f.matches, f.key);\n        let result = results[f.match.route.id];\n        // Fetcher results are keyed by fetcher key from here on out, not routeId\n        return {\n          [f.key]: result\n        };\n      } else {\n        return Promise.resolve({\n          [f.key]: {\n            type: ResultType.error,\n            error: getInternalRouterError(404, {\n              pathname: f.path\n            })\n          }\n        });\n      }\n    }));\n    let loaderResults = await loaderResultsPromise;\n    let fetcherResults = (await fetcherResultsPromise).reduce((acc, r) => Object.assign(acc, r), {});\n    await Promise.all([resolveNavigationDeferredResults(matches, loaderResults, request.signal, currentMatches, state.loaderData), resolveFetcherDeferredResults(matches, fetcherResults, fetchersToLoad)]);\n    return {\n      loaderResults,\n      fetcherResults\n    };\n  }\n  function interruptActiveLoads() {\n    // Every interruption triggers a revalidation\n    isRevalidationRequired = true;\n    // Cancel pending route-level deferreds and mark cancelled routes for\n    // revalidation\n    cancelledDeferredRoutes.push(...cancelActiveDeferreds());\n    // Abort in-flight fetcher loads\n    fetchLoadMatches.forEach((_, key) => {\n      if (fetchControllers.has(key)) {\n        cancelledFetcherLoads.add(key);\n        abortFetcher(key);\n      }\n    });\n  }\n  function updateFetcherState(key, fetcher, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    state.fetchers.set(key, fetcher);\n    updateState({\n      fetchers: new Map(state.fetchers)\n    }, {\n      flushSync: (opts && opts.flushSync) === true\n    });\n  }\n  function setFetcherError(key, routeId, error, opts) {\n    if (opts === void 0) {\n      opts = {};\n    }\n    let boundaryMatch = findNearestBoundary(state.matches, routeId);\n    deleteFetcher(key);\n    updateState({\n      errors: {\n        [boundaryMatch.route.id]: error\n      },\n      fetchers: new Map(state.fetchers)\n    }, {\n      flushSync: (opts && opts.flushSync) === true\n    });\n  }\n  function getFetcher(key) {\n    if (future.v7_fetcherPersist) {\n      activeFetchers.set(key, (activeFetchers.get(key) || 0) + 1);\n      // If this fetcher was previously marked for deletion, unmark it since we\n      // have a new instance\n      if (deletedFetchers.has(key)) {\n        deletedFetchers.delete(key);\n      }\n    }\n    return state.fetchers.get(key) || IDLE_FETCHER;\n  }\n  function deleteFetcher(key) {\n    let fetcher = state.fetchers.get(key);\n    // Don't abort the controller if this is a deletion of a fetcher.submit()\n    // in it's loading phase since - we don't want to abort the corresponding\n    // revalidation and want them to complete and land\n    if (fetchControllers.has(key) && !(fetcher && fetcher.state === \"loading\" && fetchReloadIds.has(key))) {\n      abortFetcher(key);\n    }\n    fetchLoadMatches.delete(key);\n    fetchReloadIds.delete(key);\n    fetchRedirectIds.delete(key);\n    deletedFetchers.delete(key);\n    cancelledFetcherLoads.delete(key);\n    state.fetchers.delete(key);\n  }\n  function deleteFetcherAndUpdateState(key) {\n    if (future.v7_fetcherPersist) {\n      let count = (activeFetchers.get(key) || 0) - 1;\n      if (count <= 0) {\n        activeFetchers.delete(key);\n        deletedFetchers.add(key);\n      } else {\n        activeFetchers.set(key, count);\n      }\n    } else {\n      deleteFetcher(key);\n    }\n    updateState({\n      fetchers: new Map(state.fetchers)\n    });\n  }\n  function abortFetcher(key) {\n    let controller = fetchControllers.get(key);\n    invariant(controller, \"Expected fetch controller: \" + key);\n    controller.abort();\n    fetchControllers.delete(key);\n  }\n  function markFetchersDone(keys) {\n    for (let key of keys) {\n      let fetcher = getFetcher(key);\n      let doneFetcher = getDoneFetcher(fetcher.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  }\n  function markFetchRedirectsDone() {\n    let doneKeys = [];\n    let updatedFetchers = false;\n    for (let key of fetchRedirectIds) {\n      let fetcher = state.fetchers.get(key);\n      invariant(fetcher, \"Expected fetcher: \" + key);\n      if (fetcher.state === \"loading\") {\n        fetchRedirectIds.delete(key);\n        doneKeys.push(key);\n        updatedFetchers = true;\n      }\n    }\n    markFetchersDone(doneKeys);\n    return updatedFetchers;\n  }\n  function abortStaleFetchLoads(landedId) {\n    let yeetedKeys = [];\n    for (let [key, id] of fetchReloadIds) {\n      if (id < landedId) {\n        let fetcher = state.fetchers.get(key);\n        invariant(fetcher, \"Expected fetcher: \" + key);\n        if (fetcher.state === \"loading\") {\n          abortFetcher(key);\n          fetchReloadIds.delete(key);\n          yeetedKeys.push(key);\n        }\n      }\n    }\n    markFetchersDone(yeetedKeys);\n    return yeetedKeys.length > 0;\n  }\n  function getBlocker(key, fn) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n    if (blockerFunctions.get(key) !== fn) {\n      blockerFunctions.set(key, fn);\n    }\n    return blocker;\n  }\n  function deleteBlocker(key) {\n    state.blockers.delete(key);\n    blockerFunctions.delete(key);\n  }\n  // Utility function to update blockers, ensuring valid state transitions\n  function updateBlocker(key, newBlocker) {\n    let blocker = state.blockers.get(key) || IDLE_BLOCKER;\n    // Poor mans state machine :)\n    // https://mermaid.live/edit#pako:eNqVkc9OwzAMxl8l8nnjAYrEtDIOHEBIgwvKJTReGy3_lDpIqO27k6awMG0XcrLlnz87nwdonESogKXXBuE79rq75XZO3-yHds0RJVuv70YrPlUrCEe2HfrORS3rubqZfuhtpg5C9wk5tZ4VKcRUq88q9Z8RS0-48cE1iHJkL0ugbHuFLus9L6spZy8nX9MP2CNdomVaposqu3fGayT8T8-jJQwhepo_UtpgBQaDEUom04dZhAN1aJBDlUKJBxE1ceB2Smj0Mln-IBW5AFU2dwUiktt_2Qaq2dBfaKdEup85UV7Yd-dKjlnkabl2Pvr0DTkTreM\n    invariant(blocker.state === \"unblocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"blocked\" || blocker.state === \"blocked\" && newBlocker.state === \"proceeding\" || blocker.state === \"blocked\" && newBlocker.state === \"unblocked\" || blocker.state === \"proceeding\" && newBlocker.state === \"unblocked\", \"Invalid blocker state transition: \" + blocker.state + \" -> \" + newBlocker.state);\n    let blockers = new Map(state.blockers);\n    blockers.set(key, newBlocker);\n    updateState({\n      blockers\n    });\n  }\n  function shouldBlockNavigation(_ref4) {\n    let {\n      currentLocation,\n      nextLocation,\n      historyAction\n    } = _ref4;\n    if (blockerFunctions.size === 0) {\n      return;\n    }\n    // We ony support a single active blocker at the moment since we don't have\n    // any compelling use cases for multi-blocker yet\n    if (blockerFunctions.size > 1) {\n      warning(false, \"A router only supports one blocker at a time\");\n    }\n    let entries = Array.from(blockerFunctions.entries());\n    let [blockerKey, blockerFunction] = entries[entries.length - 1];\n    let blocker = state.blockers.get(blockerKey);\n    if (blocker && blocker.state === \"proceeding\") {\n      // If the blocker is currently proceeding, we don't need to re-check\n      // it and can let this navigation continue\n      return;\n    }\n    // At this point, we know we're unblocked/blocked so we need to check the\n    // user-provided blocker function\n    if (blockerFunction({\n      currentLocation,\n      nextLocation,\n      historyAction\n    })) {\n      return blockerKey;\n    }\n  }\n  function handleNavigational404(pathname) {\n    let error = getInternalRouterError(404, {\n      pathname\n    });\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    let {\n      matches,\n      route\n    } = getShortCircuitMatches(routesToUse);\n    // Cancel all pending deferred on 404s since we don't keep any routes\n    cancelActiveDeferreds();\n    return {\n      notFoundMatches: matches,\n      route,\n      error\n    };\n  }\n  function handleDiscoverRouteError(pathname, discoverResult) {\n    return {\n      boundaryId: findNearestBoundary(discoverResult.partialMatches).route.id,\n      error: getInternalRouterError(400, {\n        type: \"route-discovery\",\n        pathname,\n        message: discoverResult.error != null && \"message\" in discoverResult.error ? discoverResult.error : String(discoverResult.error)\n      })\n    };\n  }\n  function cancelActiveDeferreds(predicate) {\n    let cancelledRouteIds = [];\n    activeDeferreds.forEach((dfd, routeId) => {\n      if (!predicate || predicate(routeId)) {\n        // Cancel the deferred - but do not remove from activeDeferreds here -\n        // we rely on the subscribers to do that so our tests can assert proper\n        // cleanup via _internalActiveDeferreds\n        dfd.cancel();\n        cancelledRouteIds.push(routeId);\n        activeDeferreds.delete(routeId);\n      }\n    });\n    return cancelledRouteIds;\n  }\n  // Opt in to capturing and reporting scroll positions during navigations,\n  // used by the <ScrollRestoration> component\n  function enableScrollRestoration(positions, getPosition, getKey) {\n    savedScrollPositions = positions;\n    getScrollPosition = getPosition;\n    getScrollRestorationKey = getKey || null;\n    // Perform initial hydration scroll restoration, since we miss the boat on\n    // the initial updateState() because we've not yet rendered <ScrollRestoration/>\n    // and therefore have no savedScrollPositions available\n    if (!initialScrollRestored && state.navigation === IDLE_NAVIGATION) {\n      initialScrollRestored = true;\n      let y = getSavedScrollPosition(state.location, state.matches);\n      if (y != null) {\n        updateState({\n          restoreScrollPosition: y\n        });\n      }\n    }\n    return () => {\n      savedScrollPositions = null;\n      getScrollPosition = null;\n      getScrollRestorationKey = null;\n    };\n  }\n  function getScrollKey(location, matches) {\n    if (getScrollRestorationKey) {\n      let key = getScrollRestorationKey(location, matches.map(m => convertRouteMatchToUiMatch(m, state.loaderData)));\n      return key || location.key;\n    }\n    return location.key;\n  }\n  function saveScrollPosition(location, matches) {\n    if (savedScrollPositions && getScrollPosition) {\n      let key = getScrollKey(location, matches);\n      savedScrollPositions[key] = getScrollPosition();\n    }\n  }\n  function getSavedScrollPosition(location, matches) {\n    if (savedScrollPositions) {\n      let key = getScrollKey(location, matches);\n      let y = savedScrollPositions[key];\n      if (typeof y === \"number\") {\n        return y;\n      }\n    }\n    return null;\n  }\n  function checkFogOfWar(matches, routesToUse, pathname) {\n    if (patchRoutesOnNavigationImpl) {\n      // Don't bother re-calling patchRouteOnMiss for a path we've already\n      // processed.  the last execution would have patched the route tree\n      // accordingly so `matches` here are already accurate.\n      if (discoveredRoutes.has(pathname)) {\n        return {\n          active: false,\n          matches\n        };\n      }\n      if (!matches) {\n        let fogMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n        return {\n          active: true,\n          matches: fogMatches || []\n        };\n      } else {\n        if (Object.keys(matches[0].params).length > 0) {\n          // If we matched a dynamic param or a splat, it might only be because\n          // we haven't yet discovered other routes that would match with a\n          // higher score.  Call patchRoutesOnNavigation just to be sure\n          let partialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n          return {\n            active: true,\n            matches: partialMatches\n          };\n        }\n      }\n    }\n    return {\n      active: false,\n      matches: null\n    };\n  }\n  async function discoverRoutes(matches, pathname, signal) {\n    let partialMatches = matches;\n    while (true) {\n      let isNonHMR = inFlightDataRoutes == null;\n      let routesToUse = inFlightDataRoutes || dataRoutes;\n      try {\n        await loadLazyRouteChildren(patchRoutesOnNavigationImpl, pathname, partialMatches, routesToUse, manifest, mapRouteProperties, pendingPatchRoutes, signal);\n      } catch (e) {\n        return {\n          type: \"error\",\n          error: e,\n          partialMatches\n        };\n      } finally {\n        // If we are not in the middle of an HMR revalidation and we changed the\n        // routes, provide a new identity so when we `updateState` at the end of\n        // this navigation/fetch `router.routes` will be a new identity and\n        // trigger a re-run of memoized `router.routes` dependencies.\n        // HMR will already update the identity and reflow when it lands\n        // `inFlightDataRoutes` in `completeNavigation`\n        if (isNonHMR) {\n          dataRoutes = [...dataRoutes];\n        }\n      }\n      if (signal.aborted) {\n        return {\n          type: \"aborted\"\n        };\n      }\n      let newMatches = matchRoutes(routesToUse, pathname, basename);\n      if (newMatches) {\n        addToFifoQueue(pathname, discoveredRoutes);\n        return {\n          type: \"success\",\n          matches: newMatches\n        };\n      }\n      let newPartialMatches = matchRoutesImpl(routesToUse, pathname, basename, true);\n      // Avoid loops if the second pass results in the same partial matches\n      if (!newPartialMatches || partialMatches.length === newPartialMatches.length && partialMatches.every((m, i) => m.route.id === newPartialMatches[i].route.id)) {\n        addToFifoQueue(pathname, discoveredRoutes);\n        return {\n          type: \"success\",\n          matches: null\n        };\n      }\n      partialMatches = newPartialMatches;\n    }\n  }\n  function addToFifoQueue(path, queue) {\n    if (queue.size >= discoveredRoutesMaxSize) {\n      let first = queue.values().next().value;\n      queue.delete(first);\n    }\n    queue.add(path);\n  }\n  function _internalSetRoutes(newRoutes) {\n    manifest = {};\n    inFlightDataRoutes = convertRoutesToDataRoutes(newRoutes, mapRouteProperties, undefined, manifest);\n  }\n  function patchRoutes(routeId, children) {\n    let isNonHMR = inFlightDataRoutes == null;\n    let routesToUse = inFlightDataRoutes || dataRoutes;\n    patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties);\n    // If we are not in the middle of an HMR revalidation and we changed the\n    // routes, provide a new identity and trigger a reflow via `updateState`\n    // to re-run memoized `router.routes` dependencies.\n    // HMR will already update the identity and reflow when it lands\n    // `inFlightDataRoutes` in `completeNavigation`\n    if (isNonHMR) {\n      dataRoutes = [...dataRoutes];\n      updateState({});\n    }\n  }\n  router = {\n    get basename() {\n      return basename;\n    },\n    get future() {\n      return future;\n    },\n    get state() {\n      return state;\n    },\n    get routes() {\n      return dataRoutes;\n    },\n    get window() {\n      return routerWindow;\n    },\n    initialize,\n    subscribe,\n    enableScrollRestoration,\n    navigate,\n    fetch,\n    revalidate,\n    // Passthrough to history-aware createHref used by useHref so we get proper\n    // hash-aware URLs in DOM paths\n    createHref: to => init.history.createHref(to),\n    encodeLocation: to => init.history.encodeLocation(to),\n    getFetcher,\n    deleteFetcher: deleteFetcherAndUpdateState,\n    dispose,\n    getBlocker,\n    deleteBlocker,\n    patchRoutes,\n    _internalFetchControllers: fetchControllers,\n    _internalActiveDeferreds: activeDeferreds,\n    // TODO: Remove setRoutes, it's temporary to avoid dealing with\n    // updating the tree while validating the update algorithm.\n    _internalSetRoutes\n  };\n  return router;\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region createStaticHandler\n////////////////////////////////////////////////////////////////////////////////\nconst UNSAFE_DEFERRED_SYMBOL = Symbol(\"deferred\");\nfunction createStaticHandler(routes, opts) {\n  invariant(routes.length > 0, \"You must provide a non-empty routes array to createStaticHandler\");\n  let manifest = {};\n  let basename = (opts ? opts.basename : null) || \"/\";\n  let mapRouteProperties;\n  if (opts != null && opts.mapRouteProperties) {\n    mapRouteProperties = opts.mapRouteProperties;\n  } else if (opts != null && opts.detectErrorBoundary) {\n    // If they are still using the deprecated version, wrap it with the new API\n    let detectErrorBoundary = opts.detectErrorBoundary;\n    mapRouteProperties = route => ({\n      hasErrorBoundary: detectErrorBoundary(route)\n    });\n  } else {\n    mapRouteProperties = defaultMapRouteProperties;\n  }\n  // Config driven behavior flags\n  let future = _extends({\n    v7_relativeSplatPath: false,\n    v7_throwAbortReason: false\n  }, opts ? opts.future : null);\n  let dataRoutes = convertRoutesToDataRoutes(routes, mapRouteProperties, undefined, manifest);\n  /**\n   * The query() method is intended for document requests, in which we want to\n   * call an optional action and potentially multiple loaders for all nested\n   * routes.  It returns a StaticHandlerContext object, which is very similar\n   * to the router state (location, loaderData, actionData, errors, etc.) and\n   * also adds SSR-specific information such as the statusCode and headers\n   * from action/loaders Responses.\n   *\n   * It _should_ never throw and should report all errors through the\n   * returned context.errors object, properly associating errors to their error\n   * boundary.  Additionally, it tracks _deepestRenderedBoundaryId which can be\n   * used to emulate React error boundaries during SSr by performing a second\n   * pass only down to the boundaryId.\n   *\n   * The one exception where we do not return a StaticHandlerContext is when a\n   * redirect response is returned or thrown from any action/loader.  We\n   * propagate that out and return the raw Response so the HTTP server can\n   * return it directly.\n   *\n   * - `opts.requestContext` is an optional server context that will be passed\n   *   to actions/loaders in the `context` parameter\n   * - `opts.skipLoaderErrorBubbling` is an optional parameter that will prevent\n   *   the bubbling of errors which allows single-fetch-type implementations\n   *   where the client will handle the bubbling and we may need to return data\n   *   for the handling route\n   */\n  async function query(request, _temp3) {\n    let {\n      requestContext,\n      skipLoaderErrorBubbling,\n      unstable_dataStrategy\n    } = _temp3 === void 0 ? {} : _temp3;\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\") {\n      let error = getInternalRouterError(405, {\n        method\n      });\n      let {\n        matches: methodNotAllowedMatches,\n        route\n      } = getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: methodNotAllowedMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    } else if (!matches) {\n      let error = getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n      let {\n        matches: notFoundMatches,\n        route\n      } = getShortCircuitMatches(dataRoutes);\n      return {\n        basename,\n        location,\n        matches: notFoundMatches,\n        loaderData: {},\n        actionData: null,\n        errors: {\n          [route.id]: error\n        },\n        statusCode: error.status,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    let result = await queryImpl(request, location, matches, requestContext, unstable_dataStrategy || null, skipLoaderErrorBubbling === true, null);\n    if (isResponse(result)) {\n      return result;\n    }\n    // When returning StaticHandlerContext, we patch back in the location here\n    // since we need it for React Context.  But this helps keep our submit and\n    // loadRouteData operating on a Request instead of a Location\n    return _extends({\n      location,\n      basename\n    }, result);\n  }\n  /**\n   * The queryRoute() method is intended for targeted route requests, either\n   * for fetch ?_data requests or resource route requests.  In this case, we\n   * are only ever calling a single action or loader, and we are returning the\n   * returned value directly.  In most cases, this will be a Response returned\n   * from the action/loader, but it may be a primitive or other value as well -\n   * and in such cases the calling context should handle that accordingly.\n   *\n   * We do respect the throw/return differentiation, so if an action/loader\n   * throws, then this method will throw the value.  This is important so we\n   * can do proper boundary identification in Remix where a thrown Response\n   * must go to the Catch Boundary but a returned Response is happy-path.\n   *\n   * One thing to note is that any Router-initiated Errors that make sense\n   * to associate with a status code will be thrown as an ErrorResponse\n   * instance which include the raw Error, such that the calling context can\n   * serialize the error as they see fit while including the proper response\n   * code.  Examples here are 404 and 405 errors that occur prior to reaching\n   * any user-defined loaders.\n   *\n   * - `opts.routeId` allows you to specify the specific route handler to call.\n   *   If not provided the handler will determine the proper route by matching\n   *   against `request.url`\n   * - `opts.requestContext` is an optional server context that will be passed\n   *    to actions/loaders in the `context` parameter\n   */\n  async function queryRoute(request, _temp4) {\n    let {\n      routeId,\n      requestContext,\n      unstable_dataStrategy\n    } = _temp4 === void 0 ? {} : _temp4;\n    let url = new URL(request.url);\n    let method = request.method;\n    let location = createLocation(\"\", createPath(url), null, \"default\");\n    let matches = matchRoutes(dataRoutes, location, basename);\n    // SSR supports HEAD requests while SPA doesn't\n    if (!isValidMethod(method) && method !== \"HEAD\" && method !== \"OPTIONS\") {\n      throw getInternalRouterError(405, {\n        method\n      });\n    } else if (!matches) {\n      throw getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n    }\n    let match = routeId ? matches.find(m => m.route.id === routeId) : getTargetMatch(matches, location);\n    if (routeId && !match) {\n      throw getInternalRouterError(403, {\n        pathname: location.pathname,\n        routeId\n      });\n    } else if (!match) {\n      // This should never hit I don't think?\n      throw getInternalRouterError(404, {\n        pathname: location.pathname\n      });\n    }\n    let result = await queryImpl(request, location, matches, requestContext, unstable_dataStrategy || null, false, match);\n    if (isResponse(result)) {\n      return result;\n    }\n    let error = result.errors ? Object.values(result.errors)[0] : undefined;\n    if (error !== undefined) {\n      // If we got back result.errors, that means the loader/action threw\n      // _something_ that wasn't a Response, but it's not guaranteed/required\n      // to be an `instanceof Error` either, so we have to use throw here to\n      // preserve the \"error\" state outside of queryImpl.\n      throw error;\n    }\n    // Pick off the right state value to return\n    if (result.actionData) {\n      return Object.values(result.actionData)[0];\n    }\n    if (result.loaderData) {\n      var _result$activeDeferre;\n      let data = Object.values(result.loaderData)[0];\n      if ((_result$activeDeferre = result.activeDeferreds) != null && _result$activeDeferre[match.route.id]) {\n        data[UNSAFE_DEFERRED_SYMBOL] = result.activeDeferreds[match.route.id];\n      }\n      return data;\n    }\n    return undefined;\n  }\n  async function queryImpl(request, location, matches, requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, routeMatch) {\n    invariant(request.signal, \"query()/queryRoute() requests must contain an AbortController signal\");\n    try {\n      if (isMutationMethod(request.method.toLowerCase())) {\n        let result = await submit(request, matches, routeMatch || getTargetMatch(matches, location), requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, routeMatch != null);\n        return result;\n      }\n      let result = await loadRouteData(request, matches, requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, routeMatch);\n      return isResponse(result) ? result : _extends({}, result, {\n        actionData: null,\n        actionHeaders: {}\n      });\n    } catch (e) {\n      // If the user threw/returned a Response in callLoaderOrAction for a\n      // `queryRoute` call, we throw the `DataStrategyResult` to bail out early\n      // and then return or throw the raw Response here accordingly\n      if (isDataStrategyResult(e) && isResponse(e.result)) {\n        if (e.type === ResultType.error) {\n          throw e.result;\n        }\n        return e.result;\n      }\n      // Redirects are always returned since they don't propagate to catch\n      // boundaries\n      if (isRedirectResponse(e)) {\n        return e;\n      }\n      throw e;\n    }\n  }\n  async function submit(request, matches, actionMatch, requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, isRouteRequest) {\n    let result;\n    if (!actionMatch.route.action && !actionMatch.route.lazy) {\n      let error = getInternalRouterError(405, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: actionMatch.route.id\n      });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error\n      };\n    } else {\n      let results = await callDataStrategy(\"action\", request, [actionMatch], matches, isRouteRequest, requestContext, unstable_dataStrategy);\n      result = results[actionMatch.route.id];\n      if (request.signal.aborted) {\n        throwStaticHandlerAbortedError(request, isRouteRequest, future);\n      }\n    }\n    if (isRedirectResult(result)) {\n      // Uhhhh - this should never happen, we should always throw these from\n      // callLoaderOrAction, but the type narrowing here keeps TS happy and we\n      // can get back on the \"throw all redirect responses\" train here should\n      // this ever happen :/\n      throw new Response(null, {\n        status: result.response.status,\n        headers: {\n          Location: result.response.headers.get(\"Location\")\n        }\n      });\n    }\n    if (isDeferredResult(result)) {\n      let error = getInternalRouterError(400, {\n        type: \"defer-action\"\n      });\n      if (isRouteRequest) {\n        throw error;\n      }\n      result = {\n        type: ResultType.error,\n        error\n      };\n    }\n    if (isRouteRequest) {\n      // Note: This should only be non-Response values if we get here, since\n      // isRouteRequest should throw any Response received in callLoaderOrAction\n      if (isErrorResult(result)) {\n        throw result.error;\n      }\n      return {\n        matches: [actionMatch],\n        loaderData: {},\n        actionData: {\n          [actionMatch.route.id]: result.data\n        },\n        errors: null,\n        // Note: statusCode + headers are unused here since queryRoute will\n        // return the raw Response or value\n        statusCode: 200,\n        loaderHeaders: {},\n        actionHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    // Create a GET request for the loaders\n    let loaderRequest = new Request(request.url, {\n      headers: request.headers,\n      redirect: request.redirect,\n      signal: request.signal\n    });\n    if (isErrorResult(result)) {\n      // Store off the pending error - we use it to determine which loaders\n      // to call and will commit it when we complete the navigation\n      let boundaryMatch = skipLoaderErrorBubbling ? actionMatch : findNearestBoundary(matches, actionMatch.route.id);\n      let context = await loadRouteData(loaderRequest, matches, requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, null, [boundaryMatch.route.id, result]);\n      // action status codes take precedence over loader status codes\n      return _extends({}, context, {\n        statusCode: isRouteErrorResponse(result.error) ? result.error.status : result.statusCode != null ? result.statusCode : 500,\n        actionData: null,\n        actionHeaders: _extends({}, result.headers ? {\n          [actionMatch.route.id]: result.headers\n        } : {})\n      });\n    }\n    let context = await loadRouteData(loaderRequest, matches, requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, null);\n    return _extends({}, context, {\n      actionData: {\n        [actionMatch.route.id]: result.data\n      }\n    }, result.statusCode ? {\n      statusCode: result.statusCode\n    } : {}, {\n      actionHeaders: result.headers ? {\n        [actionMatch.route.id]: result.headers\n      } : {}\n    });\n  }\n  async function loadRouteData(request, matches, requestContext, unstable_dataStrategy, skipLoaderErrorBubbling, routeMatch, pendingActionResult) {\n    let isRouteRequest = routeMatch != null;\n    // Short circuit if we have no loaders to run (queryRoute())\n    if (isRouteRequest && !(routeMatch != null && routeMatch.route.loader) && !(routeMatch != null && routeMatch.route.lazy)) {\n      throw getInternalRouterError(400, {\n        method: request.method,\n        pathname: new URL(request.url).pathname,\n        routeId: routeMatch == null ? void 0 : routeMatch.route.id\n      });\n    }\n    let requestMatches = routeMatch ? [routeMatch] : pendingActionResult && isErrorResult(pendingActionResult[1]) ? getLoaderMatchesUntilBoundary(matches, pendingActionResult[0]) : matches;\n    let matchesToLoad = requestMatches.filter(m => m.route.loader || m.route.lazy);\n    // Short circuit if we have no loaders to run (query())\n    if (matchesToLoad.length === 0) {\n      return {\n        matches,\n        // Add a null for all matched routes for proper revalidation on the client\n        loaderData: matches.reduce((acc, m) => Object.assign(acc, {\n          [m.route.id]: null\n        }), {}),\n        errors: pendingActionResult && isErrorResult(pendingActionResult[1]) ? {\n          [pendingActionResult[0]]: pendingActionResult[1].error\n        } : null,\n        statusCode: 200,\n        loaderHeaders: {},\n        activeDeferreds: null\n      };\n    }\n    let results = await callDataStrategy(\"loader\", request, matchesToLoad, matches, isRouteRequest, requestContext, unstable_dataStrategy);\n    if (request.signal.aborted) {\n      throwStaticHandlerAbortedError(request, isRouteRequest, future);\n    }\n    // Process and commit output from loaders\n    let activeDeferreds = new Map();\n    let context = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling);\n    // Add a null for any non-loader matches for proper revalidation on the client\n    let executedLoaders = new Set(matchesToLoad.map(match => match.route.id));\n    matches.forEach(match => {\n      if (!executedLoaders.has(match.route.id)) {\n        context.loaderData[match.route.id] = null;\n      }\n    });\n    return _extends({}, context, {\n      matches,\n      activeDeferreds: activeDeferreds.size > 0 ? Object.fromEntries(activeDeferreds.entries()) : null\n    });\n  }\n  // Utility wrapper for calling dataStrategy server-side without having to\n  // pass around the manifest, mapRouteProperties, etc.\n  async function callDataStrategy(type, request, matchesToLoad, matches, isRouteRequest, requestContext, unstable_dataStrategy) {\n    let results = await callDataStrategyImpl(unstable_dataStrategy || defaultDataStrategy, type, null, request, matchesToLoad, matches, null, manifest, mapRouteProperties, requestContext);\n    let dataResults = {};\n    await Promise.all(matches.map(async match => {\n      if (!(match.route.id in results)) {\n        return;\n      }\n      let result = results[match.route.id];\n      if (isRedirectDataStrategyResultResult(result)) {\n        let response = result.result;\n        // Throw redirects and let the server handle them with an HTTP redirect\n        throw normalizeRelativeRoutingRedirectResponse(response, request, match.route.id, matches, basename, future.v7_relativeSplatPath);\n      }\n      if (isResponse(result.result) && isRouteRequest) {\n        // For SSR single-route requests, we want to hand Responses back\n        // directly without unwrapping\n        throw result;\n      }\n      dataResults[match.route.id] = await convertDataStrategyResultToDataResult(result);\n    }));\n    return dataResults;\n  }\n  return {\n    dataRoutes,\n    query,\n    queryRoute\n  };\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Helpers\n////////////////////////////////////////////////////////////////////////////////\n/**\n * Given an existing StaticHandlerContext and an error thrown at render time,\n * provide an updated StaticHandlerContext suitable for a second SSR render\n */\nfunction getStaticContextFromError(routes, context, error) {\n  let newContext = _extends({}, context, {\n    statusCode: isRouteErrorResponse(error) ? error.status : 500,\n    errors: {\n      [context._deepestRenderedBoundaryId || routes[0].id]: error\n    }\n  });\n  return newContext;\n}\nfunction throwStaticHandlerAbortedError(request, isRouteRequest, future) {\n  if (future.v7_throwAbortReason && request.signal.reason !== undefined) {\n    throw request.signal.reason;\n  }\n  let method = isRouteRequest ? \"queryRoute\" : \"query\";\n  throw new Error(method + \"() call aborted: \" + request.method + \" \" + request.url);\n}\nfunction isSubmissionNavigation(opts) {\n  return opts != null && (\"formData\" in opts && opts.formData != null || \"body\" in opts && opts.body !== undefined);\n}\nfunction normalizeTo(location, matches, basename, prependBasename, to, v7_relativeSplatPath, fromRouteId, relative) {\n  let contextualMatches;\n  let activeRouteMatch;\n  if (fromRouteId) {\n    // Grab matches up to the calling route so our route-relative logic is\n    // relative to the correct source route\n    contextualMatches = [];\n    for (let match of matches) {\n      contextualMatches.push(match);\n      if (match.route.id === fromRouteId) {\n        activeRouteMatch = match;\n        break;\n      }\n    }\n  } else {\n    contextualMatches = matches;\n    activeRouteMatch = matches[matches.length - 1];\n  }\n  // Resolve the relative path\n  let path = resolveTo(to ? to : \".\", getResolveToMatches(contextualMatches, v7_relativeSplatPath), stripBasename(location.pathname, basename) || location.pathname, relative === \"path\");\n  // When `to` is not specified we inherit search/hash from the current\n  // location, unlike when to=\".\" and we just inherit the path.\n  // See https://github.com/remix-run/remix/issues/927\n  if (to == null) {\n    path.search = location.search;\n    path.hash = location.hash;\n  }\n  // Add an ?index param for matched index routes if we don't already have one\n  if ((to == null || to === \"\" || to === \".\") && activeRouteMatch && activeRouteMatch.route.index && !hasNakedIndexQuery(path.search)) {\n    path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n  }\n  // If we're operating within a basename, prepend it to the pathname.  If\n  // this is a root navigation, then just use the raw basename which allows\n  // the basename to have full control over the presence of a trailing slash\n  // on root actions\n  if (prependBasename && basename !== \"/\") {\n    path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n  return createPath(path);\n}\n// Normalize navigation options by converting formMethod=GET formData objects to\n// URLSearchParams so they behave identically to links with query params\nfunction normalizeNavigateOptions(normalizeFormMethod, isFetcher, path, opts) {\n  // Return location verbatim on non-submission navigations\n  if (!opts || !isSubmissionNavigation(opts)) {\n    return {\n      path\n    };\n  }\n  if (opts.formMethod && !isValidMethod(opts.formMethod)) {\n    return {\n      path,\n      error: getInternalRouterError(405, {\n        method: opts.formMethod\n      })\n    };\n  }\n  let getInvalidBodyError = () => ({\n    path,\n    error: getInternalRouterError(400, {\n      type: \"invalid-body\"\n    })\n  });\n  // Create a Submission on non-GET navigations\n  let rawFormMethod = opts.formMethod || \"get\";\n  let formMethod = normalizeFormMethod ? rawFormMethod.toUpperCase() : rawFormMethod.toLowerCase();\n  let formAction = stripHashFromPath(path);\n  if (opts.body !== undefined) {\n    if (opts.formEncType === \"text/plain\") {\n      // text only support POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n      let text = typeof opts.body === \"string\" ? opts.body : opts.body instanceof FormData || opts.body instanceof URLSearchParams ?\n      // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#plain-text-form-data\n      Array.from(opts.body.entries()).reduce((acc, _ref5) => {\n        let [name, value] = _ref5;\n        return \"\" + acc + name + \"=\" + value + \"\\n\";\n      }, \"\") : String(opts.body);\n      return {\n        path,\n        submission: {\n          formMethod,\n          formAction,\n          formEncType: opts.formEncType,\n          formData: undefined,\n          json: undefined,\n          text\n        }\n      };\n    } else if (opts.formEncType === \"application/json\") {\n      // json only supports POST/PUT/PATCH/DELETE submissions\n      if (!isMutationMethod(formMethod)) {\n        return getInvalidBodyError();\n      }\n      try {\n        let json = typeof opts.body === \"string\" ? JSON.parse(opts.body) : opts.body;\n        return {\n          path,\n          submission: {\n            formMethod,\n            formAction,\n            formEncType: opts.formEncType,\n            formData: undefined,\n            json,\n            text: undefined\n          }\n        };\n      } catch (e) {\n        return getInvalidBodyError();\n      }\n    }\n  }\n  invariant(typeof FormData === \"function\", \"FormData is not available in this environment\");\n  let searchParams;\n  let formData;\n  if (opts.formData) {\n    searchParams = convertFormDataToSearchParams(opts.formData);\n    formData = opts.formData;\n  } else if (opts.body instanceof FormData) {\n    searchParams = convertFormDataToSearchParams(opts.body);\n    formData = opts.body;\n  } else if (opts.body instanceof URLSearchParams) {\n    searchParams = opts.body;\n    formData = convertSearchParamsToFormData(searchParams);\n  } else if (opts.body == null) {\n    searchParams = new URLSearchParams();\n    formData = new FormData();\n  } else {\n    try {\n      searchParams = new URLSearchParams(opts.body);\n      formData = convertSearchParamsToFormData(searchParams);\n    } catch (e) {\n      return getInvalidBodyError();\n    }\n  }\n  let submission = {\n    formMethod,\n    formAction,\n    formEncType: opts && opts.formEncType || \"application/x-www-form-urlencoded\",\n    formData,\n    json: undefined,\n    text: undefined\n  };\n  if (isMutationMethod(submission.formMethod)) {\n    return {\n      path,\n      submission\n    };\n  }\n  // Flatten submission onto URLSearchParams for GET submissions\n  let parsedPath = parsePath(path);\n  // On GET navigation submissions we can drop the ?index param from the\n  // resulting location since all loaders will run.  But fetcher GET submissions\n  // only run a single loader so we need to preserve any incoming ?index params\n  if (isFetcher && parsedPath.search && hasNakedIndexQuery(parsedPath.search)) {\n    searchParams.append(\"index\", \"\");\n  }\n  parsedPath.search = \"?\" + searchParams;\n  return {\n    path: createPath(parsedPath),\n    submission\n  };\n}\n// Filter out all routes below any caught error as they aren't going to\n// render so we don't need to load them\nfunction getLoaderMatchesUntilBoundary(matches, boundaryId) {\n  let boundaryMatches = matches;\n  if (boundaryId) {\n    let index = matches.findIndex(m => m.route.id === boundaryId);\n    if (index >= 0) {\n      boundaryMatches = matches.slice(0, index);\n    }\n  }\n  return boundaryMatches;\n}\nfunction getMatchesToLoad(history, state, matches, submission, location, isInitialLoad, skipActionErrorRevalidation, isRevalidationRequired, cancelledDeferredRoutes, cancelledFetcherLoads, deletedFetchers, fetchLoadMatches, fetchRedirectIds, routesToUse, basename, pendingActionResult) {\n  let actionResult = pendingActionResult ? isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : pendingActionResult[1].data : undefined;\n  let currentUrl = history.createURL(state.location);\n  let nextUrl = history.createURL(location);\n  // Pick navigation matches that are net-new or qualify for revalidation\n  let boundaryId = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[0] : undefined;\n  let boundaryMatches = boundaryId ? getLoaderMatchesUntilBoundary(matches, boundaryId) : matches;\n  // Don't revalidate loaders by default after action 4xx/5xx responses\n  // when the flag is enabled.  They can still opt-into revalidation via\n  // `shouldRevalidate` via `actionResult`\n  let actionStatus = pendingActionResult ? pendingActionResult[1].statusCode : undefined;\n  let shouldSkipRevalidation = skipActionErrorRevalidation && actionStatus && actionStatus >= 400;\n  let navigationMatches = boundaryMatches.filter((match, index) => {\n    let {\n      route\n    } = match;\n    if (route.lazy) {\n      // We haven't loaded this route yet so we don't know if it's got a loader!\n      return true;\n    }\n    if (route.loader == null) {\n      return false;\n    }\n    if (isInitialLoad) {\n      if (typeof route.loader !== \"function\" || route.loader.hydrate) {\n        return true;\n      }\n      return state.loaderData[route.id] === undefined && (\n      // Don't re-run if the loader ran and threw an error\n      !state.errors || state.errors[route.id] === undefined);\n    }\n    // Always call the loader on new route instances and pending defer cancellations\n    if (isNewLoader(state.loaderData, state.matches[index], match) || cancelledDeferredRoutes.some(id => id === match.route.id)) {\n      return true;\n    }\n    // This is the default implementation for when we revalidate.  If the route\n    // provides it's own implementation, then we give them full control but\n    // provide this value so they can leverage it if needed after they check\n    // their own specific use cases\n    let currentRouteMatch = state.matches[index];\n    let nextRouteMatch = match;\n    return shouldRevalidateLoader(match, _extends({\n      currentUrl,\n      currentParams: currentRouteMatch.params,\n      nextUrl,\n      nextParams: nextRouteMatch.params\n    }, submission, {\n      actionResult,\n      actionStatus,\n      defaultShouldRevalidate: shouldSkipRevalidation ? false :\n      // Forced revalidation due to submission, useRevalidator, or X-Remix-Revalidate\n      isRevalidationRequired || currentUrl.pathname + currentUrl.search === nextUrl.pathname + nextUrl.search ||\n      // Search params affect all loaders\n      currentUrl.search !== nextUrl.search || isNewRouteInstance(currentRouteMatch, nextRouteMatch)\n    }));\n  });\n  // Pick fetcher.loads that need to be revalidated\n  let revalidatingFetchers = [];\n  fetchLoadMatches.forEach((f, key) => {\n    // Don't revalidate:\n    //  - on initial load (shouldn't be any fetchers then anyway)\n    //  - if fetcher won't be present in the subsequent render\n    //    - no longer matches the URL (v7_fetcherPersist=false)\n    //    - was unmounted but persisted due to v7_fetcherPersist=true\n    if (isInitialLoad || !matches.some(m => m.route.id === f.routeId) || deletedFetchers.has(key)) {\n      return;\n    }\n    let fetcherMatches = matchRoutes(routesToUse, f.path, basename);\n    // If the fetcher path no longer matches, push it in with null matches so\n    // we can trigger a 404 in callLoadersAndMaybeResolveData.  Note this is\n    // currently only a use-case for Remix HMR where the route tree can change\n    // at runtime and remove a route previously loaded via a fetcher\n    if (!fetcherMatches) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: null,\n        match: null,\n        controller: null\n      });\n      return;\n    }\n    // Revalidating fetchers are decoupled from the route matches since they\n    // load from a static href.  They revalidate based on explicit revalidation\n    // (submission, useRevalidator, or X-Remix-Revalidate)\n    let fetcher = state.fetchers.get(key);\n    let fetcherMatch = getTargetMatch(fetcherMatches, f.path);\n    let shouldRevalidate = false;\n    if (fetchRedirectIds.has(key)) {\n      // Never trigger a revalidation of an actively redirecting fetcher\n      shouldRevalidate = false;\n    } else if (cancelledFetcherLoads.has(key)) {\n      // Always mark for revalidation if the fetcher was cancelled\n      cancelledFetcherLoads.delete(key);\n      shouldRevalidate = true;\n    } else if (fetcher && fetcher.state !== \"idle\" && fetcher.data === undefined) {\n      // If the fetcher hasn't ever completed loading yet, then this isn't a\n      // revalidation, it would just be a brand new load if an explicit\n      // revalidation is required\n      shouldRevalidate = isRevalidationRequired;\n    } else {\n      // Otherwise fall back on any user-defined shouldRevalidate, defaulting\n      // to explicit revalidations only\n      shouldRevalidate = shouldRevalidateLoader(fetcherMatch, _extends({\n        currentUrl,\n        currentParams: state.matches[state.matches.length - 1].params,\n        nextUrl,\n        nextParams: matches[matches.length - 1].params\n      }, submission, {\n        actionResult,\n        actionStatus,\n        defaultShouldRevalidate: shouldSkipRevalidation ? false : isRevalidationRequired\n      }));\n    }\n    if (shouldRevalidate) {\n      revalidatingFetchers.push({\n        key,\n        routeId: f.routeId,\n        path: f.path,\n        matches: fetcherMatches,\n        match: fetcherMatch,\n        controller: new AbortController()\n      });\n    }\n  });\n  return [navigationMatches, revalidatingFetchers];\n}\nfunction isNewLoader(currentLoaderData, currentMatch, match) {\n  let isNew =\n  // [a] -> [a, b]\n  !currentMatch ||\n  // [a, b] -> [a, c]\n  match.route.id !== currentMatch.route.id;\n  // Handle the case that we don't have data for a re-used route, potentially\n  // from a prior error or from a cancelled pending deferred\n  let isMissingData = currentLoaderData[match.route.id] === undefined;\n  // Always load if this is a net-new route or we don't yet have data\n  return isNew || isMissingData;\n}\nfunction isNewRouteInstance(currentMatch, match) {\n  let currentPath = currentMatch.route.path;\n  return (\n    // param change for this match, /users/123 -> /users/456\n    currentMatch.pathname !== match.pathname ||\n    // splat param changed, which is not present in match.path\n    // e.g. /files/images/avatar.jpg -> files/finances.xls\n    currentPath != null && currentPath.endsWith(\"*\") && currentMatch.params[\"*\"] !== match.params[\"*\"]\n  );\n}\nfunction shouldRevalidateLoader(loaderMatch, arg) {\n  if (loaderMatch.route.shouldRevalidate) {\n    let routeChoice = loaderMatch.route.shouldRevalidate(arg);\n    if (typeof routeChoice === \"boolean\") {\n      return routeChoice;\n    }\n  }\n  return arg.defaultShouldRevalidate;\n}\n/**\n * Idempotent utility to execute patchRoutesOnNavigation() to lazily load route\n * definitions and update the routes/routeManifest\n */\nasync function loadLazyRouteChildren(patchRoutesOnNavigationImpl, path, matches, routes, manifest, mapRouteProperties, pendingRouteChildren, signal) {\n  let key = [path, ...matches.map(m => m.route.id)].join(\"-\");\n  try {\n    let pending = pendingRouteChildren.get(key);\n    if (!pending) {\n      pending = patchRoutesOnNavigationImpl({\n        path,\n        matches,\n        patch: (routeId, children) => {\n          if (!signal.aborted) {\n            patchRoutesImpl(routeId, children, routes, manifest, mapRouteProperties);\n          }\n        }\n      });\n      pendingRouteChildren.set(key, pending);\n    }\n    if (pending && isPromise(pending)) {\n      await pending;\n    }\n  } finally {\n    pendingRouteChildren.delete(key);\n  }\n}\nfunction patchRoutesImpl(routeId, children, routesToUse, manifest, mapRouteProperties) {\n  if (routeId) {\n    var _route$children;\n    let route = manifest[routeId];\n    invariant(route, \"No route found to patch children into: routeId = \" + routeId);\n    let dataChildren = convertRoutesToDataRoutes(children, mapRouteProperties, [routeId, \"patch\", String(((_route$children = route.children) == null ? void 0 : _route$children.length) || \"0\")], manifest);\n    if (route.children) {\n      route.children.push(...dataChildren);\n    } else {\n      route.children = dataChildren;\n    }\n  } else {\n    let dataChildren = convertRoutesToDataRoutes(children, mapRouteProperties, [\"patch\", String(routesToUse.length || \"0\")], manifest);\n    routesToUse.push(...dataChildren);\n  }\n}\n/**\n * Execute route.lazy() methods to lazily load route modules (loader, action,\n * shouldRevalidate) and update the routeManifest in place which shares objects\n * with dataRoutes so those get updated as well.\n */\nasync function loadLazyRouteModule(route, mapRouteProperties, manifest) {\n  if (!route.lazy) {\n    return;\n  }\n  let lazyRoute = await route.lazy();\n  // If the lazy route function was executed and removed by another parallel\n  // call then we can return - first lazy() to finish wins because the return\n  // value of lazy is expected to be static\n  if (!route.lazy) {\n    return;\n  }\n  let routeToUpdate = manifest[route.id];\n  invariant(routeToUpdate, \"No route found in manifest\");\n  // Update the route in place.  This should be safe because there's no way\n  // we could yet be sitting on this route as we can't get there without\n  // resolving lazy() first.\n  //\n  // This is different than the HMR \"update\" use-case where we may actively be\n  // on the route being updated.  The main concern boils down to \"does this\n  // mutation affect any ongoing navigations or any current state.matches\n  // values?\".  If not, it should be safe to update in place.\n  let routeUpdates = {};\n  for (let lazyRouteProperty in lazyRoute) {\n    let staticRouteValue = routeToUpdate[lazyRouteProperty];\n    let isPropertyStaticallyDefined = staticRouteValue !== undefined &&\n    // This property isn't static since it should always be updated based\n    // on the route updates\n    lazyRouteProperty !== \"hasErrorBoundary\";\n    warning(!isPropertyStaticallyDefined, \"Route \\\"\" + routeToUpdate.id + \"\\\" has a static property \\\"\" + lazyRouteProperty + \"\\\" \" + \"defined but its lazy function is also returning a value for this property. \" + (\"The lazy route property \\\"\" + lazyRouteProperty + \"\\\" will be ignored.\"));\n    if (!isPropertyStaticallyDefined && !immutableRouteKeys.has(lazyRouteProperty)) {\n      routeUpdates[lazyRouteProperty] = lazyRoute[lazyRouteProperty];\n    }\n  }\n  // Mutate the route with the provided updates.  Do this first so we pass\n  // the updated version to mapRouteProperties\n  Object.assign(routeToUpdate, routeUpdates);\n  // Mutate the `hasErrorBoundary` property on the route based on the route\n  // updates and remove the `lazy` function so we don't resolve the lazy\n  // route again.\n  Object.assign(routeToUpdate, _extends({}, mapRouteProperties(routeToUpdate), {\n    lazy: undefined\n  }));\n}\n// Default implementation of `dataStrategy` which fetches all loaders in parallel\nasync function defaultDataStrategy(_ref6) {\n  let {\n    matches\n  } = _ref6;\n  let matchesToLoad = matches.filter(m => m.shouldLoad);\n  let results = await Promise.all(matchesToLoad.map(m => m.resolve()));\n  return results.reduce((acc, result, i) => Object.assign(acc, {\n    [matchesToLoad[i].route.id]: result\n  }), {});\n}\nasync function callDataStrategyImpl(dataStrategyImpl, type, state, request, matchesToLoad, matches, fetcherKey, manifest, mapRouteProperties, requestContext) {\n  let loadRouteDefinitionsPromises = matches.map(m => m.route.lazy ? loadLazyRouteModule(m.route, mapRouteProperties, manifest) : undefined);\n  let dsMatches = matches.map((match, i) => {\n    let loadRoutePromise = loadRouteDefinitionsPromises[i];\n    let shouldLoad = matchesToLoad.some(m => m.route.id === match.route.id);\n    // `resolve` encapsulates route.lazy(), executing the loader/action,\n    // and mapping return values/thrown errors to a `DataStrategyResult`.  Users\n    // can pass a callback to take fine-grained control over the execution\n    // of the loader/action\n    let resolve = async handlerOverride => {\n      if (handlerOverride && request.method === \"GET\" && (match.route.lazy || match.route.loader)) {\n        shouldLoad = true;\n      }\n      return shouldLoad ? callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, requestContext) : Promise.resolve({\n        type: ResultType.data,\n        result: undefined\n      });\n    };\n    return _extends({}, match, {\n      shouldLoad,\n      resolve\n    });\n  });\n  // Send all matches here to allow for a middleware-type implementation.\n  // handler will be a no-op for unneeded routes and we filter those results\n  // back out below.\n  let results = await dataStrategyImpl({\n    matches: dsMatches,\n    request,\n    params: matches[0].params,\n    fetcherKey,\n    context: requestContext\n  });\n  // Wait for all routes to load here but 'swallow the error since we want\n  // it to bubble up from the `await loadRoutePromise` in `callLoaderOrAction` -\n  // called from `match.resolve()`\n  try {\n    await Promise.all(loadRouteDefinitionsPromises);\n  } catch (e) {\n    // No-op\n  }\n  return results;\n}\n// Default logic for calling a loader/action is the user has no specified a dataStrategy\nasync function callLoaderOrAction(type, request, match, loadRoutePromise, handlerOverride, staticContext) {\n  let result;\n  let onReject;\n  let runHandler = handler => {\n    // Setup a promise we can race against so that abort signals short circuit\n    let reject;\n    // This will never resolve so safe to type it as Promise<DataStrategyResult> to\n    // satisfy the function return value\n    let abortPromise = new Promise((_, r) => reject = r);\n    onReject = () => reject();\n    request.signal.addEventListener(\"abort\", onReject);\n    let actualHandler = ctx => {\n      if (typeof handler !== \"function\") {\n        return Promise.reject(new Error(\"You cannot call the handler for a route which defines a boolean \" + (\"\\\"\" + type + \"\\\" [routeId: \" + match.route.id + \"]\")));\n      }\n      return handler({\n        request,\n        params: match.params,\n        context: staticContext\n      }, ...(ctx !== undefined ? [ctx] : []));\n    };\n    let handlerPromise = (async () => {\n      try {\n        let val = await (handlerOverride ? handlerOverride(ctx => actualHandler(ctx)) : actualHandler());\n        return {\n          type: \"data\",\n          result: val\n        };\n      } catch (e) {\n        return {\n          type: \"error\",\n          result: e\n        };\n      }\n    })();\n    return Promise.race([handlerPromise, abortPromise]);\n  };\n  try {\n    let handler = match.route[type];\n    // If we have a route.lazy promise, await that first\n    if (loadRoutePromise) {\n      if (handler) {\n        // Run statically defined handler in parallel with lazy()\n        let handlerError;\n        let [value] = await Promise.all([\n        // If the handler throws, don't let it immediately bubble out,\n        // since we need to let the lazy() execution finish so we know if this\n        // route has a boundary that can handle the error\n        runHandler(handler).catch(e => {\n          handlerError = e;\n        }), loadRoutePromise]);\n        if (handlerError !== undefined) {\n          throw handlerError;\n        }\n        result = value;\n      } else {\n        // Load lazy route module, then run any returned handler\n        await loadRoutePromise;\n        handler = match.route[type];\n        if (handler) {\n          // Handler still runs even if we got interrupted to maintain consistency\n          // with un-abortable behavior of handler execution on non-lazy or\n          // previously-lazy-loaded routes\n          result = await runHandler(handler);\n        } else if (type === \"action\") {\n          let url = new URL(request.url);\n          let pathname = url.pathname + url.search;\n          throw getInternalRouterError(405, {\n            method: request.method,\n            pathname,\n            routeId: match.route.id\n          });\n        } else {\n          // lazy() route has no loader to run.  Short circuit here so we don't\n          // hit the invariant below that errors on returning undefined.\n          return {\n            type: ResultType.data,\n            result: undefined\n          };\n        }\n      }\n    } else if (!handler) {\n      let url = new URL(request.url);\n      let pathname = url.pathname + url.search;\n      throw getInternalRouterError(404, {\n        pathname\n      });\n    } else {\n      result = await runHandler(handler);\n    }\n    invariant(result.result !== undefined, \"You defined \" + (type === \"action\" ? \"an action\" : \"a loader\") + \" for route \" + (\"\\\"\" + match.route.id + \"\\\" but didn't return anything from your `\" + type + \"` \") + \"function. Please return a value or `null`.\");\n  } catch (e) {\n    // We should already be catching and converting normal handler executions to\n    // DataStrategyResults and returning them, so anything that throws here is an\n    // unexpected error we still need to wrap\n    return {\n      type: ResultType.error,\n      result: e\n    };\n  } finally {\n    if (onReject) {\n      request.signal.removeEventListener(\"abort\", onReject);\n    }\n  }\n  return result;\n}\nasync function convertDataStrategyResultToDataResult(dataStrategyResult) {\n  let {\n    result,\n    type\n  } = dataStrategyResult;\n  if (isResponse(result)) {\n    let data;\n    try {\n      let contentType = result.headers.get(\"Content-Type\");\n      // Check between word boundaries instead of startsWith() due to the last\n      // paragraph of https://httpwg.org/specs/rfc9110.html#field.content-type\n      if (contentType && /\\bapplication\\/json\\b/.test(contentType)) {\n        if (result.body == null) {\n          data = null;\n        } else {\n          data = await result.json();\n        }\n      } else {\n        data = await result.text();\n      }\n    } catch (e) {\n      return {\n        type: ResultType.error,\n        error: e\n      };\n    }\n    if (type === ResultType.error) {\n      return {\n        type: ResultType.error,\n        error: new ErrorResponseImpl(result.status, result.statusText, data),\n        statusCode: result.status,\n        headers: result.headers\n      };\n    }\n    return {\n      type: ResultType.data,\n      data,\n      statusCode: result.status,\n      headers: result.headers\n    };\n  }\n  if (type === ResultType.error) {\n    if (isDataWithResponseInit(result)) {\n      var _result$init2;\n      if (result.data instanceof Error) {\n        var _result$init;\n        return {\n          type: ResultType.error,\n          error: result.data,\n          statusCode: (_result$init = result.init) == null ? void 0 : _result$init.status\n        };\n      }\n      // Convert thrown unstable_data() to ErrorResponse instances\n      result = new ErrorResponseImpl(((_result$init2 = result.init) == null ? void 0 : _result$init2.status) || 500, undefined, result.data);\n    }\n    return {\n      type: ResultType.error,\n      error: result,\n      statusCode: isRouteErrorResponse(result) ? result.status : undefined\n    };\n  }\n  if (isDeferredData(result)) {\n    var _result$init3, _result$init4;\n    return {\n      type: ResultType.deferred,\n      deferredData: result,\n      statusCode: (_result$init3 = result.init) == null ? void 0 : _result$init3.status,\n      headers: ((_result$init4 = result.init) == null ? void 0 : _result$init4.headers) && new Headers(result.init.headers)\n    };\n  }\n  if (isDataWithResponseInit(result)) {\n    var _result$init5, _result$init6;\n    return {\n      type: ResultType.data,\n      data: result.data,\n      statusCode: (_result$init5 = result.init) == null ? void 0 : _result$init5.status,\n      headers: (_result$init6 = result.init) != null && _result$init6.headers ? new Headers(result.init.headers) : undefined\n    };\n  }\n  return {\n    type: ResultType.data,\n    data: result\n  };\n}\n// Support relative routing in internal redirects\nfunction normalizeRelativeRoutingRedirectResponse(response, request, routeId, matches, basename, v7_relativeSplatPath) {\n  let location = response.headers.get(\"Location\");\n  invariant(location, \"Redirects returned/thrown from loaders/actions must have a Location header\");\n  if (!ABSOLUTE_URL_REGEX.test(location)) {\n    let trimmedMatches = matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1);\n    location = normalizeTo(new URL(request.url), trimmedMatches, basename, true, location, v7_relativeSplatPath);\n    response.headers.set(\"Location\", location);\n  }\n  return response;\n}\nfunction normalizeRedirectLocation(location, currentUrl, basename) {\n  if (ABSOLUTE_URL_REGEX.test(location)) {\n    // Strip off the protocol+origin for same-origin + same-basename absolute redirects\n    let normalizedLocation = location;\n    let url = normalizedLocation.startsWith(\"//\") ? new URL(currentUrl.protocol + normalizedLocation) : new URL(normalizedLocation);\n    let isSameBasename = stripBasename(url.pathname, basename) != null;\n    if (url.origin === currentUrl.origin && isSameBasename) {\n      return url.pathname + url.search + url.hash;\n    }\n  }\n  return location;\n}\n// Utility method for creating the Request instances for loaders/actions during\n// client-side navigations and fetches.  During SSR we will always have a\n// Request instance from the static handler (query/queryRoute)\nfunction createClientSideRequest(history, location, signal, submission) {\n  let url = history.createURL(stripHashFromPath(location)).toString();\n  let init = {\n    signal\n  };\n  if (submission && isMutationMethod(submission.formMethod)) {\n    let {\n      formMethod,\n      formEncType\n    } = submission;\n    // Didn't think we needed this but it turns out unlike other methods, patch\n    // won't be properly normalized to uppercase and results in a 405 error.\n    // See: https://fetch.spec.whatwg.org/#concept-method\n    init.method = formMethod.toUpperCase();\n    if (formEncType === \"application/json\") {\n      init.headers = new Headers({\n        \"Content-Type\": formEncType\n      });\n      init.body = JSON.stringify(submission.json);\n    } else if (formEncType === \"text/plain\") {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.text;\n    } else if (formEncType === \"application/x-www-form-urlencoded\" && submission.formData) {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = convertFormDataToSearchParams(submission.formData);\n    } else {\n      // Content-Type is inferred (https://fetch.spec.whatwg.org/#dom-request)\n      init.body = submission.formData;\n    }\n  }\n  return new Request(url, init);\n}\nfunction convertFormDataToSearchParams(formData) {\n  let searchParams = new URLSearchParams();\n  for (let [key, value] of formData.entries()) {\n    // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#converting-an-entry-list-to-a-list-of-name-value-pairs\n    searchParams.append(key, typeof value === \"string\" ? value : value.name);\n  }\n  return searchParams;\n}\nfunction convertSearchParamsToFormData(searchParams) {\n  let formData = new FormData();\n  for (let [key, value] of searchParams.entries()) {\n    formData.append(key, value);\n  }\n  return formData;\n}\nfunction processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, skipLoaderErrorBubbling) {\n  // Fill in loaderData/errors from our loaders\n  let loaderData = {};\n  let errors = null;\n  let statusCode;\n  let foundError = false;\n  let loaderHeaders = {};\n  let pendingError = pendingActionResult && isErrorResult(pendingActionResult[1]) ? pendingActionResult[1].error : undefined;\n  // Process loader results into state.loaderData/state.errors\n  matches.forEach(match => {\n    if (!(match.route.id in results)) {\n      return;\n    }\n    let id = match.route.id;\n    let result = results[id];\n    invariant(!isRedirectResult(result), \"Cannot handle redirect results in processLoaderData\");\n    if (isErrorResult(result)) {\n      let error = result.error;\n      // If we have a pending action error, we report it at the highest-route\n      // that throws a loader error, and then clear it out to indicate that\n      // it was consumed\n      if (pendingError !== undefined) {\n        error = pendingError;\n        pendingError = undefined;\n      }\n      errors = errors || {};\n      if (skipLoaderErrorBubbling) {\n        errors[id] = error;\n      } else {\n        // Look upwards from the matched route for the closest ancestor error\n        // boundary, defaulting to the root match.  Prefer higher error values\n        // if lower errors bubble to the same boundary\n        let boundaryMatch = findNearestBoundary(matches, id);\n        if (errors[boundaryMatch.route.id] == null) {\n          errors[boundaryMatch.route.id] = error;\n        }\n      }\n      // Clear our any prior loaderData for the throwing route\n      loaderData[id] = undefined;\n      // Once we find our first (highest) error, we set the status code and\n      // prevent deeper status codes from overriding\n      if (!foundError) {\n        foundError = true;\n        statusCode = isRouteErrorResponse(result.error) ? result.error.status : 500;\n      }\n      if (result.headers) {\n        loaderHeaders[id] = result.headers;\n      }\n    } else {\n      if (isDeferredResult(result)) {\n        activeDeferreds.set(id, result.deferredData);\n        loaderData[id] = result.deferredData.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (result.statusCode != null && result.statusCode !== 200 && !foundError) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      } else {\n        loaderData[id] = result.data;\n        // Error status codes always override success status codes, but if all\n        // loaders are successful we take the deepest status code.\n        if (result.statusCode && result.statusCode !== 200 && !foundError) {\n          statusCode = result.statusCode;\n        }\n        if (result.headers) {\n          loaderHeaders[id] = result.headers;\n        }\n      }\n    }\n  });\n  // If we didn't consume the pending action error (i.e., all loaders\n  // resolved), then consume it here.  Also clear out any loaderData for the\n  // throwing route\n  if (pendingError !== undefined && pendingActionResult) {\n    errors = {\n      [pendingActionResult[0]]: pendingError\n    };\n    loaderData[pendingActionResult[0]] = undefined;\n  }\n  return {\n    loaderData,\n    errors,\n    statusCode: statusCode || 200,\n    loaderHeaders\n  };\n}\nfunction processLoaderData(state, matches, matchesToLoad, results, pendingActionResult, revalidatingFetchers, fetcherResults, activeDeferreds) {\n  let {\n    loaderData,\n    errors\n  } = processRouteLoaderData(matches, results, pendingActionResult, activeDeferreds, false // This method is only called client side so we always want to bubble\n  );\n  // Process results from our revalidating fetchers\n  revalidatingFetchers.forEach(rf => {\n    let {\n      key,\n      match,\n      controller\n    } = rf;\n    let result = fetcherResults[key];\n    invariant(result, \"Did not find corresponding fetcher result\");\n    // Process fetcher non-redirect errors\n    if (controller && controller.signal.aborted) {\n      // Nothing to do for aborted fetchers\n      return;\n    } else if (isErrorResult(result)) {\n      let boundaryMatch = findNearestBoundary(state.matches, match == null ? void 0 : match.route.id);\n      if (!(errors && errors[boundaryMatch.route.id])) {\n        errors = _extends({}, errors, {\n          [boundaryMatch.route.id]: result.error\n        });\n      }\n      state.fetchers.delete(key);\n    } else if (isRedirectResult(result)) {\n      // Should never get here, redirects should get processed above, but we\n      // keep this to type narrow to a success result in the else\n      invariant(false, \"Unhandled fetcher revalidation redirect\");\n    } else if (isDeferredResult(result)) {\n      // Should never get here, deferred data should be awaited for fetchers\n      // in resolveDeferredResults\n      invariant(false, \"Unhandled fetcher deferred data\");\n    } else {\n      let doneFetcher = getDoneFetcher(result.data);\n      state.fetchers.set(key, doneFetcher);\n    }\n  });\n  return {\n    loaderData,\n    errors\n  };\n}\nfunction mergeLoaderData(loaderData, newLoaderData, matches, errors) {\n  let mergedLoaderData = _extends({}, newLoaderData);\n  for (let match of matches) {\n    let id = match.route.id;\n    if (newLoaderData.hasOwnProperty(id)) {\n      if (newLoaderData[id] !== undefined) {\n        mergedLoaderData[id] = newLoaderData[id];\n      }\n    } else if (loaderData[id] !== undefined && match.route.loader) {\n      // Preserve existing keys not included in newLoaderData and where a loader\n      // wasn't removed by HMR\n      mergedLoaderData[id] = loaderData[id];\n    }\n    if (errors && errors.hasOwnProperty(id)) {\n      // Don't keep any loader data below the boundary\n      break;\n    }\n  }\n  return mergedLoaderData;\n}\nfunction getActionDataForCommit(pendingActionResult) {\n  if (!pendingActionResult) {\n    return {};\n  }\n  return isErrorResult(pendingActionResult[1]) ? {\n    // Clear out prior actionData on errors\n    actionData: {}\n  } : {\n    actionData: {\n      [pendingActionResult[0]]: pendingActionResult[1].data\n    }\n  };\n}\n// Find the nearest error boundary, looking upwards from the leaf route (or the\n// route specified by routeId) for the closest ancestor error boundary,\n// defaulting to the root match\nfunction findNearestBoundary(matches, routeId) {\n  let eligibleMatches = routeId ? matches.slice(0, matches.findIndex(m => m.route.id === routeId) + 1) : [...matches];\n  return eligibleMatches.reverse().find(m => m.route.hasErrorBoundary === true) || matches[0];\n}\nfunction getShortCircuitMatches(routes) {\n  // Prefer a root layout route if present, otherwise shim in a route object\n  let route = routes.length === 1 ? routes[0] : routes.find(r => r.index || !r.path || r.path === \"/\") || {\n    id: \"__shim-error-route__\"\n  };\n  return {\n    matches: [{\n      params: {},\n      pathname: \"\",\n      pathnameBase: \"\",\n      route\n    }],\n    route\n  };\n}\nfunction getInternalRouterError(status, _temp5) {\n  let {\n    pathname,\n    routeId,\n    method,\n    type,\n    message\n  } = _temp5 === void 0 ? {} : _temp5;\n  let statusText = \"Unknown Server Error\";\n  let errorMessage = \"Unknown @remix-run/router error\";\n  if (status === 400) {\n    statusText = \"Bad Request\";\n    if (type === \"route-discovery\") {\n      errorMessage = \"Unable to match URL \\\"\" + pathname + \"\\\" - the `unstable_patchRoutesOnNavigation()` \" + (\"function threw the following error:\\n\" + message);\n    } else if (method && pathname && routeId) {\n      errorMessage = \"You made a \" + method + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide a `loader` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n    } else if (type === \"defer-action\") {\n      errorMessage = \"defer() is not supported in actions\";\n    } else if (type === \"invalid-body\") {\n      errorMessage = \"Unable to encode submission body\";\n    }\n  } else if (status === 403) {\n    statusText = \"Forbidden\";\n    errorMessage = \"Route \\\"\" + routeId + \"\\\" does not match URL \\\"\" + pathname + \"\\\"\";\n  } else if (status === 404) {\n    statusText = \"Not Found\";\n    errorMessage = \"No route matches URL \\\"\" + pathname + \"\\\"\";\n  } else if (status === 405) {\n    statusText = \"Method Not Allowed\";\n    if (method && pathname && routeId) {\n      errorMessage = \"You made a \" + method.toUpperCase() + \" request to \\\"\" + pathname + \"\\\" but \" + (\"did not provide an `action` for route \\\"\" + routeId + \"\\\", \") + \"so there is no way to handle the request.\";\n    } else if (method) {\n      errorMessage = \"Invalid request method \\\"\" + method.toUpperCase() + \"\\\"\";\n    }\n  }\n  return new ErrorResponseImpl(status || 500, statusText, new Error(errorMessage), true);\n}\n// Find any returned redirect errors, starting from the lowest match\nfunction findRedirect(results) {\n  let entries = Object.entries(results);\n  for (let i = entries.length - 1; i >= 0; i--) {\n    let [key, result] = entries[i];\n    if (isRedirectResult(result)) {\n      return {\n        key,\n        result\n      };\n    }\n  }\n}\nfunction stripHashFromPath(path) {\n  let parsedPath = typeof path === \"string\" ? parsePath(path) : path;\n  return createPath(_extends({}, parsedPath, {\n    hash: \"\"\n  }));\n}\nfunction isHashChangeOnly(a, b) {\n  if (a.pathname !== b.pathname || a.search !== b.search) {\n    return false;\n  }\n  if (a.hash === \"\") {\n    // /page -> /page#hash\n    return b.hash !== \"\";\n  } else if (a.hash === b.hash) {\n    // /page#hash -> /page#hash\n    return true;\n  } else if (b.hash !== \"\") {\n    // /page#hash -> /page#other\n    return true;\n  }\n  // If the hash is removed the browser will re-perform a request to the server\n  // /page#hash -> /page\n  return false;\n}\nfunction isPromise(val) {\n  return typeof val === \"object\" && val != null && \"then\" in val;\n}\nfunction isDataStrategyResult(result) {\n  return result != null && typeof result === \"object\" && \"type\" in result && \"result\" in result && (result.type === ResultType.data || result.type === ResultType.error);\n}\nfunction isRedirectDataStrategyResultResult(result) {\n  return isResponse(result.result) && redirectStatusCodes.has(result.result.status);\n}\nfunction isDeferredResult(result) {\n  return result.type === ResultType.deferred;\n}\nfunction isErrorResult(result) {\n  return result.type === ResultType.error;\n}\nfunction isRedirectResult(result) {\n  return (result && result.type) === ResultType.redirect;\n}\nfunction isDataWithResponseInit(value) {\n  return typeof value === \"object\" && value != null && \"type\" in value && \"data\" in value && \"init\" in value && value.type === \"DataWithResponseInit\";\n}\nfunction isDeferredData(value) {\n  let deferred = value;\n  return deferred && typeof deferred === \"object\" && typeof deferred.data === \"object\" && typeof deferred.subscribe === \"function\" && typeof deferred.cancel === \"function\" && typeof deferred.resolveData === \"function\";\n}\nfunction isResponse(value) {\n  return value != null && typeof value.status === \"number\" && typeof value.statusText === \"string\" && typeof value.headers === \"object\" && typeof value.body !== \"undefined\";\n}\nfunction isRedirectResponse(result) {\n  if (!isResponse(result)) {\n    return false;\n  }\n  let status = result.status;\n  let location = result.headers.get(\"Location\");\n  return status >= 300 && status <= 399 && location != null;\n}\nfunction isValidMethod(method) {\n  return validRequestMethods.has(method.toLowerCase());\n}\nfunction isMutationMethod(method) {\n  return validMutationMethods.has(method.toLowerCase());\n}\nasync function resolveNavigationDeferredResults(matches, results, signal, currentMatches, currentLoaderData) {\n  let entries = Object.entries(results);\n  for (let index = 0; index < entries.length; index++) {\n    let [routeId, result] = entries[index];\n    let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n    let currentMatch = currentMatches.find(m => m.route.id === match.route.id);\n    let isRevalidatingLoader = currentMatch != null && !isNewRouteInstance(currentMatch, match) && (currentLoaderData && currentLoaderData[match.route.id]) !== undefined;\n    if (isDeferredResult(result) && isRevalidatingLoader) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      await resolveDeferredData(result, signal, false).then(result => {\n        if (result) {\n          results[routeId] = result;\n        }\n      });\n    }\n  }\n}\nasync function resolveFetcherDeferredResults(matches, results, revalidatingFetchers) {\n  for (let index = 0; index < revalidatingFetchers.length; index++) {\n    let {\n      key,\n      routeId,\n      controller\n    } = revalidatingFetchers[index];\n    let result = results[key];\n    let match = matches.find(m => (m == null ? void 0 : m.route.id) === routeId);\n    // If we don't have a match, then we can have a deferred result to do\n    // anything with.  This is for revalidating fetchers where the route was\n    // removed during HMR\n    if (!match) {\n      continue;\n    }\n    if (isDeferredResult(result)) {\n      // Note: we do not have to touch activeDeferreds here since we race them\n      // against the signal in resolveDeferredData and they'll get aborted\n      // there if needed\n      invariant(controller, \"Expected an AbortController for revalidating fetcher deferred result\");\n      await resolveDeferredData(result, controller.signal, true).then(result => {\n        if (result) {\n          results[key] = result;\n        }\n      });\n    }\n  }\n}\nasync function resolveDeferredData(result, signal, unwrap) {\n  if (unwrap === void 0) {\n    unwrap = false;\n  }\n  let aborted = await result.deferredData.resolveData(signal);\n  if (aborted) {\n    return;\n  }\n  if (unwrap) {\n    try {\n      return {\n        type: ResultType.data,\n        data: result.deferredData.unwrappedData\n      };\n    } catch (e) {\n      // Handle any TrackedPromise._error values encountered while unwrapping\n      return {\n        type: ResultType.error,\n        error: e\n      };\n    }\n  }\n  return {\n    type: ResultType.data,\n    data: result.deferredData.data\n  };\n}\nfunction hasNakedIndexQuery(search) {\n  return new URLSearchParams(search).getAll(\"index\").some(v => v === \"\");\n}\nfunction getTargetMatch(matches, location) {\n  let search = typeof location === \"string\" ? parsePath(location).search : location.search;\n  if (matches[matches.length - 1].route.index && hasNakedIndexQuery(search || \"\")) {\n    // Return the leaf index route when index is present\n    return matches[matches.length - 1];\n  }\n  // Otherwise grab the deepest \"path contributing\" match (ignoring index and\n  // pathless layout routes)\n  let pathMatches = getPathContributingMatches(matches);\n  return pathMatches[pathMatches.length - 1];\n}\nfunction getSubmissionFromNavigation(navigation) {\n  let {\n    formMethod,\n    formAction,\n    formEncType,\n    text,\n    formData,\n    json\n  } = navigation;\n  if (!formMethod || !formAction || !formEncType) {\n    return;\n  }\n  if (text != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json: undefined,\n      text\n    };\n  } else if (formData != null) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData,\n      json: undefined,\n      text: undefined\n    };\n  } else if (json !== undefined) {\n    return {\n      formMethod,\n      formAction,\n      formEncType,\n      formData: undefined,\n      json,\n      text: undefined\n    };\n  }\n}\nfunction getLoadingNavigation(location, submission) {\n  if (submission) {\n    let navigation = {\n      state: \"loading\",\n      location,\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text\n    };\n    return navigation;\n  } else {\n    let navigation = {\n      state: \"loading\",\n      location,\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined\n    };\n    return navigation;\n  }\n}\nfunction getSubmittingNavigation(location, submission) {\n  let navigation = {\n    state: \"submitting\",\n    location,\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text\n  };\n  return navigation;\n}\nfunction getLoadingFetcher(submission, data) {\n  if (submission) {\n    let fetcher = {\n      state: \"loading\",\n      formMethod: submission.formMethod,\n      formAction: submission.formAction,\n      formEncType: submission.formEncType,\n      formData: submission.formData,\n      json: submission.json,\n      text: submission.text,\n      data\n    };\n    return fetcher;\n  } else {\n    let fetcher = {\n      state: \"loading\",\n      formMethod: undefined,\n      formAction: undefined,\n      formEncType: undefined,\n      formData: undefined,\n      json: undefined,\n      text: undefined,\n      data\n    };\n    return fetcher;\n  }\n}\nfunction getSubmittingFetcher(submission, existingFetcher) {\n  let fetcher = {\n    state: \"submitting\",\n    formMethod: submission.formMethod,\n    formAction: submission.formAction,\n    formEncType: submission.formEncType,\n    formData: submission.formData,\n    json: submission.json,\n    text: submission.text,\n    data: existingFetcher ? existingFetcher.data : undefined\n  };\n  return fetcher;\n}\nfunction getDoneFetcher(data) {\n  let fetcher = {\n    state: \"idle\",\n    formMethod: undefined,\n    formAction: undefined,\n    formEncType: undefined,\n    formData: undefined,\n    json: undefined,\n    text: undefined,\n    data\n  };\n  return fetcher;\n}\nfunction restoreAppliedTransitions(_window, transitions) {\n  try {\n    let sessionPositions = _window.sessionStorage.getItem(TRANSITIONS_STORAGE_KEY);\n    if (sessionPositions) {\n      let json = JSON.parse(sessionPositions);\n      for (let [k, v] of Object.entries(json || {})) {\n        if (v && Array.isArray(v)) {\n          transitions.set(k, new Set(v || []));\n        }\n      }\n    }\n  } catch (e) {\n    // no-op, use default empty object\n  }\n}\nfunction persistAppliedTransitions(_window, transitions) {\n  if (transitions.size > 0) {\n    let json = {};\n    for (let [k, v] of transitions) {\n      json[k] = [...v];\n    }\n    try {\n      _window.sessionStorage.setItem(TRANSITIONS_STORAGE_KEY, JSON.stringify(json));\n    } catch (error) {\n      warning(false, \"Failed to save applied view transitions in sessionStorage (\" + error + \").\");\n    }\n  }\n}\n//#endregion\n\nexport { AbortedDeferredError, Action, IDLE_BLOCKER, IDLE_FETCHER, IDLE_NAVIGATION, UNSAFE_DEFERRED_SYMBOL, DeferredData as UNSAFE_DeferredData, ErrorResponseImpl as UNSAFE_ErrorResponseImpl, convertRouteMatchToUiMatch as UNSAFE_convertRouteMatchToUiMatch, convertRoutesToDataRoutes as UNSAFE_convertRoutesToDataRoutes, decodePath as UNSAFE_decodePath, getResolveToMatches as UNSAFE_getResolveToMatches, invariant as UNSAFE_invariant, warning as UNSAFE_warning, createBrowserHistory, createHashHistory, createMemoryHistory, createPath, createRouter, createStaticHandler, defer, generatePath, getStaticContextFromError, getToPathname, isDataWithResponseInit, isDeferredData, isRouteErrorResponse, joinPaths, json, matchPath, matchRoutes, normalizePathname, parsePath, redirect, redirectDocument, replace, resolvePath, resolveTo, stripBasename, data as unstable_data };\n//# sourceMappingURL=router.js.map\n","/**\n * React Router v6.26.2\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport { UNSAFE_invariant, joinPaths, matchPath, UNSAFE_decodePath, UNSAFE_getResolveToMatches, UNSAFE_warning, resolveTo, parsePath, matchRoutes, Action, UNSAFE_convertRouteMatchToUiMatch, stripBasename, IDLE_BLOCKER, isRouteErrorResponse, createMemoryHistory, AbortedDeferredError, createRouter } from '@remix-run/router';\nexport { AbortedDeferredError, Action as NavigationType, createPath, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, replace, resolvePath } from '@remix-run/router';\n\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\n\n// Create react-specific types from the agnostic types in @remix-run/router to\n// export from react-router\nconst DataRouterContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  DataRouterContext.displayName = \"DataRouter\";\n}\nconst DataRouterStateContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  DataRouterStateContext.displayName = \"DataRouterState\";\n}\nconst AwaitContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  AwaitContext.displayName = \"Await\";\n}\n\n/**\n * A Navigator is a \"location changer\"; it's how you get to different locations.\n *\n * Every history instance conforms to the Navigator interface, but the\n * distinction is useful primarily when it comes to the low-level `<Router>` API\n * where both the location and a navigator must be provided separately in order\n * to avoid \"tearing\" that may occur in a suspense-enabled app if the action\n * and/or location were to be read directly from the history instance.\n */\n\nconst NavigationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  NavigationContext.displayName = \"Navigation\";\n}\nconst LocationContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  LocationContext.displayName = \"Location\";\n}\nconst RouteContext = /*#__PURE__*/React.createContext({\n  outlet: null,\n  matches: [],\n  isDataRoute: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n  RouteContext.displayName = \"Route\";\n}\nconst RouteErrorContext = /*#__PURE__*/React.createContext(null);\nif (process.env.NODE_ENV !== \"production\") {\n  RouteErrorContext.displayName = \"RouteError\";\n}\n\n/**\n * Returns the full href for the given \"to\" value. This is useful for building\n * custom links that are also accessible and preserve right-click behavior.\n *\n * @see https://reactrouter.com/hooks/use-href\n */\nfunction useHref(to, _temp) {\n  let {\n    relative\n  } = _temp === void 0 ? {} : _temp;\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useHref() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    basename,\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    hash,\n    pathname,\n    search\n  } = useResolvedPath(to, {\n    relative\n  });\n  let joinedPathname = pathname;\n\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the href.  If this is a root navigation, then just use the raw\n  // basename which allows the basename to have full control over the presence\n  // of a trailing slash on root links\n  if (basename !== \"/\") {\n    joinedPathname = pathname === \"/\" ? basename : joinPaths([basename, pathname]);\n  }\n  return navigator.createHref({\n    pathname: joinedPathname,\n    search,\n    hash\n  });\n}\n\n/**\n * Returns true if this component is a descendant of a `<Router>`.\n *\n * @see https://reactrouter.com/hooks/use-in-router-context\n */\nfunction useInRouterContext() {\n  return React.useContext(LocationContext) != null;\n}\n\n/**\n * Returns the current location object, which represents the current URL in web\n * browsers.\n *\n * Note: If you're using this it may mean you're doing some of your own\n * \"routing\" in your app, and we'd like to know what your use case is. We may\n * be able to provide something higher-level to better suit your needs.\n *\n * @see https://reactrouter.com/hooks/use-location\n */\nfunction useLocation() {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useLocation() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  return React.useContext(LocationContext).location;\n}\n\n/**\n * Returns the current navigation action which describes how the router came to\n * the current location, either by a pop, push, or replace on the history stack.\n *\n * @see https://reactrouter.com/hooks/use-navigation-type\n */\nfunction useNavigationType() {\n  return React.useContext(LocationContext).navigationType;\n}\n\n/**\n * Returns a PathMatch object if the given pattern matches the current URL.\n * This is useful for components that need to know \"active\" state, e.g.\n * `<NavLink>`.\n *\n * @see https://reactrouter.com/hooks/use-match\n */\nfunction useMatch(pattern) {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useMatch() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    pathname\n  } = useLocation();\n  return React.useMemo(() => matchPath(pattern, UNSAFE_decodePath(pathname)), [pathname, pattern]);\n}\n\n/**\n * The interface for the navigate() function returned from useNavigate().\n */\n\nconst navigateEffectWarning = \"You should call navigate() in a React.useEffect(), not when \" + \"your component is first rendered.\";\n\n// Mute warnings for calls to useNavigate in SSR environments\nfunction useIsomorphicLayoutEffect(cb) {\n  let isStatic = React.useContext(NavigationContext).static;\n  if (!isStatic) {\n    // We should be able to get rid of this once react 18.3 is released\n    // See: https://github.com/facebook/react/pull/26395\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(cb);\n  }\n}\n\n/**\n * Returns an imperative method for changing the location. Used by `<Link>`s, but\n * may also be used by other elements to change the location.\n *\n * @see https://reactrouter.com/hooks/use-navigate\n */\nfunction useNavigate() {\n  let {\n    isDataRoute\n  } = React.useContext(RouteContext);\n  // Conditional usage is OK here because the usage of a data router is static\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  return isDataRoute ? useNavigateStable() : useNavigateUnstable();\n}\nfunction useNavigateUnstable() {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useNavigate() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let dataRouterContext = React.useContext(DataRouterContext);\n  let {\n    basename,\n    future,\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n  let navigate = React.useCallback(function (to, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n    // Short circuit here since if this happens on first render the navigate\n    // is useless because we haven't wired up our history listener yet\n    if (!activeRef.current) return;\n    if (typeof to === \"number\") {\n      navigator.go(to);\n      return;\n    }\n    let path = resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, options.relative === \"path\");\n\n    // If we're operating within a basename, prepend it to the pathname prior\n    // to handing off to history (but only if we're not in a data router,\n    // otherwise it'll prepend the basename inside of the router).\n    // If this is a root navigation, then we navigate to the raw basename\n    // which allows the basename to have full control over the presence of a\n    // trailing slash on root links\n    if (dataRouterContext == null && basename !== \"/\") {\n      path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n    }\n    (!!options.replace ? navigator.replace : navigator.push)(path, options.state, options);\n  }, [basename, navigator, routePathnamesJson, locationPathname, dataRouterContext]);\n  return navigate;\n}\nconst OutletContext = /*#__PURE__*/React.createContext(null);\n\n/**\n * Returns the context (if provided) for the child route at this level of the route\n * hierarchy.\n * @see https://reactrouter.com/hooks/use-outlet-context\n */\nfunction useOutletContext() {\n  return React.useContext(OutletContext);\n}\n\n/**\n * Returns the element for the child route at this level of the route\n * hierarchy. Used internally by `<Outlet>` to render child routes.\n *\n * @see https://reactrouter.com/hooks/use-outlet\n */\nfunction useOutlet(context) {\n  let outlet = React.useContext(RouteContext).outlet;\n  if (outlet) {\n    return /*#__PURE__*/React.createElement(OutletContext.Provider, {\n      value: context\n    }, outlet);\n  }\n  return outlet;\n}\n\n/**\n * Returns an object of key/value pairs of the dynamic params from the current\n * URL that were matched by the route path.\n *\n * @see https://reactrouter.com/hooks/use-params\n */\nfunction useParams() {\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let routeMatch = matches[matches.length - 1];\n  return routeMatch ? routeMatch.params : {};\n}\n\n/**\n * Resolves the pathname of the given `to` value against the current location.\n *\n * @see https://reactrouter.com/hooks/use-resolved-path\n */\nfunction useResolvedPath(to, _temp2) {\n  let {\n    relative\n  } = _temp2 === void 0 ? {} : _temp2;\n  let {\n    future\n  } = React.useContext(NavigationContext);\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let routePathnamesJson = JSON.stringify(UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath));\n  return React.useMemo(() => resolveTo(to, JSON.parse(routePathnamesJson), locationPathname, relative === \"path\"), [to, routePathnamesJson, locationPathname, relative]);\n}\n\n/**\n * Returns the element of the route that matched the current location, prepared\n * with the correct context to render the remainder of the route tree. Route\n * elements in the tree must render an `<Outlet>` to render their child route's\n * element.\n *\n * @see https://reactrouter.com/hooks/use-routes\n */\nfunction useRoutes(routes, locationArg) {\n  return useRoutesImpl(routes, locationArg);\n}\n\n// Internal implementation with accept optional param for RouterProvider usage\nfunction useRoutesImpl(routes, locationArg, dataRouterState, future) {\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of the\n  // router loaded. We can help them understand how to avoid that.\n  \"useRoutes() may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    navigator\n  } = React.useContext(NavigationContext);\n  let {\n    matches: parentMatches\n  } = React.useContext(RouteContext);\n  let routeMatch = parentMatches[parentMatches.length - 1];\n  let parentParams = routeMatch ? routeMatch.params : {};\n  let parentPathname = routeMatch ? routeMatch.pathname : \"/\";\n  let parentPathnameBase = routeMatch ? routeMatch.pathnameBase : \"/\";\n  let parentRoute = routeMatch && routeMatch.route;\n  if (process.env.NODE_ENV !== \"production\") {\n    // You won't get a warning about 2 different <Routes> under a <Route>\n    // without a trailing *, but this is a best-effort warning anyway since we\n    // cannot even give the warning unless they land at the parent route.\n    //\n    // Example:\n    //\n    // <Routes>\n    //   {/* This route path MUST end with /* because otherwise\n    //       it will never match /blog/post/123 */}\n    //   <Route path=\"blog\" element={<Blog />} />\n    //   <Route path=\"blog/feed\" element={<BlogFeed />} />\n    // </Routes>\n    //\n    // function Blog() {\n    //   return (\n    //     <Routes>\n    //       <Route path=\"post/:id\" element={<Post />} />\n    //     </Routes>\n    //   );\n    // }\n    let parentPath = parentRoute && parentRoute.path || \"\";\n    warningOnce(parentPathname, !parentRoute || parentPath.endsWith(\"*\"), \"You rendered descendant <Routes> (or called `useRoutes()`) at \" + (\"\\\"\" + parentPathname + \"\\\" (under <Route path=\\\"\" + parentPath + \"\\\">) but the \") + \"parent route path has no trailing \\\"*\\\". This means if you navigate \" + \"deeper, the parent won't match anymore and therefore the child \" + \"routes will never render.\\n\\n\" + (\"Please change the parent <Route path=\\\"\" + parentPath + \"\\\"> to <Route \") + (\"path=\\\"\" + (parentPath === \"/\" ? \"*\" : parentPath + \"/*\") + \"\\\">.\"));\n  }\n  let locationFromContext = useLocation();\n  let location;\n  if (locationArg) {\n    var _parsedLocationArg$pa;\n    let parsedLocationArg = typeof locationArg === \"string\" ? parsePath(locationArg) : locationArg;\n    !(parentPathnameBase === \"/\" || ((_parsedLocationArg$pa = parsedLocationArg.pathname) == null ? void 0 : _parsedLocationArg$pa.startsWith(parentPathnameBase))) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"When overriding the location using `<Routes location>` or `useRoutes(routes, location)`, \" + \"the location pathname must begin with the portion of the URL pathname that was \" + (\"matched by all parent routes. The current pathname base is \\\"\" + parentPathnameBase + \"\\\" \") + (\"but pathname \\\"\" + parsedLocationArg.pathname + \"\\\" was given in the `location` prop.\")) : UNSAFE_invariant(false) : void 0;\n    location = parsedLocationArg;\n  } else {\n    location = locationFromContext;\n  }\n  let pathname = location.pathname || \"/\";\n  let remainingPathname = pathname;\n  if (parentPathnameBase !== \"/\") {\n    // Determine the remaining pathname by removing the # of URL segments the\n    // parentPathnameBase has, instead of removing based on character count.\n    // This is because we can't guarantee that incoming/outgoing encodings/\n    // decodings will match exactly.\n    // We decode paths before matching on a per-segment basis with\n    // decodeURIComponent(), but we re-encode pathnames via `new URL()` so they\n    // match what `window.location.pathname` would reflect.  Those don't 100%\n    // align when it comes to encoded URI characters such as % and &.\n    //\n    // So we may end up with:\n    //   pathname:           \"/descendant/a%25b/match\"\n    //   parentPathnameBase: \"/descendant/a%b\"\n    //\n    // And the direct substring removal approach won't work :/\n    let parentSegments = parentPathnameBase.replace(/^\\//, \"\").split(\"/\");\n    let segments = pathname.replace(/^\\//, \"\").split(\"/\");\n    remainingPathname = \"/\" + segments.slice(parentSegments.length).join(\"/\");\n  }\n  let matches = matchRoutes(routes, {\n    pathname: remainingPathname\n  });\n  if (process.env.NODE_ENV !== \"production\") {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(parentRoute || matches != null, \"No routes matched location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \") : void 0;\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(matches == null || matches[matches.length - 1].route.element !== undefined || matches[matches.length - 1].route.Component !== undefined || matches[matches.length - 1].route.lazy !== undefined, \"Matched leaf route at location \\\"\" + location.pathname + location.search + location.hash + \"\\\" \" + \"does not have an element or Component. This means it will render an <Outlet /> with a \" + \"null value by default resulting in an \\\"empty\\\" page.\") : void 0;\n  }\n  let renderedMatches = _renderMatches(matches && matches.map(match => Object.assign({}, match, {\n    params: Object.assign({}, parentParams, match.params),\n    pathname: joinPaths([parentPathnameBase,\n    // Re-encode pathnames that were decoded inside matchRoutes\n    navigator.encodeLocation ? navigator.encodeLocation(match.pathname).pathname : match.pathname]),\n    pathnameBase: match.pathnameBase === \"/\" ? parentPathnameBase : joinPaths([parentPathnameBase,\n    // Re-encode pathnames that were decoded inside matchRoutes\n    navigator.encodeLocation ? navigator.encodeLocation(match.pathnameBase).pathname : match.pathnameBase])\n  })), parentMatches, dataRouterState, future);\n\n  // When a user passes in a `locationArg`, the associated routes need to\n  // be wrapped in a new `LocationContext.Provider` in order for `useLocation`\n  // to use the scoped location instead of the global location.\n  if (locationArg && renderedMatches) {\n    return /*#__PURE__*/React.createElement(LocationContext.Provider, {\n      value: {\n        location: _extends({\n          pathname: \"/\",\n          search: \"\",\n          hash: \"\",\n          state: null,\n          key: \"default\"\n        }, location),\n        navigationType: Action.Pop\n      }\n    }, renderedMatches);\n  }\n  return renderedMatches;\n}\nfunction DefaultErrorComponent() {\n  let error = useRouteError();\n  let message = isRouteErrorResponse(error) ? error.status + \" \" + error.statusText : error instanceof Error ? error.message : JSON.stringify(error);\n  let stack = error instanceof Error ? error.stack : null;\n  let lightgrey = \"rgba(200,200,200, 0.5)\";\n  let preStyles = {\n    padding: \"0.5rem\",\n    backgroundColor: lightgrey\n  };\n  let codeStyles = {\n    padding: \"2px 4px\",\n    backgroundColor: lightgrey\n  };\n  let devInfo = null;\n  if (process.env.NODE_ENV !== \"production\") {\n    console.error(\"Error handled by React Router default ErrorBoundary:\", error);\n    devInfo = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"p\", null, \"\\uD83D\\uDCBF Hey developer \\uD83D\\uDC4B\"), /*#__PURE__*/React.createElement(\"p\", null, \"You can provide a way better UX than this when your app throws errors by providing your own \", /*#__PURE__*/React.createElement(\"code\", {\n      style: codeStyles\n    }, \"ErrorBoundary\"), \" or\", \" \", /*#__PURE__*/React.createElement(\"code\", {\n      style: codeStyles\n    }, \"errorElement\"), \" prop on your route.\"));\n  }\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"h2\", null, \"Unexpected Application Error!\"), /*#__PURE__*/React.createElement(\"h3\", {\n    style: {\n      fontStyle: \"italic\"\n    }\n  }, message), stack ? /*#__PURE__*/React.createElement(\"pre\", {\n    style: preStyles\n  }, stack) : null, devInfo);\n}\nconst defaultErrorElement = /*#__PURE__*/React.createElement(DefaultErrorComponent, null);\nclass RenderErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      location: props.location,\n      revalidation: props.revalidation,\n      error: props.error\n    };\n  }\n  static getDerivedStateFromError(error) {\n    return {\n      error: error\n    };\n  }\n  static getDerivedStateFromProps(props, state) {\n    // When we get into an error state, the user will likely click \"back\" to the\n    // previous page that didn't have an error. Because this wraps the entire\n    // application, that will have no effect--the error page continues to display.\n    // This gives us a mechanism to recover from the error when the location changes.\n    //\n    // Whether we're in an error state or not, we update the location in state\n    // so that when we are in an error state, it gets reset when a new location\n    // comes in and the user recovers from the error.\n    if (state.location !== props.location || state.revalidation !== \"idle\" && props.revalidation === \"idle\") {\n      return {\n        error: props.error,\n        location: props.location,\n        revalidation: props.revalidation\n      };\n    }\n\n    // If we're not changing locations, preserve the location but still surface\n    // any new errors that may come through. We retain the existing error, we do\n    // this because the error provided from the app state may be cleared without\n    // the location changing.\n    return {\n      error: props.error !== undefined ? props.error : state.error,\n      location: state.location,\n      revalidation: props.revalidation || state.revalidation\n    };\n  }\n  componentDidCatch(error, errorInfo) {\n    console.error(\"React Router caught the following error during render\", error, errorInfo);\n  }\n  render() {\n    return this.state.error !== undefined ? /*#__PURE__*/React.createElement(RouteContext.Provider, {\n      value: this.props.routeContext\n    }, /*#__PURE__*/React.createElement(RouteErrorContext.Provider, {\n      value: this.state.error,\n      children: this.props.component\n    })) : this.props.children;\n  }\n}\nfunction RenderedRoute(_ref) {\n  let {\n    routeContext,\n    match,\n    children\n  } = _ref;\n  let dataRouterContext = React.useContext(DataRouterContext);\n\n  // Track how deep we got in our render pass to emulate SSR componentDidCatch\n  // in a DataStaticRouter\n  if (dataRouterContext && dataRouterContext.static && dataRouterContext.staticContext && (match.route.errorElement || match.route.ErrorBoundary)) {\n    dataRouterContext.staticContext._deepestRenderedBoundaryId = match.route.id;\n  }\n  return /*#__PURE__*/React.createElement(RouteContext.Provider, {\n    value: routeContext\n  }, children);\n}\nfunction _renderMatches(matches, parentMatches, dataRouterState, future) {\n  var _dataRouterState;\n  if (parentMatches === void 0) {\n    parentMatches = [];\n  }\n  if (dataRouterState === void 0) {\n    dataRouterState = null;\n  }\n  if (future === void 0) {\n    future = null;\n  }\n  if (matches == null) {\n    var _future;\n    if (!dataRouterState) {\n      return null;\n    }\n    if (dataRouterState.errors) {\n      // Don't bail if we have data router errors so we can render them in the\n      // boundary.  Use the pre-matched (or shimmed) matches\n      matches = dataRouterState.matches;\n    } else if ((_future = future) != null && _future.v7_partialHydration && parentMatches.length === 0 && !dataRouterState.initialized && dataRouterState.matches.length > 0) {\n      // Don't bail if we're initializing with partial hydration and we have\n      // router matches.  That means we're actively running `patchRoutesOnNavigation`\n      // so we should render down the partial matches to the appropriate\n      // `HydrateFallback`.  We only do this if `parentMatches` is empty so it\n      // only impacts the root matches for `RouterProvider` and no descendant\n      // `<Routes>`\n      matches = dataRouterState.matches;\n    } else {\n      return null;\n    }\n  }\n  let renderedMatches = matches;\n\n  // If we have data errors, trim matches to the highest error boundary\n  let errors = (_dataRouterState = dataRouterState) == null ? void 0 : _dataRouterState.errors;\n  if (errors != null) {\n    let errorIndex = renderedMatches.findIndex(m => m.route.id && (errors == null ? void 0 : errors[m.route.id]) !== undefined);\n    !(errorIndex >= 0) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"Could not find a matching route for errors on route IDs: \" + Object.keys(errors).join(\",\")) : UNSAFE_invariant(false) : void 0;\n    renderedMatches = renderedMatches.slice(0, Math.min(renderedMatches.length, errorIndex + 1));\n  }\n\n  // If we're in a partial hydration mode, detect if we need to render down to\n  // a given HydrateFallback while we load the rest of the hydration data\n  let renderFallback = false;\n  let fallbackIndex = -1;\n  if (dataRouterState && future && future.v7_partialHydration) {\n    for (let i = 0; i < renderedMatches.length; i++) {\n      let match = renderedMatches[i];\n      // Track the deepest fallback up until the first route without data\n      if (match.route.HydrateFallback || match.route.hydrateFallbackElement) {\n        fallbackIndex = i;\n      }\n      if (match.route.id) {\n        let {\n          loaderData,\n          errors\n        } = dataRouterState;\n        let needsToRunLoader = match.route.loader && loaderData[match.route.id] === undefined && (!errors || errors[match.route.id] === undefined);\n        if (match.route.lazy || needsToRunLoader) {\n          // We found the first route that's not ready to render (waiting on\n          // lazy, or has a loader that hasn't run yet).  Flag that we need to\n          // render a fallback and render up until the appropriate fallback\n          renderFallback = true;\n          if (fallbackIndex >= 0) {\n            renderedMatches = renderedMatches.slice(0, fallbackIndex + 1);\n          } else {\n            renderedMatches = [renderedMatches[0]];\n          }\n          break;\n        }\n      }\n    }\n  }\n  return renderedMatches.reduceRight((outlet, match, index) => {\n    // Only data routers handle errors/fallbacks\n    let error;\n    let shouldRenderHydrateFallback = false;\n    let errorElement = null;\n    let hydrateFallbackElement = null;\n    if (dataRouterState) {\n      error = errors && match.route.id ? errors[match.route.id] : undefined;\n      errorElement = match.route.errorElement || defaultErrorElement;\n      if (renderFallback) {\n        if (fallbackIndex < 0 && index === 0) {\n          warningOnce(\"route-fallback\", false, \"No `HydrateFallback` element provided to render during initial hydration\");\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = null;\n        } else if (fallbackIndex === index) {\n          shouldRenderHydrateFallback = true;\n          hydrateFallbackElement = match.route.hydrateFallbackElement || null;\n        }\n      }\n    }\n    let matches = parentMatches.concat(renderedMatches.slice(0, index + 1));\n    let getChildren = () => {\n      let children;\n      if (error) {\n        children = errorElement;\n      } else if (shouldRenderHydrateFallback) {\n        children = hydrateFallbackElement;\n      } else if (match.route.Component) {\n        // Note: This is a de-optimized path since React won't re-use the\n        // ReactElement since it's identity changes with each new\n        // React.createElement call.  We keep this so folks can use\n        // `<Route Component={...}>` in `<Routes>` but generally `Component`\n        // usage is only advised in `RouterProvider` when we can convert it to\n        // `element` ahead of time.\n        children = /*#__PURE__*/React.createElement(match.route.Component, null);\n      } else if (match.route.element) {\n        children = match.route.element;\n      } else {\n        children = outlet;\n      }\n      return /*#__PURE__*/React.createElement(RenderedRoute, {\n        match: match,\n        routeContext: {\n          outlet,\n          matches,\n          isDataRoute: dataRouterState != null\n        },\n        children: children\n      });\n    };\n    // Only wrap in an error boundary within data router usages when we have an\n    // ErrorBoundary/errorElement on this route.  Otherwise let it bubble up to\n    // an ancestor ErrorBoundary/errorElement\n    return dataRouterState && (match.route.ErrorBoundary || match.route.errorElement || index === 0) ? /*#__PURE__*/React.createElement(RenderErrorBoundary, {\n      location: dataRouterState.location,\n      revalidation: dataRouterState.revalidation,\n      component: errorElement,\n      error: error,\n      children: getChildren(),\n      routeContext: {\n        outlet: null,\n        matches,\n        isDataRoute: true\n      }\n    }) : getChildren();\n  }, null);\n}\nvar DataRouterHook = /*#__PURE__*/function (DataRouterHook) {\n  DataRouterHook[\"UseBlocker\"] = \"useBlocker\";\n  DataRouterHook[\"UseRevalidator\"] = \"useRevalidator\";\n  DataRouterHook[\"UseNavigateStable\"] = \"useNavigate\";\n  return DataRouterHook;\n}(DataRouterHook || {});\nvar DataRouterStateHook = /*#__PURE__*/function (DataRouterStateHook) {\n  DataRouterStateHook[\"UseBlocker\"] = \"useBlocker\";\n  DataRouterStateHook[\"UseLoaderData\"] = \"useLoaderData\";\n  DataRouterStateHook[\"UseActionData\"] = \"useActionData\";\n  DataRouterStateHook[\"UseRouteError\"] = \"useRouteError\";\n  DataRouterStateHook[\"UseNavigation\"] = \"useNavigation\";\n  DataRouterStateHook[\"UseRouteLoaderData\"] = \"useRouteLoaderData\";\n  DataRouterStateHook[\"UseMatches\"] = \"useMatches\";\n  DataRouterStateHook[\"UseRevalidator\"] = \"useRevalidator\";\n  DataRouterStateHook[\"UseNavigateStable\"] = \"useNavigate\";\n  DataRouterStateHook[\"UseRouteId\"] = \"useRouteId\";\n  return DataRouterStateHook;\n}(DataRouterStateHook || {});\nfunction getDataRouterConsoleError(hookName) {\n  return hookName + \" must be used within a data router.  See https://reactrouter.com/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n  let ctx = React.useContext(DataRouterContext);\n  !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return ctx;\n}\nfunction useDataRouterState(hookName) {\n  let state = React.useContext(DataRouterStateContext);\n  !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return state;\n}\nfunction useRouteContext(hookName) {\n  let route = React.useContext(RouteContext);\n  !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return route;\n}\n\n// Internal version with hookName-aware debugging\nfunction useCurrentRouteId(hookName) {\n  let route = useRouteContext(hookName);\n  let thisRoute = route.matches[route.matches.length - 1];\n  !thisRoute.route.id ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, hookName + \" can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n  return thisRoute.route.id;\n}\n\n/**\n * Returns the ID for the nearest contextual route\n */\nfunction useRouteId() {\n  return useCurrentRouteId(DataRouterStateHook.UseRouteId);\n}\n\n/**\n * Returns the current navigation, defaulting to an \"idle\" navigation when\n * no navigation is in progress\n */\nfunction useNavigation() {\n  let state = useDataRouterState(DataRouterStateHook.UseNavigation);\n  return state.navigation;\n}\n\n/**\n * Returns a revalidate function for manually triggering revalidation, as well\n * as the current state of any manual revalidations\n */\nfunction useRevalidator() {\n  let dataRouterContext = useDataRouterContext(DataRouterHook.UseRevalidator);\n  let state = useDataRouterState(DataRouterStateHook.UseRevalidator);\n  return React.useMemo(() => ({\n    revalidate: dataRouterContext.router.revalidate,\n    state: state.revalidation\n  }), [dataRouterContext.router.revalidate, state.revalidation]);\n}\n\n/**\n * Returns the active route matches, useful for accessing loaderData for\n * parent/child routes or the route \"handle\" property\n */\nfunction useMatches() {\n  let {\n    matches,\n    loaderData\n  } = useDataRouterState(DataRouterStateHook.UseMatches);\n  return React.useMemo(() => matches.map(m => UNSAFE_convertRouteMatchToUiMatch(m, loaderData)), [matches, loaderData]);\n}\n\n/**\n * Returns the loader data for the nearest ancestor Route loader\n */\nfunction useLoaderData() {\n  let state = useDataRouterState(DataRouterStateHook.UseLoaderData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n  if (state.errors && state.errors[routeId] != null) {\n    console.error(\"You cannot `useLoaderData` in an errorElement (routeId: \" + routeId + \")\");\n    return undefined;\n  }\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the loaderData for the given routeId\n */\nfunction useRouteLoaderData(routeId) {\n  let state = useDataRouterState(DataRouterStateHook.UseRouteLoaderData);\n  return state.loaderData[routeId];\n}\n\n/**\n * Returns the action data for the nearest ancestor Route action\n */\nfunction useActionData() {\n  let state = useDataRouterState(DataRouterStateHook.UseActionData);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseLoaderData);\n  return state.actionData ? state.actionData[routeId] : undefined;\n}\n\n/**\n * Returns the nearest ancestor Route error, which could be a loader/action\n * error or a render error.  This is intended to be called from your\n * ErrorBoundary/errorElement to display a proper error message.\n */\nfunction useRouteError() {\n  var _state$errors;\n  let error = React.useContext(RouteErrorContext);\n  let state = useDataRouterState(DataRouterStateHook.UseRouteError);\n  let routeId = useCurrentRouteId(DataRouterStateHook.UseRouteError);\n\n  // If this was a render error, we put it in a RouteError context inside\n  // of RenderErrorBoundary\n  if (error !== undefined) {\n    return error;\n  }\n\n  // Otherwise look for errors from our data router state\n  return (_state$errors = state.errors) == null ? void 0 : _state$errors[routeId];\n}\n\n/**\n * Returns the happy-path data from the nearest ancestor `<Await />` value\n */\nfunction useAsyncValue() {\n  let value = React.useContext(AwaitContext);\n  return value == null ? void 0 : value._data;\n}\n\n/**\n * Returns the error from the nearest ancestor `<Await />` value\n */\nfunction useAsyncError() {\n  let value = React.useContext(AwaitContext);\n  return value == null ? void 0 : value._error;\n}\nlet blockerId = 0;\n\n/**\n * Allow the application to block navigations within the SPA and present the\n * user a confirmation dialog to confirm the navigation.  Mostly used to avoid\n * using half-filled form data.  This does not handle hard-reloads or\n * cross-origin navigations.\n */\nfunction useBlocker(shouldBlock) {\n  let {\n    router,\n    basename\n  } = useDataRouterContext(DataRouterHook.UseBlocker);\n  let state = useDataRouterState(DataRouterStateHook.UseBlocker);\n  let [blockerKey, setBlockerKey] = React.useState(\"\");\n  let blockerFunction = React.useCallback(arg => {\n    if (typeof shouldBlock !== \"function\") {\n      return !!shouldBlock;\n    }\n    if (basename === \"/\") {\n      return shouldBlock(arg);\n    }\n\n    // If they provided us a function and we've got an active basename, strip\n    // it from the locations we expose to the user to match the behavior of\n    // useLocation\n    let {\n      currentLocation,\n      nextLocation,\n      historyAction\n    } = arg;\n    return shouldBlock({\n      currentLocation: _extends({}, currentLocation, {\n        pathname: stripBasename(currentLocation.pathname, basename) || currentLocation.pathname\n      }),\n      nextLocation: _extends({}, nextLocation, {\n        pathname: stripBasename(nextLocation.pathname, basename) || nextLocation.pathname\n      }),\n      historyAction\n    });\n  }, [basename, shouldBlock]);\n\n  // This effect is in charge of blocker key assignment and deletion (which is\n  // tightly coupled to the key)\n  React.useEffect(() => {\n    let key = String(++blockerId);\n    setBlockerKey(key);\n    return () => router.deleteBlocker(key);\n  }, [router]);\n\n  // This effect handles assigning the blockerFunction.  This is to handle\n  // unstable blocker function identities, and happens only after the prior\n  // effect so we don't get an orphaned blockerFunction in the router with a\n  // key of \"\".  Until then we just have the IDLE_BLOCKER.\n  React.useEffect(() => {\n    if (blockerKey !== \"\") {\n      router.getBlocker(blockerKey, blockerFunction);\n    }\n  }, [router, blockerKey, blockerFunction]);\n\n  // Prefer the blocker from `state` not `router.state` since DataRouterContext\n  // is memoized so this ensures we update on blocker state updates\n  return blockerKey && state.blockers.has(blockerKey) ? state.blockers.get(blockerKey) : IDLE_BLOCKER;\n}\n\n/**\n * Stable version of useNavigate that is used when we are in the context of\n * a RouterProvider.\n */\nfunction useNavigateStable() {\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseNavigateStable);\n  let id = useCurrentRouteId(DataRouterStateHook.UseNavigateStable);\n  let activeRef = React.useRef(false);\n  useIsomorphicLayoutEffect(() => {\n    activeRef.current = true;\n  });\n  let navigate = React.useCallback(function (to, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(activeRef.current, navigateEffectWarning) : void 0;\n\n    // Short circuit here since if this happens on first render the navigate\n    // is useless because we haven't wired up our router subscriber yet\n    if (!activeRef.current) return;\n    if (typeof to === \"number\") {\n      router.navigate(to);\n    } else {\n      router.navigate(to, _extends({\n        fromRouteId: id\n      }, options));\n    }\n  }, [router, id]);\n  return navigate;\n}\nconst alreadyWarned = {};\nfunction warningOnce(key, cond, message) {\n  if (!cond && !alreadyWarned[key]) {\n    alreadyWarned[key] = true;\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, message) : void 0;\n  }\n}\n\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\n\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n  let {\n    fallbackElement,\n    router,\n    future\n  } = _ref;\n  let [state, setStateImpl] = React.useState(router.state);\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    if (v7_startTransition && startTransitionImpl) {\n      startTransitionImpl(() => setStateImpl(newState));\n    } else {\n      setStateImpl(newState);\n    }\n  }, [setStateImpl, v7_startTransition]);\n\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n  React.useEffect(() => {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(fallbackElement == null || !router.future.v7_partialHydration, \"`<RouterProvider fallbackElement>` is deprecated when using \" + \"`v7_partialHydration`, use a `HydrateFallback` component instead\") : void 0;\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  let navigator = React.useMemo(() => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: n => router.navigate(n),\n      push: (to, state, opts) => router.navigate(to, {\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      }),\n      replace: (to, state, opts) => router.navigate(to, {\n        replace: true,\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      })\n    };\n  }, [router]);\n  let basename = router.basename || \"/\";\n  let dataRouterContext = React.useMemo(() => ({\n    router,\n    navigator,\n    static: false,\n    basename\n  }), [router, navigator, basename]);\n\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(DataRouterContext.Provider, {\n    value: dataRouterContext\n  }, /*#__PURE__*/React.createElement(DataRouterStateContext.Provider, {\n    value: state\n  }, /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    location: state.location,\n    navigationType: state.historyAction,\n    navigator: navigator,\n    future: {\n      v7_relativeSplatPath: router.future.v7_relativeSplatPath\n    }\n  }, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/React.createElement(DataRoutes, {\n    routes: router.routes,\n    future: router.future,\n    state: state\n  }) : fallbackElement))), null);\n}\nfunction DataRoutes(_ref2) {\n  let {\n    routes,\n    future,\n    state\n  } = _ref2;\n  return useRoutesImpl(routes, undefined, state, future);\n}\n/**\n * A `<Router>` that stores all entries in memory.\n *\n * @see https://reactrouter.com/router-components/memory-router\n */\nfunction MemoryRouter(_ref3) {\n  let {\n    basename,\n    children,\n    initialEntries,\n    initialIndex,\n    future\n  } = _ref3;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createMemoryHistory({\n      initialEntries,\n      initialIndex,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\n/**\n * Changes the current location.\n *\n * Note: This API is mostly useful in React.Component subclasses that are not\n * able to use hooks. In functional components, we recommend you use the\n * `useNavigate` hook instead.\n *\n * @see https://reactrouter.com/components/navigate\n */\nfunction Navigate(_ref4) {\n  let {\n    to,\n    replace,\n    state,\n    relative\n  } = _ref4;\n  !useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, // TODO: This error is probably because they somehow have 2 versions of\n  // the router loaded. We can help them understand how to avoid that.\n  \"<Navigate> may be used only in the context of a <Router> component.\") : UNSAFE_invariant(false) : void 0;\n  let {\n    future,\n    static: isStatic\n  } = React.useContext(NavigationContext);\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(!isStatic, \"<Navigate> must not be used on the initial render in a <StaticRouter>. \" + \"This is a no-op, but you should modify your code so the <Navigate> is \" + \"only ever rendered in response to some user interaction or state change.\") : void 0;\n  let {\n    matches\n  } = React.useContext(RouteContext);\n  let {\n    pathname: locationPathname\n  } = useLocation();\n  let navigate = useNavigate();\n\n  // Resolve the path outside of the effect so that when effects run twice in\n  // StrictMode they navigate to the same place\n  let path = resolveTo(to, UNSAFE_getResolveToMatches(matches, future.v7_relativeSplatPath), locationPathname, relative === \"path\");\n  let jsonPath = JSON.stringify(path);\n  React.useEffect(() => navigate(JSON.parse(jsonPath), {\n    replace,\n    state,\n    relative\n  }), [navigate, jsonPath, relative, replace, state]);\n  return null;\n}\n/**\n * Renders the child route's element, if there is one.\n *\n * @see https://reactrouter.com/components/outlet\n */\nfunction Outlet(props) {\n  return useOutlet(props.context);\n}\n/**\n * Declares an element that should be rendered at a certain URL path.\n *\n * @see https://reactrouter.com/components/route\n */\nfunction Route(_props) {\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"A <Route> is only ever to be used as the child of <Routes> element, \" + \"never rendered directly. Please wrap your <Route> in a <Routes>.\") : UNSAFE_invariant(false) ;\n}\n/**\n * Provides location context for the rest of the app.\n *\n * Note: You usually won't render a `<Router>` directly. Instead, you'll render a\n * router that is more specific to your environment such as a `<BrowserRouter>`\n * in web browsers or a `<StaticRouter>` for server rendering.\n *\n * @see https://reactrouter.com/router-components/router\n */\nfunction Router(_ref5) {\n  let {\n    basename: basenameProp = \"/\",\n    children = null,\n    location: locationProp,\n    navigationType = Action.Pop,\n    navigator,\n    static: staticProp = false,\n    future\n  } = _ref5;\n  !!useInRouterContext() ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"You cannot render a <Router> inside another <Router>.\" + \" You should never have more than one in your app.\") : UNSAFE_invariant(false) : void 0;\n\n  // Preserve trailing slashes on basename, so we can let the user control\n  // the enforcement of trailing slashes throughout the app\n  let basename = basenameProp.replace(/^\\/*/, \"/\");\n  let navigationContext = React.useMemo(() => ({\n    basename,\n    navigator,\n    static: staticProp,\n    future: _extends({\n      v7_relativeSplatPath: false\n    }, future)\n  }), [basename, future, navigator, staticProp]);\n  if (typeof locationProp === \"string\") {\n    locationProp = parsePath(locationProp);\n  }\n  let {\n    pathname = \"/\",\n    search = \"\",\n    hash = \"\",\n    state = null,\n    key = \"default\"\n  } = locationProp;\n  let locationContext = React.useMemo(() => {\n    let trailingPathname = stripBasename(pathname, basename);\n    if (trailingPathname == null) {\n      return null;\n    }\n    return {\n      location: {\n        pathname: trailingPathname,\n        search,\n        hash,\n        state,\n        key\n      },\n      navigationType\n    };\n  }, [basename, pathname, search, hash, state, key, navigationType]);\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(locationContext != null, \"<Router basename=\\\"\" + basename + \"\\\"> is not able to match the URL \" + (\"\\\"\" + pathname + search + hash + \"\\\" because it does not start with the \") + \"basename, so the <Router> won't render anything.\") : void 0;\n  if (locationContext == null) {\n    return null;\n  }\n  return /*#__PURE__*/React.createElement(NavigationContext.Provider, {\n    value: navigationContext\n  }, /*#__PURE__*/React.createElement(LocationContext.Provider, {\n    children: children,\n    value: locationContext\n  }));\n}\n/**\n * A container for a nested tree of `<Route>` elements that renders the branch\n * that best matches the current location.\n *\n * @see https://reactrouter.com/components/routes\n */\nfunction Routes(_ref6) {\n  let {\n    children,\n    location\n  } = _ref6;\n  return useRoutes(createRoutesFromChildren(children), location);\n}\n/**\n * Component to use for rendering lazily loaded data from returning defer()\n * in a loader function\n */\nfunction Await(_ref7) {\n  let {\n    children,\n    errorElement,\n    resolve\n  } = _ref7;\n  return /*#__PURE__*/React.createElement(AwaitErrorBoundary, {\n    resolve: resolve,\n    errorElement: errorElement\n  }, /*#__PURE__*/React.createElement(ResolveAwait, null, children));\n}\nvar AwaitRenderStatus = /*#__PURE__*/function (AwaitRenderStatus) {\n  AwaitRenderStatus[AwaitRenderStatus[\"pending\"] = 0] = \"pending\";\n  AwaitRenderStatus[AwaitRenderStatus[\"success\"] = 1] = \"success\";\n  AwaitRenderStatus[AwaitRenderStatus[\"error\"] = 2] = \"error\";\n  return AwaitRenderStatus;\n}(AwaitRenderStatus || {});\nconst neverSettledPromise = new Promise(() => {});\nclass AwaitErrorBoundary extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      error: null\n    };\n  }\n  static getDerivedStateFromError(error) {\n    return {\n      error\n    };\n  }\n  componentDidCatch(error, errorInfo) {\n    console.error(\"<Await> caught the following error during render\", error, errorInfo);\n  }\n  render() {\n    let {\n      children,\n      errorElement,\n      resolve\n    } = this.props;\n    let promise = null;\n    let status = AwaitRenderStatus.pending;\n    if (!(resolve instanceof Promise)) {\n      // Didn't get a promise - provide as a resolved promise\n      status = AwaitRenderStatus.success;\n      promise = Promise.resolve();\n      Object.defineProperty(promise, \"_tracked\", {\n        get: () => true\n      });\n      Object.defineProperty(promise, \"_data\", {\n        get: () => resolve\n      });\n    } else if (this.state.error) {\n      // Caught a render error, provide it as a rejected promise\n      status = AwaitRenderStatus.error;\n      let renderError = this.state.error;\n      promise = Promise.reject().catch(() => {}); // Avoid unhandled rejection warnings\n      Object.defineProperty(promise, \"_tracked\", {\n        get: () => true\n      });\n      Object.defineProperty(promise, \"_error\", {\n        get: () => renderError\n      });\n    } else if (resolve._tracked) {\n      // Already tracked promise - check contents\n      promise = resolve;\n      status = \"_error\" in promise ? AwaitRenderStatus.error : \"_data\" in promise ? AwaitRenderStatus.success : AwaitRenderStatus.pending;\n    } else {\n      // Raw (untracked) promise - track it\n      status = AwaitRenderStatus.pending;\n      Object.defineProperty(resolve, \"_tracked\", {\n        get: () => true\n      });\n      promise = resolve.then(data => Object.defineProperty(resolve, \"_data\", {\n        get: () => data\n      }), error => Object.defineProperty(resolve, \"_error\", {\n        get: () => error\n      }));\n    }\n    if (status === AwaitRenderStatus.error && promise._error instanceof AbortedDeferredError) {\n      // Freeze the UI by throwing a never resolved promise\n      throw neverSettledPromise;\n    }\n    if (status === AwaitRenderStatus.error && !errorElement) {\n      // No errorElement, throw to the nearest route-level error boundary\n      throw promise._error;\n    }\n    if (status === AwaitRenderStatus.error) {\n      // Render via our errorElement\n      return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n        value: promise,\n        children: errorElement\n      });\n    }\n    if (status === AwaitRenderStatus.success) {\n      // Render children with resolved value\n      return /*#__PURE__*/React.createElement(AwaitContext.Provider, {\n        value: promise,\n        children: children\n      });\n    }\n\n    // Throw to the suspense boundary\n    throw promise;\n  }\n}\n\n/**\n * @private\n * Indirection to leverage useAsyncValue for a render-prop API on `<Await>`\n */\nfunction ResolveAwait(_ref8) {\n  let {\n    children\n  } = _ref8;\n  let data = useAsyncValue();\n  let toRender = typeof children === \"function\" ? children(data) : children;\n  return /*#__PURE__*/React.createElement(React.Fragment, null, toRender);\n}\n\n///////////////////////////////////////////////////////////////////////////////\n// UTILS\n///////////////////////////////////////////////////////////////////////////////\n\n/**\n * Creates a route config from a React \"children\" object, which is usually\n * either a `<Route>` element or an array of them. Used internally by\n * `<Routes>` to create a route config from its children.\n *\n * @see https://reactrouter.com/utils/create-routes-from-children\n */\nfunction createRoutesFromChildren(children, parentPath) {\n  if (parentPath === void 0) {\n    parentPath = [];\n  }\n  let routes = [];\n  React.Children.forEach(children, (element, index) => {\n    if (! /*#__PURE__*/React.isValidElement(element)) {\n      // Ignore non-elements. This allows people to more easily inline\n      // conditionals in their route config.\n      return;\n    }\n    let treePath = [...parentPath, index];\n    if (element.type === React.Fragment) {\n      // Transparently support React.Fragment and its children.\n      routes.push.apply(routes, createRoutesFromChildren(element.props.children, treePath));\n      return;\n    }\n    !(element.type === Route) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"[\" + (typeof element.type === \"string\" ? element.type : element.type.name) + \"] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>\") : UNSAFE_invariant(false) : void 0;\n    !(!element.props.index || !element.props.children) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"An index route cannot have child routes.\") : UNSAFE_invariant(false) : void 0;\n    let route = {\n      id: element.props.id || treePath.join(\"-\"),\n      caseSensitive: element.props.caseSensitive,\n      element: element.props.element,\n      Component: element.props.Component,\n      index: element.props.index,\n      path: element.props.path,\n      loader: element.props.loader,\n      action: element.props.action,\n      errorElement: element.props.errorElement,\n      ErrorBoundary: element.props.ErrorBoundary,\n      hasErrorBoundary: element.props.ErrorBoundary != null || element.props.errorElement != null,\n      shouldRevalidate: element.props.shouldRevalidate,\n      handle: element.props.handle,\n      lazy: element.props.lazy\n    };\n    if (element.props.children) {\n      route.children = createRoutesFromChildren(element.props.children, treePath);\n    }\n    routes.push(route);\n  });\n  return routes;\n}\n\n/**\n * Renders the result of `matchRoutes()` into a React element.\n */\nfunction renderMatches(matches) {\n  return _renderMatches(matches);\n}\n\nfunction mapRouteProperties(route) {\n  let updates = {\n    // Note: this check also occurs in createRoutesFromChildren so update\n    // there if you change this -- please and thank you!\n    hasErrorBoundary: route.ErrorBoundary != null || route.errorElement != null\n  };\n  if (route.Component) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.element) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `Component` and `element` on your route - \" + \"`Component` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      element: /*#__PURE__*/React.createElement(route.Component),\n      Component: undefined\n    });\n  }\n  if (route.HydrateFallback) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.hydrateFallbackElement) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `HydrateFallback` and `hydrateFallbackElement` on your route - \" + \"`HydrateFallback` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      hydrateFallbackElement: /*#__PURE__*/React.createElement(route.HydrateFallback),\n      HydrateFallback: undefined\n    });\n  }\n  if (route.ErrorBoundary) {\n    if (process.env.NODE_ENV !== \"production\") {\n      if (route.errorElement) {\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"You should not include both `ErrorBoundary` and `errorElement` on your route - \" + \"`ErrorBoundary` will be used.\") : void 0;\n      }\n    }\n    Object.assign(updates, {\n      errorElement: /*#__PURE__*/React.createElement(route.ErrorBoundary),\n      ErrorBoundary: undefined\n    });\n  }\n  return updates;\n}\nfunction createMemoryRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createMemoryHistory({\n      initialEntries: opts == null ? void 0 : opts.initialEntries,\n      initialIndex: opts == null ? void 0 : opts.initialIndex\n    }),\n    hydrationData: opts == null ? void 0 : opts.hydrationData,\n    routes,\n    mapRouteProperties,\n    unstable_dataStrategy: opts == null ? void 0 : opts.unstable_dataStrategy,\n    unstable_patchRoutesOnNavigation: opts == null ? void 0 : opts.unstable_patchRoutesOnNavigation\n  }).initialize();\n}\n\nexport { Await, MemoryRouter, Navigate, Outlet, Route, Router, RouterProvider, Routes, DataRouterContext as UNSAFE_DataRouterContext, DataRouterStateContext as UNSAFE_DataRouterStateContext, LocationContext as UNSAFE_LocationContext, NavigationContext as UNSAFE_NavigationContext, RouteContext as UNSAFE_RouteContext, mapRouteProperties as UNSAFE_mapRouteProperties, useRouteId as UNSAFE_useRouteId, useRoutesImpl as UNSAFE_useRoutesImpl, createMemoryRouter, createRoutesFromChildren, createRoutesFromChildren as createRoutesFromElements, renderMatches, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes };\n//# sourceMappingURL=index.js.map\n","/**\n * React Router DOM v6.26.2\n *\n * Copyright (c) Remix Software Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { UNSAFE_mapRouteProperties, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, Router, UNSAFE_useRoutesImpl, UNSAFE_NavigationContext, useHref, useResolvedPath, useLocation, useNavigate, createPath, UNSAFE_useRouteId, UNSAFE_RouteContext, useMatches, useNavigation, useBlocker } from 'react-router';\nexport { AbortedDeferredError, Await, MemoryRouter, Navigate, NavigationType, Outlet, Route, Router, Routes, UNSAFE_DataRouterContext, UNSAFE_DataRouterStateContext, UNSAFE_LocationContext, UNSAFE_NavigationContext, UNSAFE_RouteContext, UNSAFE_useRouteId, createMemoryRouter, createPath, createRoutesFromChildren, createRoutesFromElements, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, parsePath, redirect, redirectDocument, renderMatches, replace, resolvePath, useActionData, useAsyncError, useAsyncValue, useBlocker, useHref, useInRouterContext, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes } from 'react-router';\nimport { stripBasename, UNSAFE_warning, createRouter, createBrowserHistory, createHashHistory, UNSAFE_ErrorResponseImpl, UNSAFE_invariant, joinPaths, IDLE_FETCHER, matchPath } from '@remix-run/router';\nexport { UNSAFE_ErrorResponseImpl } from '@remix-run/router';\n\nfunction _extends() {\n  _extends = Object.assign ? Object.assign.bind() : function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n    return target;\n  };\n  return _extends.apply(this, arguments);\n}\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n  return target;\n}\n\nconst defaultMethod = \"get\";\nconst defaultEncType = \"application/x-www-form-urlencoded\";\nfunction isHtmlElement(object) {\n  return object != null && typeof object.tagName === \"string\";\n}\nfunction isButtonElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"button\";\n}\nfunction isFormElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"form\";\n}\nfunction isInputElement(object) {\n  return isHtmlElement(object) && object.tagName.toLowerCase() === \"input\";\n}\nfunction isModifiedEvent(event) {\n  return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey);\n}\nfunction shouldProcessLinkClick(event, target) {\n  return event.button === 0 && (\n  // Ignore everything but left clicks\n  !target || target === \"_self\") &&\n  // Let browser handle \"target=_blank\" etc.\n  !isModifiedEvent(event) // Ignore clicks with modifier keys\n  ;\n}\n/**\n * Creates a URLSearchParams object using the given initializer.\n *\n * This is identical to `new URLSearchParams(init)` except it also\n * supports arrays as values in the object form of the initializer\n * instead of just strings. This is convenient when you need multiple\n * values for a given key, but don't want to use an array initializer.\n *\n * For example, instead of:\n *\n *   let searchParams = new URLSearchParams([\n *     ['sort', 'name'],\n *     ['sort', 'price']\n *   ]);\n *\n * you can do:\n *\n *   let searchParams = createSearchParams({\n *     sort: ['name', 'price']\n *   });\n */\nfunction createSearchParams(init) {\n  if (init === void 0) {\n    init = \"\";\n  }\n  return new URLSearchParams(typeof init === \"string\" || Array.isArray(init) || init instanceof URLSearchParams ? init : Object.keys(init).reduce((memo, key) => {\n    let value = init[key];\n    return memo.concat(Array.isArray(value) ? value.map(v => [key, v]) : [[key, value]]);\n  }, []));\n}\nfunction getSearchParamsForLocation(locationSearch, defaultSearchParams) {\n  let searchParams = createSearchParams(locationSearch);\n  if (defaultSearchParams) {\n    // Use `defaultSearchParams.forEach(...)` here instead of iterating of\n    // `defaultSearchParams.keys()` to work-around a bug in Firefox related to\n    // web extensions. Relevant Bugzilla tickets:\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1414602\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1023984\n    defaultSearchParams.forEach((_, key) => {\n      if (!searchParams.has(key)) {\n        defaultSearchParams.getAll(key).forEach(value => {\n          searchParams.append(key, value);\n        });\n      }\n    });\n  }\n  return searchParams;\n}\n// One-time check for submitter support\nlet _formDataSupportsSubmitter = null;\nfunction isFormDataSubmitterSupported() {\n  if (_formDataSupportsSubmitter === null) {\n    try {\n      new FormData(document.createElement(\"form\"),\n      // @ts-expect-error if FormData supports the submitter parameter, this will throw\n      0);\n      _formDataSupportsSubmitter = false;\n    } catch (e) {\n      _formDataSupportsSubmitter = true;\n    }\n  }\n  return _formDataSupportsSubmitter;\n}\nconst supportedFormEncTypes = new Set([\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"]);\nfunction getFormEncType(encType) {\n  if (encType != null && !supportedFormEncTypes.has(encType)) {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"\\\"\" + encType + \"\\\" is not a valid `encType` for `<Form>`/`<fetcher.Form>` \" + (\"and will default to \\\"\" + defaultEncType + \"\\\"\")) : void 0;\n    return null;\n  }\n  return encType;\n}\nfunction getFormSubmissionInfo(target, basename) {\n  let method;\n  let action;\n  let encType;\n  let formData;\n  let body;\n  if (isFormElement(target)) {\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n    method = target.getAttribute(\"method\") || defaultMethod;\n    encType = getFormEncType(target.getAttribute(\"enctype\")) || defaultEncType;\n    formData = new FormData(target);\n  } else if (isButtonElement(target) || isInputElement(target) && (target.type === \"submit\" || target.type === \"image\")) {\n    let form = target.form;\n    if (form == null) {\n      throw new Error(\"Cannot submit a <button> or <input type=\\\"submit\\\"> without a <form>\");\n    }\n    // <button>/<input type=\"submit\"> may override attributes of <form>\n    // When grabbing the action from the element, it will have had the basename\n    // prefixed to ensure non-JS scenarios work, so strip it since we'll\n    // re-prefix in the router\n    let attr = target.getAttribute(\"formaction\") || form.getAttribute(\"action\");\n    action = attr ? stripBasename(attr, basename) : null;\n    method = target.getAttribute(\"formmethod\") || form.getAttribute(\"method\") || defaultMethod;\n    encType = getFormEncType(target.getAttribute(\"formenctype\")) || getFormEncType(form.getAttribute(\"enctype\")) || defaultEncType;\n    // Build a FormData object populated from a form and submitter\n    formData = new FormData(form, target);\n    // If this browser doesn't support the `FormData(el, submitter)` format,\n    // then tack on the submitter value at the end.  This is a lightweight\n    // solution that is not 100% spec compliant.  For complete support in older\n    // browsers, consider using the `formdata-submitter-polyfill` package\n    if (!isFormDataSubmitterSupported()) {\n      let {\n        name,\n        type,\n        value\n      } = target;\n      if (type === \"image\") {\n        let prefix = name ? name + \".\" : \"\";\n        formData.append(prefix + \"x\", \"0\");\n        formData.append(prefix + \"y\", \"0\");\n      } else if (name) {\n        formData.append(name, value);\n      }\n    }\n  } else if (isHtmlElement(target)) {\n    throw new Error(\"Cannot submit element that is not <form>, <button>, or \" + \"<input type=\\\"submit|image\\\">\");\n  } else {\n    method = defaultMethod;\n    action = null;\n    encType = defaultEncType;\n    body = target;\n  }\n  // Send body for <Form encType=\"text/plain\" so we encode it into text\n  if (formData && encType === \"text/plain\") {\n    body = formData;\n    formData = undefined;\n  }\n  return {\n    action,\n    method: method.toLowerCase(),\n    encType,\n    formData,\n    body\n  };\n}\n\nconst _excluded = [\"onClick\", \"relative\", \"reloadDocument\", \"replace\", \"state\", \"target\", \"to\", \"preventScrollReset\", \"unstable_viewTransition\"],\n  _excluded2 = [\"aria-current\", \"caseSensitive\", \"className\", \"end\", \"style\", \"to\", \"unstable_viewTransition\", \"children\"],\n  _excluded3 = [\"fetcherKey\", \"navigate\", \"reloadDocument\", \"replace\", \"state\", \"method\", \"action\", \"onSubmit\", \"relative\", \"preventScrollReset\", \"unstable_viewTransition\"];\n// HEY YOU! DON'T TOUCH THIS VARIABLE!\n//\n// It is replaced with the proper version at build time via a babel plugin in\n// the rollup config.\n//\n// Export a global property onto the window for React Router detection by the\n// Core Web Vitals Technology Report.  This way they can configure the `wappalyzer`\n// to detect and properly classify live websites as being built with React Router:\n// https://github.com/HTTPArchive/wappalyzer/blob/main/src/technologies/r.json\nconst REACT_ROUTER_VERSION = \"6\";\ntry {\n  window.__reactRouterVersion = REACT_ROUTER_VERSION;\n} catch (e) {\n  // no-op\n}\nfunction createBrowserRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createBrowserHistory({\n      window: opts == null ? void 0 : opts.window\n    }),\n    hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n    routes,\n    mapRouteProperties: UNSAFE_mapRouteProperties,\n    unstable_dataStrategy: opts == null ? void 0 : opts.unstable_dataStrategy,\n    unstable_patchRoutesOnNavigation: opts == null ? void 0 : opts.unstable_patchRoutesOnNavigation,\n    window: opts == null ? void 0 : opts.window\n  }).initialize();\n}\nfunction createHashRouter(routes, opts) {\n  return createRouter({\n    basename: opts == null ? void 0 : opts.basename,\n    future: _extends({}, opts == null ? void 0 : opts.future, {\n      v7_prependBasename: true\n    }),\n    history: createHashHistory({\n      window: opts == null ? void 0 : opts.window\n    }),\n    hydrationData: (opts == null ? void 0 : opts.hydrationData) || parseHydrationData(),\n    routes,\n    mapRouteProperties: UNSAFE_mapRouteProperties,\n    unstable_dataStrategy: opts == null ? void 0 : opts.unstable_dataStrategy,\n    unstable_patchRoutesOnNavigation: opts == null ? void 0 : opts.unstable_patchRoutesOnNavigation,\n    window: opts == null ? void 0 : opts.window\n  }).initialize();\n}\nfunction parseHydrationData() {\n  var _window;\n  let state = (_window = window) == null ? void 0 : _window.__staticRouterHydrationData;\n  if (state && state.errors) {\n    state = _extends({}, state, {\n      errors: deserializeErrors(state.errors)\n    });\n  }\n  return state;\n}\nfunction deserializeErrors(errors) {\n  if (!errors) return null;\n  let entries = Object.entries(errors);\n  let serialized = {};\n  for (let [key, val] of entries) {\n    // Hey you!  If you change this, please change the corresponding logic in\n    // serializeErrors in react-router-dom/server.tsx :)\n    if (val && val.__type === \"RouteErrorResponse\") {\n      serialized[key] = new UNSAFE_ErrorResponseImpl(val.status, val.statusText, val.data, val.internal === true);\n    } else if (val && val.__type === \"Error\") {\n      // Attempt to reconstruct the right type of Error (i.e., ReferenceError)\n      if (val.__subType) {\n        let ErrorConstructor = window[val.__subType];\n        if (typeof ErrorConstructor === \"function\") {\n          try {\n            // @ts-expect-error\n            let error = new ErrorConstructor(val.message);\n            // Wipe away the client-side stack trace.  Nothing to fill it in with\n            // because we don't serialize SSR stack traces for security reasons\n            error.stack = \"\";\n            serialized[key] = error;\n          } catch (e) {\n            // no-op - fall through and create a normal Error\n          }\n        }\n      }\n      if (serialized[key] == null) {\n        let error = new Error(val.message);\n        // Wipe away the client-side stack trace.  Nothing to fill it in with\n        // because we don't serialize SSR stack traces for security reasons\n        error.stack = \"\";\n        serialized[key] = error;\n      }\n    } else {\n      serialized[key] = val;\n    }\n  }\n  return serialized;\n}\nconst ViewTransitionContext = /*#__PURE__*/React.createContext({\n  isTransitioning: false\n});\nif (process.env.NODE_ENV !== \"production\") {\n  ViewTransitionContext.displayName = \"ViewTransition\";\n}\nconst FetchersContext = /*#__PURE__*/React.createContext(new Map());\nif (process.env.NODE_ENV !== \"production\") {\n  FetchersContext.displayName = \"Fetchers\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Components\n////////////////////////////////////////////////////////////////////////////////\n/**\n  Webpack + React 17 fails to compile on any of the following because webpack\n  complains that `startTransition` doesn't exist in `React`:\n  * import { startTransition } from \"react\"\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React.startTransition(() => setState()) : setState()\n  * import * as React from from \"react\";\n    \"startTransition\" in React ? React[\"startTransition\"](() => setState()) : setState()\n\n  Moving it to a constant such as the following solves the Webpack/React 17 issue:\n  * import * as React from from \"react\";\n    const START_TRANSITION = \"startTransition\";\n    START_TRANSITION in React ? React[START_TRANSITION](() => setState()) : setState()\n\n  However, that introduces webpack/terser minification issues in production builds\n  in React 18 where minification/obfuscation ends up removing the call of\n  React.startTransition entirely from the first half of the ternary.  Grabbing\n  this exported reference once up front resolves that issue.\n\n  See https://github.com/remix-run/react-router/issues/10579\n*/\nconst START_TRANSITION = \"startTransition\";\nconst startTransitionImpl = React[START_TRANSITION];\nconst FLUSH_SYNC = \"flushSync\";\nconst flushSyncImpl = ReactDOM[FLUSH_SYNC];\nconst USE_ID = \"useId\";\nconst useIdImpl = React[USE_ID];\nfunction startTransitionSafe(cb) {\n  if (startTransitionImpl) {\n    startTransitionImpl(cb);\n  } else {\n    cb();\n  }\n}\nfunction flushSyncSafe(cb) {\n  if (flushSyncImpl) {\n    flushSyncImpl(cb);\n  } else {\n    cb();\n  }\n}\nclass Deferred {\n  constructor() {\n    this.status = \"pending\";\n    this.promise = new Promise((resolve, reject) => {\n      this.resolve = value => {\n        if (this.status === \"pending\") {\n          this.status = \"resolved\";\n          resolve(value);\n        }\n      };\n      this.reject = reason => {\n        if (this.status === \"pending\") {\n          this.status = \"rejected\";\n          reject(reason);\n        }\n      };\n    });\n  }\n}\n/**\n * Given a Remix Router instance, render the appropriate UI\n */\nfunction RouterProvider(_ref) {\n  let {\n    fallbackElement,\n    router,\n    future\n  } = _ref;\n  let [state, setStateImpl] = React.useState(router.state);\n  let [pendingState, setPendingState] = React.useState();\n  let [vtContext, setVtContext] = React.useState({\n    isTransitioning: false\n  });\n  let [renderDfd, setRenderDfd] = React.useState();\n  let [transition, setTransition] = React.useState();\n  let [interruption, setInterruption] = React.useState();\n  let fetcherData = React.useRef(new Map());\n  let {\n    v7_startTransition\n  } = future || {};\n  let optInStartTransition = React.useCallback(cb => {\n    if (v7_startTransition) {\n      startTransitionSafe(cb);\n    } else {\n      cb();\n    }\n  }, [v7_startTransition]);\n  let setState = React.useCallback((newState, _ref2) => {\n    let {\n      deletedFetchers,\n      unstable_flushSync: flushSync,\n      unstable_viewTransitionOpts: viewTransitionOpts\n    } = _ref2;\n    deletedFetchers.forEach(key => fetcherData.current.delete(key));\n    newState.fetchers.forEach((fetcher, key) => {\n      if (fetcher.data !== undefined) {\n        fetcherData.current.set(key, fetcher.data);\n      }\n    });\n    let isViewTransitionUnavailable = router.window == null || router.window.document == null || typeof router.window.document.startViewTransition !== \"function\";\n    // If this isn't a view transition or it's not available in this browser,\n    // just update and be done with it\n    if (!viewTransitionOpts || isViewTransitionUnavailable) {\n      if (flushSync) {\n        flushSyncSafe(() => setStateImpl(newState));\n      } else {\n        optInStartTransition(() => setStateImpl(newState));\n      }\n      return;\n    }\n    // flushSync + startViewTransition\n    if (flushSync) {\n      // Flush through the context to mark DOM elements as transition=ing\n      flushSyncSafe(() => {\n        // Cancel any pending transitions\n        if (transition) {\n          renderDfd && renderDfd.resolve();\n          transition.skipTransition();\n        }\n        setVtContext({\n          isTransitioning: true,\n          flushSync: true,\n          currentLocation: viewTransitionOpts.currentLocation,\n          nextLocation: viewTransitionOpts.nextLocation\n        });\n      });\n      // Update the DOM\n      let t = router.window.document.startViewTransition(() => {\n        flushSyncSafe(() => setStateImpl(newState));\n      });\n      // Clean up after the animation completes\n      t.finished.finally(() => {\n        flushSyncSafe(() => {\n          setRenderDfd(undefined);\n          setTransition(undefined);\n          setPendingState(undefined);\n          setVtContext({\n            isTransitioning: false\n          });\n        });\n      });\n      flushSyncSafe(() => setTransition(t));\n      return;\n    }\n    // startTransition + startViewTransition\n    if (transition) {\n      // Interrupting an in-progress transition, cancel and let everything flush\n      // out, and then kick off a new transition from the interruption state\n      renderDfd && renderDfd.resolve();\n      transition.skipTransition();\n      setInterruption({\n        state: newState,\n        currentLocation: viewTransitionOpts.currentLocation,\n        nextLocation: viewTransitionOpts.nextLocation\n      });\n    } else {\n      // Completed navigation update with opted-in view transitions, let 'er rip\n      setPendingState(newState);\n      setVtContext({\n        isTransitioning: true,\n        flushSync: false,\n        currentLocation: viewTransitionOpts.currentLocation,\n        nextLocation: viewTransitionOpts.nextLocation\n      });\n    }\n  }, [router.window, transition, renderDfd, fetcherData, optInStartTransition]);\n  // Need to use a layout effect here so we are subscribed early enough to\n  // pick up on any render-driven redirects/navigations (useEffect/<Navigate>)\n  React.useLayoutEffect(() => router.subscribe(setState), [router, setState]);\n  // When we start a view transition, create a Deferred we can use for the\n  // eventual \"completed\" render\n  React.useEffect(() => {\n    if (vtContext.isTransitioning && !vtContext.flushSync) {\n      setRenderDfd(new Deferred());\n    }\n  }, [vtContext]);\n  // Once the deferred is created, kick off startViewTransition() to update the\n  // DOM and then wait on the Deferred to resolve (indicating the DOM update has\n  // happened)\n  React.useEffect(() => {\n    if (renderDfd && pendingState && router.window) {\n      let newState = pendingState;\n      let renderPromise = renderDfd.promise;\n      let transition = router.window.document.startViewTransition(async () => {\n        optInStartTransition(() => setStateImpl(newState));\n        await renderPromise;\n      });\n      transition.finished.finally(() => {\n        setRenderDfd(undefined);\n        setTransition(undefined);\n        setPendingState(undefined);\n        setVtContext({\n          isTransitioning: false\n        });\n      });\n      setTransition(transition);\n    }\n  }, [optInStartTransition, pendingState, renderDfd, router.window]);\n  // When the new location finally renders and is committed to the DOM, this\n  // effect will run to resolve the transition\n  React.useEffect(() => {\n    if (renderDfd && pendingState && state.location.key === pendingState.location.key) {\n      renderDfd.resolve();\n    }\n  }, [renderDfd, transition, state.location, pendingState]);\n  // If we get interrupted with a new navigation during a transition, we skip\n  // the active transition, let it cleanup, then kick it off again here\n  React.useEffect(() => {\n    if (!vtContext.isTransitioning && interruption) {\n      setPendingState(interruption.state);\n      setVtContext({\n        isTransitioning: true,\n        flushSync: false,\n        currentLocation: interruption.currentLocation,\n        nextLocation: interruption.nextLocation\n      });\n      setInterruption(undefined);\n    }\n  }, [vtContext.isTransitioning, interruption]);\n  React.useEffect(() => {\n    process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(fallbackElement == null || !router.future.v7_partialHydration, \"`<RouterProvider fallbackElement>` is deprecated when using \" + \"`v7_partialHydration`, use a `HydrateFallback` component instead\") : void 0;\n    // Only log this once on initial mount\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n  let navigator = React.useMemo(() => {\n    return {\n      createHref: router.createHref,\n      encodeLocation: router.encodeLocation,\n      go: n => router.navigate(n),\n      push: (to, state, opts) => router.navigate(to, {\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      }),\n      replace: (to, state, opts) => router.navigate(to, {\n        replace: true,\n        state,\n        preventScrollReset: opts == null ? void 0 : opts.preventScrollReset\n      })\n    };\n  }, [router]);\n  let basename = router.basename || \"/\";\n  let dataRouterContext = React.useMemo(() => ({\n    router,\n    navigator,\n    static: false,\n    basename\n  }), [router, navigator, basename]);\n  let routerFuture = React.useMemo(() => ({\n    v7_relativeSplatPath: router.future.v7_relativeSplatPath\n  }), [router.future.v7_relativeSplatPath]);\n  // The fragment and {null} here are important!  We need them to keep React 18's\n  // useId happy when we are server-rendering since we may have a <script> here\n  // containing the hydrated server-side staticContext (from StaticRouterProvider).\n  // useId relies on the component tree structure to generate deterministic id's\n  // so we need to ensure it remains the same on the client even though\n  // we don't need the <script> tag\n  return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(UNSAFE_DataRouterContext.Provider, {\n    value: dataRouterContext\n  }, /*#__PURE__*/React.createElement(UNSAFE_DataRouterStateContext.Provider, {\n    value: state\n  }, /*#__PURE__*/React.createElement(FetchersContext.Provider, {\n    value: fetcherData.current\n  }, /*#__PURE__*/React.createElement(ViewTransitionContext.Provider, {\n    value: vtContext\n  }, /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    location: state.location,\n    navigationType: state.historyAction,\n    navigator: navigator,\n    future: routerFuture\n  }, state.initialized || router.future.v7_partialHydration ? /*#__PURE__*/React.createElement(MemoizedDataRoutes, {\n    routes: router.routes,\n    future: router.future,\n    state: state\n  }) : fallbackElement))))), null);\n}\n// Memoize to avoid re-renders when updating `ViewTransitionContext`\nconst MemoizedDataRoutes = /*#__PURE__*/React.memo(DataRoutes);\nfunction DataRoutes(_ref3) {\n  let {\n    routes,\n    future,\n    state\n  } = _ref3;\n  return UNSAFE_useRoutesImpl(routes, undefined, state, future);\n}\n/**\n * A `<Router>` for use in web browsers. Provides the cleanest URLs.\n */\nfunction BrowserRouter(_ref4) {\n  let {\n    basename,\n    children,\n    future,\n    window\n  } = _ref4;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createBrowserHistory({\n      window,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\n/**\n * A `<Router>` for use in web browsers. Stores the location in the hash\n * portion of the URL so it is not sent to the server.\n */\nfunction HashRouter(_ref5) {\n  let {\n    basename,\n    children,\n    future,\n    window\n  } = _ref5;\n  let historyRef = React.useRef();\n  if (historyRef.current == null) {\n    historyRef.current = createHashHistory({\n      window,\n      v5Compat: true\n    });\n  }\n  let history = historyRef.current;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\n/**\n * A `<Router>` that accepts a pre-instantiated history object. It's important\n * to note that using your own history object is highly discouraged and may add\n * two versions of the history library to your bundles unless you use the same\n * version of the history library that React Router uses internally.\n */\nfunction HistoryRouter(_ref6) {\n  let {\n    basename,\n    children,\n    future,\n    history\n  } = _ref6;\n  let [state, setStateImpl] = React.useState({\n    action: history.action,\n    location: history.location\n  });\n  let {\n    v7_startTransition\n  } = future || {};\n  let setState = React.useCallback(newState => {\n    v7_startTransition && startTransitionImpl ? startTransitionImpl(() => setStateImpl(newState)) : setStateImpl(newState);\n  }, [setStateImpl, v7_startTransition]);\n  React.useLayoutEffect(() => history.listen(setState), [history, setState]);\n  return /*#__PURE__*/React.createElement(Router, {\n    basename: basename,\n    children: children,\n    location: state.location,\n    navigationType: state.action,\n    navigator: history,\n    future: future\n  });\n}\nif (process.env.NODE_ENV !== \"production\") {\n  HistoryRouter.displayName = \"unstable_HistoryRouter\";\n}\nconst isBrowser = typeof window !== \"undefined\" && typeof window.document !== \"undefined\" && typeof window.document.createElement !== \"undefined\";\nconst ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\\/\\/)/i;\n/**\n * The public API for rendering a history-aware `<a>`.\n */\nconst Link = /*#__PURE__*/React.forwardRef(function LinkWithRef(_ref7, ref) {\n  let {\n      onClick,\n      relative,\n      reloadDocument,\n      replace,\n      state,\n      target,\n      to,\n      preventScrollReset,\n      unstable_viewTransition\n    } = _ref7,\n    rest = _objectWithoutPropertiesLoose(_ref7, _excluded);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  // Rendered into <a href> for absolute URLs\n  let absoluteHref;\n  let isExternal = false;\n  if (typeof to === \"string\" && ABSOLUTE_URL_REGEX.test(to)) {\n    // Render the absolute href server- and client-side\n    absoluteHref = to;\n    // Only check for external origins client-side\n    if (isBrowser) {\n      try {\n        let currentUrl = new URL(window.location.href);\n        let targetUrl = to.startsWith(\"//\") ? new URL(currentUrl.protocol + to) : new URL(to);\n        let path = stripBasename(targetUrl.pathname, basename);\n        if (targetUrl.origin === currentUrl.origin && path != null) {\n          // Strip the protocol/origin/basename for same-origin absolute URLs\n          to = path + targetUrl.search + targetUrl.hash;\n        } else {\n          isExternal = true;\n        }\n      } catch (e) {\n        // We can't do external URL detection without a valid URL\n        process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"<Link to=\\\"\" + to + \"\\\"> contains an invalid URL which will probably break \" + \"when clicked - please update to a valid URL path.\") : void 0;\n      }\n    }\n  }\n  // Rendered into <a href> for relative URLs\n  let href = useHref(to, {\n    relative\n  });\n  let internalOnClick = useLinkClickHandler(to, {\n    replace,\n    state,\n    target,\n    preventScrollReset,\n    relative,\n    unstable_viewTransition\n  });\n  function handleClick(event) {\n    if (onClick) onClick(event);\n    if (!event.defaultPrevented) {\n      internalOnClick(event);\n    }\n  }\n  return (\n    /*#__PURE__*/\n    // eslint-disable-next-line jsx-a11y/anchor-has-content\n    React.createElement(\"a\", _extends({}, rest, {\n      href: absoluteHref || href,\n      onClick: isExternal || reloadDocument ? onClick : handleClick,\n      ref: ref,\n      target: target\n    }))\n  );\n});\nif (process.env.NODE_ENV !== \"production\") {\n  Link.displayName = \"Link\";\n}\n/**\n * A `<Link>` wrapper that knows if it's \"active\" or not.\n */\nconst NavLink = /*#__PURE__*/React.forwardRef(function NavLinkWithRef(_ref8, ref) {\n  let {\n      \"aria-current\": ariaCurrentProp = \"page\",\n      caseSensitive = false,\n      className: classNameProp = \"\",\n      end = false,\n      style: styleProp,\n      to,\n      unstable_viewTransition,\n      children\n    } = _ref8,\n    rest = _objectWithoutPropertiesLoose(_ref8, _excluded2);\n  let path = useResolvedPath(to, {\n    relative: rest.relative\n  });\n  let location = useLocation();\n  let routerState = React.useContext(UNSAFE_DataRouterStateContext);\n  let {\n    navigator,\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let isTransitioning = routerState != null &&\n  // Conditional usage is OK here because the usage of a data router is static\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  useViewTransitionState(path) && unstable_viewTransition === true;\n  let toPathname = navigator.encodeLocation ? navigator.encodeLocation(path).pathname : path.pathname;\n  let locationPathname = location.pathname;\n  let nextLocationPathname = routerState && routerState.navigation && routerState.navigation.location ? routerState.navigation.location.pathname : null;\n  if (!caseSensitive) {\n    locationPathname = locationPathname.toLowerCase();\n    nextLocationPathname = nextLocationPathname ? nextLocationPathname.toLowerCase() : null;\n    toPathname = toPathname.toLowerCase();\n  }\n  if (nextLocationPathname && basename) {\n    nextLocationPathname = stripBasename(nextLocationPathname, basename) || nextLocationPathname;\n  }\n  // If the `to` has a trailing slash, look at that exact spot.  Otherwise,\n  // we're looking for a slash _after_ what's in `to`.  For example:\n  //\n  // <NavLink to=\"/users\"> and <NavLink to=\"/users/\">\n  // both want to look for a / at index 6 to match URL `/users/matt`\n  const endSlashPosition = toPathname !== \"/\" && toPathname.endsWith(\"/\") ? toPathname.length - 1 : toPathname.length;\n  let isActive = locationPathname === toPathname || !end && locationPathname.startsWith(toPathname) && locationPathname.charAt(endSlashPosition) === \"/\";\n  let isPending = nextLocationPathname != null && (nextLocationPathname === toPathname || !end && nextLocationPathname.startsWith(toPathname) && nextLocationPathname.charAt(toPathname.length) === \"/\");\n  let renderProps = {\n    isActive,\n    isPending,\n    isTransitioning\n  };\n  let ariaCurrent = isActive ? ariaCurrentProp : undefined;\n  let className;\n  if (typeof classNameProp === \"function\") {\n    className = classNameProp(renderProps);\n  } else {\n    // If the className prop is not a function, we use a default `active`\n    // class for <NavLink />s that are active. In v5 `active` was the default\n    // value for `activeClassName`, but we are removing that API and can still\n    // use the old default behavior for a cleaner upgrade path and keep the\n    // simple styling rules working as they currently do.\n    className = [classNameProp, isActive ? \"active\" : null, isPending ? \"pending\" : null, isTransitioning ? \"transitioning\" : null].filter(Boolean).join(\" \");\n  }\n  let style = typeof styleProp === \"function\" ? styleProp(renderProps) : styleProp;\n  return /*#__PURE__*/React.createElement(Link, _extends({}, rest, {\n    \"aria-current\": ariaCurrent,\n    className: className,\n    ref: ref,\n    style: style,\n    to: to,\n    unstable_viewTransition: unstable_viewTransition\n  }), typeof children === \"function\" ? children(renderProps) : children);\n});\nif (process.env.NODE_ENV !== \"production\") {\n  NavLink.displayName = \"NavLink\";\n}\n/**\n * A `@remix-run/router`-aware `<form>`. It behaves like a normal form except\n * that the interaction with the server is with `fetch` instead of new document\n * requests, allowing components to add nicer UX to the page as the form is\n * submitted and returns with data.\n */\nconst Form = /*#__PURE__*/React.forwardRef((_ref9, forwardedRef) => {\n  let {\n      fetcherKey,\n      navigate,\n      reloadDocument,\n      replace,\n      state,\n      method = defaultMethod,\n      action,\n      onSubmit,\n      relative,\n      preventScrollReset,\n      unstable_viewTransition\n    } = _ref9,\n    props = _objectWithoutPropertiesLoose(_ref9, _excluded3);\n  let submit = useSubmit();\n  let formAction = useFormAction(action, {\n    relative\n  });\n  let formMethod = method.toLowerCase() === \"get\" ? \"get\" : \"post\";\n  let submitHandler = event => {\n    onSubmit && onSubmit(event);\n    if (event.defaultPrevented) return;\n    event.preventDefault();\n    let submitter = event.nativeEvent.submitter;\n    let submitMethod = (submitter == null ? void 0 : submitter.getAttribute(\"formmethod\")) || method;\n    submit(submitter || event.currentTarget, {\n      fetcherKey,\n      method: submitMethod,\n      navigate,\n      replace,\n      state,\n      relative,\n      preventScrollReset,\n      unstable_viewTransition\n    });\n  };\n  return /*#__PURE__*/React.createElement(\"form\", _extends({\n    ref: forwardedRef,\n    method: formMethod,\n    action: formAction,\n    onSubmit: reloadDocument ? onSubmit : submitHandler\n  }, props));\n});\nif (process.env.NODE_ENV !== \"production\") {\n  Form.displayName = \"Form\";\n}\n/**\n * This component will emulate the browser's scroll restoration on location\n * changes.\n */\nfunction ScrollRestoration(_ref10) {\n  let {\n    getKey,\n    storageKey\n  } = _ref10;\n  useScrollRestoration({\n    getKey,\n    storageKey\n  });\n  return null;\n}\nif (process.env.NODE_ENV !== \"production\") {\n  ScrollRestoration.displayName = \"ScrollRestoration\";\n}\n//#endregion\n////////////////////////////////////////////////////////////////////////////////\n//#region Hooks\n////////////////////////////////////////////////////////////////////////////////\nvar DataRouterHook;\n(function (DataRouterHook) {\n  DataRouterHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n  DataRouterHook[\"UseSubmit\"] = \"useSubmit\";\n  DataRouterHook[\"UseSubmitFetcher\"] = \"useSubmitFetcher\";\n  DataRouterHook[\"UseFetcher\"] = \"useFetcher\";\n  DataRouterHook[\"useViewTransitionState\"] = \"useViewTransitionState\";\n})(DataRouterHook || (DataRouterHook = {}));\nvar DataRouterStateHook;\n(function (DataRouterStateHook) {\n  DataRouterStateHook[\"UseFetcher\"] = \"useFetcher\";\n  DataRouterStateHook[\"UseFetchers\"] = \"useFetchers\";\n  DataRouterStateHook[\"UseScrollRestoration\"] = \"useScrollRestoration\";\n})(DataRouterStateHook || (DataRouterStateHook = {}));\n// Internal hooks\nfunction getDataRouterConsoleError(hookName) {\n  return hookName + \" must be used within a data router.  See https://reactrouter.com/routers/picking-a-router.\";\n}\nfunction useDataRouterContext(hookName) {\n  let ctx = React.useContext(UNSAFE_DataRouterContext);\n  !ctx ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return ctx;\n}\nfunction useDataRouterState(hookName) {\n  let state = React.useContext(UNSAFE_DataRouterStateContext);\n  !state ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, getDataRouterConsoleError(hookName)) : UNSAFE_invariant(false) : void 0;\n  return state;\n}\n// External hooks\n/**\n * Handles the click behavior for router `<Link>` components. This is useful if\n * you need to create custom `<Link>` components with the same click behavior we\n * use in our exported `<Link>`.\n */\nfunction useLinkClickHandler(to, _temp) {\n  let {\n    target,\n    replace: replaceProp,\n    state,\n    preventScrollReset,\n    relative,\n    unstable_viewTransition\n  } = _temp === void 0 ? {} : _temp;\n  let navigate = useNavigate();\n  let location = useLocation();\n  let path = useResolvedPath(to, {\n    relative\n  });\n  return React.useCallback(event => {\n    if (shouldProcessLinkClick(event, target)) {\n      event.preventDefault();\n      // If the URL hasn't changed, a regular <a> will do a replace instead of\n      // a push, so do the same here unless the replace prop is explicitly set\n      let replace = replaceProp !== undefined ? replaceProp : createPath(location) === createPath(path);\n      navigate(to, {\n        replace,\n        state,\n        preventScrollReset,\n        relative,\n        unstable_viewTransition\n      });\n    }\n  }, [location, navigate, path, replaceProp, state, target, to, preventScrollReset, relative, unstable_viewTransition]);\n}\n/**\n * A convenient wrapper for reading and writing search parameters via the\n * URLSearchParams interface.\n */\nfunction useSearchParams(defaultInit) {\n  process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(typeof URLSearchParams !== \"undefined\", \"You cannot use the `useSearchParams` hook in a browser that does not \" + \"support the URLSearchParams API. If you need to support Internet \" + \"Explorer 11, we recommend you load a polyfill such as \" + \"https://github.com/ungap/url-search-params.\") : void 0;\n  let defaultSearchParamsRef = React.useRef(createSearchParams(defaultInit));\n  let hasSetSearchParamsRef = React.useRef(false);\n  let location = useLocation();\n  let searchParams = React.useMemo(() =>\n  // Only merge in the defaults if we haven't yet called setSearchParams.\n  // Once we call that we want those to take precedence, otherwise you can't\n  // remove a param with setSearchParams({}) if it has an initial value\n  getSearchParamsForLocation(location.search, hasSetSearchParamsRef.current ? null : defaultSearchParamsRef.current), [location.search]);\n  let navigate = useNavigate();\n  let setSearchParams = React.useCallback((nextInit, navigateOptions) => {\n    const newSearchParams = createSearchParams(typeof nextInit === \"function\" ? nextInit(searchParams) : nextInit);\n    hasSetSearchParamsRef.current = true;\n    navigate(\"?\" + newSearchParams, navigateOptions);\n  }, [navigate, searchParams]);\n  return [searchParams, setSearchParams];\n}\nfunction validateClientSideSubmission() {\n  if (typeof document === \"undefined\") {\n    throw new Error(\"You are calling submit during the server render. \" + \"Try calling submit within a `useEffect` or callback instead.\");\n  }\n}\nlet fetcherId = 0;\nlet getUniqueFetcherId = () => \"__\" + String(++fetcherId) + \"__\";\n/**\n * Returns a function that may be used to programmatically submit a form (or\n * some arbitrary data) to the server.\n */\nfunction useSubmit() {\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseSubmit);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let currentRouteId = UNSAFE_useRouteId();\n  return React.useCallback(function (target, options) {\n    if (options === void 0) {\n      options = {};\n    }\n    validateClientSideSubmission();\n    let {\n      action,\n      method,\n      encType,\n      formData,\n      body\n    } = getFormSubmissionInfo(target, basename);\n    if (options.navigate === false) {\n      let key = options.fetcherKey || getUniqueFetcherId();\n      router.fetch(key, currentRouteId, options.action || action, {\n        preventScrollReset: options.preventScrollReset,\n        formData,\n        body,\n        formMethod: options.method || method,\n        formEncType: options.encType || encType,\n        unstable_flushSync: options.unstable_flushSync\n      });\n    } else {\n      router.navigate(options.action || action, {\n        preventScrollReset: options.preventScrollReset,\n        formData,\n        body,\n        formMethod: options.method || method,\n        formEncType: options.encType || encType,\n        replace: options.replace,\n        state: options.state,\n        fromRouteId: currentRouteId,\n        unstable_flushSync: options.unstable_flushSync,\n        unstable_viewTransition: options.unstable_viewTransition\n      });\n    }\n  }, [router, basename, currentRouteId]);\n}\n// v7: Eventually we should deprecate this entirely in favor of using the\n// router method directly?\nfunction useFormAction(action, _temp2) {\n  let {\n    relative\n  } = _temp2 === void 0 ? {} : _temp2;\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let routeContext = React.useContext(UNSAFE_RouteContext);\n  !routeContext ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFormAction must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n  let [match] = routeContext.matches.slice(-1);\n  // Shallow clone path so we can modify it below, otherwise we modify the\n  // object referenced by useMemo inside useResolvedPath\n  let path = _extends({}, useResolvedPath(action ? action : \".\", {\n    relative\n  }));\n  // If no action was specified, browsers will persist current search params\n  // when determining the path, so match that behavior\n  // https://github.com/remix-run/remix/issues/927\n  let location = useLocation();\n  if (action == null) {\n    // Safe to write to this directly here since if action was undefined, we\n    // would have called useResolvedPath(\".\") which will never include a search\n    path.search = location.search;\n    // When grabbing search params from the URL, remove any included ?index param\n    // since it might not apply to our contextual route.  We add it back based\n    // on match.route.index below\n    let params = new URLSearchParams(path.search);\n    if (params.has(\"index\") && params.get(\"index\") === \"\") {\n      params.delete(\"index\");\n      path.search = params.toString() ? \"?\" + params.toString() : \"\";\n    }\n  }\n  if ((!action || action === \".\") && match.route.index) {\n    path.search = path.search ? path.search.replace(/^\\?/, \"?index&\") : \"?index\";\n  }\n  // If we're operating within a basename, prepend it to the pathname prior\n  // to creating the form action.  If this is a root navigation, then just use\n  // the raw basename which allows the basename to have full control over the\n  // presence of a trailing slash on root actions\n  if (basename !== \"/\") {\n    path.pathname = path.pathname === \"/\" ? basename : joinPaths([basename, path.pathname]);\n  }\n  return createPath(path);\n}\n// TODO: (v7) Change the useFetcher generic default from `any` to `unknown`\n/**\n * Interacts with route loaders and actions without causing a navigation. Great\n * for any interaction that stays on the same page.\n */\nfunction useFetcher(_temp3) {\n  var _route$matches;\n  let {\n    key\n  } = _temp3 === void 0 ? {} : _temp3;\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseFetcher);\n  let state = useDataRouterState(DataRouterStateHook.UseFetcher);\n  let fetcherData = React.useContext(FetchersContext);\n  let route = React.useContext(UNSAFE_RouteContext);\n  let routeId = (_route$matches = route.matches[route.matches.length - 1]) == null ? void 0 : _route$matches.route.id;\n  !fetcherData ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a FetchersContext\") : UNSAFE_invariant(false) : void 0;\n  !route ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher must be used inside a RouteContext\") : UNSAFE_invariant(false) : void 0;\n  !(routeId != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"useFetcher can only be used on routes that contain a unique \\\"id\\\"\") : UNSAFE_invariant(false) : void 0;\n  // Fetcher key handling\n  // OK to call conditionally to feature detect `useId`\n  // eslint-disable-next-line react-hooks/rules-of-hooks\n  let defaultKey = useIdImpl ? useIdImpl() : \"\";\n  let [fetcherKey, setFetcherKey] = React.useState(key || defaultKey);\n  if (key && key !== fetcherKey) {\n    setFetcherKey(key);\n  } else if (!fetcherKey) {\n    // We will only fall through here when `useId` is not available\n    setFetcherKey(getUniqueFetcherId());\n  }\n  // Registration/cleanup\n  React.useEffect(() => {\n    router.getFetcher(fetcherKey);\n    return () => {\n      // Tell the router we've unmounted - if v7_fetcherPersist is enabled this\n      // will not delete immediately but instead queue up a delete after the\n      // fetcher returns to an `idle` state\n      router.deleteFetcher(fetcherKey);\n    };\n  }, [router, fetcherKey]);\n  // Fetcher additions\n  let load = React.useCallback((href, opts) => {\n    !routeId ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"No routeId available for fetcher.load()\") : UNSAFE_invariant(false) : void 0;\n    router.fetch(fetcherKey, routeId, href, opts);\n  }, [fetcherKey, routeId, router]);\n  let submitImpl = useSubmit();\n  let submit = React.useCallback((target, opts) => {\n    submitImpl(target, _extends({}, opts, {\n      navigate: false,\n      fetcherKey\n    }));\n  }, [fetcherKey, submitImpl]);\n  let FetcherForm = React.useMemo(() => {\n    let FetcherForm = /*#__PURE__*/React.forwardRef((props, ref) => {\n      return /*#__PURE__*/React.createElement(Form, _extends({}, props, {\n        navigate: false,\n        fetcherKey: fetcherKey,\n        ref: ref\n      }));\n    });\n    if (process.env.NODE_ENV !== \"production\") {\n      FetcherForm.displayName = \"fetcher.Form\";\n    }\n    return FetcherForm;\n  }, [fetcherKey]);\n  // Exposed FetcherWithComponents\n  let fetcher = state.fetchers.get(fetcherKey) || IDLE_FETCHER;\n  let data = fetcherData.get(fetcherKey);\n  let fetcherWithComponents = React.useMemo(() => _extends({\n    Form: FetcherForm,\n    submit,\n    load\n  }, fetcher, {\n    data\n  }), [FetcherForm, submit, load, fetcher, data]);\n  return fetcherWithComponents;\n}\n/**\n * Provides all fetchers currently on the page. Useful for layouts and parent\n * routes that need to provide pending/optimistic UI regarding the fetch.\n */\nfunction useFetchers() {\n  let state = useDataRouterState(DataRouterStateHook.UseFetchers);\n  return Array.from(state.fetchers.entries()).map(_ref11 => {\n    let [key, fetcher] = _ref11;\n    return _extends({}, fetcher, {\n      key\n    });\n  });\n}\nconst SCROLL_RESTORATION_STORAGE_KEY = \"react-router-scroll-positions\";\nlet savedScrollPositions = {};\n/**\n * When rendered inside a RouterProvider, will restore scroll positions on navigations\n */\nfunction useScrollRestoration(_temp4) {\n  let {\n    getKey,\n    storageKey\n  } = _temp4 === void 0 ? {} : _temp4;\n  let {\n    router\n  } = useDataRouterContext(DataRouterHook.UseScrollRestoration);\n  let {\n    restoreScrollPosition,\n    preventScrollReset\n  } = useDataRouterState(DataRouterStateHook.UseScrollRestoration);\n  let {\n    basename\n  } = React.useContext(UNSAFE_NavigationContext);\n  let location = useLocation();\n  let matches = useMatches();\n  let navigation = useNavigation();\n  // Trigger manual scroll restoration while we're active\n  React.useEffect(() => {\n    window.history.scrollRestoration = \"manual\";\n    return () => {\n      window.history.scrollRestoration = \"auto\";\n    };\n  }, []);\n  // Save positions on pagehide\n  usePageHide(React.useCallback(() => {\n    if (navigation.state === \"idle\") {\n      let key = (getKey ? getKey(location, matches) : null) || location.key;\n      savedScrollPositions[key] = window.scrollY;\n    }\n    try {\n      sessionStorage.setItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY, JSON.stringify(savedScrollPositions));\n    } catch (error) {\n      process.env.NODE_ENV !== \"production\" ? UNSAFE_warning(false, \"Failed to save scroll positions in sessionStorage, <ScrollRestoration /> will not work properly (\" + error + \").\") : void 0;\n    }\n    window.history.scrollRestoration = \"auto\";\n  }, [storageKey, getKey, navigation.state, location, matches]));\n  // Read in any saved scroll locations\n  if (typeof document !== \"undefined\") {\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      try {\n        let sessionPositions = sessionStorage.getItem(storageKey || SCROLL_RESTORATION_STORAGE_KEY);\n        if (sessionPositions) {\n          savedScrollPositions = JSON.parse(sessionPositions);\n        }\n      } catch (e) {\n        // no-op, use default empty object\n      }\n    }, [storageKey]);\n    // Enable scroll restoration in the router\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      let getKeyWithoutBasename = getKey && basename !== \"/\" ? (location, matches) => getKey( // Strip the basename to match useLocation()\n      _extends({}, location, {\n        pathname: stripBasename(location.pathname, basename) || location.pathname\n      }), matches) : getKey;\n      let disableScrollRestoration = router == null ? void 0 : router.enableScrollRestoration(savedScrollPositions, () => window.scrollY, getKeyWithoutBasename);\n      return () => disableScrollRestoration && disableScrollRestoration();\n    }, [router, basename, getKey]);\n    // Restore scrolling when state.restoreScrollPosition changes\n    // eslint-disable-next-line react-hooks/rules-of-hooks\n    React.useLayoutEffect(() => {\n      // Explicit false means don't do anything (used for submissions)\n      if (restoreScrollPosition === false) {\n        return;\n      }\n      // been here before, scroll to it\n      if (typeof restoreScrollPosition === \"number\") {\n        window.scrollTo(0, restoreScrollPosition);\n        return;\n      }\n      // try to scroll to the hash\n      if (location.hash) {\n        let el = document.getElementById(decodeURIComponent(location.hash.slice(1)));\n        if (el) {\n          el.scrollIntoView();\n          return;\n        }\n      }\n      // Don't reset if this navigation opted out\n      if (preventScrollReset === true) {\n        return;\n      }\n      // otherwise go to the top on new locations\n      window.scrollTo(0, 0);\n    }, [location, restoreScrollPosition, preventScrollReset]);\n  }\n}\n/**\n * Setup a callback to be fired on the window's `beforeunload` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction useBeforeUnload(callback, options) {\n  let {\n    capture\n  } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? {\n      capture\n    } : undefined;\n    window.addEventListener(\"beforeunload\", callback, opts);\n    return () => {\n      window.removeEventListener(\"beforeunload\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n/**\n * Setup a callback to be fired on the window's `pagehide` event. This is\n * useful for saving some data to `window.localStorage` just before the page\n * refreshes.  This event is better supported than beforeunload across browsers.\n *\n * Note: The `callback` argument should be a function created with\n * `React.useCallback()`.\n */\nfunction usePageHide(callback, options) {\n  let {\n    capture\n  } = options || {};\n  React.useEffect(() => {\n    let opts = capture != null ? {\n      capture\n    } : undefined;\n    window.addEventListener(\"pagehide\", callback, opts);\n    return () => {\n      window.removeEventListener(\"pagehide\", callback, opts);\n    };\n  }, [callback, capture]);\n}\n/**\n * Wrapper around useBlocker to show a window.confirm prompt to users instead\n * of building a custom UI with useBlocker.\n *\n * Warning: This has *a lot of rough edges* and behaves very differently (and\n * very incorrectly in some cases) across browsers if user click addition\n * back/forward navigations while the confirm is open.  Use at your own risk.\n */\nfunction usePrompt(_ref12) {\n  let {\n    when,\n    message\n  } = _ref12;\n  let blocker = useBlocker(when);\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\") {\n      let proceed = window.confirm(message);\n      if (proceed) {\n        // This timeout is needed to avoid a weird \"race\" on POP navigations\n        // between the `window.history` revert navigation and the result of\n        // `window.confirm`\n        setTimeout(blocker.proceed, 0);\n      } else {\n        blocker.reset();\n      }\n    }\n  }, [blocker, message]);\n  React.useEffect(() => {\n    if (blocker.state === \"blocked\" && !when) {\n      blocker.reset();\n    }\n  }, [blocker, when]);\n}\n/**\n * Return a boolean indicating if there is an active view transition to the\n * given href.  You can use this value to render CSS classes or viewTransitionName\n * styles onto your elements\n *\n * @param href The destination href\n * @param [opts.relative] Relative routing type (\"route\" | \"path\")\n */\nfunction useViewTransitionState(to, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n  let vtContext = React.useContext(ViewTransitionContext);\n  !(vtContext != null) ? process.env.NODE_ENV !== \"production\" ? UNSAFE_invariant(false, \"`unstable_useViewTransitionState` must be used within `react-router-dom`'s `RouterProvider`.  \" + \"Did you accidentally import `RouterProvider` from `react-router`?\") : UNSAFE_invariant(false) : void 0;\n  let {\n    basename\n  } = useDataRouterContext(DataRouterHook.useViewTransitionState);\n  let path = useResolvedPath(to, {\n    relative: opts.relative\n  });\n  if (!vtContext.isTransitioning) {\n    return false;\n  }\n  let currentPath = stripBasename(vtContext.currentLocation.pathname, basename) || vtContext.currentLocation.pathname;\n  let nextPath = stripBasename(vtContext.nextLocation.pathname, basename) || vtContext.nextLocation.pathname;\n  // Transition is active if we're going to or coming from the indicated\n  // destination.  This ensures that other PUSH navigations that reverse\n  // an indicated transition apply.  I.e., on the list view you have:\n  //\n  //   <NavLink to=\"/details/1\" unstable_viewTransition>\n  //\n  // If you click the breadcrumb back to the list view:\n  //\n  //   <NavLink to=\"/list\" unstable_viewTransition>\n  //\n  // We should apply the transition because it's indicated as active going\n  // from /list -> /details/1 and therefore should be active on the reverse\n  // (even though this isn't strictly a POP reverse)\n  return matchPath(path.pathname, nextPath) != null || matchPath(path.pathname, currentPath) != null;\n}\n//#endregion\n\nexport { BrowserRouter, Form, HashRouter, Link, NavLink, RouterProvider, ScrollRestoration, FetchersContext as UNSAFE_FetchersContext, ViewTransitionContext as UNSAFE_ViewTransitionContext, useScrollRestoration as UNSAFE_useScrollRestoration, createBrowserRouter, createHashRouter, createSearchParams, HistoryRouter as unstable_HistoryRouter, usePrompt as unstable_usePrompt, useViewTransitionState as unstable_useViewTransitionState, useBeforeUnload, useFetcher, useFetchers, useFormAction, useLinkClickHandler, useSearchParams, useSubmit };\n//# sourceMappingURL=index.js.map\n","/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */\n\nvar hasElementType = typeof Element !== 'undefined';\nvar hasMap = typeof Map === 'function';\nvar hasSet = typeof Set === 'function';\nvar hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;\n\n// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js\n\nfunction equal(a, b) {\n  // START: fast-deep-equal es6/index.js 3.1.3\n  if (a === b) return true;\n\n  if (a && b && typeof a == 'object' && typeof b == 'object') {\n    if (a.constructor !== b.constructor) return false;\n\n    var length, i, keys;\n    if (Array.isArray(a)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (!equal(a[i], b[i])) return false;\n      return true;\n    }\n\n    // START: Modifications:\n    // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code\n    //    to co-exist with es5.\n    // 2. Replace `for of` with es5 compliant iteration using `for`.\n    //    Basically, take:\n    //\n    //    ```js\n    //    for (i of a.entries())\n    //      if (!b.has(i[0])) return false;\n    //    ```\n    //\n    //    ... and convert to:\n    //\n    //    ```js\n    //    it = a.entries();\n    //    while (!(i = it.next()).done)\n    //      if (!b.has(i.value[0])) return false;\n    //    ```\n    //\n    //    **Note**: `i` access switches to `i.value`.\n    var it;\n    if (hasMap && (a instanceof Map) && (b instanceof Map)) {\n      if (a.size !== b.size) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!b.has(i.value[0])) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!equal(i.value[1], b.get(i.value[0]))) return false;\n      return true;\n    }\n\n    if (hasSet && (a instanceof Set) && (b instanceof Set)) {\n      if (a.size !== b.size) return false;\n      it = a.entries();\n      while (!(i = it.next()).done)\n        if (!b.has(i.value[0])) return false;\n      return true;\n    }\n    // END: Modifications\n\n    if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {\n      length = a.length;\n      if (length != b.length) return false;\n      for (i = length; i-- !== 0;)\n        if (a[i] !== b[i]) return false;\n      return true;\n    }\n\n    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;\n    // START: Modifications:\n    // Apply guards for `Object.create(null)` handling. See:\n    // - https://github.com/FormidableLabs/react-fast-compare/issues/64\n    // - https://github.com/epoberezkin/fast-deep-equal/issues/49\n    if (a.valueOf !== Object.prototype.valueOf && typeof a.valueOf === 'function' && typeof b.valueOf === 'function') return a.valueOf() === b.valueOf();\n    if (a.toString !== Object.prototype.toString && typeof a.toString === 'function' && typeof b.toString === 'function') return a.toString() === b.toString();\n    // END: Modifications\n\n    keys = Object.keys(a);\n    length = keys.length;\n    if (length !== Object.keys(b).length) return false;\n\n    for (i = length; i-- !== 0;)\n      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;\n    // END: fast-deep-equal\n\n    // START: react-fast-compare\n    // custom handling for DOM elements\n    if (hasElementType && a instanceof Element) return false;\n\n    // custom handling for React/Preact\n    for (i = length; i-- !== 0;) {\n      if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {\n        // React-specific: avoid traversing React elements' _owner\n        // Preact-specific: avoid traversing Preact elements' __v and __o\n        //    __v = $_original / $_vnode\n        //    __o = $_owner\n        // These properties contain circular references and are not needed when\n        // comparing the actual elements (and not their owners)\n        // .$$typeof and ._store on just reasonable markers of elements\n\n        continue;\n      }\n\n      // all other properties should be traversed as usual\n      if (!equal(a[keys[i]], b[keys[i]])) return false;\n    }\n    // END: react-fast-compare\n\n    // START: fast-deep-equal\n    return true;\n  }\n\n  return a !== a && b !== b;\n}\n// end fast-deep-equal\n\nmodule.exports = function isEqual(a, b) {\n  try {\n    return equal(a, b);\n  } catch (error) {\n    if (((error.message || '').match(/stack|recursion/i))) {\n      // warn on circular references, don't crash\n      // browsers give this different errors name and messages:\n      // chrome/safari: \"RangeError\", \"Maximum call stack size exceeded\"\n      // firefox: \"InternalError\", too much recursion\"\n      // edge: \"Error\", \"Out of stack space\"\n      console.warn('react-fast-compare cannot handle circular refs');\n      return false;\n    }\n    // some other error. we should definitely know about these\n    throw error;\n  }\n};\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (process.env.NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n","//\n\nmodule.exports = function shallowEqual(objA, objB, compare, compareContext) {\n  var ret = compare ? compare.call(compareContext, objA, objB) : void 0;\n\n  if (ret !== void 0) {\n    return !!ret;\n  }\n\n  if (objA === objB) {\n    return true;\n  }\n\n  if (typeof objA !== \"object\" || !objA || typeof objB !== \"object\" || !objB) {\n    return false;\n  }\n\n  var keysA = Object.keys(objA);\n  var keysB = Object.keys(objB);\n\n  if (keysA.length !== keysB.length) {\n    return false;\n  }\n\n  var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);\n\n  // Test for A's keys different from B.\n  for (var idx = 0; idx < keysA.length; idx++) {\n    var key = keysA[idx];\n\n    if (!bHasOwnProperty(key)) {\n      return false;\n    }\n\n    var valueA = objA[key];\n    var valueB = objB[key];\n\n    ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;\n\n    if (ret === false || (ret === void 0 && valueA !== valueB)) {\n      return false;\n    }\n  }\n\n  return true;\n};\n","// src/index.tsx\nimport React3, { Component as Component3 } from \"react\";\nimport fastCompare from \"react-fast-compare\";\nimport invariant from \"invariant\";\n\n// src/Provider.tsx\nimport React2, { Component } from \"react\";\n\n// src/server.ts\nimport React from \"react\";\n\n// src/constants.ts\nvar TAG_NAMES = /* @__PURE__ */ ((TAG_NAMES2) => {\n  TAG_NAMES2[\"BASE\"] = \"base\";\n  TAG_NAMES2[\"BODY\"] = \"body\";\n  TAG_NAMES2[\"HEAD\"] = \"head\";\n  TAG_NAMES2[\"HTML\"] = \"html\";\n  TAG_NAMES2[\"LINK\"] = \"link\";\n  TAG_NAMES2[\"META\"] = \"meta\";\n  TAG_NAMES2[\"NOSCRIPT\"] = \"noscript\";\n  TAG_NAMES2[\"SCRIPT\"] = \"script\";\n  TAG_NAMES2[\"STYLE\"] = \"style\";\n  TAG_NAMES2[\"TITLE\"] = \"title\";\n  TAG_NAMES2[\"FRAGMENT\"] = \"Symbol(react.fragment)\";\n  return TAG_NAMES2;\n})(TAG_NAMES || {});\nvar SEO_PRIORITY_TAGS = {\n  link: { rel: [\"amphtml\", \"canonical\", \"alternate\"] },\n  script: { type: [\"application/ld+json\"] },\n  meta: {\n    charset: \"\",\n    name: [\"generator\", \"robots\", \"description\"],\n    property: [\n      \"og:type\",\n      \"og:title\",\n      \"og:url\",\n      \"og:image\",\n      \"og:image:alt\",\n      \"og:description\",\n      \"twitter:url\",\n      \"twitter:title\",\n      \"twitter:description\",\n      \"twitter:image\",\n      \"twitter:image:alt\",\n      \"twitter:card\",\n      \"twitter:site\"\n    ]\n  }\n};\nvar VALID_TAG_NAMES = Object.values(TAG_NAMES);\nvar REACT_TAG_MAP = {\n  accesskey: \"accessKey\",\n  charset: \"charSet\",\n  class: \"className\",\n  contenteditable: \"contentEditable\",\n  contextmenu: \"contextMenu\",\n  \"http-equiv\": \"httpEquiv\",\n  itemprop: \"itemProp\",\n  tabindex: \"tabIndex\"\n};\nvar HTML_TAG_MAP = Object.entries(REACT_TAG_MAP).reduce(\n  (carry, [key, value]) => {\n    carry[value] = key;\n    return carry;\n  },\n  {}\n);\nvar HELMET_ATTRIBUTE = \"data-rh\";\n\n// src/utils.ts\nvar HELMET_PROPS = {\n  DEFAULT_TITLE: \"defaultTitle\",\n  DEFER: \"defer\",\n  ENCODE_SPECIAL_CHARACTERS: \"encodeSpecialCharacters\",\n  ON_CHANGE_CLIENT_STATE: \"onChangeClientState\",\n  TITLE_TEMPLATE: \"titleTemplate\",\n  PRIORITIZE_SEO_TAGS: \"prioritizeSeoTags\"\n};\nvar getInnermostProperty = (propsList, property) => {\n  for (let i = propsList.length - 1; i >= 0; i -= 1) {\n    const props = propsList[i];\n    if (Object.prototype.hasOwnProperty.call(props, property)) {\n      return props[property];\n    }\n  }\n  return null;\n};\nvar getTitleFromPropsList = (propsList) => {\n  let innermostTitle = getInnermostProperty(propsList, \"title\" /* TITLE */);\n  const innermostTemplate = getInnermostProperty(propsList, HELMET_PROPS.TITLE_TEMPLATE);\n  if (Array.isArray(innermostTitle)) {\n    innermostTitle = innermostTitle.join(\"\");\n  }\n  if (innermostTemplate && innermostTitle) {\n    return innermostTemplate.replace(/%s/g, () => innermostTitle);\n  }\n  const innermostDefaultTitle = getInnermostProperty(propsList, HELMET_PROPS.DEFAULT_TITLE);\n  return innermostTitle || innermostDefaultTitle || void 0;\n};\nvar getOnChangeClientState = (propsList) => getInnermostProperty(propsList, HELMET_PROPS.ON_CHANGE_CLIENT_STATE) || (() => {\n});\nvar getAttributesFromPropsList = (tagType, propsList) => propsList.filter((props) => typeof props[tagType] !== \"undefined\").map((props) => props[tagType]).reduce((tagAttrs, current) => ({ ...tagAttrs, ...current }), {});\nvar getBaseTagFromPropsList = (primaryAttributes, propsList) => propsList.filter((props) => typeof props[\"base\" /* BASE */] !== \"undefined\").map((props) => props[\"base\" /* BASE */]).reverse().reduce((innermostBaseTag, tag) => {\n  if (!innermostBaseTag.length) {\n    const keys = Object.keys(tag);\n    for (let i = 0; i < keys.length; i += 1) {\n      const attributeKey = keys[i];\n      const lowerCaseAttributeKey = attributeKey.toLowerCase();\n      if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && tag[lowerCaseAttributeKey]) {\n        return innermostBaseTag.concat(tag);\n      }\n    }\n  }\n  return innermostBaseTag;\n}, []);\nvar warn = (msg) => console && typeof console.warn === \"function\" && console.warn(msg);\nvar getTagsFromPropsList = (tagName, primaryAttributes, propsList) => {\n  const approvedSeenTags = {};\n  return propsList.filter((props) => {\n    if (Array.isArray(props[tagName])) {\n      return true;\n    }\n    if (typeof props[tagName] !== \"undefined\") {\n      warn(\n        `Helmet: ${tagName} should be of type \"Array\". Instead found type \"${typeof props[tagName]}\"`\n      );\n    }\n    return false;\n  }).map((props) => props[tagName]).reverse().reduce((approvedTags, instanceTags) => {\n    const instanceSeenTags = {};\n    instanceTags.filter((tag) => {\n      let primaryAttributeKey;\n      const keys2 = Object.keys(tag);\n      for (let i = 0; i < keys2.length; i += 1) {\n        const attributeKey = keys2[i];\n        const lowerCaseAttributeKey = attributeKey.toLowerCase();\n        if (primaryAttributes.indexOf(lowerCaseAttributeKey) !== -1 && !(primaryAttributeKey === \"rel\" /* REL */ && tag[primaryAttributeKey].toLowerCase() === \"canonical\") && !(lowerCaseAttributeKey === \"rel\" /* REL */ && tag[lowerCaseAttributeKey].toLowerCase() === \"stylesheet\")) {\n          primaryAttributeKey = lowerCaseAttributeKey;\n        }\n        if (primaryAttributes.indexOf(attributeKey) !== -1 && (attributeKey === \"innerHTML\" /* INNER_HTML */ || attributeKey === \"cssText\" /* CSS_TEXT */ || attributeKey === \"itemprop\" /* ITEM_PROP */)) {\n          primaryAttributeKey = attributeKey;\n        }\n      }\n      if (!primaryAttributeKey || !tag[primaryAttributeKey]) {\n        return false;\n      }\n      const value = tag[primaryAttributeKey].toLowerCase();\n      if (!approvedSeenTags[primaryAttributeKey]) {\n        approvedSeenTags[primaryAttributeKey] = {};\n      }\n      if (!instanceSeenTags[primaryAttributeKey]) {\n        instanceSeenTags[primaryAttributeKey] = {};\n      }\n      if (!approvedSeenTags[primaryAttributeKey][value]) {\n        instanceSeenTags[primaryAttributeKey][value] = true;\n        return true;\n      }\n      return false;\n    }).reverse().forEach((tag) => approvedTags.push(tag));\n    const keys = Object.keys(instanceSeenTags);\n    for (let i = 0; i < keys.length; i += 1) {\n      const attributeKey = keys[i];\n      const tagUnion = {\n        ...approvedSeenTags[attributeKey],\n        ...instanceSeenTags[attributeKey]\n      };\n      approvedSeenTags[attributeKey] = tagUnion;\n    }\n    return approvedTags;\n  }, []).reverse();\n};\nvar getAnyTrueFromPropsList = (propsList, checkedTag) => {\n  if (Array.isArray(propsList) && propsList.length) {\n    for (let index = 0; index < propsList.length; index += 1) {\n      const prop = propsList[index];\n      if (prop[checkedTag]) {\n        return true;\n      }\n    }\n  }\n  return false;\n};\nvar reducePropsToState = (propsList) => ({\n  baseTag: getBaseTagFromPropsList([\"href\" /* HREF */], propsList),\n  bodyAttributes: getAttributesFromPropsList(\"bodyAttributes\" /* BODY */, propsList),\n  defer: getInnermostProperty(propsList, HELMET_PROPS.DEFER),\n  encode: getInnermostProperty(propsList, HELMET_PROPS.ENCODE_SPECIAL_CHARACTERS),\n  htmlAttributes: getAttributesFromPropsList(\"htmlAttributes\" /* HTML */, propsList),\n  linkTags: getTagsFromPropsList(\n    \"link\" /* LINK */,\n    [\"rel\" /* REL */, \"href\" /* HREF */],\n    propsList\n  ),\n  metaTags: getTagsFromPropsList(\n    \"meta\" /* META */,\n    [\n      \"name\" /* NAME */,\n      \"charset\" /* CHARSET */,\n      \"http-equiv\" /* HTTPEQUIV */,\n      \"property\" /* PROPERTY */,\n      \"itemprop\" /* ITEM_PROP */\n    ],\n    propsList\n  ),\n  noscriptTags: getTagsFromPropsList(\"noscript\" /* NOSCRIPT */, [\"innerHTML\" /* INNER_HTML */], propsList),\n  onChangeClientState: getOnChangeClientState(propsList),\n  scriptTags: getTagsFromPropsList(\n    \"script\" /* SCRIPT */,\n    [\"src\" /* SRC */, \"innerHTML\" /* INNER_HTML */],\n    propsList\n  ),\n  styleTags: getTagsFromPropsList(\"style\" /* STYLE */, [\"cssText\" /* CSS_TEXT */], propsList),\n  title: getTitleFromPropsList(propsList),\n  titleAttributes: getAttributesFromPropsList(\"titleAttributes\" /* TITLE */, propsList),\n  prioritizeSeoTags: getAnyTrueFromPropsList(propsList, HELMET_PROPS.PRIORITIZE_SEO_TAGS)\n});\nvar flattenArray = (possibleArray) => Array.isArray(possibleArray) ? possibleArray.join(\"\") : possibleArray;\nvar checkIfPropsMatch = (props, toMatch) => {\n  const keys = Object.keys(props);\n  for (let i = 0; i < keys.length; i += 1) {\n    if (toMatch[keys[i]] && toMatch[keys[i]].includes(props[keys[i]])) {\n      return true;\n    }\n  }\n  return false;\n};\nvar prioritizer = (elementsList, propsToMatch) => {\n  if (Array.isArray(elementsList)) {\n    return elementsList.reduce(\n      (acc, elementAttrs) => {\n        if (checkIfPropsMatch(elementAttrs, propsToMatch)) {\n          acc.priority.push(elementAttrs);\n        } else {\n          acc.default.push(elementAttrs);\n        }\n        return acc;\n      },\n      { priority: [], default: [] }\n    );\n  }\n  return { default: elementsList, priority: [] };\n};\nvar without = (obj, key) => {\n  return {\n    ...obj,\n    [key]: void 0\n  };\n};\n\n// src/server.ts\nvar SELF_CLOSING_TAGS = [\"noscript\" /* NOSCRIPT */, \"script\" /* SCRIPT */, \"style\" /* STYLE */];\nvar encodeSpecialCharacters = (str, encode = true) => {\n  if (encode === false) {\n    return String(str);\n  }\n  return String(str).replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\").replace(/'/g, \"&#x27;\");\n};\nvar generateElementAttributesAsString = (attributes) => Object.keys(attributes).reduce((str, key) => {\n  const attr = typeof attributes[key] !== \"undefined\" ? `${key}=\"${attributes[key]}\"` : `${key}`;\n  return str ? `${str} ${attr}` : attr;\n}, \"\");\nvar generateTitleAsString = (type, title, attributes, encode) => {\n  const attributeString = generateElementAttributesAsString(attributes);\n  const flattenedTitle = flattenArray(title);\n  return attributeString ? `<${type} ${HELMET_ATTRIBUTE}=\"true\" ${attributeString}>${encodeSpecialCharacters(\n    flattenedTitle,\n    encode\n  )}</${type}>` : `<${type} ${HELMET_ATTRIBUTE}=\"true\">${encodeSpecialCharacters(\n    flattenedTitle,\n    encode\n  )}</${type}>`;\n};\nvar generateTagsAsString = (type, tags, encode = true) => tags.reduce((str, t) => {\n  const tag = t;\n  const attributeHtml = Object.keys(tag).filter(\n    (attribute) => !(attribute === \"innerHTML\" /* INNER_HTML */ || attribute === \"cssText\" /* CSS_TEXT */)\n  ).reduce((string, attribute) => {\n    const attr = typeof tag[attribute] === \"undefined\" ? attribute : `${attribute}=\"${encodeSpecialCharacters(tag[attribute], encode)}\"`;\n    return string ? `${string} ${attr}` : attr;\n  }, \"\");\n  const tagContent = tag.innerHTML || tag.cssText || \"\";\n  const isSelfClosing = SELF_CLOSING_TAGS.indexOf(type) === -1;\n  return `${str}<${type} ${HELMET_ATTRIBUTE}=\"true\" ${attributeHtml}${isSelfClosing ? `/>` : `>${tagContent}</${type}>`}`;\n}, \"\");\nvar convertElementAttributesToReactProps = (attributes, initProps = {}) => Object.keys(attributes).reduce((obj, key) => {\n  const mapped = REACT_TAG_MAP[key];\n  obj[mapped || key] = attributes[key];\n  return obj;\n}, initProps);\nvar generateTitleAsReactComponent = (_type, title, attributes) => {\n  const initProps = {\n    key: title,\n    [HELMET_ATTRIBUTE]: true\n  };\n  const props = convertElementAttributesToReactProps(attributes, initProps);\n  return [React.createElement(\"title\" /* TITLE */, props, title)];\n};\nvar generateTagsAsReactComponent = (type, tags) => tags.map((tag, i) => {\n  const mappedTag = {\n    key: i,\n    [HELMET_ATTRIBUTE]: true\n  };\n  Object.keys(tag).forEach((attribute) => {\n    const mapped = REACT_TAG_MAP[attribute];\n    const mappedAttribute = mapped || attribute;\n    if (mappedAttribute === \"innerHTML\" /* INNER_HTML */ || mappedAttribute === \"cssText\" /* CSS_TEXT */) {\n      const content = tag.innerHTML || tag.cssText;\n      mappedTag.dangerouslySetInnerHTML = { __html: content };\n    } else {\n      mappedTag[mappedAttribute] = tag[attribute];\n    }\n  });\n  return React.createElement(type, mappedTag);\n});\nvar getMethodsForTag = (type, tags, encode = true) => {\n  switch (type) {\n    case \"title\" /* TITLE */:\n      return {\n        toComponent: () => generateTitleAsReactComponent(type, tags.title, tags.titleAttributes),\n        toString: () => generateTitleAsString(type, tags.title, tags.titleAttributes, encode)\n      };\n    case \"bodyAttributes\" /* BODY */:\n    case \"htmlAttributes\" /* HTML */:\n      return {\n        toComponent: () => convertElementAttributesToReactProps(tags),\n        toString: () => generateElementAttributesAsString(tags)\n      };\n    default:\n      return {\n        toComponent: () => generateTagsAsReactComponent(type, tags),\n        toString: () => generateTagsAsString(type, tags, encode)\n      };\n  }\n};\nvar getPriorityMethods = ({ metaTags, linkTags, scriptTags, encode }) => {\n  const meta = prioritizer(metaTags, SEO_PRIORITY_TAGS.meta);\n  const link = prioritizer(linkTags, SEO_PRIORITY_TAGS.link);\n  const script = prioritizer(scriptTags, SEO_PRIORITY_TAGS.script);\n  const priorityMethods = {\n    toComponent: () => [\n      ...generateTagsAsReactComponent(\"meta\" /* META */, meta.priority),\n      ...generateTagsAsReactComponent(\"link\" /* LINK */, link.priority),\n      ...generateTagsAsReactComponent(\"script\" /* SCRIPT */, script.priority)\n    ],\n    toString: () => (\n      // generate all the tags as strings and concatenate them\n      `${getMethodsForTag(\"meta\" /* META */, meta.priority, encode)} ${getMethodsForTag(\n        \"link\" /* LINK */,\n        link.priority,\n        encode\n      )} ${getMethodsForTag(\"script\" /* SCRIPT */, script.priority, encode)}`\n    )\n  };\n  return {\n    priorityMethods,\n    metaTags: meta.default,\n    linkTags: link.default,\n    scriptTags: script.default\n  };\n};\nvar mapStateOnServer = (props) => {\n  const {\n    baseTag,\n    bodyAttributes,\n    encode = true,\n    htmlAttributes,\n    noscriptTags,\n    styleTags,\n    title = \"\",\n    titleAttributes,\n    prioritizeSeoTags\n  } = props;\n  let { linkTags, metaTags, scriptTags } = props;\n  let priorityMethods = {\n    toComponent: () => {\n    },\n    toString: () => \"\"\n  };\n  if (prioritizeSeoTags) {\n    ({ priorityMethods, linkTags, metaTags, scriptTags } = getPriorityMethods(props));\n  }\n  return {\n    priority: priorityMethods,\n    base: getMethodsForTag(\"base\" /* BASE */, baseTag, encode),\n    bodyAttributes: getMethodsForTag(\"bodyAttributes\" /* BODY */, bodyAttributes, encode),\n    htmlAttributes: getMethodsForTag(\"htmlAttributes\" /* HTML */, htmlAttributes, encode),\n    link: getMethodsForTag(\"link\" /* LINK */, linkTags, encode),\n    meta: getMethodsForTag(\"meta\" /* META */, metaTags, encode),\n    noscript: getMethodsForTag(\"noscript\" /* NOSCRIPT */, noscriptTags, encode),\n    script: getMethodsForTag(\"script\" /* SCRIPT */, scriptTags, encode),\n    style: getMethodsForTag(\"style\" /* STYLE */, styleTags, encode),\n    title: getMethodsForTag(\"title\" /* TITLE */, { title, titleAttributes }, encode)\n  };\n};\nvar server_default = mapStateOnServer;\n\n// src/HelmetData.ts\nvar instances = [];\nvar isDocument = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nvar HelmetData = class {\n  instances = [];\n  canUseDOM = isDocument;\n  context;\n  value = {\n    setHelmet: (serverState) => {\n      this.context.helmet = serverState;\n    },\n    helmetInstances: {\n      get: () => this.canUseDOM ? instances : this.instances,\n      add: (instance) => {\n        (this.canUseDOM ? instances : this.instances).push(instance);\n      },\n      remove: (instance) => {\n        const index = (this.canUseDOM ? instances : this.instances).indexOf(instance);\n        (this.canUseDOM ? instances : this.instances).splice(index, 1);\n      }\n    }\n  };\n  constructor(context, canUseDOM) {\n    this.context = context;\n    this.canUseDOM = canUseDOM || false;\n    if (!canUseDOM) {\n      context.helmet = server_default({\n        baseTag: [],\n        bodyAttributes: {},\n        encodeSpecialCharacters: true,\n        htmlAttributes: {},\n        linkTags: [],\n        metaTags: [],\n        noscriptTags: [],\n        scriptTags: [],\n        styleTags: [],\n        title: \"\",\n        titleAttributes: {}\n      });\n    }\n  }\n};\n\n// src/Provider.tsx\nvar defaultValue = {};\nvar Context = React2.createContext(defaultValue);\nvar HelmetProvider = class _HelmetProvider extends Component {\n  static canUseDOM = isDocument;\n  helmetData;\n  constructor(props) {\n    super(props);\n    this.helmetData = new HelmetData(this.props.context || {}, _HelmetProvider.canUseDOM);\n  }\n  render() {\n    return /* @__PURE__ */ React2.createElement(Context.Provider, { value: this.helmetData.value }, this.props.children);\n  }\n};\n\n// src/Dispatcher.tsx\nimport { Component as Component2 } from \"react\";\nimport shallowEqual from \"shallowequal\";\n\n// src/client.ts\nvar updateTags = (type, tags) => {\n  const headElement = document.head || document.querySelector(\"head\" /* HEAD */);\n  const tagNodes = headElement.querySelectorAll(`${type}[${HELMET_ATTRIBUTE}]`);\n  const oldTags = [].slice.call(tagNodes);\n  const newTags = [];\n  let indexToDelete;\n  if (tags && tags.length) {\n    tags.forEach((tag) => {\n      const newElement = document.createElement(type);\n      for (const attribute in tag) {\n        if (Object.prototype.hasOwnProperty.call(tag, attribute)) {\n          if (attribute === \"innerHTML\" /* INNER_HTML */) {\n            newElement.innerHTML = tag.innerHTML;\n          } else if (attribute === \"cssText\" /* CSS_TEXT */) {\n            if (newElement.styleSheet) {\n              newElement.styleSheet.cssText = tag.cssText;\n            } else {\n              newElement.appendChild(document.createTextNode(tag.cssText));\n            }\n          } else {\n            const attr = attribute;\n            const value = typeof tag[attr] === \"undefined\" ? \"\" : tag[attr];\n            newElement.setAttribute(attribute, value);\n          }\n        }\n      }\n      newElement.setAttribute(HELMET_ATTRIBUTE, \"true\");\n      if (oldTags.some((existingTag, index) => {\n        indexToDelete = index;\n        return newElement.isEqualNode(existingTag);\n      })) {\n        oldTags.splice(indexToDelete, 1);\n      } else {\n        newTags.push(newElement);\n      }\n    });\n  }\n  oldTags.forEach((tag) => tag.parentNode?.removeChild(tag));\n  newTags.forEach((tag) => headElement.appendChild(tag));\n  return {\n    oldTags,\n    newTags\n  };\n};\nvar updateAttributes = (tagName, attributes) => {\n  const elementTag = document.getElementsByTagName(tagName)[0];\n  if (!elementTag) {\n    return;\n  }\n  const helmetAttributeString = elementTag.getAttribute(HELMET_ATTRIBUTE);\n  const helmetAttributes = helmetAttributeString ? helmetAttributeString.split(\",\") : [];\n  const attributesToRemove = [...helmetAttributes];\n  const attributeKeys = Object.keys(attributes);\n  for (const attribute of attributeKeys) {\n    const value = attributes[attribute] || \"\";\n    if (elementTag.getAttribute(attribute) !== value) {\n      elementTag.setAttribute(attribute, value);\n    }\n    if (helmetAttributes.indexOf(attribute) === -1) {\n      helmetAttributes.push(attribute);\n    }\n    const indexToSave = attributesToRemove.indexOf(attribute);\n    if (indexToSave !== -1) {\n      attributesToRemove.splice(indexToSave, 1);\n    }\n  }\n  for (let i = attributesToRemove.length - 1; i >= 0; i -= 1) {\n    elementTag.removeAttribute(attributesToRemove[i]);\n  }\n  if (helmetAttributes.length === attributesToRemove.length) {\n    elementTag.removeAttribute(HELMET_ATTRIBUTE);\n  } else if (elementTag.getAttribute(HELMET_ATTRIBUTE) !== attributeKeys.join(\",\")) {\n    elementTag.setAttribute(HELMET_ATTRIBUTE, attributeKeys.join(\",\"));\n  }\n};\nvar updateTitle = (title, attributes) => {\n  if (typeof title !== \"undefined\" && document.title !== title) {\n    document.title = flattenArray(title);\n  }\n  updateAttributes(\"title\" /* TITLE */, attributes);\n};\nvar commitTagChanges = (newState, cb) => {\n  const {\n    baseTag,\n    bodyAttributes,\n    htmlAttributes,\n    linkTags,\n    metaTags,\n    noscriptTags,\n    onChangeClientState,\n    scriptTags,\n    styleTags,\n    title,\n    titleAttributes\n  } = newState;\n  updateAttributes(\"body\" /* BODY */, bodyAttributes);\n  updateAttributes(\"html\" /* HTML */, htmlAttributes);\n  updateTitle(title, titleAttributes);\n  const tagUpdates = {\n    baseTag: updateTags(\"base\" /* BASE */, baseTag),\n    linkTags: updateTags(\"link\" /* LINK */, linkTags),\n    metaTags: updateTags(\"meta\" /* META */, metaTags),\n    noscriptTags: updateTags(\"noscript\" /* NOSCRIPT */, noscriptTags),\n    scriptTags: updateTags(\"script\" /* SCRIPT */, scriptTags),\n    styleTags: updateTags(\"style\" /* STYLE */, styleTags)\n  };\n  const addedTags = {};\n  const removedTags = {};\n  Object.keys(tagUpdates).forEach((tagType) => {\n    const { newTags, oldTags } = tagUpdates[tagType];\n    if (newTags.length) {\n      addedTags[tagType] = newTags;\n    }\n    if (oldTags.length) {\n      removedTags[tagType] = tagUpdates[tagType].oldTags;\n    }\n  });\n  if (cb) {\n    cb();\n  }\n  onChangeClientState(newState, addedTags, removedTags);\n};\nvar _helmetCallback = null;\nvar handleStateChangeOnClient = (newState) => {\n  if (_helmetCallback) {\n    cancelAnimationFrame(_helmetCallback);\n  }\n  if (newState.defer) {\n    _helmetCallback = requestAnimationFrame(() => {\n      commitTagChanges(newState, () => {\n        _helmetCallback = null;\n      });\n    });\n  } else {\n    commitTagChanges(newState);\n    _helmetCallback = null;\n  }\n};\nvar client_default = handleStateChangeOnClient;\n\n// src/Dispatcher.tsx\nvar HelmetDispatcher = class extends Component2 {\n  rendered = false;\n  shouldComponentUpdate(nextProps) {\n    return !shallowEqual(nextProps, this.props);\n  }\n  componentDidUpdate() {\n    this.emitChange();\n  }\n  componentWillUnmount() {\n    const { helmetInstances } = this.props.context;\n    helmetInstances.remove(this);\n    this.emitChange();\n  }\n  emitChange() {\n    const { helmetInstances, setHelmet } = this.props.context;\n    let serverState = null;\n    const state = reducePropsToState(\n      helmetInstances.get().map((instance) => {\n        const props = { ...instance.props };\n        delete props.context;\n        return props;\n      })\n    );\n    if (HelmetProvider.canUseDOM) {\n      client_default(state);\n    } else if (server_default) {\n      serverState = server_default(state);\n    }\n    setHelmet(serverState);\n  }\n  // componentWillMount will be deprecated\n  // for SSR, initialize on first render\n  // constructor is also unsafe in StrictMode\n  init() {\n    if (this.rendered) {\n      return;\n    }\n    this.rendered = true;\n    const { helmetInstances } = this.props.context;\n    helmetInstances.add(this);\n    this.emitChange();\n  }\n  render() {\n    this.init();\n    return null;\n  }\n};\n\n// src/index.tsx\nvar Helmet = class extends Component3 {\n  static defaultProps = {\n    defer: true,\n    encodeSpecialCharacters: true,\n    prioritizeSeoTags: false\n  };\n  shouldComponentUpdate(nextProps) {\n    return !fastCompare(without(this.props, \"helmetData\"), without(nextProps, \"helmetData\"));\n  }\n  mapNestedChildrenToProps(child, nestedChildren) {\n    if (!nestedChildren) {\n      return null;\n    }\n    switch (child.type) {\n      case \"script\" /* SCRIPT */:\n      case \"noscript\" /* NOSCRIPT */:\n        return {\n          innerHTML: nestedChildren\n        };\n      case \"style\" /* STYLE */:\n        return {\n          cssText: nestedChildren\n        };\n      default:\n        throw new Error(\n          `<${child.type} /> elements are self-closing and can not contain children. Refer to our API for more information.`\n        );\n    }\n  }\n  flattenArrayTypeChildren(child, arrayTypeChildren, newChildProps, nestedChildren) {\n    return {\n      ...arrayTypeChildren,\n      [child.type]: [\n        ...arrayTypeChildren[child.type] || [],\n        {\n          ...newChildProps,\n          ...this.mapNestedChildrenToProps(child, nestedChildren)\n        }\n      ]\n    };\n  }\n  mapObjectTypeChildren(child, newProps, newChildProps, nestedChildren) {\n    switch (child.type) {\n      case \"title\" /* TITLE */:\n        return {\n          ...newProps,\n          [child.type]: nestedChildren,\n          titleAttributes: { ...newChildProps }\n        };\n      case \"body\" /* BODY */:\n        return {\n          ...newProps,\n          bodyAttributes: { ...newChildProps }\n        };\n      case \"html\" /* HTML */:\n        return {\n          ...newProps,\n          htmlAttributes: { ...newChildProps }\n        };\n      default:\n        return {\n          ...newProps,\n          [child.type]: { ...newChildProps }\n        };\n    }\n  }\n  mapArrayTypeChildrenToProps(arrayTypeChildren, newProps) {\n    let newFlattenedProps = { ...newProps };\n    Object.keys(arrayTypeChildren).forEach((arrayChildName) => {\n      newFlattenedProps = {\n        ...newFlattenedProps,\n        [arrayChildName]: arrayTypeChildren[arrayChildName]\n      };\n    });\n    return newFlattenedProps;\n  }\n  warnOnInvalidChildren(child, nestedChildren) {\n    invariant(\n      VALID_TAG_NAMES.some((name) => child.type === name),\n      typeof child.type === \"function\" ? `You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.` : `Only elements types ${VALID_TAG_NAMES.join(\n        \", \"\n      )} are allowed. Helmet does not support rendering <${child.type}> elements. Refer to our API for more information.`\n    );\n    invariant(\n      !nestedChildren || typeof nestedChildren === \"string\" || Array.isArray(nestedChildren) && !nestedChildren.some((nestedChild) => typeof nestedChild !== \"string\"),\n      `Helmet expects a string as a child of <${child.type}>. Did you forget to wrap your children in braces? ( <${child.type}>{\\`\\`}</${child.type}> ) Refer to our API for more information.`\n    );\n    return true;\n  }\n  mapChildrenToProps(children, newProps) {\n    let arrayTypeChildren = {};\n    React3.Children.forEach(children, (child) => {\n      if (!child || !child.props) {\n        return;\n      }\n      const { children: nestedChildren, ...childProps } = child.props;\n      const newChildProps = Object.keys(childProps).reduce((obj, key) => {\n        obj[HTML_TAG_MAP[key] || key] = childProps[key];\n        return obj;\n      }, {});\n      let { type } = child;\n      if (typeof type === \"symbol\") {\n        type = type.toString();\n      } else {\n        this.warnOnInvalidChildren(child, nestedChildren);\n      }\n      switch (type) {\n        case \"Symbol(react.fragment)\" /* FRAGMENT */:\n          newProps = this.mapChildrenToProps(nestedChildren, newProps);\n          break;\n        case \"link\" /* LINK */:\n        case \"meta\" /* META */:\n        case \"noscript\" /* NOSCRIPT */:\n        case \"script\" /* SCRIPT */:\n        case \"style\" /* STYLE */:\n          arrayTypeChildren = this.flattenArrayTypeChildren(\n            child,\n            arrayTypeChildren,\n            newChildProps,\n            nestedChildren\n          );\n          break;\n        default:\n          newProps = this.mapObjectTypeChildren(child, newProps, newChildProps, nestedChildren);\n          break;\n      }\n    });\n    return this.mapArrayTypeChildrenToProps(arrayTypeChildren, newProps);\n  }\n  render() {\n    const { children, ...props } = this.props;\n    let newProps = { ...props };\n    let { helmetData } = props;\n    if (children) {\n      newProps = this.mapChildrenToProps(children, newProps);\n    }\n    if (helmetData && !(helmetData instanceof HelmetData)) {\n      const data = helmetData;\n      helmetData = new HelmetData(data.context, true);\n      delete newProps.helmetData;\n    }\n    return helmetData ? /* @__PURE__ */ React3.createElement(HelmetDispatcher, { ...newProps, context: helmetData.value }) : /* @__PURE__ */ React3.createElement(Context.Consumer, null, (context) => /* @__PURE__ */ React3.createElement(HelmetDispatcher, { ...newProps, context }));\n  }\n};\nexport {\n  Helmet,\n  HelmetData,\n  HelmetProvider\n};\n","\"use client\";\n\n// src/react/index.tsx\nimport { useEffect } from \"react\";\n\n// package.json\nvar name = \"@vercel/analytics\";\nvar version = \"1.6.1\";\n\n// src/queue.ts\nvar initQueue = () => {\n  if (window.va) return;\n  window.va = function a(...params) {\n    (window.vaq = window.vaq || []).push(params);\n  };\n};\n\n// src/utils.ts\nfunction isBrowser() {\n  return typeof window !== \"undefined\";\n}\nfunction detectEnvironment() {\n  try {\n    const env = process.env.NODE_ENV;\n    if (env === \"development\" || env === \"test\") {\n      return \"development\";\n    }\n  } catch (e) {\n  }\n  return \"production\";\n}\nfunction setMode(mode = \"auto\") {\n  if (mode === \"auto\") {\n    window.vam = detectEnvironment();\n    return;\n  }\n  window.vam = mode;\n}\nfunction getMode() {\n  const mode = isBrowser() ? window.vam : detectEnvironment();\n  return mode || \"production\";\n}\nfunction isProduction() {\n  return getMode() === \"production\";\n}\nfunction isDevelopment() {\n  return getMode() === \"development\";\n}\nfunction removeKey(key, { [key]: _, ...rest }) {\n  return rest;\n}\nfunction parseProperties(properties, options) {\n  if (!properties) return void 0;\n  let props = properties;\n  const errorProperties = [];\n  for (const [key, value] of Object.entries(properties)) {\n    if (typeof value === \"object\" && value !== null) {\n      if (options.strip) {\n        props = removeKey(key, props);\n      } else {\n        errorProperties.push(key);\n      }\n    }\n  }\n  if (errorProperties.length > 0 && !options.strip) {\n    throw Error(\n      `The following properties are not valid: ${errorProperties.join(\n        \", \"\n      )}. Only strings, numbers, booleans, and null are allowed.`\n    );\n  }\n  return props;\n}\nfunction getScriptSrc(props) {\n  if (props.scriptSrc) {\n    return props.scriptSrc;\n  }\n  if (isDevelopment()) {\n    return \"https://va.vercel-scripts.com/v1/script.debug.js\";\n  }\n  if (props.basePath) {\n    return `${props.basePath}/insights/script.js`;\n  }\n  return \"/_vercel/insights/script.js\";\n}\n\n// src/generic.ts\nfunction inject(props = {\n  debug: true\n}) {\n  var _a;\n  if (!isBrowser()) return;\n  setMode(props.mode);\n  initQueue();\n  if (props.beforeSend) {\n    (_a = window.va) == null ? void 0 : _a.call(window, \"beforeSend\", props.beforeSend);\n  }\n  const src = getScriptSrc(props);\n  if (document.head.querySelector(`script[src*=\"${src}\"]`)) return;\n  const script = document.createElement(\"script\");\n  script.src = src;\n  script.defer = true;\n  script.dataset.sdkn = name + (props.framework ? `/${props.framework}` : \"\");\n  script.dataset.sdkv = version;\n  if (props.disableAutoTrack) {\n    script.dataset.disableAutoTrack = \"1\";\n  }\n  if (props.endpoint) {\n    script.dataset.endpoint = props.endpoint;\n  } else if (props.basePath) {\n    script.dataset.endpoint = `${props.basePath}/insights`;\n  }\n  if (props.dsn) {\n    script.dataset.dsn = props.dsn;\n  }\n  script.onerror = () => {\n    const errorMessage = isDevelopment() ? \"Please check if any ad blockers are enabled and try again.\" : \"Be sure to enable Web Analytics for your project and deploy again. See https://vercel.com/docs/analytics/quickstart for more information.\";\n    console.log(\n      `[Vercel Web Analytics] Failed to load script from ${src}. ${errorMessage}`\n    );\n  };\n  if (isDevelopment() && props.debug === false) {\n    script.dataset.debug = \"false\";\n  }\n  document.head.appendChild(script);\n}\nfunction track(name2, properties, options) {\n  var _a, _b;\n  if (!isBrowser()) {\n    const msg = \"[Vercel Web Analytics] Please import `track` from `@vercel/analytics/server` when using this function in a server environment\";\n    if (isProduction()) {\n      console.warn(msg);\n    } else {\n      throw new Error(msg);\n    }\n    return;\n  }\n  if (!properties) {\n    (_a = window.va) == null ? void 0 : _a.call(window, \"event\", { name: name2, options });\n    return;\n  }\n  try {\n    const props = parseProperties(properties, {\n      strip: isProduction()\n    });\n    (_b = window.va) == null ? void 0 : _b.call(window, \"event\", {\n      name: name2,\n      data: props,\n      options\n    });\n  } catch (err) {\n    if (err instanceof Error && isDevelopment()) {\n      console.error(err);\n    }\n  }\n}\nfunction pageview({\n  route,\n  path\n}) {\n  var _a;\n  (_a = window.va) == null ? void 0 : _a.call(window, \"pageview\", { route, path });\n}\n\n// src/react/utils.ts\nfunction getBasePath() {\n  if (typeof process === \"undefined\" || typeof process.env === \"undefined\") {\n    return void 0;\n  }\n  return process.env.REACT_APP_VERCEL_OBSERVABILITY_BASEPATH;\n}\n\n// src/react/index.tsx\nfunction Analytics(props) {\n  useEffect(() => {\n    var _a;\n    if (props.beforeSend) {\n      (_a = window.va) == null ? void 0 : _a.call(window, \"beforeSend\", props.beforeSend);\n    }\n  }, [props.beforeSend]);\n  useEffect(() => {\n    inject({\n      framework: props.framework || \"react\",\n      basePath: props.basePath ?? getBasePath(),\n      ...props.route !== void 0 && { disableAutoTrack: true },\n      ...props\n    });\n  }, []);\n  useEffect(() => {\n    if (props.route && props.path) {\n      pageview({ route: props.route, path: props.path });\n    }\n  }, [props.route, props.path]);\n  return null;\n}\nexport {\n  Analytics,\n  track\n};\n//# sourceMappingURL=index.mjs.map","export function isJsonObject(value) {\n    return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\nexport function assertJsonObject(value, message = \"Expected a JSON object\") {\n    if (!isJsonObject(value)) {\n        throw new Error(message);\n    }\n}\n//# sourceMappingURL=assert.js.map","import { isJsonObject } from \"./assert.js\";\nexport async function extractApiErrorMessage(response) {\n    try {\n        const body = await response.json();\n        if (!isJsonObject(body))\n            return response.statusText || \"Unknown error\";\n        const rawDetail = body.detail;\n        const detail = isJsonObject(rawDetail) ? rawDetail.message : rawDetail;\n        if (typeof detail === \"string\") {\n            return detail;\n        }\n    }\n    catch (error) {\n        console.warn(\"Failed to parse API error response as JSON:\", error);\n    }\n    return response.statusText || \"Unknown error\";\n}\nexport class SessionConnectionError extends Error {\n    closeCode;\n    closeReason;\n    constructor(message, options) {\n        super(message);\n        this.name = \"SessionConnectionError\";\n        this.closeCode = options?.closeCode;\n        this.closeReason = options?.closeReason;\n    }\n}\n//# sourceMappingURL=errors.js.map","import { assertJsonObject } from \"./assert.js\";\nimport { extractApiErrorMessage } from \"./errors.js\";\nconst HTTPS_API_ORIGIN = \"https://api.elevenlabs.io\";\nexport async function uploadFile({ conversationId, origin: rawOrigin, file, filename: filenameOverride, }) {\n    const origin = (rawOrigin ?? HTTPS_API_ORIGIN)\n        .replace(/^wss:\\/\\//, \"https://\")\n        .replace(/^ws:\\/\\//, \"http://\");\n    const filename = filenameOverride ??\n        (\"name\" in file && typeof file.name === \"string\"\n            ? file.name\n            : `upload.${(file.type || \"image/png\").split(\"/\").pop()?.split(\"+\")[0]}`);\n    const body = new FormData();\n    body.append(\"file\", file, filename);\n    const response = await fetch(`${origin}/v1/convai/conversations/${conversationId}/files`, { method: \"POST\", body });\n    if (!response.ok) {\n        const message = await extractApiErrorMessage(response);\n        throw new Error(`Upload failed: ${response.status} ${message}`);\n    }\n    const result = await response.json();\n    assertJsonObject(result, \"Upload response is not a JSON object\");\n    const { file_id } = result;\n    if (typeof file_id !== \"string\" || !file_id) {\n        throw new Error(\"Upload response is missing a valid file_id\");\n    }\n    return { fileId: file_id };\n}\n//# sourceMappingURL=uploadFile.js.map","/**\n * Runtime array of all keys in `Callbacks`, kept in sync with the type above.\n * Used by the React SDK to pre-initialize listener maps for callback composition.\n */\nexport const CALLBACK_KEYS = [\n    \"onConnect\",\n    \"onDisconnect\",\n    \"onError\",\n    \"onMessage\",\n    \"onAudio\",\n    \"onModeChange\",\n    \"onStatusChange\",\n    \"onCanSendFeedbackChange\",\n    \"onUnhandledClientToolCall\",\n    \"onVadScore\",\n    \"onMCPToolCall\",\n    \"onMCPConnectionStatus\",\n    \"onAgentToolRequest\",\n    \"onAgentToolResponse\",\n    \"onConversationMetadata\",\n    \"onAsrInitiationMetadata\",\n    \"onInterruption\",\n    \"onAgentResponseCorrection\",\n    \"onAgentChatResponsePart\",\n    \"onAgentReasoningResponsePart\",\n    \"onAudioAlignment\",\n    \"onGuardrailTriggered\",\n    \"onAgentTyping\",\n    \"onExternalAgentConnected\",\n    \"onPing\",\n    \"onDebug\",\n];\n//# sourceMappingURL=types.js.map","import { uploadFile } from \"./utils/uploadFile.js\";\nconst END_CALL_DETAILS = {\n    reason: \"agent\",\n    context: { type: \"end_call\", reason: \"Agent ended the call\" },\n};\nexport { CALLBACK_KEYS } from \"./types.js\";\nexport function isTextOnly(options) {\n    const { textOnly: textOnlyOverride } = options.overrides?.conversation ?? {};\n    const { textOnly } = options;\n    if (typeof textOnly === \"boolean\") {\n        if (typeof textOnlyOverride === \"boolean\" &&\n            textOnly !== textOnlyOverride) {\n            console.warn(`Conflicting textOnly options provided: ${textOnly} via options.textOnly (will be used) and ${textOnlyOverride} via options.overrides.conversation.textOnly (will be ignored)`);\n        }\n        return textOnly;\n    }\n    else if (typeof textOnlyOverride === \"boolean\") {\n        return textOnlyOverride;\n    }\n    else {\n        return undefined;\n    }\n}\nexport class BaseConversation {\n    options;\n    connection;\n    lastInterruptTimestamp = 0;\n    mode = \"listening\";\n    status = \"connecting\";\n    volume = 1;\n    currentEventId = 1;\n    canSendFeedback = false;\n    static getFullOptions(partialOptions) {\n        const textOnly = isTextOnly(partialOptions);\n        return {\n            clientTools: {},\n            onConnect: () => { },\n            onDebug: () => { },\n            onDisconnect: () => { },\n            onError: () => { },\n            onMessage: () => { },\n            onAudio: () => { },\n            onModeChange: () => { },\n            onStatusChange: () => { },\n            onCanSendFeedbackChange: () => { },\n            onInterruption: () => { },\n            onAgentResponseCorrection: () => { },\n            onAgentTyping: () => { },\n            onExternalAgentConnected: () => { },\n            onPing: () => { },\n            ...partialOptions,\n            textOnly,\n            overrides: {\n                ...partialOptions.overrides,\n                conversation: {\n                    ...partialOptions.overrides?.conversation,\n                    textOnly,\n                },\n            },\n        };\n    }\n    constructor(options, connection) {\n        this.options = options;\n        this.connection = connection;\n        this.connection.onMessage(this.onMessage);\n        this.connection.onDisconnect(this.endSessionWithDetails);\n        this.connection.onModeChange(mode => this.updateMode(mode));\n    }\n    markConnected() {\n        this.updateStatus(\"connected\");\n    }\n    endSession() {\n        return this.endSessionWithDetails({ reason: \"user\" });\n    }\n    endSessionWithDetails = async (details) => {\n        if (this.status !== \"connected\" && this.status !== \"connecting\")\n            return;\n        this.updateStatus(\"disconnecting\");\n        await this.handleEndSession();\n        this.updateStatus(\"disconnected\");\n        if (this.options.onDisconnect) {\n            this.options.onDisconnect(details);\n        }\n    };\n    async handleEndSession() {\n        this.connection.close();\n    }\n    updateMode(mode) {\n        if (mode !== this.mode) {\n            this.mode = mode;\n            if (this.options.onModeChange) {\n                this.options.onModeChange({ mode });\n            }\n        }\n    }\n    updateStatus(status) {\n        if (status !== this.status) {\n            this.status = status;\n            if (this.options.onStatusChange) {\n                this.options.onStatusChange({ status });\n            }\n            this.updateCanSendFeedback();\n        }\n    }\n    updateCanSendFeedback() {\n        const canSendFeedback = this.status === \"connected\";\n        if (this.canSendFeedback !== canSendFeedback) {\n            this.canSendFeedback = canSendFeedback;\n            if (this.options.onCanSendFeedbackChange) {\n                this.options.onCanSendFeedbackChange({ canSendFeedback });\n            }\n        }\n    }\n    handleInterruption(event) {\n        if (event.interruption_event) {\n            this.lastInterruptTimestamp = event.interruption_event.event_id;\n            if (this.options.onInterruption) {\n                this.options.onInterruption({\n                    event_id: event.interruption_event.event_id,\n                });\n            }\n        }\n    }\n    handleAgentResponse(event) {\n        this.currentEventId = event.agent_response_event.event_id;\n        if (this.options.onMessage) {\n            this.options.onMessage({\n                source: \"ai\",\n                role: \"agent\",\n                message: event.agent_response_event.agent_response,\n                event_id: event.agent_response_event.event_id,\n            });\n        }\n    }\n    handleAgentResponseCorrection(event) {\n        if (this.options.onAgentResponseCorrection) {\n            this.options.onAgentResponseCorrection(event.agent_response_correction_event);\n        }\n    }\n    handleUserTranscript(event) {\n        if (this.options.onMessage) {\n            this.options.onMessage({\n                source: \"user\",\n                role: \"user\",\n                message: event.user_transcription_event.user_transcript,\n                event_id: event.user_transcription_event.event_id,\n            });\n        }\n    }\n    handleTentativeAgentResponse(event) {\n        if (this.options.onDebug) {\n            this.options.onDebug({\n                type: \"tentative_agent_response\",\n                response: event.tentative_agent_response_internal_event\n                    .tentative_agent_response,\n            });\n        }\n    }\n    handleVadScore(event) {\n        if (this.options.onVadScore) {\n            this.options.onVadScore({\n                vadScore: event.vad_score_event.vad_score,\n            });\n        }\n    }\n    handlePing(event) {\n        if (this.options.onPing) {\n            this.options.onPing(event.ping_event);\n        }\n    }\n    async handleClientToolCall(event) {\n        if (Object.prototype.hasOwnProperty.call(this.options.clientTools, event.client_tool_call.tool_name)) {\n            try {\n                const result = (await this.options.clientTools[event.client_tool_call.tool_name](event.client_tool_call.parameters)) ?? \"Client tool execution successful.\"; // default client-tool call response\n                // The API expects result to be a string, so we need to convert it if it's not already a string\n                const formattedResult = typeof result === \"object\" ? JSON.stringify(result) : String(result);\n                this.connection.sendMessage({\n                    type: \"client_tool_result\",\n                    tool_call_id: event.client_tool_call.tool_call_id,\n                    result: formattedResult,\n                    is_error: false,\n                });\n            }\n            catch (e) {\n                this.onError(`Client tool execution failed with following error: ${e?.message}`, {\n                    clientToolName: event.client_tool_call.tool_name,\n                });\n                this.connection.sendMessage({\n                    type: \"client_tool_result\",\n                    tool_call_id: event.client_tool_call.tool_call_id,\n                    result: `Client tool execution failed: ${e?.message}`,\n                    is_error: true,\n                });\n            }\n        }\n        else {\n            if (this.options.onUnhandledClientToolCall) {\n                this.options.onUnhandledClientToolCall(event.client_tool_call);\n                return;\n            }\n            this.onError(`Client tool with name ${event.client_tool_call.tool_name} is not defined on client`, {\n                clientToolName: event.client_tool_call.tool_name,\n            });\n            this.connection.sendMessage({\n                type: \"client_tool_result\",\n                tool_call_id: event.client_tool_call.tool_call_id,\n                result: `Client tool with name ${event.client_tool_call.tool_name} is not defined on client`,\n                is_error: true,\n            });\n        }\n    }\n    handleAudio(event) { }\n    handleMCPToolCall(event) {\n        if (this.options.onMCPToolCall) {\n            this.options.onMCPToolCall(event.mcp_tool_call);\n        }\n    }\n    handleMCPConnectionStatus(event) {\n        if (this.options.onMCPConnectionStatus) {\n            this.options.onMCPConnectionStatus(event.mcp_connection_status);\n        }\n    }\n    handleAgentToolRequest(event) {\n        if (this.options.onAgentToolRequest) {\n            this.options.onAgentToolRequest(event.agent_tool_request);\n        }\n    }\n    handleAgentToolResponse(event) {\n        if (event.agent_tool_response.tool_name === \"end_call\") {\n            void this.endSessionWithDetails(END_CALL_DETAILS).catch(error => {\n                this.onError(\"Failed to end session after agent end_call\", error);\n            });\n        }\n        this.options.onAgentToolResponse?.(event.agent_tool_response);\n    }\n    handleAgentToolResponseFullPayload(event) {\n        if (event.agent_tool_response_full_payload.tool_name === \"end_call\") {\n            void this.endSessionWithDetails(END_CALL_DETAILS).catch(error => {\n                this.onError(\"Failed to end session after agent end_call\", error);\n            });\n        }\n        this.options.onAgentToolResponse?.(event.agent_tool_response_full_payload);\n    }\n    handleConversationMetadata(event) {\n        if (this.options.onConversationMetadata) {\n            this.options.onConversationMetadata(event.conversation_initiation_metadata_event);\n        }\n    }\n    handleAsrInitiationMetadata(event) {\n        if (this.options.onAsrInitiationMetadata) {\n            this.options.onAsrInitiationMetadata(event.asr_initiation_metadata_event);\n        }\n    }\n    handleAgentChatResponsePart(event) {\n        if (this.options.onAgentChatResponsePart) {\n            this.options.onAgentChatResponsePart(event.text_response_part);\n        }\n    }\n    handleAgentReasoningResponsePart(event) {\n        if (this.options.onAgentReasoningResponsePart) {\n            this.options.onAgentReasoningResponsePart(event.reasoning_response_part);\n        }\n    }\n    handleGuardrailTriggered(_event) {\n        if (this.options.onGuardrailTriggered) {\n            this.options.onGuardrailTriggered();\n        }\n    }\n    handleAgentTyping(event) {\n        if (this.options.onAgentTyping) {\n            this.options.onAgentTyping(event.agent_typing_event);\n        }\n    }\n    handleExternalAgentConnected(_event) {\n        if (this.options.onExternalAgentConnected) {\n            this.options.onExternalAgentConnected();\n        }\n    }\n    handleErrorEvent(event) {\n        const errorEvent = event.error_event;\n        const errorType = errorEvent?.error_type;\n        const message = errorEvent?.message || errorEvent?.reason || \"Unknown error\";\n        if (errorType === \"max_duration_exceeded\") {\n            void this.endSessionWithDetails({\n                reason: \"error\",\n                message: message,\n                context: { type: \"max_duration_exceeded\" },\n            }).catch(error => {\n                this.onError(\"Failed to end session after max_duration_exceeded\", error);\n            });\n            return;\n        }\n        this.onError(`Server error: ${message}`, {\n            errorType,\n            code: errorEvent?.code,\n            debugMessage: errorEvent?.debug_message,\n            details: errorEvent?.details,\n        });\n    }\n    onMessage = async (parsedEvent) => {\n        switch (parsedEvent.type) {\n            case \"interruption\": {\n                this.handleInterruption(parsedEvent);\n                return;\n            }\n            case \"agent_response\": {\n                this.handleAgentResponse(parsedEvent);\n                return;\n            }\n            case \"agent_response_correction\": {\n                this.handleAgentResponseCorrection(parsedEvent);\n                return;\n            }\n            case \"user_transcript\": {\n                this.handleUserTranscript(parsedEvent);\n                return;\n            }\n            case \"internal_tentative_agent_response\": {\n                this.handleTentativeAgentResponse(parsedEvent);\n                return;\n            }\n            case \"client_tool_call\": {\n                try {\n                    await this.handleClientToolCall(parsedEvent);\n                }\n                catch (error) {\n                    this.onError(`Unexpected error in client tool call handling: ${error instanceof Error ? error.message : String(error)}`, {\n                        clientToolName: parsedEvent.client_tool_call.tool_name,\n                        toolCallId: parsedEvent.client_tool_call.tool_call_id,\n                    });\n                }\n                return;\n            }\n            case \"audio\": {\n                this.handleAudio(parsedEvent);\n                return;\n            }\n            case \"vad_score\": {\n                this.handleVadScore(parsedEvent);\n                return;\n            }\n            case \"ping\": {\n                this.connection.sendMessage({\n                    type: \"pong\",\n                    event_id: parsedEvent.ping_event.event_id,\n                });\n                // Surface the ping event (including the estimated `ping_ms`) so\n                // consumers can, for example, warn when latency is high enough to\n                // degrade the experience.\n                this.handlePing(parsedEvent);\n                return;\n            }\n            case \"mcp_tool_call\": {\n                this.handleMCPToolCall(parsedEvent);\n                return;\n            }\n            case \"mcp_connection_status\": {\n                this.handleMCPConnectionStatus(parsedEvent);\n                return;\n            }\n            case \"agent_tool_request\": {\n                this.handleAgentToolRequest(parsedEvent);\n                return;\n            }\n            case \"agent_tool_response\": {\n                this.handleAgentToolResponse(parsedEvent);\n                return;\n            }\n            case \"agent_tool_response_full_payload\": {\n                this.handleAgentToolResponseFullPayload(parsedEvent);\n                return;\n            }\n            case \"conversation_initiation_metadata\": {\n                this.handleConversationMetadata(parsedEvent);\n                return;\n            }\n            case \"asr_initiation_metadata\": {\n                this.handleAsrInitiationMetadata(parsedEvent);\n                return;\n            }\n            case \"agent_chat_response_part\": {\n                this.handleAgentChatResponsePart(parsedEvent);\n                return;\n            }\n            case \"agent_reasoning_response_part\": {\n                this.handleAgentReasoningResponsePart(parsedEvent);\n                return;\n            }\n            case \"guardrail_triggered\": {\n                this.handleGuardrailTriggered(parsedEvent);\n                return;\n            }\n            case \"error\": {\n                this.handleErrorEvent(parsedEvent);\n                return;\n            }\n            case \"agent_typing\": {\n                this.handleAgentTyping(parsedEvent);\n                return;\n            }\n            case \"external_agent_connected\": {\n                this.handleExternalAgentConnected(parsedEvent);\n                return;\n            }\n            default: {\n                if (this.options.onDebug) {\n                    this.options.onDebug(parsedEvent);\n                }\n                return;\n            }\n        }\n    };\n    onError(message, context) {\n        console.error(message, context);\n        if (this.options.onError) {\n            this.options.onError(message, context);\n        }\n    }\n    getId() {\n        return this.connection.conversationId;\n    }\n    isOpen() {\n        return this.status === \"connected\";\n    }\n    sendFeedback(like, eventId) {\n        if (!this.canSendFeedback) {\n            console.warn(\"Cannot send feedback: the conversation is not connected.\");\n            return;\n        }\n        this.connection.sendMessage({\n            type: \"feedback\",\n            score: like !== null ? (like ? \"like\" : \"dislike\") : null,\n            event_id: eventId ?? this.currentEventId,\n        });\n    }\n    sendContextualUpdate(text, options) {\n        this.connection.sendMessage({\n            type: \"contextual_update\",\n            text,\n            ...(options?.contextId ? { context_id: options.contextId } : {}),\n        });\n    }\n    sendUserMessage(text) {\n        this.connection.sendMessage({\n            type: \"user_message\",\n            text,\n        });\n    }\n    sendUserActivity() {\n        this.connection.sendMessage({\n            type: \"user_activity\",\n        });\n    }\n    sendMCPToolApprovalResult(toolCallId, isApproved) {\n        this.connection.sendMessage({\n            type: \"mcp_tool_approval_result\",\n            tool_call_id: toolCallId,\n            is_approved: isApproved,\n        });\n    }\n    sendMultimodalMessage(options) {\n        this.connection.sendMessage({\n            type: \"multimodal_message\",\n            text: options.text\n                ? { type: \"user_message\", text: options.text }\n                : undefined,\n            file: options.fileId\n                ? { type: \"file_input\", file_id: options.fileId }\n                : undefined,\n        });\n    }\n    async uploadFile(file) {\n        return uploadFile({\n            conversationId: this.connection.conversationId,\n            origin: this.options.origin,\n            file,\n        });\n    }\n}\n//# sourceMappingURL=BaseConversation.js.map","import { isJsonObject as isPlainObject } from \"./assert.js\";\nfunction deepMerge(...objects) {\n    return objects.reduce((acc, obj) => {\n        const result = { ...acc };\n        for (const key of Object.keys(obj)) {\n            const accVal = result[key];\n            const objVal = obj[key];\n            if (isPlainObject(accVal) && isPlainObject(objVal)) {\n                result[key] = deepMerge(accVal, objVal);\n            }\n            else if (typeof accVal === \"function\" && typeof objVal === \"function\") {\n                result[key] = ((...args) => {\n                    accVal(...args);\n                    objVal(...args);\n                });\n            }\n            else if (objVal !== undefined) {\n                result[key] = objVal;\n            }\n        }\n        return result;\n    }, {});\n}\n/**\n * Merges multiple partial option objects into one.\n *\n * - Plain objects are deep-merged so that later configs can override\n *   individual nested fields without wiping unrelated ones.\n * - Functions sharing the same key are composed: all are called in\n *   order (earliest config first) with the same arguments.\n * - All other values are shallow-merged (last value wins).\n */\nexport function mergeOptions(...configs) {\n    return deepMerge(...configs);\n}\n//# sourceMappingURL=mergeOptions.js.map","export function parseLocation(location = \"us\") {\n    switch (location) {\n        case \"eu-residency\":\n        case \"in-residency\":\n        case \"us\":\n        case \"global\":\n            return location;\n        default:\n            console.warn(`[ElevenAgents] Invalid server-location: ${location}. Defaulting to \"us\"`);\n            return \"us\";\n    }\n}\nexport function getOriginForLocation(location) {\n    const originMap = {\n        us: \"wss://api.elevenlabs.io\",\n        \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n        \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n        global: \"wss://api.elevenlabs.io\",\n    };\n    return originMap[location];\n}\nexport function getLivekitUrlForLocation(location) {\n    const livekitUrlMap = {\n        us: \"wss://livekit.rtc.elevenlabs.io\",\n        \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n        \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n        global: \"wss://livekit.rtc.elevenlabs.io\",\n    };\n    return livekitUrlMap[location];\n}\n//# sourceMappingURL=location.js.map","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"1.17.0\";\n//# sourceMappingURL=version.js.map","import { PACKAGE_VERSION } from \"./version.js\";\nexport let sourceInfo = Object.freeze({\n    name: \"js_sdk\",\n    version: PACKAGE_VERSION,\n});\nexport function setSourceInfo(value) {\n    sourceInfo = Object.freeze(value);\n}\n//# sourceMappingURL=sourceInfo.js.map","export class BaseConnection {\n    queue = [];\n    disconnectionDetails = null;\n    onDisconnectCallback = null;\n    onMessageCallback = null;\n    onModeChangeCallback = null;\n    onDebug;\n    constructor(config = {}) {\n        this.onDebug = config.onDebug;\n    }\n    debug(info) {\n        if (this.onDebug)\n            this.onDebug(info);\n    }\n    onMessage(callback) {\n        this.onMessageCallback = callback;\n        const queue = this.queue;\n        this.queue = [];\n        if (queue.length > 0) {\n            // Make sure the queue is flushed after the constructors finishes and\n            // classes are initialized.\n            queueMicrotask(() => {\n                queue.forEach(callback);\n            });\n        }\n    }\n    onDisconnect(callback) {\n        this.onDisconnectCallback = callback;\n        const details = this.disconnectionDetails;\n        if (details) {\n            // Make sure the event is triggered after the constructors finishes and\n            // classes are initialized.\n            queueMicrotask(() => {\n                callback(details);\n            });\n        }\n    }\n    onModeChange(callback) {\n        this.onModeChangeCallback = callback;\n    }\n    updateMode(mode) {\n        this.onModeChangeCallback?.(mode);\n    }\n    disconnect(details) {\n        if (!this.disconnectionDetails) {\n            this.disconnectionDetails = details;\n            this.onDisconnectCallback?.(details);\n        }\n    }\n    handleMessage(parsedEvent) {\n        if (this.onMessageCallback) {\n            this.onMessageCallback(parsedEvent);\n        }\n        else {\n            this.queue.push(parsedEvent);\n        }\n    }\n}\nexport function parseFormat(format) {\n    const [formatPart, sampleRatePart] = format.split(\"_\");\n    if (![\"pcm\", \"ulaw\"].includes(formatPart)) {\n        throw new Error(`Invalid format: ${format}`);\n    }\n    const sampleRate = Number.parseInt(sampleRatePart);\n    if (Number.isNaN(sampleRate)) {\n        throw new Error(`Invalid sample rate: ${sampleRatePart}`);\n    }\n    return {\n        format: formatPart,\n        sampleRate,\n    };\n}\n//# sourceMappingURL=BaseConnection.js.map","export function isValidSocketEvent(event) {\n    return !!event.type;\n}\n//# sourceMappingURL=events.js.map","function _mergeNamespaces(n, m){m.forEach(function(e){e&&typeof e!=='string'&&!Array.isArray(e)&&Object.keys(e).forEach(function(k){if(k!=='default'&&!(k in n)){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}});}})});return Object.freeze(n);}var e = Object.defineProperty;\nvar h = (i, s, t) => s in i ? e(i, s, {\n  enumerable: true,\n  configurable: true,\n  writable: true,\n  value: t\n}) : i[s] = t;\nvar o = (i, s, t) => h(i, typeof s != \"symbol\" ? s + \"\" : s, t);\nclass _ {\n  constructor() {\n    o(this, \"_locking\");\n    o(this, \"_locks\");\n    this._locking = Promise.resolve(), this._locks = 0;\n  }\n  isLocked() {\n    return this._locks > 0;\n  }\n  lock() {\n    this._locks += 1;\n    let s;\n    const t = new Promise(l => s = () => {\n        this._locks -= 1, l();\n      }),\n      c = this._locking.then(() => s);\n    return this._locking = this._locking.then(() => t), c;\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Assert that condition is truthy or throw error (with message)\n */\nfunction assert(condition, msg) {\n  // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions -- we want the implicit conversion to boolean\n  if (!condition) {\n    throw new Error(msg);\n  }\n}\nconst FLOAT32_MAX = 3.4028234663852886e38,\n  FLOAT32_MIN = -34028234663852886e22,\n  UINT32_MAX = 0xffffffff,\n  INT32_MAX = 0x7fffffff,\n  INT32_MIN = -2147483648;\n/**\n * Assert a valid signed protobuf 32-bit integer.\n */\nfunction assertInt32(arg) {\n  if (typeof arg !== \"number\") throw new Error(\"invalid int 32: \" + typeof arg);\n  if (!Number.isInteger(arg) || arg > INT32_MAX || arg < INT32_MIN) throw new Error(\"invalid int 32: \" + arg); // eslint-disable-line @typescript-eslint/restrict-plus-operands -- we want the implicit conversion to string\n}\n/**\n * Assert a valid unsigned protobuf 32-bit integer.\n */\nfunction assertUInt32(arg) {\n  if (typeof arg !== \"number\") throw new Error(\"invalid uint 32: \" + typeof arg);\n  if (!Number.isInteger(arg) || arg > UINT32_MAX || arg < 0) throw new Error(\"invalid uint 32: \" + arg); // eslint-disable-line @typescript-eslint/restrict-plus-operands -- we want the implicit conversion to string\n}\n/**\n * Assert a valid protobuf float value.\n */\nfunction assertFloat32(arg) {\n  if (typeof arg !== \"number\") throw new Error(\"invalid float 32: \" + typeof arg);\n  if (!Number.isFinite(arg)) return;\n  if (arg > FLOAT32_MAX || arg < FLOAT32_MIN) throw new Error(\"invalid float 32: \" + arg); // eslint-disable-line @typescript-eslint/restrict-plus-operands -- we want the implicit conversion to string\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nconst enumTypeSymbol = Symbol(\"@bufbuild/protobuf/enum-type\");\n/**\n * Get reflection information from a generated enum.\n * If this function is called on something other than a generated\n * enum, it raises an error.\n */\nfunction getEnumType(enumObject) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-explicit-any\n  const t = enumObject[enumTypeSymbol];\n  assert(t, \"missing enum type on enum object\");\n  return t; // eslint-disable-line @typescript-eslint/no-unsafe-return\n}\n/**\n * Sets reflection information on a generated enum.\n */\nfunction setEnumType(enumObject, typeName, values, opt) {\n  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any\n  enumObject[enumTypeSymbol] = makeEnumType(typeName, values.map(v => ({\n    no: v.no,\n    name: v.name,\n    localName: enumObject[v.no]\n  })));\n}\n/**\n * Create a new EnumType with the given values.\n */\nfunction makeEnumType(typeName, values,\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\n_opt) {\n  const names = Object.create(null);\n  const numbers = Object.create(null);\n  const normalValues = [];\n  for (const value of values) {\n    // We do not surface options at this time\n    // const value: EnumValueInfo = {...v, options: v.options ?? emptyReadonlyObject};\n    const n = normalizeEnumValue(value);\n    normalValues.push(n);\n    names[value.name] = n;\n    numbers[value.no] = n;\n  }\n  return {\n    typeName,\n    values: normalValues,\n    // We do not surface options at this time\n    // options: opt?.options ?? Object.create(null),\n    findName(name) {\n      return names[name];\n    },\n    findNumber(no) {\n      return numbers[no];\n    }\n  };\n}\n/**\n * Create a new enum object with the given values.\n * Sets reflection information.\n */\nfunction makeEnum(typeName, values, opt) {\n  const enumObject = {};\n  for (const value of values) {\n    const n = normalizeEnumValue(value);\n    enumObject[n.localName] = n.no;\n    enumObject[n.no] = n.localName;\n  }\n  setEnumType(enumObject, typeName, values);\n  return enumObject;\n}\nfunction normalizeEnumValue(value) {\n  if (\"localName\" in value) {\n    return value;\n  }\n  return Object.assign(Object.assign({}, value), {\n    localName: value.name\n  });\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Message is the base class of every message, generated, or created at\n * runtime.\n *\n * It is _not_ safe to extend this class. If you want to create a message at\n * run time, use proto3.makeMessageType().\n */\nclass Message {\n  /**\n   * Compare with a message of the same type.\n   * Note that this function disregards extensions and unknown fields.\n   */\n  equals(other) {\n    return this.getType().runtime.util.equals(this.getType(), this, other);\n  }\n  /**\n   * Create a deep copy.\n   */\n  clone() {\n    return this.getType().runtime.util.clone(this);\n  }\n  /**\n   * Parse from binary data, merging fields.\n   *\n   * Repeated fields are appended. Map entries are added, overwriting\n   * existing keys.\n   *\n   * If a message field is already present, it will be merged with the\n   * new data.\n   */\n  fromBinary(bytes, options) {\n    const type = this.getType(),\n      format = type.runtime.bin,\n      opt = format.makeReadOptions(options);\n    format.readMessage(this, opt.readerFactory(bytes), bytes.byteLength, opt);\n    return this;\n  }\n  /**\n   * Parse a message from a JSON value.\n   */\n  fromJson(jsonValue, options) {\n    const type = this.getType(),\n      format = type.runtime.json,\n      opt = format.makeReadOptions(options);\n    format.readMessage(type, jsonValue, opt, this);\n    return this;\n  }\n  /**\n   * Parse a message from a JSON string.\n   */\n  fromJsonString(jsonString, options) {\n    let json;\n    try {\n      json = JSON.parse(jsonString);\n    } catch (e) {\n      throw new Error(\"cannot decode \".concat(this.getType().typeName, \" from JSON: \").concat(e instanceof Error ? e.message : String(e)));\n    }\n    return this.fromJson(json, options);\n  }\n  /**\n   * Serialize the message to binary data.\n   */\n  toBinary(options) {\n    const type = this.getType(),\n      bin = type.runtime.bin,\n      opt = bin.makeWriteOptions(options),\n      writer = opt.writerFactory();\n    bin.writeMessage(this, writer, opt);\n    return writer.finish();\n  }\n  /**\n   * Serialize the message to a JSON value, a JavaScript value that can be\n   * passed to JSON.stringify().\n   */\n  toJson(options) {\n    const type = this.getType(),\n      json = type.runtime.json,\n      opt = json.makeWriteOptions(options);\n    return json.writeMessage(this, opt);\n  }\n  /**\n   * Serialize the message to a JSON string.\n   */\n  toJsonString(options) {\n    var _a;\n    const value = this.toJson(options);\n    return JSON.stringify(value, null, (_a = options === null || options === void 0 ? void 0 : options.prettySpaces) !== null && _a !== void 0 ? _a : 0);\n  }\n  /**\n   * Override for serialization behavior. This will be invoked when calling\n   * JSON.stringify on this message (i.e. JSON.stringify(msg)).\n   *\n   * Note that this will not serialize google.protobuf.Any with a packed\n   * message because the protobuf JSON format specifies that it needs to be\n   * unpacked, and this is only possible with a type registry to look up the\n   * message type.  As a result, attempting to serialize a message with this\n   * type will throw an Error.\n   *\n   * This method is protected because you should not need to invoke it\n   * directly -- instead use JSON.stringify or toJsonString for\n   * stringified JSON.  Alternatively, if actual JSON is desired, you should\n   * use toJson.\n   */\n  toJSON() {\n    return this.toJson({\n      emitDefaultValues: true\n    });\n  }\n  /**\n   * Retrieve the MessageType of this message - a singleton that represents\n   * the protobuf message declaration and provides metadata for reflection-\n   * based operations.\n   */\n  getType() {\n    // Any class that extends Message _must_ provide a complete static\n    // implementation of MessageType.\n    // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return\n    return Object.getPrototypeOf(this).constructor;\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Create a new message type using the given runtime.\n */\nfunction makeMessageType(runtime, typeName, fields, opt) {\n  var _a;\n  const localName = (_a = opt === null || opt === void 0 ? void 0 : opt.localName) !== null && _a !== void 0 ? _a : typeName.substring(typeName.lastIndexOf(\".\") + 1);\n  const type = {\n    [localName]: function (data) {\n      runtime.util.initFields(this);\n      runtime.util.initPartial(data, this);\n    }\n  }[localName];\n  Object.setPrototypeOf(type.prototype, new Message());\n  Object.assign(type, {\n    runtime,\n    typeName,\n    fields: runtime.util.newFieldList(fields),\n    fromBinary(bytes, options) {\n      return new type().fromBinary(bytes, options);\n    },\n    fromJson(jsonValue, options) {\n      return new type().fromJson(jsonValue, options);\n    },\n    fromJsonString(jsonString, options) {\n      return new type().fromJsonString(jsonString, options);\n    },\n    equals(a, b) {\n      return runtime.util.equals(type, a, b);\n    }\n  });\n  return type;\n}// Copyright 2008 Google Inc.  All rights reserved.\n//\n// Redistribution and use in source and binary forms, with or without\n// modification, are permitted provided that the following conditions are\n// met:\n//\n// * Redistributions of source code must retain the above copyright\n// notice, this list of conditions and the following disclaimer.\n// * Redistributions in binary form must reproduce the above\n// copyright notice, this list of conditions and the following disclaimer\n// in the documentation and/or other materials provided with the\n// distribution.\n// * Neither the name of Google Inc. nor the names of its\n// contributors may be used to endorse or promote products derived from\n// this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n// \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n//\n// Code generated by the Protocol Buffer compiler is owned by the owner\n// of the input file used when generating it.  This code is not\n// standalone and requires a support library to be linked with it.  This\n// support library is itself covered by the above license.\n/* eslint-disable prefer-const,@typescript-eslint/restrict-plus-operands */\n/**\n * Read a 64 bit varint as two JS numbers.\n *\n * Returns tuple:\n * [0]: low bits\n * [1]: high bits\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L175\n */\nfunction varint64read() {\n  let lowBits = 0;\n  let highBits = 0;\n  for (let shift = 0; shift < 28; shift += 7) {\n    let b = this.buf[this.pos++];\n    lowBits |= (b & 0x7f) << shift;\n    if ((b & 0x80) == 0) {\n      this.assertBounds();\n      return [lowBits, highBits];\n    }\n  }\n  let middleByte = this.buf[this.pos++];\n  // last four bits of the first 32 bit number\n  lowBits |= (middleByte & 0x0f) << 28;\n  // 3 upper bits are part of the next 32 bit number\n  highBits = (middleByte & 0x70) >> 4;\n  if ((middleByte & 0x80) == 0) {\n    this.assertBounds();\n    return [lowBits, highBits];\n  }\n  for (let shift = 3; shift <= 31; shift += 7) {\n    let b = this.buf[this.pos++];\n    highBits |= (b & 0x7f) << shift;\n    if ((b & 0x80) == 0) {\n      this.assertBounds();\n      return [lowBits, highBits];\n    }\n  }\n  throw new Error(\"invalid varint\");\n}\n/**\n * Write a 64 bit varint, given as two JS numbers, to the given bytes array.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/writer.js#L344\n */\nfunction varint64write(lo, hi, bytes) {\n  for (let i = 0; i < 28; i = i + 7) {\n    const shift = lo >>> i;\n    const hasNext = !(shift >>> 7 == 0 && hi == 0);\n    const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n    bytes.push(byte);\n    if (!hasNext) {\n      return;\n    }\n  }\n  const splitBits = lo >>> 28 & 0x0f | (hi & 0x07) << 4;\n  const hasMoreBits = !(hi >> 3 == 0);\n  bytes.push((hasMoreBits ? splitBits | 0x80 : splitBits) & 0xff);\n  if (!hasMoreBits) {\n    return;\n  }\n  for (let i = 3; i < 31; i = i + 7) {\n    const shift = hi >>> i;\n    const hasNext = !(shift >>> 7 == 0);\n    const byte = (hasNext ? shift | 0x80 : shift) & 0xff;\n    bytes.push(byte);\n    if (!hasNext) {\n      return;\n    }\n  }\n  bytes.push(hi >>> 31 & 0x01);\n}\n// constants for binary math\nconst TWO_PWR_32_DBL = 0x100000000;\n/**\n * Parse decimal string of 64 bit integer value as two JS numbers.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nfunction int64FromString(dec) {\n  // Check for minus sign.\n  const minus = dec[0] === \"-\";\n  if (minus) {\n    dec = dec.slice(1);\n  }\n  // Work 6 decimal digits at a time, acting like we're converting base 1e6\n  // digits to binary. This is safe to do with floating point math because\n  // Number.isSafeInteger(ALL_32_BITS * 1e6) == true.\n  const base = 1e6;\n  let lowBits = 0;\n  let highBits = 0;\n  function add1e6digit(begin, end) {\n    // Note: Number('') is 0.\n    const digit1e6 = Number(dec.slice(begin, end));\n    highBits *= base;\n    lowBits = lowBits * base + digit1e6;\n    // Carry bits from lowBits to\n    if (lowBits >= TWO_PWR_32_DBL) {\n      highBits = highBits + (lowBits / TWO_PWR_32_DBL | 0);\n      lowBits = lowBits % TWO_PWR_32_DBL;\n    }\n  }\n  add1e6digit(-24, -18);\n  add1e6digit(-18, -12);\n  add1e6digit(-12, -6);\n  add1e6digit(-6);\n  return minus ? negate(lowBits, highBits) : newBits(lowBits, highBits);\n}\n/**\n * Losslessly converts a 64-bit signed integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nfunction int64ToString(lo, hi) {\n  let bits = newBits(lo, hi);\n  // If we're treating the input as a signed value and the high bit is set, do\n  // a manual two's complement conversion before the decimal conversion.\n  const negative = bits.hi & 0x80000000;\n  if (negative) {\n    bits = negate(bits.lo, bits.hi);\n  }\n  const result = uInt64ToString(bits.lo, bits.hi);\n  return negative ? \"-\" + result : result;\n}\n/**\n * Losslessly converts a 64-bit unsigned integer in 32:32 split representation\n * into a decimal string.\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf-javascript/blob/a428c58273abad07c66071d9753bc4d1289de426/experimental/runtime/int64.js#L10\n */\nfunction uInt64ToString(lo, hi) {\n  ({\n    lo,\n    hi\n  } = toUnsigned(lo, hi));\n  // Skip the expensive conversion if the number is small enough to use the\n  // built-in conversions.\n  // Number.MAX_SAFE_INTEGER = 0x001FFFFF FFFFFFFF, thus any number with\n  // highBits <= 0x1FFFFF can be safely expressed with a double and retain\n  // integer precision.\n  // Proven by: Number.isSafeInteger(0x1FFFFF * 2**32 + 0xFFFFFFFF) == true.\n  if (hi <= 0x1FFFFF) {\n    return String(TWO_PWR_32_DBL * hi + lo);\n  }\n  // What this code is doing is essentially converting the input number from\n  // base-2 to base-1e7, which allows us to represent the 64-bit range with\n  // only 3 (very large) digits. Those digits are then trivial to convert to\n  // a base-10 string.\n  // The magic numbers used here are -\n  // 2^24 = 16777216 = (1,6777216) in base-1e7.\n  // 2^48 = 281474976710656 = (2,8147497,6710656) in base-1e7.\n  // Split 32:32 representation into 16:24:24 representation so our\n  // intermediate digits don't overflow.\n  const low = lo & 0xFFFFFF;\n  const mid = (lo >>> 24 | hi << 8) & 0xFFFFFF;\n  const high = hi >> 16 & 0xFFFF;\n  // Assemble our three base-1e7 digits, ignoring carries. The maximum\n  // value in a digit at this step is representable as a 48-bit integer, which\n  // can be stored in a 64-bit floating point number.\n  let digitA = low + mid * 6777216 + high * 6710656;\n  let digitB = mid + high * 8147497;\n  let digitC = high * 2;\n  // Apply carries from A to B and from B to C.\n  const base = 10000000;\n  if (digitA >= base) {\n    digitB += Math.floor(digitA / base);\n    digitA %= base;\n  }\n  if (digitB >= base) {\n    digitC += Math.floor(digitB / base);\n    digitB %= base;\n  }\n  // If digitC is 0, then we should have returned in the trivial code path\n  // at the top for non-safe integers. Given this, we can assume both digitB\n  // and digitA need leading zeros.\n  return digitC.toString() + decimalFrom1e7WithLeadingZeros(digitB) + decimalFrom1e7WithLeadingZeros(digitA);\n}\nfunction toUnsigned(lo, hi) {\n  return {\n    lo: lo >>> 0,\n    hi: hi >>> 0\n  };\n}\nfunction newBits(lo, hi) {\n  return {\n    lo: lo | 0,\n    hi: hi | 0\n  };\n}\n/**\n * Returns two's compliment negation of input.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators#Signed_32-bit_integers\n */\nfunction negate(lowBits, highBits) {\n  highBits = ~highBits;\n  if (lowBits) {\n    lowBits = ~lowBits + 1;\n  } else {\n    // If lowBits is 0, then bitwise-not is 0xFFFFFFFF,\n    // adding 1 to that, results in 0x100000000, which leaves\n    // the low bits 0x0 and simply adds one to the high bits.\n    highBits += 1;\n  }\n  return newBits(lowBits, highBits);\n}\n/**\n * Returns decimal representation of digit1e7 with leading zeros.\n */\nconst decimalFrom1e7WithLeadingZeros = digit1e7 => {\n  const partial = String(digit1e7);\n  return \"0000000\".slice(partial.length) + partial;\n};\n/**\n * Write a 32 bit varint, signed or unsigned. Same as `varint64write(0, value, bytes)`\n *\n * Copyright 2008 Google Inc.  All rights reserved.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/1b18833f4f2a2f681f4e4a25cdf3b0a43115ec26/js/binary/encoder.js#L144\n */\nfunction varint32write(value, bytes) {\n  if (value >= 0) {\n    // write value as varint 32\n    while (value > 0x7f) {\n      bytes.push(value & 0x7f | 0x80);\n      value = value >>> 7;\n    }\n    bytes.push(value);\n  } else {\n    for (let i = 0; i < 9; i++) {\n      bytes.push(value & 127 | 128);\n      value = value >> 7;\n    }\n    bytes.push(1);\n  }\n}\n/**\n * Read an unsigned 32 bit varint.\n *\n * See https://github.com/protocolbuffers/protobuf/blob/8a71927d74a4ce34efe2d8769fda198f52d20d12/js/experimental/runtime/kernel/buffer_decoder.js#L220\n */\nfunction varint32read() {\n  let b = this.buf[this.pos++];\n  let result = b & 0x7f;\n  if ((b & 0x80) == 0) {\n    this.assertBounds();\n    return result;\n  }\n  b = this.buf[this.pos++];\n  result |= (b & 0x7f) << 7;\n  if ((b & 0x80) == 0) {\n    this.assertBounds();\n    return result;\n  }\n  b = this.buf[this.pos++];\n  result |= (b & 0x7f) << 14;\n  if ((b & 0x80) == 0) {\n    this.assertBounds();\n    return result;\n  }\n  b = this.buf[this.pos++];\n  result |= (b & 0x7f) << 21;\n  if ((b & 0x80) == 0) {\n    this.assertBounds();\n    return result;\n  }\n  // Extract only last 4 bits\n  b = this.buf[this.pos++];\n  result |= (b & 0x0f) << 28;\n  for (let readBytes = 5; (b & 0x80) !== 0 && readBytes < 10; readBytes++) b = this.buf[this.pos++];\n  if ((b & 0x80) != 0) throw new Error(\"invalid varint\");\n  this.assertBounds();\n  // Result can have 32 bits, convert it to unsigned\n  return result >>> 0;\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nfunction makeInt64Support() {\n  const dv = new DataView(new ArrayBuffer(8));\n  // note that Safari 14 implements BigInt, but not the DataView methods\n  const ok = typeof BigInt === \"function\" && typeof dv.getBigInt64 === \"function\" && typeof dv.getBigUint64 === \"function\" && typeof dv.setBigInt64 === \"function\" && typeof dv.setBigUint64 === \"function\" && (typeof process != \"object\" || typeof process.env != \"object\" || process.env.BUF_BIGINT_DISABLE !== \"1\");\n  if (ok) {\n    const MIN = BigInt(\"-9223372036854775808\"),\n      MAX = BigInt(\"9223372036854775807\"),\n      UMIN = BigInt(\"0\"),\n      UMAX = BigInt(\"18446744073709551615\");\n    return {\n      zero: BigInt(0),\n      supported: true,\n      parse(value) {\n        const bi = typeof value == \"bigint\" ? value : BigInt(value);\n        if (bi > MAX || bi < MIN) {\n          throw new Error(\"int64 invalid: \".concat(value));\n        }\n        return bi;\n      },\n      uParse(value) {\n        const bi = typeof value == \"bigint\" ? value : BigInt(value);\n        if (bi > UMAX || bi < UMIN) {\n          throw new Error(\"uint64 invalid: \".concat(value));\n        }\n        return bi;\n      },\n      enc(value) {\n        dv.setBigInt64(0, this.parse(value), true);\n        return {\n          lo: dv.getInt32(0, true),\n          hi: dv.getInt32(4, true)\n        };\n      },\n      uEnc(value) {\n        dv.setBigInt64(0, this.uParse(value), true);\n        return {\n          lo: dv.getInt32(0, true),\n          hi: dv.getInt32(4, true)\n        };\n      },\n      dec(lo, hi) {\n        dv.setInt32(0, lo, true);\n        dv.setInt32(4, hi, true);\n        return dv.getBigInt64(0, true);\n      },\n      uDec(lo, hi) {\n        dv.setInt32(0, lo, true);\n        dv.setInt32(4, hi, true);\n        return dv.getBigUint64(0, true);\n      }\n    };\n  }\n  const assertInt64String = value => assert(/^-?[0-9]+$/.test(value), \"int64 invalid: \".concat(value));\n  const assertUInt64String = value => assert(/^[0-9]+$/.test(value), \"uint64 invalid: \".concat(value));\n  return {\n    zero: \"0\",\n    supported: false,\n    parse(value) {\n      if (typeof value != \"string\") {\n        value = value.toString();\n      }\n      assertInt64String(value);\n      return value;\n    },\n    uParse(value) {\n      if (typeof value != \"string\") {\n        value = value.toString();\n      }\n      assertUInt64String(value);\n      return value;\n    },\n    enc(value) {\n      if (typeof value != \"string\") {\n        value = value.toString();\n      }\n      assertInt64String(value);\n      return int64FromString(value);\n    },\n    uEnc(value) {\n      if (typeof value != \"string\") {\n        value = value.toString();\n      }\n      assertUInt64String(value);\n      return int64FromString(value);\n    },\n    dec(lo, hi) {\n      return int64ToString(lo, hi);\n    },\n    uDec(lo, hi) {\n      return uInt64ToString(lo, hi);\n    }\n  };\n}\nconst protoInt64 = makeInt64Support();// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Scalar value types. This is a subset of field types declared by protobuf\n * enum google.protobuf.FieldDescriptorProto.Type The types GROUP and MESSAGE\n * are omitted, but the numerical values are identical.\n */\nvar ScalarType;\n(function (ScalarType) {\n  // 0 is reserved for errors.\n  // Order is weird for historical reasons.\n  ScalarType[ScalarType[\"DOUBLE\"] = 1] = \"DOUBLE\";\n  ScalarType[ScalarType[\"FLOAT\"] = 2] = \"FLOAT\";\n  // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT64 if\n  // negative values are likely.\n  ScalarType[ScalarType[\"INT64\"] = 3] = \"INT64\";\n  ScalarType[ScalarType[\"UINT64\"] = 4] = \"UINT64\";\n  // Not ZigZag encoded.  Negative numbers take 10 bytes.  Use TYPE_SINT32 if\n  // negative values are likely.\n  ScalarType[ScalarType[\"INT32\"] = 5] = \"INT32\";\n  ScalarType[ScalarType[\"FIXED64\"] = 6] = \"FIXED64\";\n  ScalarType[ScalarType[\"FIXED32\"] = 7] = \"FIXED32\";\n  ScalarType[ScalarType[\"BOOL\"] = 8] = \"BOOL\";\n  ScalarType[ScalarType[\"STRING\"] = 9] = \"STRING\";\n  // Tag-delimited aggregate.\n  // Group type is deprecated and not supported in proto3. However, Proto3\n  // implementations should still be able to parse the group wire format and\n  // treat group fields as unknown fields.\n  // TYPE_GROUP = 10,\n  // TYPE_MESSAGE = 11,  // Length-delimited aggregate.\n  // New in version 2.\n  ScalarType[ScalarType[\"BYTES\"] = 12] = \"BYTES\";\n  ScalarType[ScalarType[\"UINT32\"] = 13] = \"UINT32\";\n  // TYPE_ENUM = 14,\n  ScalarType[ScalarType[\"SFIXED32\"] = 15] = \"SFIXED32\";\n  ScalarType[ScalarType[\"SFIXED64\"] = 16] = \"SFIXED64\";\n  ScalarType[ScalarType[\"SINT32\"] = 17] = \"SINT32\";\n  ScalarType[ScalarType[\"SINT64\"] = 18] = \"SINT64\";\n})(ScalarType || (ScalarType = {}));\n/**\n * JavaScript representation of fields with 64 bit integral types (int64, uint64,\n * sint64, fixed64, sfixed64).\n *\n * This is a subset of google.protobuf.FieldOptions.JSType, which defines JS_NORMAL,\n * JS_STRING, and JS_NUMBER. Protobuf-ES uses BigInt by default, but will use\n * String if `[jstype = JS_STRING]` is specified.\n *\n * ```protobuf\n * uint64 field_a = 1; // BigInt\n * uint64 field_b = 2 [jstype = JS_NORMAL]; // BigInt\n * uint64 field_b = 2 [jstype = JS_NUMBER]; // BigInt\n * uint64 field_b = 2 [jstype = JS_STRING]; // String\n * ```\n */\nvar LongType;\n(function (LongType) {\n  /**\n   * Use JavaScript BigInt.\n   */\n  LongType[LongType[\"BIGINT\"] = 0] = \"BIGINT\";\n  /**\n   * Use JavaScript String.\n   *\n   * Field option `[jstype = JS_STRING]`.\n   */\n  LongType[LongType[\"STRING\"] = 1] = \"STRING\";\n})(LongType || (LongType = {}));// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Returns true if both scalar values are equal.\n */\nfunction scalarEquals(type, a, b) {\n  if (a === b) {\n    // This correctly matches equal values except BYTES and (possibly) 64-bit integers.\n    return true;\n  }\n  // Special case BYTES - we need to compare each byte individually\n  if (type == ScalarType.BYTES) {\n    if (!(a instanceof Uint8Array) || !(b instanceof Uint8Array)) {\n      return false;\n    }\n    if (a.length !== b.length) {\n      return false;\n    }\n    for (let i = 0; i < a.length; i++) {\n      if (a[i] !== b[i]) {\n        return false;\n      }\n    }\n    return true;\n  }\n  // Special case 64-bit integers - we support number, string and bigint representation.\n  // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n  switch (type) {\n    case ScalarType.UINT64:\n    case ScalarType.FIXED64:\n    case ScalarType.INT64:\n    case ScalarType.SFIXED64:\n    case ScalarType.SINT64:\n      // Loose comparison will match between 0n, 0 and \"0\".\n      return a == b;\n  }\n  // Anything that hasn't been caught by strict comparison or special cased\n  // BYTES and 64-bit integers is not equal.\n  return false;\n}\n/**\n * Returns the zero value for the given scalar type.\n */\nfunction scalarZeroValue(type, longType) {\n  switch (type) {\n    case ScalarType.BOOL:\n      return false;\n    case ScalarType.UINT64:\n    case ScalarType.FIXED64:\n    case ScalarType.INT64:\n    case ScalarType.SFIXED64:\n    case ScalarType.SINT64:\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison -- acceptable since it's covered by tests\n      return longType == 0 ? protoInt64.zero : \"0\";\n    case ScalarType.DOUBLE:\n    case ScalarType.FLOAT:\n      return 0.0;\n    case ScalarType.BYTES:\n      return new Uint8Array(0);\n    case ScalarType.STRING:\n      return \"\";\n    default:\n      // Handles INT32, UINT32, SINT32, FIXED32, SFIXED32.\n      // We do not use individual cases to save a few bytes code size.\n      return 0;\n  }\n}\n/**\n * Returns true for a zero-value. For example, an integer has the zero-value `0`,\n * a boolean is `false`, a string is `\"\"`, and bytes is an empty Uint8Array.\n *\n * In proto3, zero-values are not written to the wire, unless the field is\n * optional or repeated.\n */\nfunction isScalarZeroValue(type, value) {\n  switch (type) {\n    case ScalarType.BOOL:\n      return value === false;\n    case ScalarType.STRING:\n      return value === \"\";\n    case ScalarType.BYTES:\n      return value instanceof Uint8Array && !value.byteLength;\n    default:\n      return value == 0;\n    // Loose comparison matches 0n, 0 and \"0\"\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/* eslint-disable prefer-const,no-case-declarations,@typescript-eslint/restrict-plus-operands */\n/**\n * Protobuf binary format wire types.\n *\n * A wire type provides just enough information to find the length of the\n * following value.\n *\n * See https://developers.google.com/protocol-buffers/docs/encoding#structure\n */\nvar WireType;\n(function (WireType) {\n  /**\n   * Used for int32, int64, uint32, uint64, sint32, sint64, bool, enum\n   */\n  WireType[WireType[\"Varint\"] = 0] = \"Varint\";\n  /**\n   * Used for fixed64, sfixed64, double.\n   * Always 8 bytes with little-endian byte order.\n   */\n  WireType[WireType[\"Bit64\"] = 1] = \"Bit64\";\n  /**\n   * Used for string, bytes, embedded messages, packed repeated fields\n   *\n   * Only repeated numeric types (types which use the varint, 32-bit,\n   * or 64-bit wire types) can be packed. In proto3, such fields are\n   * packed by default.\n   */\n  WireType[WireType[\"LengthDelimited\"] = 2] = \"LengthDelimited\";\n  /**\n   * Start of a tag-delimited aggregate, such as a proto2 group, or a message\n   * in editions with message_encoding = DELIMITED.\n   */\n  WireType[WireType[\"StartGroup\"] = 3] = \"StartGroup\";\n  /**\n   * End of a tag-delimited aggregate.\n   */\n  WireType[WireType[\"EndGroup\"] = 4] = \"EndGroup\";\n  /**\n   * Used for fixed32, sfixed32, float.\n   * Always 4 bytes with little-endian byte order.\n   */\n  WireType[WireType[\"Bit32\"] = 5] = \"Bit32\";\n})(WireType || (WireType = {}));\nclass BinaryWriter {\n  constructor(textEncoder) {\n    /**\n     * Previous fork states.\n     */\n    this.stack = [];\n    this.textEncoder = textEncoder !== null && textEncoder !== void 0 ? textEncoder : new TextEncoder();\n    this.chunks = [];\n    this.buf = [];\n  }\n  /**\n   * Return all bytes written and reset this writer.\n   */\n  finish() {\n    this.chunks.push(new Uint8Array(this.buf)); // flush the buffer\n    let len = 0;\n    for (let i = 0; i < this.chunks.length; i++) len += this.chunks[i].length;\n    let bytes = new Uint8Array(len);\n    let offset = 0;\n    for (let i = 0; i < this.chunks.length; i++) {\n      bytes.set(this.chunks[i], offset);\n      offset += this.chunks[i].length;\n    }\n    this.chunks = [];\n    return bytes;\n  }\n  /**\n   * Start a new fork for length-delimited data like a message\n   * or a packed repeated field.\n   *\n   * Must be joined later with `join()`.\n   */\n  fork() {\n    this.stack.push({\n      chunks: this.chunks,\n      buf: this.buf\n    });\n    this.chunks = [];\n    this.buf = [];\n    return this;\n  }\n  /**\n   * Join the last fork. Write its length and bytes, then\n   * return to the previous state.\n   */\n  join() {\n    // get chunk of fork\n    let chunk = this.finish();\n    // restore previous state\n    let prev = this.stack.pop();\n    if (!prev) throw new Error(\"invalid state, fork stack empty\");\n    this.chunks = prev.chunks;\n    this.buf = prev.buf;\n    // write length of chunk as varint\n    this.uint32(chunk.byteLength);\n    return this.raw(chunk);\n  }\n  /**\n   * Writes a tag (field number and wire type).\n   *\n   * Equivalent to `uint32( (fieldNo << 3 | type) >>> 0 )`.\n   *\n   * Generated code should compute the tag ahead of time and call `uint32()`.\n   */\n  tag(fieldNo, type) {\n    return this.uint32((fieldNo << 3 | type) >>> 0);\n  }\n  /**\n   * Write a chunk of raw bytes.\n   */\n  raw(chunk) {\n    if (this.buf.length) {\n      this.chunks.push(new Uint8Array(this.buf));\n      this.buf = [];\n    }\n    this.chunks.push(chunk);\n    return this;\n  }\n  /**\n   * Write a `uint32` value, an unsigned 32 bit varint.\n   */\n  uint32(value) {\n    assertUInt32(value);\n    // write value as varint 32, inlined for speed\n    while (value > 0x7f) {\n      this.buf.push(value & 0x7f | 0x80);\n      value = value >>> 7;\n    }\n    this.buf.push(value);\n    return this;\n  }\n  /**\n   * Write a `int32` value, a signed 32 bit varint.\n   */\n  int32(value) {\n    assertInt32(value);\n    varint32write(value, this.buf);\n    return this;\n  }\n  /**\n   * Write a `bool` value, a variant.\n   */\n  bool(value) {\n    this.buf.push(value ? 1 : 0);\n    return this;\n  }\n  /**\n   * Write a `bytes` value, length-delimited arbitrary data.\n   */\n  bytes(value) {\n    this.uint32(value.byteLength); // write length of chunk as varint\n    return this.raw(value);\n  }\n  /**\n   * Write a `string` value, length-delimited data converted to UTF-8 text.\n   */\n  string(value) {\n    let chunk = this.textEncoder.encode(value);\n    this.uint32(chunk.byteLength); // write length of chunk as varint\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `float` value, 32-bit floating point number.\n   */\n  float(value) {\n    assertFloat32(value);\n    let chunk = new Uint8Array(4);\n    new DataView(chunk.buffer).setFloat32(0, value, true);\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `double` value, a 64-bit floating point number.\n   */\n  double(value) {\n    let chunk = new Uint8Array(8);\n    new DataView(chunk.buffer).setFloat64(0, value, true);\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `fixed32` value, an unsigned, fixed-length 32-bit integer.\n   */\n  fixed32(value) {\n    assertUInt32(value);\n    let chunk = new Uint8Array(4);\n    new DataView(chunk.buffer).setUint32(0, value, true);\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `sfixed32` value, a signed, fixed-length 32-bit integer.\n   */\n  sfixed32(value) {\n    assertInt32(value);\n    let chunk = new Uint8Array(4);\n    new DataView(chunk.buffer).setInt32(0, value, true);\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `sint32` value, a signed, zigzag-encoded 32-bit varint.\n   */\n  sint32(value) {\n    assertInt32(value);\n    // zigzag encode\n    value = (value << 1 ^ value >> 31) >>> 0;\n    varint32write(value, this.buf);\n    return this;\n  }\n  /**\n   * Write a `fixed64` value, a signed, fixed-length 64-bit integer.\n   */\n  sfixed64(value) {\n    let chunk = new Uint8Array(8),\n      view = new DataView(chunk.buffer),\n      tc = protoInt64.enc(value);\n    view.setInt32(0, tc.lo, true);\n    view.setInt32(4, tc.hi, true);\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `fixed64` value, an unsigned, fixed-length 64 bit integer.\n   */\n  fixed64(value) {\n    let chunk = new Uint8Array(8),\n      view = new DataView(chunk.buffer),\n      tc = protoInt64.uEnc(value);\n    view.setInt32(0, tc.lo, true);\n    view.setInt32(4, tc.hi, true);\n    return this.raw(chunk);\n  }\n  /**\n   * Write a `int64` value, a signed 64-bit varint.\n   */\n  int64(value) {\n    let tc = protoInt64.enc(value);\n    varint64write(tc.lo, tc.hi, this.buf);\n    return this;\n  }\n  /**\n   * Write a `sint64` value, a signed, zig-zag-encoded 64-bit varint.\n   */\n  sint64(value) {\n    let tc = protoInt64.enc(value),\n      // zigzag encode\n      sign = tc.hi >> 31,\n      lo = tc.lo << 1 ^ sign,\n      hi = (tc.hi << 1 | tc.lo >>> 31) ^ sign;\n    varint64write(lo, hi, this.buf);\n    return this;\n  }\n  /**\n   * Write a `uint64` value, an unsigned 64-bit varint.\n   */\n  uint64(value) {\n    let tc = protoInt64.uEnc(value);\n    varint64write(tc.lo, tc.hi, this.buf);\n    return this;\n  }\n}\nclass BinaryReader {\n  constructor(buf, textDecoder) {\n    this.varint64 = varint64read; // dirty cast for `this`\n    /**\n     * Read a `uint32` field, an unsigned 32 bit varint.\n     */\n    this.uint32 = varint32read; // dirty cast for `this` and access to protected `buf`\n    this.buf = buf;\n    this.len = buf.length;\n    this.pos = 0;\n    this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n    this.textDecoder = textDecoder !== null && textDecoder !== void 0 ? textDecoder : new TextDecoder();\n  }\n  /**\n   * Reads a tag - field number and wire type.\n   */\n  tag() {\n    let tag = this.uint32(),\n      fieldNo = tag >>> 3,\n      wireType = tag & 7;\n    if (fieldNo <= 0 || wireType < 0 || wireType > 5) throw new Error(\"illegal tag: field no \" + fieldNo + \" wire type \" + wireType);\n    return [fieldNo, wireType];\n  }\n  /**\n   * Skip one element and return the skipped data.\n   *\n   * When skipping StartGroup, provide the tags field number to check for\n   * matching field number in the EndGroup tag.\n   */\n  skip(wireType, fieldNo) {\n    let start = this.pos;\n    switch (wireType) {\n      case WireType.Varint:\n        while (this.buf[this.pos++] & 0x80) {\n          // ignore\n        }\n        break;\n      // eslint-disable-next-line\n      // @ts-ignore TS7029: Fallthrough case in switch\n      case WireType.Bit64:\n        this.pos += 4;\n      // eslint-disable-next-line\n      // @ts-ignore TS7029: Fallthrough case in switch\n      case WireType.Bit32:\n        this.pos += 4;\n        break;\n      case WireType.LengthDelimited:\n        let len = this.uint32();\n        this.pos += len;\n        break;\n      case WireType.StartGroup:\n        for (;;) {\n          const [fn, wt] = this.tag();\n          if (wt === WireType.EndGroup) {\n            if (fieldNo !== undefined && fn !== fieldNo) {\n              throw new Error(\"invalid end group tag\");\n            }\n            break;\n          }\n          this.skip(wt, fn);\n        }\n        break;\n      default:\n        throw new Error(\"cant skip wire type \" + wireType);\n    }\n    this.assertBounds();\n    return this.buf.subarray(start, this.pos);\n  }\n  /**\n   * Throws error if position in byte array is out of range.\n   */\n  assertBounds() {\n    if (this.pos > this.len) throw new RangeError(\"premature EOF\");\n  }\n  /**\n   * Read a `int32` field, a signed 32 bit varint.\n   */\n  int32() {\n    return this.uint32() | 0;\n  }\n  /**\n   * Read a `sint32` field, a signed, zigzag-encoded 32-bit varint.\n   */\n  sint32() {\n    let zze = this.uint32();\n    // decode zigzag\n    return zze >>> 1 ^ -(zze & 1);\n  }\n  /**\n   * Read a `int64` field, a signed 64-bit varint.\n   */\n  int64() {\n    return protoInt64.dec(...this.varint64());\n  }\n  /**\n   * Read a `uint64` field, an unsigned 64-bit varint.\n   */\n  uint64() {\n    return protoInt64.uDec(...this.varint64());\n  }\n  /**\n   * Read a `sint64` field, a signed, zig-zag-encoded 64-bit varint.\n   */\n  sint64() {\n    let [lo, hi] = this.varint64();\n    // decode zig zag\n    let s = -(lo & 1);\n    lo = (lo >>> 1 | (hi & 1) << 31) ^ s;\n    hi = hi >>> 1 ^ s;\n    return protoInt64.dec(lo, hi);\n  }\n  /**\n   * Read a `bool` field, a variant.\n   */\n  bool() {\n    let [lo, hi] = this.varint64();\n    return lo !== 0 || hi !== 0;\n  }\n  /**\n   * Read a `fixed32` field, an unsigned, fixed-length 32-bit integer.\n   */\n  fixed32() {\n    return this.view.getUint32((this.pos += 4) - 4, true);\n  }\n  /**\n   * Read a `sfixed32` field, a signed, fixed-length 32-bit integer.\n   */\n  sfixed32() {\n    return this.view.getInt32((this.pos += 4) - 4, true);\n  }\n  /**\n   * Read a `fixed64` field, an unsigned, fixed-length 64 bit integer.\n   */\n  fixed64() {\n    return protoInt64.uDec(this.sfixed32(), this.sfixed32());\n  }\n  /**\n   * Read a `fixed64` field, a signed, fixed-length 64-bit integer.\n   */\n  sfixed64() {\n    return protoInt64.dec(this.sfixed32(), this.sfixed32());\n  }\n  /**\n   * Read a `float` field, 32-bit floating point number.\n   */\n  float() {\n    return this.view.getFloat32((this.pos += 4) - 4, true);\n  }\n  /**\n   * Read a `double` field, a 64-bit floating point number.\n   */\n  double() {\n    return this.view.getFloat64((this.pos += 8) - 8, true);\n  }\n  /**\n   * Read a `bytes` field, length-delimited arbitrary data.\n   */\n  bytes() {\n    let len = this.uint32(),\n      start = this.pos;\n    this.pos += len;\n    this.assertBounds();\n    return this.buf.subarray(start, start + len);\n  }\n  /**\n   * Read a `string` field, length-delimited data converted to UTF-8 text.\n   */\n  string() {\n    return this.textDecoder.decode(this.bytes());\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Create a new extension using the given runtime.\n */\nfunction makeExtension(runtime, typeName, extendee, field) {\n  let fi;\n  return {\n    typeName,\n    extendee,\n    get field() {\n      if (!fi) {\n        const i = typeof field == \"function\" ? field() : field;\n        i.name = typeName.split(\".\").pop();\n        i.jsonName = \"[\".concat(typeName, \"]\");\n        fi = runtime.util.newFieldList([i]).list()[0];\n      }\n      return fi;\n    },\n    runtime\n  };\n}\n/**\n * Create a container that allows us to read extension fields into it with the\n * same logic as regular fields.\n */\nfunction createExtensionContainer(extension) {\n  const localName = extension.field.localName;\n  const container = Object.create(null);\n  container[localName] = initExtensionField(extension);\n  return [container, () => container[localName]];\n}\nfunction initExtensionField(ext) {\n  const field = ext.field;\n  if (field.repeated) {\n    return [];\n  }\n  if (field.default !== undefined) {\n    return field.default;\n  }\n  switch (field.kind) {\n    case \"enum\":\n      return field.T.values[0].no;\n    case \"scalar\":\n      return scalarZeroValue(field.T, field.L);\n    case \"message\":\n      // eslint-disable-next-line no-case-declarations\n      const T = field.T,\n        value = new T();\n      return T.fieldWrapper ? T.fieldWrapper.unwrapField(value) : value;\n    case \"map\":\n      throw \"map fields are not allowed to be extensions\";\n  }\n}\n/**\n * Helper to filter unknown fields, optimized based on field type.\n */\nfunction filterUnknownFields(unknownFields, field) {\n  if (!field.repeated && (field.kind == \"enum\" || field.kind == \"scalar\")) {\n    // singular scalar fields do not merge, we pick the last\n    for (let i = unknownFields.length - 1; i >= 0; --i) {\n      if (unknownFields[i].no == field.no) {\n        return [unknownFields[i]];\n      }\n    }\n    return [];\n  }\n  return unknownFields.filter(uf => uf.no === field.no);\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/* eslint-disable @typescript-eslint/ban-ts-comment, @typescript-eslint/no-unnecessary-condition, prefer-const */\n// lookup table from base64 character to byte\nlet encTable = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\".split(\"\");\n// lookup table from base64 character *code* to byte because lookup by number is fast\nlet decTable = [];\nfor (let i = 0; i < encTable.length; i++) decTable[encTable[i].charCodeAt(0)] = i;\n// support base64url variants\ndecTable[\"-\".charCodeAt(0)] = encTable.indexOf(\"+\");\ndecTable[\"_\".charCodeAt(0)] = encTable.indexOf(\"/\");\nconst protoBase64 = {\n  /**\n   * Decodes a base64 string to a byte array.\n   *\n   * - ignores white-space, including line breaks and tabs\n   * - allows inner padding (can decode concatenated base64 strings)\n   * - does not require padding\n   * - understands base64url encoding:\n   *   \"-\" instead of \"+\",\n   *   \"_\" instead of \"/\",\n   *   no padding\n   */\n  dec(base64Str) {\n    // estimate byte size, not accounting for inner padding and whitespace\n    let es = base64Str.length * 3 / 4;\n    if (base64Str[base64Str.length - 2] == \"=\") es -= 2;else if (base64Str[base64Str.length - 1] == \"=\") es -= 1;\n    let bytes = new Uint8Array(es),\n      bytePos = 0,\n      // position in byte array\n      groupPos = 0,\n      // position in base64 group\n      b,\n      // current byte\n      p = 0; // previous byte\n    for (let i = 0; i < base64Str.length; i++) {\n      b = decTable[base64Str.charCodeAt(i)];\n      if (b === undefined) {\n        switch (base64Str[i]) {\n          // @ts-ignore TS7029: Fallthrough case in switch\n          case \"=\":\n            groupPos = 0;\n          // reset state when padding found\n          // @ts-ignore TS7029: Fallthrough case in switch\n          case \"\\n\":\n          case \"\\r\":\n          case \"\\t\":\n          case \" \":\n            continue;\n          // skip white-space, and padding\n          default:\n            throw Error(\"invalid base64 string.\");\n        }\n      }\n      switch (groupPos) {\n        case 0:\n          p = b;\n          groupPos = 1;\n          break;\n        case 1:\n          bytes[bytePos++] = p << 2 | (b & 48) >> 4;\n          p = b;\n          groupPos = 2;\n          break;\n        case 2:\n          bytes[bytePos++] = (p & 15) << 4 | (b & 60) >> 2;\n          p = b;\n          groupPos = 3;\n          break;\n        case 3:\n          bytes[bytePos++] = (p & 3) << 6 | b;\n          groupPos = 0;\n          break;\n      }\n    }\n    if (groupPos == 1) throw Error(\"invalid base64 string.\");\n    return bytes.subarray(0, bytePos);\n  },\n  /**\n   * Encode a byte array to a base64 string.\n   */\n  enc(bytes) {\n    let base64 = \"\",\n      groupPos = 0,\n      // position in base64 group\n      b,\n      // current byte\n      p = 0; // carry over from previous byte\n    for (let i = 0; i < bytes.length; i++) {\n      b = bytes[i];\n      switch (groupPos) {\n        case 0:\n          base64 += encTable[b >> 2];\n          p = (b & 3) << 4;\n          groupPos = 1;\n          break;\n        case 1:\n          base64 += encTable[p | b >> 4];\n          p = (b & 15) << 2;\n          groupPos = 2;\n          break;\n        case 2:\n          base64 += encTable[p | b >> 6];\n          base64 += encTable[b & 63];\n          groupPos = 0;\n          break;\n      }\n    }\n    // add output padding\n    if (groupPos) {\n      base64 += encTable[p];\n      base64 += \"=\";\n      if (groupPos == 1) base64 += \"=\";\n    }\n    return base64;\n  }\n};// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Retrieve an extension value from a message.\n *\n * The function never returns undefined. Use hasExtension() to check whether an\n * extension is set. If the extension is not set, this function returns the\n * default value (if one was specified in the protobuf source), or the zero value\n * (for example `0` for numeric types, `[]` for repeated extension fields, and\n * an empty message instance for message fields).\n *\n * Extensions are stored as unknown fields on a message. To mutate an extension\n * value, make sure to store the new value with setExtension() after mutating.\n *\n * If the extension does not extend the given message, an error is raised.\n */\nfunction getExtension(message, extension, options) {\n  assertExtendee(extension, message);\n  const opt = extension.runtime.bin.makeReadOptions(options);\n  const ufs = filterUnknownFields(message.getType().runtime.bin.listUnknownFields(message), extension.field);\n  const [container, get] = createExtensionContainer(extension);\n  for (const uf of ufs) {\n    extension.runtime.bin.readField(container, opt.readerFactory(uf.data), extension.field, uf.wireType, opt);\n  }\n  return get();\n}\n/**\n * Set an extension value on a message. If the message already has a value for\n * this extension, the value is replaced.\n *\n * If the extension does not extend the given message, an error is raised.\n */\nfunction setExtension(message, extension, value, options) {\n  assertExtendee(extension, message);\n  const readOpt = extension.runtime.bin.makeReadOptions(options);\n  const writeOpt = extension.runtime.bin.makeWriteOptions(options);\n  if (hasExtension(message, extension)) {\n    const ufs = message.getType().runtime.bin.listUnknownFields(message).filter(uf => uf.no != extension.field.no);\n    message.getType().runtime.bin.discardUnknownFields(message);\n    for (const uf of ufs) {\n      message.getType().runtime.bin.onUnknownField(message, uf.no, uf.wireType, uf.data);\n    }\n  }\n  const writer = writeOpt.writerFactory();\n  let f = extension.field;\n  // Implicit presence does not apply to extensions, see https://github.com/protocolbuffers/protobuf/issues/8234\n  // We patch the field info to use explicit presence:\n  if (!f.opt && !f.repeated && (f.kind == \"enum\" || f.kind == \"scalar\")) {\n    f = Object.assign(Object.assign({}, extension.field), {\n      opt: true\n    });\n  }\n  extension.runtime.bin.writeField(f, value, writer, writeOpt);\n  const reader = readOpt.readerFactory(writer.finish());\n  while (reader.pos < reader.len) {\n    const [no, wireType] = reader.tag();\n    const data = reader.skip(wireType, no);\n    message.getType().runtime.bin.onUnknownField(message, no, wireType, data);\n  }\n}\n/**\n * Check whether an extension is set on a message.\n */\nfunction hasExtension(message, extension) {\n  const messageType = message.getType();\n  return extension.extendee.typeName === messageType.typeName && !!messageType.runtime.bin.listUnknownFields(message).find(uf => uf.no == extension.field.no);\n}\nfunction assertExtendee(extension, message) {\n  assert(extension.extendee.typeName == message.getType().typeName, \"extension \".concat(extension.typeName, \" can only be applied to message \").concat(extension.extendee.typeName));\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Returns true if the field is set.\n */\nfunction isFieldSet(field, target) {\n  const localName = field.localName;\n  if (field.repeated) {\n    return target[localName].length > 0;\n  }\n  if (field.oneof) {\n    return target[field.oneof.localName].case === localName; // eslint-disable-line @typescript-eslint/no-unsafe-member-access\n  }\n  switch (field.kind) {\n    case \"enum\":\n    case \"scalar\":\n      if (field.opt || field.req) {\n        // explicit presence\n        return target[localName] !== undefined;\n      }\n      // implicit presence\n      if (field.kind == \"enum\") {\n        return target[localName] !== field.T.values[0].no;\n      }\n      return !isScalarZeroValue(field.T, target[localName]);\n    case \"message\":\n      return target[localName] !== undefined;\n    case \"map\":\n      return Object.keys(target[localName]).length > 0;\n    // eslint-disable-line @typescript-eslint/no-unsafe-argument\n  }\n}\n/**\n * Resets the field, so that isFieldSet() will return false.\n */\nfunction clearField(field, target) {\n  const localName = field.localName;\n  const implicitPresence = !field.opt && !field.req;\n  if (field.repeated) {\n    target[localName] = [];\n  } else if (field.oneof) {\n    target[field.oneof.localName] = {\n      case: undefined\n    };\n  } else {\n    switch (field.kind) {\n      case \"map\":\n        target[localName] = {};\n        break;\n      case \"enum\":\n        target[localName] = implicitPresence ? field.T.values[0].no : undefined;\n        break;\n      case \"scalar\":\n        target[localName] = implicitPresence ? scalarZeroValue(field.T, field.L) : undefined;\n        break;\n      case \"message\":\n        target[localName] = undefined;\n        break;\n    }\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Check whether the given object is any subtype of Message or is a specific\n * Message by passing the type.\n *\n * Just like `instanceof`, `isMessage` narrows the type. The advantage of\n * `isMessage` is that it compares identity by the message type name, not by\n * class identity. This makes it robust against the dual package hazard and\n * similar situations, where the same message is duplicated.\n *\n * This function is _mostly_ equivalent to the `instanceof` operator. For\n * example, `isMessage(foo, MyMessage)` is the same as `foo instanceof MyMessage`,\n * and `isMessage(foo)` is the same as `foo instanceof Message`. In most cases,\n * `isMessage` should be preferred over `instanceof`.\n *\n * However, due to the fact that `isMessage` does not use class identity, there\n * are subtle differences between this function and `instanceof`. Notably,\n * calling `isMessage` on an explicit type of Message will return false.\n */\nfunction isMessage(arg, type) {\n  if (arg === null || typeof arg != \"object\") {\n    return false;\n  }\n  if (!Object.getOwnPropertyNames(Message.prototype).every(m => m in arg && typeof arg[m] == \"function\")) {\n    return false;\n  }\n  const actualType = arg.getType();\n  if (actualType === null || typeof actualType != \"function\" || !(\"typeName\" in actualType) || typeof actualType.typeName != \"string\") {\n    return false;\n  }\n  return type === undefined ? true : actualType.typeName == type.typeName;\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Wrap a primitive message field value in its corresponding wrapper\n * message. This function is idempotent.\n */\nfunction wrapField(type, value) {\n  if (isMessage(value) || !type.fieldWrapper) {\n    return value;\n  }\n  return type.fieldWrapper.wrapField(value);\n}\n({\n  \"google.protobuf.DoubleValue\": ScalarType.DOUBLE,\n  \"google.protobuf.FloatValue\": ScalarType.FLOAT,\n  \"google.protobuf.Int64Value\": ScalarType.INT64,\n  \"google.protobuf.UInt64Value\": ScalarType.UINT64,\n  \"google.protobuf.Int32Value\": ScalarType.INT32,\n  \"google.protobuf.UInt32Value\": ScalarType.UINT32,\n  \"google.protobuf.BoolValue\": ScalarType.BOOL,\n  \"google.protobuf.StringValue\": ScalarType.STRING,\n  \"google.protobuf.BytesValue\": ScalarType.BYTES\n});// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/* eslint-disable no-case-declarations,@typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call */\n// Default options for parsing JSON.\nconst jsonReadDefaults = {\n  ignoreUnknownFields: false\n};\n// Default options for serializing to JSON.\nconst jsonWriteDefaults = {\n  emitDefaultValues: false,\n  enumAsInteger: false,\n  useProtoFieldName: false,\n  prettySpaces: 0\n};\nfunction makeReadOptions$1(options) {\n  return options ? Object.assign(Object.assign({}, jsonReadDefaults), options) : jsonReadDefaults;\n}\nfunction makeWriteOptions$1(options) {\n  return options ? Object.assign(Object.assign({}, jsonWriteDefaults), options) : jsonWriteDefaults;\n}\nconst tokenNull = Symbol();\nconst tokenIgnoredUnknownEnum = Symbol();\nfunction makeJsonFormat() {\n  return {\n    makeReadOptions: makeReadOptions$1,\n    makeWriteOptions: makeWriteOptions$1,\n    readMessage(type, json, options, message) {\n      if (json == null || Array.isArray(json) || typeof json != \"object\") {\n        throw new Error(\"cannot decode message \".concat(type.typeName, \" from JSON: \").concat(debugJsonValue(json)));\n      }\n      message = message !== null && message !== void 0 ? message : new type();\n      const oneofSeen = new Map();\n      const registry = options.typeRegistry;\n      for (const [jsonKey, jsonValue] of Object.entries(json)) {\n        const field = type.fields.findJsonName(jsonKey);\n        if (field) {\n          if (field.oneof) {\n            if (jsonValue === null && field.kind == \"scalar\") {\n              // see conformance test Required.Proto3.JsonInput.OneofFieldNull{First,Second}\n              continue;\n            }\n            const seen = oneofSeen.get(field.oneof);\n            if (seen !== undefined) {\n              throw new Error(\"cannot decode message \".concat(type.typeName, \" from JSON: multiple keys for oneof \\\"\").concat(field.oneof.name, \"\\\" present: \\\"\").concat(seen, \"\\\", \\\"\").concat(jsonKey, \"\\\"\"));\n            }\n            oneofSeen.set(field.oneof, jsonKey);\n          }\n          readField$1(message, jsonValue, field, options, type);\n        } else {\n          let found = false;\n          if ((registry === null || registry === void 0 ? void 0 : registry.findExtension) && jsonKey.startsWith(\"[\") && jsonKey.endsWith(\"]\")) {\n            const ext = registry.findExtension(jsonKey.substring(1, jsonKey.length - 1));\n            if (ext && ext.extendee.typeName == type.typeName) {\n              found = true;\n              const [container, get] = createExtensionContainer(ext);\n              readField$1(container, jsonValue, ext.field, options, ext);\n              // We pass on the options as BinaryReadOptions/BinaryWriteOptions,\n              // so that users can bring their own binary reader and writer factories\n              // if necessary.\n              setExtension(message, ext, get(), options);\n            }\n          }\n          if (!found && !options.ignoreUnknownFields) {\n            throw new Error(\"cannot decode message \".concat(type.typeName, \" from JSON: key \\\"\").concat(jsonKey, \"\\\" is unknown\"));\n          }\n        }\n      }\n      return message;\n    },\n    writeMessage(message, options) {\n      const type = message.getType();\n      const json = {};\n      let field;\n      try {\n        for (field of type.fields.byNumber()) {\n          if (!isFieldSet(field, message)) {\n            // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n            if (field.req) {\n              throw \"required field not set\";\n            }\n            if (!options.emitDefaultValues) {\n              continue;\n            }\n            if (!canEmitFieldDefaultValue(field)) {\n              continue;\n            }\n          }\n          const value = field.oneof ? message[field.oneof.localName].value : message[field.localName];\n          const jsonValue = writeField$1(field, value, options);\n          if (jsonValue !== undefined) {\n            json[options.useProtoFieldName ? field.name : field.jsonName] = jsonValue;\n          }\n        }\n        const registry = options.typeRegistry;\n        if (registry === null || registry === void 0 ? void 0 : registry.findExtensionFor) {\n          for (const uf of type.runtime.bin.listUnknownFields(message)) {\n            const ext = registry.findExtensionFor(type.typeName, uf.no);\n            if (ext && hasExtension(message, ext)) {\n              // We pass on the options as BinaryReadOptions, so that users can bring their own\n              // binary reader factory if necessary.\n              const value = getExtension(message, ext, options);\n              const jsonValue = writeField$1(ext.field, value, options);\n              if (jsonValue !== undefined) {\n                json[ext.field.jsonName] = jsonValue;\n              }\n            }\n          }\n        }\n      } catch (e) {\n        const m = field ? \"cannot encode field \".concat(type.typeName, \".\").concat(field.name, \" to JSON\") : \"cannot encode message \".concat(type.typeName, \" to JSON\");\n        const r = e instanceof Error ? e.message : String(e);\n        throw new Error(m + (r.length > 0 ? \": \".concat(r) : \"\"));\n      }\n      return json;\n    },\n    readScalar(type, json, longType) {\n      // The signature of our internal function has changed. For backwards-\n      // compatibility, we support the old form that is part of the public API\n      // through the interface JsonFormat.\n      return readScalar$1(type, json, longType !== null && longType !== void 0 ? longType : LongType.BIGINT, true);\n    },\n    writeScalar(type, value, emitDefaultValues) {\n      // The signature of our internal function has changed. For backwards-\n      // compatibility, we support the old form that is part of the public API\n      // through the interface JsonFormat.\n      if (value === undefined) {\n        return undefined;\n      }\n      if (emitDefaultValues || isScalarZeroValue(type, value)) {\n        return writeScalar$1(type, value);\n      }\n      return undefined;\n    },\n    debug: debugJsonValue\n  };\n}\nfunction debugJsonValue(json) {\n  if (json === null) {\n    return \"null\";\n  }\n  switch (typeof json) {\n    case \"object\":\n      return Array.isArray(json) ? \"array\" : \"object\";\n    case \"string\":\n      return json.length > 100 ? \"string\" : \"\\\"\".concat(json.split('\"').join('\\\\\"'), \"\\\"\");\n    default:\n      return String(json);\n  }\n}\n// Read a JSON value for a field.\n// The \"parentType\" argument is only used to provide context in errors.\nfunction readField$1(target, jsonValue, field, options, parentType) {\n  let localName = field.localName;\n  if (field.repeated) {\n    assert(field.kind != \"map\");\n    if (jsonValue === null) {\n      return;\n    }\n    if (!Array.isArray(jsonValue)) {\n      throw new Error(\"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue)));\n    }\n    const targetArray = target[localName];\n    for (const jsonItem of jsonValue) {\n      if (jsonItem === null) {\n        throw new Error(\"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonItem)));\n      }\n      switch (field.kind) {\n        case \"message\":\n          targetArray.push(field.T.fromJson(jsonItem, options));\n          break;\n        case \"enum\":\n          const enumValue = readEnum(field.T, jsonItem, options.ignoreUnknownFields, true);\n          if (enumValue !== tokenIgnoredUnknownEnum) {\n            targetArray.push(enumValue);\n          }\n          break;\n        case \"scalar\":\n          try {\n            targetArray.push(readScalar$1(field.T, jsonItem, field.L, true));\n          } catch (e) {\n            let m = \"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonItem));\n            if (e instanceof Error && e.message.length > 0) {\n              m += \": \".concat(e.message);\n            }\n            throw new Error(m);\n          }\n          break;\n      }\n    }\n  } else if (field.kind == \"map\") {\n    if (jsonValue === null) {\n      return;\n    }\n    if (typeof jsonValue != \"object\" || Array.isArray(jsonValue)) {\n      throw new Error(\"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue)));\n    }\n    const targetMap = target[localName];\n    for (const [jsonMapKey, jsonMapValue] of Object.entries(jsonValue)) {\n      if (jsonMapValue === null) {\n        throw new Error(\"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: map value null\"));\n      }\n      let key;\n      try {\n        key = readMapKey(field.K, jsonMapKey);\n      } catch (e) {\n        let m = \"cannot decode map key for field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue));\n        if (e instanceof Error && e.message.length > 0) {\n          m += \": \".concat(e.message);\n        }\n        throw new Error(m);\n      }\n      switch (field.V.kind) {\n        case \"message\":\n          targetMap[key] = field.V.T.fromJson(jsonMapValue, options);\n          break;\n        case \"enum\":\n          const enumValue = readEnum(field.V.T, jsonMapValue, options.ignoreUnknownFields, true);\n          if (enumValue !== tokenIgnoredUnknownEnum) {\n            targetMap[key] = enumValue;\n          }\n          break;\n        case \"scalar\":\n          try {\n            targetMap[key] = readScalar$1(field.V.T, jsonMapValue, LongType.BIGINT, true);\n          } catch (e) {\n            let m = \"cannot decode map value for field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue));\n            if (e instanceof Error && e.message.length > 0) {\n              m += \": \".concat(e.message);\n            }\n            throw new Error(m);\n          }\n          break;\n      }\n    }\n  } else {\n    if (field.oneof) {\n      target = target[field.oneof.localName] = {\n        case: localName\n      };\n      localName = \"value\";\n    }\n    switch (field.kind) {\n      case \"message\":\n        const messageType = field.T;\n        if (jsonValue === null && messageType.typeName != \"google.protobuf.Value\") {\n          return;\n        }\n        let currentValue = target[localName];\n        if (isMessage(currentValue)) {\n          currentValue.fromJson(jsonValue, options);\n        } else {\n          target[localName] = currentValue = messageType.fromJson(jsonValue, options);\n          if (messageType.fieldWrapper && !field.oneof) {\n            target[localName] = messageType.fieldWrapper.unwrapField(currentValue);\n          }\n        }\n        break;\n      case \"enum\":\n        const enumValue = readEnum(field.T, jsonValue, options.ignoreUnknownFields, false);\n        switch (enumValue) {\n          case tokenNull:\n            clearField(field, target);\n            break;\n          case tokenIgnoredUnknownEnum:\n            break;\n          default:\n            target[localName] = enumValue;\n            break;\n        }\n        break;\n      case \"scalar\":\n        try {\n          const scalarValue = readScalar$1(field.T, jsonValue, field.L, false);\n          switch (scalarValue) {\n            case tokenNull:\n              clearField(field, target);\n              break;\n            default:\n              target[localName] = scalarValue;\n              break;\n          }\n        } catch (e) {\n          let m = \"cannot decode field \".concat(parentType.typeName, \".\").concat(field.name, \" from JSON: \").concat(debugJsonValue(jsonValue));\n          if (e instanceof Error && e.message.length > 0) {\n            m += \": \".concat(e.message);\n          }\n          throw new Error(m);\n        }\n        break;\n    }\n  }\n}\nfunction readMapKey(type, json) {\n  if (type === ScalarType.BOOL) {\n    // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n    switch (json) {\n      case \"true\":\n        json = true;\n        break;\n      case \"false\":\n        json = false;\n        break;\n    }\n  }\n  return readScalar$1(type, json, LongType.BIGINT, true).toString();\n}\nfunction readScalar$1(type, json, longType, nullAsZeroValue) {\n  if (json === null) {\n    if (nullAsZeroValue) {\n      return scalarZeroValue(type, longType);\n    }\n    return tokenNull;\n  }\n  // every valid case in the switch below returns, and every fall\n  // through is regarded as a failure.\n  switch (type) {\n    // float, double: JSON value will be a number or one of the special string values \"NaN\", \"Infinity\", and \"-Infinity\".\n    // Either numbers or strings are accepted. Exponent notation is also accepted.\n    case ScalarType.DOUBLE:\n    case ScalarType.FLOAT:\n      if (json === \"NaN\") return Number.NaN;\n      if (json === \"Infinity\") return Number.POSITIVE_INFINITY;\n      if (json === \"-Infinity\") return Number.NEGATIVE_INFINITY;\n      if (json === \"\") {\n        // empty string is not a number\n        break;\n      }\n      if (typeof json == \"string\" && json.trim().length !== json.length) {\n        // extra whitespace\n        break;\n      }\n      if (typeof json != \"string\" && typeof json != \"number\") {\n        break;\n      }\n      const float = Number(json);\n      if (Number.isNaN(float)) {\n        // not a number\n        break;\n      }\n      if (!Number.isFinite(float)) {\n        // infinity and -infinity are handled by string representation above, so this is an error\n        break;\n      }\n      if (type == ScalarType.FLOAT) assertFloat32(float);\n      return float;\n    // int32, fixed32, uint32: JSON value will be a decimal number. Either numbers or strings are accepted.\n    case ScalarType.INT32:\n    case ScalarType.FIXED32:\n    case ScalarType.SFIXED32:\n    case ScalarType.SINT32:\n    case ScalarType.UINT32:\n      let int32;\n      if (typeof json == \"number\") int32 = json;else if (typeof json == \"string\" && json.length > 0) {\n        if (json.trim().length === json.length) int32 = Number(json);\n      }\n      if (int32 === undefined) break;\n      if (type == ScalarType.UINT32 || type == ScalarType.FIXED32) assertUInt32(int32);else assertInt32(int32);\n      return int32;\n    // int64, fixed64, uint64: JSON value will be a decimal string. Either numbers or strings are accepted.\n    case ScalarType.INT64:\n    case ScalarType.SFIXED64:\n    case ScalarType.SINT64:\n      if (typeof json != \"number\" && typeof json != \"string\") break;\n      const long = protoInt64.parse(json);\n      // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n      return longType ? long.toString() : long;\n    case ScalarType.FIXED64:\n    case ScalarType.UINT64:\n      if (typeof json != \"number\" && typeof json != \"string\") break;\n      const uLong = protoInt64.uParse(json);\n      // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n      return longType ? uLong.toString() : uLong;\n    // bool:\n    case ScalarType.BOOL:\n      if (typeof json !== \"boolean\") break;\n      return json;\n    // string:\n    case ScalarType.STRING:\n      if (typeof json !== \"string\") {\n        break;\n      }\n      // A string must always contain UTF-8 encoded or 7-bit ASCII.\n      // We validate with encodeURIComponent, which appears to be the fastest widely available option.\n      try {\n        encodeURIComponent(json);\n      } catch (e) {\n        throw new Error(\"invalid UTF8\");\n      }\n      return json;\n    // bytes: JSON value will be the data encoded as a string using standard base64 encoding with paddings.\n    // Either standard or URL-safe base64 encoding with/without paddings are accepted.\n    case ScalarType.BYTES:\n      if (json === \"\") return new Uint8Array(0);\n      if (typeof json !== \"string\") break;\n      return protoBase64.dec(json);\n  }\n  throw new Error();\n}\nfunction readEnum(type, json, ignoreUnknownFields, nullAsZeroValue) {\n  if (json === null) {\n    if (type.typeName == \"google.protobuf.NullValue\") {\n      return 0; // google.protobuf.NullValue.NULL_VALUE = 0\n    }\n    return nullAsZeroValue ? type.values[0].no : tokenNull;\n  }\n  // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check\n  switch (typeof json) {\n    case \"number\":\n      if (Number.isInteger(json)) {\n        return json;\n      }\n      break;\n    case \"string\":\n      const value = type.findName(json);\n      if (value !== undefined) {\n        return value.no;\n      }\n      if (ignoreUnknownFields) {\n        return tokenIgnoredUnknownEnum;\n      }\n      break;\n  }\n  throw new Error(\"cannot decode enum \".concat(type.typeName, \" from JSON: \").concat(debugJsonValue(json)));\n}\n// Decide whether an unset field should be emitted with JSON write option `emitDefaultValues`\nfunction canEmitFieldDefaultValue(field) {\n  if (field.repeated || field.kind == \"map\") {\n    // maps are {}, repeated fields are []\n    return true;\n  }\n  if (field.oneof) {\n    // oneof fields are never emitted\n    return false;\n  }\n  if (field.kind == \"message\") {\n    // singular message field are allowed to emit JSON null, but we do not\n    return false;\n  }\n  // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n  if (field.opt || field.req) {\n    // the field uses explicit presence, so we cannot emit a zero value\n    return false;\n  }\n  return true;\n}\nfunction writeField$1(field, value, options) {\n  if (field.kind == \"map\") {\n    assert(typeof value == \"object\" && value != null);\n    const jsonObj = {};\n    const entries = Object.entries(value);\n    switch (field.V.kind) {\n      case \"scalar\":\n        for (const [entryKey, entryValue] of entries) {\n          jsonObj[entryKey.toString()] = writeScalar$1(field.V.T, entryValue); // JSON standard allows only (double quoted) string as property key\n        }\n        break;\n      case \"message\":\n        for (const [entryKey, entryValue] of entries) {\n          // JSON standard allows only (double quoted) string as property key\n          jsonObj[entryKey.toString()] = entryValue.toJson(options);\n        }\n        break;\n      case \"enum\":\n        const enumType = field.V.T;\n        for (const [entryKey, entryValue] of entries) {\n          // JSON standard allows only (double quoted) string as property key\n          jsonObj[entryKey.toString()] = writeEnum(enumType, entryValue, options.enumAsInteger);\n        }\n        break;\n    }\n    return options.emitDefaultValues || entries.length > 0 ? jsonObj : undefined;\n  }\n  if (field.repeated) {\n    assert(Array.isArray(value));\n    const jsonArr = [];\n    switch (field.kind) {\n      case \"scalar\":\n        for (let i = 0; i < value.length; i++) {\n          jsonArr.push(writeScalar$1(field.T, value[i]));\n        }\n        break;\n      case \"enum\":\n        for (let i = 0; i < value.length; i++) {\n          jsonArr.push(writeEnum(field.T, value[i], options.enumAsInteger));\n        }\n        break;\n      case \"message\":\n        for (let i = 0; i < value.length; i++) {\n          jsonArr.push(value[i].toJson(options));\n        }\n        break;\n    }\n    return options.emitDefaultValues || jsonArr.length > 0 ? jsonArr : undefined;\n  }\n  switch (field.kind) {\n    case \"scalar\":\n      return writeScalar$1(field.T, value);\n    case \"enum\":\n      return writeEnum(field.T, value, options.enumAsInteger);\n    case \"message\":\n      return wrapField(field.T, value).toJson(options);\n  }\n}\nfunction writeEnum(type, value, enumAsInteger) {\n  var _a;\n  assert(typeof value == \"number\");\n  if (type.typeName == \"google.protobuf.NullValue\") {\n    return null;\n  }\n  if (enumAsInteger) {\n    return value;\n  }\n  const val = type.findNumber(value);\n  return (_a = val === null || val === void 0 ? void 0 : val.name) !== null && _a !== void 0 ? _a : value; // if we don't know the enum value, just return the number\n}\nfunction writeScalar$1(type, value) {\n  switch (type) {\n    // int32, fixed32, uint32: JSON value will be a decimal number. Either numbers or strings are accepted.\n    case ScalarType.INT32:\n    case ScalarType.SFIXED32:\n    case ScalarType.SINT32:\n    case ScalarType.FIXED32:\n    case ScalarType.UINT32:\n      assert(typeof value == \"number\");\n      return value;\n    // float, double: JSON value will be a number or one of the special string values \"NaN\", \"Infinity\", and \"-Infinity\".\n    // Either numbers or strings are accepted. Exponent notation is also accepted.\n    case ScalarType.FLOAT:\n    // assertFloat32(value);\n    case ScalarType.DOUBLE:\n      // eslint-disable-line no-fallthrough\n      assert(typeof value == \"number\");\n      if (Number.isNaN(value)) return \"NaN\";\n      if (value === Number.POSITIVE_INFINITY) return \"Infinity\";\n      if (value === Number.NEGATIVE_INFINITY) return \"-Infinity\";\n      return value;\n    // string:\n    case ScalarType.STRING:\n      assert(typeof value == \"string\");\n      return value;\n    // bool:\n    case ScalarType.BOOL:\n      assert(typeof value == \"boolean\");\n      return value;\n    // JSON value will be a decimal string. Either numbers or strings are accepted.\n    case ScalarType.UINT64:\n    case ScalarType.FIXED64:\n    case ScalarType.INT64:\n    case ScalarType.SFIXED64:\n    case ScalarType.SINT64:\n      assert(typeof value == \"bigint\" || typeof value == \"string\" || typeof value == \"number\");\n      return value.toString();\n    // bytes: JSON value will be the data encoded as a string using standard base64 encoding with paddings.\n    // Either standard or URL-safe base64 encoding with/without paddings are accepted.\n    case ScalarType.BYTES:\n      assert(value instanceof Uint8Array);\n      return protoBase64.enc(value);\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/* eslint-disable prefer-const,no-case-declarations,@typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-argument,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-return */\nconst unknownFieldsSymbol = Symbol(\"@bufbuild/protobuf/unknown-fields\");\n// Default options for parsing binary data.\nconst readDefaults = {\n  readUnknownFields: true,\n  readerFactory: bytes => new BinaryReader(bytes)\n};\n// Default options for serializing binary data.\nconst writeDefaults = {\n  writeUnknownFields: true,\n  writerFactory: () => new BinaryWriter()\n};\nfunction makeReadOptions(options) {\n  return options ? Object.assign(Object.assign({}, readDefaults), options) : readDefaults;\n}\nfunction makeWriteOptions(options) {\n  return options ? Object.assign(Object.assign({}, writeDefaults), options) : writeDefaults;\n}\nfunction makeBinaryFormat() {\n  return {\n    makeReadOptions,\n    makeWriteOptions,\n    listUnknownFields(message) {\n      var _a;\n      return (_a = message[unknownFieldsSymbol]) !== null && _a !== void 0 ? _a : [];\n    },\n    discardUnknownFields(message) {\n      delete message[unknownFieldsSymbol];\n    },\n    writeUnknownFields(message, writer) {\n      const m = message;\n      const c = m[unknownFieldsSymbol];\n      if (c) {\n        for (const f of c) {\n          writer.tag(f.no, f.wireType).raw(f.data);\n        }\n      }\n    },\n    onUnknownField(message, no, wireType, data) {\n      const m = message;\n      if (!Array.isArray(m[unknownFieldsSymbol])) {\n        m[unknownFieldsSymbol] = [];\n      }\n      m[unknownFieldsSymbol].push({\n        no,\n        wireType,\n        data\n      });\n    },\n    readMessage(message, reader, lengthOrEndTagFieldNo, options, delimitedMessageEncoding) {\n      const type = message.getType();\n      // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n      const end = delimitedMessageEncoding ? reader.len : reader.pos + lengthOrEndTagFieldNo;\n      let fieldNo, wireType;\n      while (reader.pos < end) {\n        [fieldNo, wireType] = reader.tag();\n        if (delimitedMessageEncoding === true && wireType == WireType.EndGroup) {\n          break;\n        }\n        const field = type.fields.find(fieldNo);\n        if (!field) {\n          const data = reader.skip(wireType, fieldNo);\n          if (options.readUnknownFields) {\n            this.onUnknownField(message, fieldNo, wireType, data);\n          }\n          continue;\n        }\n        readField(message, reader, field, wireType, options);\n      }\n      if (delimitedMessageEncoding && (\n      // eslint-disable-line @typescript-eslint/strict-boolean-expressions\n      wireType != WireType.EndGroup || fieldNo !== lengthOrEndTagFieldNo)) {\n        throw new Error(\"invalid end group tag\");\n      }\n    },\n    readField,\n    writeMessage(message, writer, options) {\n      const type = message.getType();\n      for (const field of type.fields.byNumber()) {\n        if (!isFieldSet(field, message)) {\n          if (field.req) {\n            throw new Error(\"cannot encode field \".concat(type.typeName, \".\").concat(field.name, \" to binary: required field not set\"));\n          }\n          continue;\n        }\n        const value = field.oneof ? message[field.oneof.localName].value : message[field.localName];\n        writeField(field, value, writer, options);\n      }\n      if (options.writeUnknownFields) {\n        this.writeUnknownFields(message, writer);\n      }\n      return writer;\n    },\n    writeField(field, value, writer, options) {\n      // The behavior of our internal function has changed, it does no longer\n      // accept `undefined` values for singular scalar and map.\n      // For backwards-compatibility, we support the old form that is part of\n      // the public API through the interface BinaryFormat.\n      if (value === undefined) {\n        return undefined;\n      }\n      writeField(field, value, writer, options);\n    }\n  };\n}\nfunction readField(target,\n// eslint-disable-line @typescript-eslint/no-explicit-any -- `any` is the best choice for dynamic access\nreader, field, wireType, options) {\n  let {\n    repeated,\n    localName\n  } = field;\n  if (field.oneof) {\n    target = target[field.oneof.localName];\n    if (target.case != localName) {\n      delete target.value;\n    }\n    target.case = localName;\n    localName = \"value\";\n  }\n  switch (field.kind) {\n    case \"scalar\":\n    case \"enum\":\n      const scalarType = field.kind == \"enum\" ? ScalarType.INT32 : field.T;\n      let read = readScalar;\n      // eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison -- acceptable since it's covered by tests\n      if (field.kind == \"scalar\" && field.L > 0) {\n        read = readScalarLTString;\n      }\n      if (repeated) {\n        let arr = target[localName]; // safe to assume presence of array, oneof cannot contain repeated values\n        const isPacked = wireType == WireType.LengthDelimited && scalarType != ScalarType.STRING && scalarType != ScalarType.BYTES;\n        if (isPacked) {\n          let e = reader.uint32() + reader.pos;\n          while (reader.pos < e) {\n            arr.push(read(reader, scalarType));\n          }\n        } else {\n          arr.push(read(reader, scalarType));\n        }\n      } else {\n        target[localName] = read(reader, scalarType);\n      }\n      break;\n    case \"message\":\n      const messageType = field.T;\n      if (repeated) {\n        // safe to assume presence of array, oneof cannot contain repeated values\n        target[localName].push(readMessageField(reader, new messageType(), options, field));\n      } else {\n        if (isMessage(target[localName])) {\n          readMessageField(reader, target[localName], options, field);\n        } else {\n          target[localName] = readMessageField(reader, new messageType(), options, field);\n          if (messageType.fieldWrapper && !field.oneof && !field.repeated) {\n            target[localName] = messageType.fieldWrapper.unwrapField(target[localName]);\n          }\n        }\n      }\n      break;\n    case \"map\":\n      let [mapKey, mapVal] = readMapEntry(field, reader, options);\n      // safe to assume presence of map object, oneof cannot contain repeated values\n      target[localName][mapKey] = mapVal;\n      break;\n  }\n}\n// Read a message, avoiding MessageType.fromBinary() to re-use the\n// BinaryReadOptions and the IBinaryReader.\nfunction readMessageField(reader, message, options, field) {\n  const format = message.getType().runtime.bin;\n  const delimited = field === null || field === void 0 ? void 0 : field.delimited;\n  format.readMessage(message, reader, delimited ? field.no : reader.uint32(),\n  // eslint-disable-line @typescript-eslint/strict-boolean-expressions\n  options, delimited);\n  return message;\n}\n// Read a map field, expecting key field = 1, value field = 2\nfunction readMapEntry(field, reader, options) {\n  const length = reader.uint32(),\n    end = reader.pos + length;\n  let key, val;\n  while (reader.pos < end) {\n    const [fieldNo] = reader.tag();\n    switch (fieldNo) {\n      case 1:\n        key = readScalar(reader, field.K);\n        break;\n      case 2:\n        switch (field.V.kind) {\n          case \"scalar\":\n            val = readScalar(reader, field.V.T);\n            break;\n          case \"enum\":\n            val = reader.int32();\n            break;\n          case \"message\":\n            val = readMessageField(reader, new field.V.T(), options, undefined);\n            break;\n        }\n        break;\n    }\n  }\n  if (key === undefined) {\n    key = scalarZeroValue(field.K, LongType.BIGINT);\n  }\n  if (typeof key != \"string\" && typeof key != \"number\") {\n    key = key.toString();\n  }\n  if (val === undefined) {\n    switch (field.V.kind) {\n      case \"scalar\":\n        val = scalarZeroValue(field.V.T, LongType.BIGINT);\n        break;\n      case \"enum\":\n        val = field.V.T.values[0].no;\n        break;\n      case \"message\":\n        val = new field.V.T();\n        break;\n    }\n  }\n  return [key, val];\n}\n// Read a scalar value, but return 64 bit integral types (int64, uint64,\n// sint64, fixed64, sfixed64) as string instead of bigint.\nfunction readScalarLTString(reader, type) {\n  const v = readScalar(reader, type);\n  return typeof v == \"bigint\" ? v.toString() : v;\n}\n// Does not use scalarTypeInfo() for better performance.\nfunction readScalar(reader, type) {\n  switch (type) {\n    case ScalarType.STRING:\n      return reader.string();\n    case ScalarType.BOOL:\n      return reader.bool();\n    case ScalarType.DOUBLE:\n      return reader.double();\n    case ScalarType.FLOAT:\n      return reader.float();\n    case ScalarType.INT32:\n      return reader.int32();\n    case ScalarType.INT64:\n      return reader.int64();\n    case ScalarType.UINT64:\n      return reader.uint64();\n    case ScalarType.FIXED64:\n      return reader.fixed64();\n    case ScalarType.BYTES:\n      return reader.bytes();\n    case ScalarType.FIXED32:\n      return reader.fixed32();\n    case ScalarType.SFIXED32:\n      return reader.sfixed32();\n    case ScalarType.SFIXED64:\n      return reader.sfixed64();\n    case ScalarType.SINT64:\n      return reader.sint64();\n    case ScalarType.UINT32:\n      return reader.uint32();\n    case ScalarType.SINT32:\n      return reader.sint32();\n  }\n}\nfunction writeField(field, value, writer, options) {\n  assert(value !== undefined);\n  const repeated = field.repeated;\n  switch (field.kind) {\n    case \"scalar\":\n    case \"enum\":\n      let scalarType = field.kind == \"enum\" ? ScalarType.INT32 : field.T;\n      if (repeated) {\n        assert(Array.isArray(value));\n        if (field.packed) {\n          writePacked(writer, scalarType, field.no, value);\n        } else {\n          for (const item of value) {\n            writeScalar(writer, scalarType, field.no, item);\n          }\n        }\n      } else {\n        writeScalar(writer, scalarType, field.no, value);\n      }\n      break;\n    case \"message\":\n      if (repeated) {\n        assert(Array.isArray(value));\n        for (const item of value) {\n          writeMessageField(writer, options, field, item);\n        }\n      } else {\n        writeMessageField(writer, options, field, value);\n      }\n      break;\n    case \"map\":\n      assert(typeof value == \"object\" && value != null);\n      for (const [key, val] of Object.entries(value)) {\n        writeMapEntry(writer, options, field, key, val);\n      }\n      break;\n  }\n}\nfunction writeMapEntry(writer, options, field, key, value) {\n  writer.tag(field.no, WireType.LengthDelimited);\n  writer.fork();\n  // javascript only allows number or string for object properties\n  // we convert from our representation to the protobuf type\n  let keyValue = key;\n  // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- we deliberately handle just the special cases for map keys\n  switch (field.K) {\n    case ScalarType.INT32:\n    case ScalarType.FIXED32:\n    case ScalarType.UINT32:\n    case ScalarType.SFIXED32:\n    case ScalarType.SINT32:\n      keyValue = Number.parseInt(key);\n      break;\n    case ScalarType.BOOL:\n      assert(key == \"true\" || key == \"false\");\n      keyValue = key == \"true\";\n      break;\n  }\n  // write key, expecting key field number = 1\n  writeScalar(writer, field.K, 1, keyValue);\n  // write value, expecting value field number = 2\n  switch (field.V.kind) {\n    case \"scalar\":\n      writeScalar(writer, field.V.T, 2, value);\n      break;\n    case \"enum\":\n      writeScalar(writer, ScalarType.INT32, 2, value);\n      break;\n    case \"message\":\n      assert(value !== undefined);\n      writer.tag(2, WireType.LengthDelimited).bytes(value.toBinary(options));\n      break;\n  }\n  writer.join();\n}\n// Value must not be undefined\nfunction writeMessageField(writer, options, field, value) {\n  const message = wrapField(field.T, value);\n  // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions\n  if (field.delimited) writer.tag(field.no, WireType.StartGroup).raw(message.toBinary(options)).tag(field.no, WireType.EndGroup);else writer.tag(field.no, WireType.LengthDelimited).bytes(message.toBinary(options));\n}\nfunction writeScalar(writer, type, fieldNo, value) {\n  assert(value !== undefined);\n  let [wireType, method] = scalarTypeInfo(type);\n  writer.tag(fieldNo, wireType)[method](value);\n}\nfunction writePacked(writer, type, fieldNo, value) {\n  if (!value.length) {\n    return;\n  }\n  writer.tag(fieldNo, WireType.LengthDelimited).fork();\n  let [, method] = scalarTypeInfo(type);\n  for (let i = 0; i < value.length; i++) {\n    writer[method](value[i]);\n  }\n  writer.join();\n}\n/**\n * Get information for writing a scalar value.\n *\n * Returns tuple:\n * [0]: appropriate WireType\n * [1]: name of the appropriate method of IBinaryWriter\n * [2]: whether the given value is a default value for proto3 semantics\n *\n * If argument `value` is omitted, [2] is always false.\n */\n// TODO replace call-sites writeScalar() and writePacked(), then remove\nfunction scalarTypeInfo(type) {\n  let wireType = WireType.Varint;\n  // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- INT32, UINT32, SINT32 are covered by the defaults\n  switch (type) {\n    case ScalarType.BYTES:\n    case ScalarType.STRING:\n      wireType = WireType.LengthDelimited;\n      break;\n    case ScalarType.DOUBLE:\n    case ScalarType.FIXED64:\n    case ScalarType.SFIXED64:\n      wireType = WireType.Bit64;\n      break;\n    case ScalarType.FIXED32:\n    case ScalarType.SFIXED32:\n    case ScalarType.FLOAT:\n      wireType = WireType.Bit32;\n      break;\n  }\n  const method = ScalarType[type].toLowerCase();\n  return [wireType, method];\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/* eslint-disable @typescript-eslint/no-explicit-any,@typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return,@typescript-eslint/no-unsafe-argument,no-case-declarations */\nfunction makeUtilCommon() {\n  return {\n    setEnumType,\n    initPartial(source, target) {\n      if (source === undefined) {\n        return;\n      }\n      const type = target.getType();\n      for (const member of type.fields.byMember()) {\n        const localName = member.localName,\n          t = target,\n          s = source;\n        if (s[localName] == null) {\n          // TODO if source is a Message instance, we should use isFieldSet() here to support future field presence\n          continue;\n        }\n        switch (member.kind) {\n          case \"oneof\":\n            const sk = s[localName].case;\n            if (sk === undefined) {\n              continue;\n            }\n            const sourceField = member.findField(sk);\n            let val = s[localName].value;\n            if (sourceField && sourceField.kind == \"message\" && !isMessage(val, sourceField.T)) {\n              val = new sourceField.T(val);\n            } else if (sourceField && sourceField.kind === \"scalar\" && sourceField.T === ScalarType.BYTES) {\n              val = toU8Arr(val);\n            }\n            t[localName] = {\n              case: sk,\n              value: val\n            };\n            break;\n          case \"scalar\":\n          case \"enum\":\n            let copy = s[localName];\n            if (member.T === ScalarType.BYTES) {\n              copy = member.repeated ? copy.map(toU8Arr) : toU8Arr(copy);\n            }\n            t[localName] = copy;\n            break;\n          case \"map\":\n            switch (member.V.kind) {\n              case \"scalar\":\n              case \"enum\":\n                if (member.V.T === ScalarType.BYTES) {\n                  for (const [k, v] of Object.entries(s[localName])) {\n                    t[localName][k] = toU8Arr(v);\n                  }\n                } else {\n                  Object.assign(t[localName], s[localName]);\n                }\n                break;\n              case \"message\":\n                const messageType = member.V.T;\n                for (const k of Object.keys(s[localName])) {\n                  let val = s[localName][k];\n                  if (!messageType.fieldWrapper) {\n                    // We only take partial input for messages that are not a wrapper type.\n                    // For those messages, we recursively normalize the partial input.\n                    val = new messageType(val);\n                  }\n                  t[localName][k] = val;\n                }\n                break;\n            }\n            break;\n          case \"message\":\n            const mt = member.T;\n            if (member.repeated) {\n              t[localName] = s[localName].map(val => isMessage(val, mt) ? val : new mt(val));\n            } else {\n              const val = s[localName];\n              if (mt.fieldWrapper) {\n                if (\n                // We can't use BytesValue.typeName as that will create a circular import\n                mt.typeName === \"google.protobuf.BytesValue\") {\n                  t[localName] = toU8Arr(val);\n                } else {\n                  t[localName] = val;\n                }\n              } else {\n                t[localName] = isMessage(val, mt) ? val : new mt(val);\n              }\n            }\n            break;\n        }\n      }\n    },\n    // TODO use isFieldSet() here to support future field presence\n    equals(type, a, b) {\n      if (a === b) {\n        return true;\n      }\n      if (!a || !b) {\n        return false;\n      }\n      return type.fields.byMember().every(m => {\n        const va = a[m.localName];\n        const vb = b[m.localName];\n        if (m.repeated) {\n          if (va.length !== vb.length) {\n            return false;\n          }\n          // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- repeated fields are never \"map\"\n          switch (m.kind) {\n            case \"message\":\n              return va.every((a, i) => m.T.equals(a, vb[i]));\n            case \"scalar\":\n              return va.every((a, i) => scalarEquals(m.T, a, vb[i]));\n            case \"enum\":\n              return va.every((a, i) => scalarEquals(ScalarType.INT32, a, vb[i]));\n          }\n          throw new Error(\"repeated cannot contain \".concat(m.kind));\n        }\n        switch (m.kind) {\n          case \"message\":\n            let a = va;\n            let b = vb;\n            if (m.T.fieldWrapper) {\n              if (a !== undefined && !isMessage(a)) {\n                a = m.T.fieldWrapper.wrapField(a);\n              }\n              if (b !== undefined && !isMessage(b)) {\n                b = m.T.fieldWrapper.wrapField(b);\n              }\n            }\n            return m.T.equals(a, b);\n          case \"enum\":\n            return scalarEquals(ScalarType.INT32, va, vb);\n          case \"scalar\":\n            return scalarEquals(m.T, va, vb);\n          case \"oneof\":\n            if (va.case !== vb.case) {\n              return false;\n            }\n            const s = m.findField(va.case);\n            if (s === undefined) {\n              return true;\n            }\n            // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- oneof fields are never \"map\"\n            switch (s.kind) {\n              case \"message\":\n                return s.T.equals(va.value, vb.value);\n              case \"enum\":\n                return scalarEquals(ScalarType.INT32, va.value, vb.value);\n              case \"scalar\":\n                return scalarEquals(s.T, va.value, vb.value);\n            }\n            throw new Error(\"oneof cannot contain \".concat(s.kind));\n          case \"map\":\n            const keys = Object.keys(va).concat(Object.keys(vb));\n            switch (m.V.kind) {\n              case \"message\":\n                const messageType = m.V.T;\n                return keys.every(k => messageType.equals(va[k], vb[k]));\n              case \"enum\":\n                return keys.every(k => scalarEquals(ScalarType.INT32, va[k], vb[k]));\n              case \"scalar\":\n                const scalarType = m.V.T;\n                return keys.every(k => scalarEquals(scalarType, va[k], vb[k]));\n            }\n            break;\n        }\n      });\n    },\n    // TODO use isFieldSet() here to support future field presence\n    clone(message) {\n      const type = message.getType(),\n        target = new type(),\n        any = target;\n      for (const member of type.fields.byMember()) {\n        const source = message[member.localName];\n        let copy;\n        if (member.repeated) {\n          copy = source.map(cloneSingularField);\n        } else if (member.kind == \"map\") {\n          copy = any[member.localName];\n          for (const [key, v] of Object.entries(source)) {\n            copy[key] = cloneSingularField(v);\n          }\n        } else if (member.kind == \"oneof\") {\n          const f = member.findField(source.case);\n          copy = f ? {\n            case: source.case,\n            value: cloneSingularField(source.value)\n          } : {\n            case: undefined\n          };\n        } else {\n          copy = cloneSingularField(source);\n        }\n        any[member.localName] = copy;\n      }\n      for (const uf of type.runtime.bin.listUnknownFields(message)) {\n        type.runtime.bin.onUnknownField(any, uf.no, uf.wireType, uf.data);\n      }\n      return target;\n    }\n  };\n}\n// clone a single field value - i.e. the element type of repeated fields, the value type of maps\nfunction cloneSingularField(value) {\n  if (value === undefined) {\n    return value;\n  }\n  if (isMessage(value)) {\n    return value.clone();\n  }\n  if (value instanceof Uint8Array) {\n    const c = new Uint8Array(value.byteLength);\n    c.set(value);\n    return c;\n  }\n  return value;\n}\n// converts any ArrayLike<number> to Uint8Array if necessary.\nfunction toU8Arr(input) {\n  return input instanceof Uint8Array ? input : new Uint8Array(input);\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nfunction makeProtoRuntime(syntax, newFieldList, initFields) {\n  return {\n    syntax,\n    json: makeJsonFormat(),\n    bin: makeBinaryFormat(),\n    util: Object.assign(Object.assign({}, makeUtilCommon()), {\n      newFieldList,\n      initFields\n    }),\n    makeMessageType(typeName, fields, opt) {\n      return makeMessageType(this, typeName, fields, opt);\n    },\n    makeEnum,\n    makeEnumType,\n    getEnumType,\n    makeExtension(typeName, extendee, field) {\n      return makeExtension(this, typeName, extendee, field);\n    }\n  };\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nclass InternalFieldList {\n  constructor(fields, normalizer) {\n    this._fields = fields;\n    this._normalizer = normalizer;\n  }\n  findJsonName(jsonName) {\n    if (!this.jsonNames) {\n      const t = {};\n      for (const f of this.list()) {\n        t[f.jsonName] = t[f.name] = f;\n      }\n      this.jsonNames = t;\n    }\n    return this.jsonNames[jsonName];\n  }\n  find(fieldNo) {\n    if (!this.numbers) {\n      const t = {};\n      for (const f of this.list()) {\n        t[f.no] = f;\n      }\n      this.numbers = t;\n    }\n    return this.numbers[fieldNo];\n  }\n  list() {\n    if (!this.all) {\n      this.all = this._normalizer(this._fields);\n    }\n    return this.all;\n  }\n  byNumber() {\n    if (!this.numbersAsc) {\n      this.numbersAsc = this.list().concat().sort((a, b) => a.no - b.no);\n    }\n    return this.numbersAsc;\n  }\n  byMember() {\n    if (!this.members) {\n      this.members = [];\n      const a = this.members;\n      let o;\n      for (const f of this.list()) {\n        if (f.oneof) {\n          if (f.oneof !== o) {\n            o = f.oneof;\n            a.push(o);\n          }\n        } else {\n          a.push(f);\n        }\n      }\n    }\n    return this.members;\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Returns the name of a protobuf element in generated code.\n *\n * Field names - including oneofs - are converted to lowerCamelCase. For\n * messages, enumerations and services, the package name is stripped from\n * the type name. For nested messages and enumerations, the names are joined\n * with an underscore. For methods, the first character is made lowercase.\n */\n/**\n * Returns the name of a field in generated code.\n */\nfunction localFieldName(protoName, inOneof) {\n  const name = protoCamelCase(protoName);\n  if (inOneof) {\n    // oneof member names are not properties, but values of the `case` property.\n    return name;\n  }\n  return safeObjectProperty(safeMessageProperty(name));\n}\n/**\n * Returns the name of a oneof group in generated code.\n */\nfunction localOneofName(protoName) {\n  return localFieldName(protoName, false);\n}\n/**\n * Returns the JSON name for a protobuf field, exactly like protoc does.\n */\nconst fieldJsonName = protoCamelCase;\n/**\n * Converts snake_case to protoCamelCase according to the convention\n * used by protoc to convert a field name to a JSON name.\n */\nfunction protoCamelCase(snakeCase) {\n  let capNext = false;\n  const b = [];\n  for (let i = 0; i < snakeCase.length; i++) {\n    let c = snakeCase.charAt(i);\n    switch (c) {\n      case \"_\":\n        capNext = true;\n        break;\n      case \"0\":\n      case \"1\":\n      case \"2\":\n      case \"3\":\n      case \"4\":\n      case \"5\":\n      case \"6\":\n      case \"7\":\n      case \"8\":\n      case \"9\":\n        b.push(c);\n        capNext = false;\n        break;\n      default:\n        if (capNext) {\n          capNext = false;\n          c = c.toUpperCase();\n        }\n        b.push(c);\n        break;\n    }\n  }\n  return b.join(\"\");\n}\n/**\n * Names that cannot be used for object properties because they are reserved\n * by built-in JavaScript properties.\n */\nconst reservedObjectProperties = new Set([\n// names reserved by JavaScript\n\"constructor\", \"toString\", \"toJSON\", \"valueOf\"]);\n/**\n * Names that cannot be used for object properties because they are reserved\n * by the runtime.\n */\nconst reservedMessageProperties = new Set([\n// names reserved by the runtime\n\"getType\", \"clone\", \"equals\", \"fromBinary\", \"fromJson\", \"fromJsonString\", \"toBinary\", \"toJson\", \"toJsonString\",\n// names reserved by the runtime for the future\n\"toObject\"]);\nconst fallback = name => \"\".concat(name, \"$\");\n/**\n * Will wrap names that are Object prototype properties or names reserved\n * for `Message`s.\n */\nconst safeMessageProperty = name => {\n  if (reservedMessageProperties.has(name)) {\n    return fallback(name);\n  }\n  return name;\n};\n/**\n * Names that cannot be used for object properties because they are reserved\n * by built-in JavaScript properties.\n */\nconst safeObjectProperty = name => {\n  if (reservedObjectProperties.has(name)) {\n    return fallback(name);\n  }\n  return name;\n};// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\nclass InternalOneofInfo {\n  constructor(name) {\n    this.kind = \"oneof\";\n    this.repeated = false;\n    this.packed = false;\n    this.opt = false;\n    this.req = false;\n    this.default = undefined;\n    this.fields = [];\n    this.name = name;\n    this.localName = localOneofName(name);\n  }\n  addField(field) {\n    assert(field.oneof === this, \"field \".concat(field.name, \" not one of \").concat(this.name));\n    this.fields.push(field);\n  }\n  findField(localName) {\n    if (!this._lookup) {\n      this._lookup = Object.create(null);\n      for (let i = 0; i < this.fields.length; i++) {\n        this._lookup[this.fields[i].localName] = this.fields[i];\n      }\n    }\n    return this._lookup[localName];\n  }\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Convert a collection of field info to an array of normalized FieldInfo.\n *\n * The argument `packedByDefault` specifies whether fields that do not specify\n * `packed` should be packed (proto3) or unpacked (proto2).\n */\nfunction normalizeFieldInfos(fieldInfos, packedByDefault) {\n  var _a, _b, _c, _d, _e, _f;\n  const r = [];\n  let o;\n  for (const field of typeof fieldInfos == \"function\" ? fieldInfos() : fieldInfos) {\n    const f = field;\n    f.localName = localFieldName(field.name, field.oneof !== undefined);\n    f.jsonName = (_a = field.jsonName) !== null && _a !== void 0 ? _a : fieldJsonName(field.name);\n    f.repeated = (_b = field.repeated) !== null && _b !== void 0 ? _b : false;\n    if (field.kind == \"scalar\") {\n      f.L = (_c = field.L) !== null && _c !== void 0 ? _c : LongType.BIGINT;\n    }\n    f.delimited = (_d = field.delimited) !== null && _d !== void 0 ? _d : false;\n    f.req = (_e = field.req) !== null && _e !== void 0 ? _e : false;\n    f.opt = (_f = field.opt) !== null && _f !== void 0 ? _f : false;\n    if (field.packed === undefined) {\n      {\n        f.packed = field.kind == \"enum\" || field.kind == \"scalar\" && field.T != ScalarType.BYTES && field.T != ScalarType.STRING;\n      }\n    }\n    // We do not surface options at this time\n    // f.options = field.options ?? emptyReadonlyObject;\n    if (field.oneof !== undefined) {\n      const ooname = typeof field.oneof == \"string\" ? field.oneof : field.oneof.name;\n      if (!o || o.name != ooname) {\n        o = new InternalOneofInfo(ooname);\n      }\n      f.oneof = o;\n      o.addField(f);\n    }\n    r.push(f);\n  }\n  return r;\n}// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * Provides functionality for messages defined with the proto3 syntax.\n */\nconst proto3 = makeProtoRuntime(\"proto3\", fields => {\n  return new InternalFieldList(fields, source => normalizeFieldInfos(source));\n},\n// TODO merge with proto2 and initExtensionField, also see initPartial, equals, clone\ntarget => {\n  for (const member of target.getType().fields.byMember()) {\n    if (member.opt) {\n      continue;\n    }\n    const name = member.localName,\n      t = target;\n    if (member.repeated) {\n      t[name] = [];\n      continue;\n    }\n    switch (member.kind) {\n      case \"oneof\":\n        t[name] = {\n          case: undefined\n        };\n        break;\n      case \"enum\":\n        t[name] = 0;\n        break;\n      case \"map\":\n        t[name] = {};\n        break;\n      case \"scalar\":\n        t[name] = scalarZeroValue(member.T, member.L);\n        break;\n    }\n  }\n});// Copyright 2021-2024 Buf Technologies, Inc.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//      http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n/**\n * A Timestamp represents a point in time independent of any time zone or local\n * calendar, encoded as a count of seconds and fractions of seconds at\n * nanosecond resolution. The count is relative to an epoch at UTC midnight on\n * January 1, 1970, in the proleptic Gregorian calendar which extends the\n * Gregorian calendar backwards to year one.\n *\n * All minutes are 60 seconds long. Leap seconds are \"smeared\" so that no leap\n * second table is needed for interpretation, using a [24-hour linear\n * smear](https://developers.google.com/time/smear).\n *\n * The range is from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. By\n * restricting to that range, we ensure that we can convert to and from [RFC\n * 3339](https://www.ietf.org/rfc/rfc3339.txt) date strings.\n *\n * # Examples\n *\n * Example 1: Compute Timestamp from POSIX `time()`.\n *\n *     Timestamp timestamp;\n *     timestamp.set_seconds(time(NULL));\n *     timestamp.set_nanos(0);\n *\n * Example 2: Compute Timestamp from POSIX `gettimeofday()`.\n *\n *     struct timeval tv;\n *     gettimeofday(&tv, NULL);\n *\n *     Timestamp timestamp;\n *     timestamp.set_seconds(tv.tv_sec);\n *     timestamp.set_nanos(tv.tv_usec * 1000);\n *\n * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.\n *\n *     FILETIME ft;\n *     GetSystemTimeAsFileTime(&ft);\n *     UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;\n *\n *     // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z\n *     // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.\n *     Timestamp timestamp;\n *     timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));\n *     timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));\n *\n * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.\n *\n *     long millis = System.currentTimeMillis();\n *\n *     Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)\n *         .setNanos((int) ((millis % 1000) * 1000000)).build();\n *\n * Example 5: Compute Timestamp from Java `Instant.now()`.\n *\n *     Instant now = Instant.now();\n *\n *     Timestamp timestamp =\n *         Timestamp.newBuilder().setSeconds(now.getEpochSecond())\n *             .setNanos(now.getNano()).build();\n *\n * Example 6: Compute Timestamp from current time in Python.\n *\n *     timestamp = Timestamp()\n *     timestamp.GetCurrentTime()\n *\n * # JSON Mapping\n *\n * In JSON format, the Timestamp type is encoded as a string in the\n * [RFC 3339](https://www.ietf.org/rfc/rfc3339.txt) format. That is, the\n * format is \"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z\"\n * where {year} is always expressed using four digits while {month}, {day},\n * {hour}, {min}, and {sec} are zero-padded to two digits each. The fractional\n * seconds, which can go up to 9 digits (i.e. up to 1 nanosecond resolution),\n * are optional. The \"Z\" suffix indicates the timezone (\"UTC\"); the timezone\n * is required. A proto3 JSON serializer should always use UTC (as indicated by\n * \"Z\") when printing the Timestamp type and a proto3 JSON parser should be\n * able to accept both UTC and other timezones (as indicated by an offset).\n *\n * For example, \"2017-01-15T01:30:15.01Z\" encodes 15.01 seconds past\n * 01:30 UTC on January 15, 2017.\n *\n * In JavaScript, one can convert a Date object to this format using the\n * standard\n * [toISOString()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString)\n * method. In Python, a standard `datetime.datetime` object can be converted\n * to this format using\n * [`strftime`](https://docs.python.org/2/library/time.html#time.strftime) with\n * the time format spec '%Y-%m-%dT%H:%M:%S.%fZ'. Likewise, in Java, one can use\n * the Joda Time's [`ISODateTimeFormat.dateTime()`](\n * http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime()\n * ) to obtain a formatter capable of generating timestamps in this format.\n *\n *\n * @generated from message google.protobuf.Timestamp\n */\nclass Timestamp extends Message {\n  constructor(data) {\n    super();\n    /**\n     * Represents seconds of UTC time since Unix epoch\n     * 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to\n     * 9999-12-31T23:59:59Z inclusive.\n     *\n     * @generated from field: int64 seconds = 1;\n     */\n    this.seconds = protoInt64.zero;\n    /**\n     * Non-negative fractions of a second at nanosecond resolution. Negative\n     * second values with fractions must still have non-negative nanos values\n     * that count forward in time. Must be from 0 to 999,999,999\n     * inclusive.\n     *\n     * @generated from field: int32 nanos = 2;\n     */\n    this.nanos = 0;\n    proto3.util.initPartial(data, this);\n  }\n  fromJson(json, options) {\n    if (typeof json !== \"string\") {\n      throw new Error(\"cannot decode google.protobuf.Timestamp from JSON: \".concat(proto3.json.debug(json)));\n    }\n    const matches = json.match(/^([0-9]{4})-([0-9]{2})-([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})(?:Z|\\.([0-9]{3,9})Z|([+-][0-9][0-9]:[0-9][0-9]))$/);\n    if (!matches) {\n      throw new Error(\"cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string\");\n    }\n    const ms = Date.parse(matches[1] + \"-\" + matches[2] + \"-\" + matches[3] + \"T\" + matches[4] + \":\" + matches[5] + \":\" + matches[6] + (matches[8] ? matches[8] : \"Z\"));\n    if (Number.isNaN(ms)) {\n      throw new Error(\"cannot decode google.protobuf.Timestamp from JSON: invalid RFC 3339 string\");\n    }\n    if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\")) {\n      throw new Error(\"cannot decode message google.protobuf.Timestamp from JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive\");\n    }\n    this.seconds = protoInt64.parse(ms / 1000);\n    this.nanos = 0;\n    if (matches[7]) {\n      this.nanos = parseInt(\"1\" + matches[7] + \"0\".repeat(9 - matches[7].length)) - 1000000000;\n    }\n    return this;\n  }\n  toJson(options) {\n    const ms = Number(this.seconds) * 1000;\n    if (ms < Date.parse(\"0001-01-01T00:00:00Z\") || ms > Date.parse(\"9999-12-31T23:59:59Z\")) {\n      throw new Error(\"cannot encode google.protobuf.Timestamp to JSON: must be from 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z inclusive\");\n    }\n    if (this.nanos < 0) {\n      throw new Error(\"cannot encode google.protobuf.Timestamp to JSON: nanos must not be negative\");\n    }\n    let z = \"Z\";\n    if (this.nanos > 0) {\n      const nanosStr = (this.nanos + 1000000000).toString().substring(1);\n      if (nanosStr.substring(3) === \"000000\") {\n        z = \".\" + nanosStr.substring(0, 3) + \"Z\";\n      } else if (nanosStr.substring(6) === \"000\") {\n        z = \".\" + nanosStr.substring(0, 6) + \"Z\";\n      } else {\n        z = \".\" + nanosStr + \"Z\";\n      }\n    }\n    return new Date(ms).toISOString().replace(\".000Z\", z);\n  }\n  toDate() {\n    return new Date(Number(this.seconds) * 1000 + Math.ceil(this.nanos / 1000000));\n  }\n  static now() {\n    return Timestamp.fromDate(new Date());\n  }\n  static fromDate(date) {\n    const ms = date.getTime();\n    return new Timestamp({\n      seconds: protoInt64.parse(Math.floor(ms / 1000)),\n      nanos: ms % 1000 * 1000000\n    });\n  }\n  static fromBinary(bytes, options) {\n    return new Timestamp().fromBinary(bytes, options);\n  }\n  static fromJson(jsonValue, options) {\n    return new Timestamp().fromJson(jsonValue, options);\n  }\n  static fromJsonString(jsonString, options) {\n    return new Timestamp().fromJsonString(jsonString, options);\n  }\n  static equals(a, b) {\n    return proto3.util.equals(Timestamp, a, b);\n  }\n}\nTimestamp.runtime = proto3;\nTimestamp.typeName = \"google.protobuf.Timestamp\";\nTimestamp.fields = proto3.util.newFieldList(() => [{\n  no: 1,\n  name: \"seconds\",\n  kind: \"scalar\",\n  T: 3 /* ScalarType.INT64 */\n}, {\n  no: 2,\n  name: \"nanos\",\n  kind: \"scalar\",\n  T: 5 /* ScalarType.INT32 */\n}]);const MetricsBatch = /* @__PURE__ */proto3.makeMessageType(\"livekit.MetricsBatch\", () => [{\n  no: 1,\n  name: \"timestamp_ms\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 2,\n  name: \"normalized_timestamp\",\n  kind: \"message\",\n  T: Timestamp\n}, {\n  no: 3,\n  name: \"str_data\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 4,\n  name: \"time_series\",\n  kind: \"message\",\n  T: TimeSeriesMetric,\n  repeated: true\n}, {\n  no: 5,\n  name: \"events\",\n  kind: \"message\",\n  T: EventMetric,\n  repeated: true\n}]);\nconst TimeSeriesMetric = /* @__PURE__ */proto3.makeMessageType(\"livekit.TimeSeriesMetric\", () => [{\n  no: 1,\n  name: \"label\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"participant_identity\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 3,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"samples\",\n  kind: \"message\",\n  T: MetricSample,\n  repeated: true\n}, {\n  no: 5,\n  name: \"rid\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst MetricSample = /* @__PURE__ */proto3.makeMessageType(\"livekit.MetricSample\", () => [{\n  no: 1,\n  name: \"timestamp_ms\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 2,\n  name: \"normalized_timestamp\",\n  kind: \"message\",\n  T: Timestamp\n}, {\n  no: 3,\n  name: \"value\",\n  kind: \"scalar\",\n  T: 2\n  /* ScalarType.FLOAT */\n}]);\nconst EventMetric = /* @__PURE__ */proto3.makeMessageType(\"livekit.EventMetric\", () => [{\n  no: 1,\n  name: \"label\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"participant_identity\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 3,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"start_timestamp_ms\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 5,\n  name: \"end_timestamp_ms\",\n  kind: \"scalar\",\n  T: 3,\n  opt: true\n}, {\n  no: 6,\n  name: \"normalized_start_timestamp\",\n  kind: \"message\",\n  T: Timestamp\n}, {\n  no: 7,\n  name: \"normalized_end_timestamp\",\n  kind: \"message\",\n  T: Timestamp,\n  opt: true\n}, {\n  no: 8,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 9,\n  name: \"rid\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst AudioCodec = /* @__PURE__ */proto3.makeEnum(\"livekit.AudioCodec\", [{\n  no: 0,\n  name: \"DEFAULT_AC\"\n}, {\n  no: 1,\n  name: \"OPUS\"\n}, {\n  no: 2,\n  name: \"AAC\"\n}, {\n  no: 3,\n  name: \"AC_MP3\"\n}]);\nconst VideoCodec = /* @__PURE__ */proto3.makeEnum(\"livekit.VideoCodec\", [{\n  no: 0,\n  name: \"DEFAULT_VC\"\n}, {\n  no: 1,\n  name: \"H264_BASELINE\"\n}, {\n  no: 2,\n  name: \"H264_MAIN\"\n}, {\n  no: 3,\n  name: \"H264_HIGH\"\n}, {\n  no: 4,\n  name: \"VP8\"\n}]);\nconst ImageCodec = /* @__PURE__ */proto3.makeEnum(\"livekit.ImageCodec\", [{\n  no: 0,\n  name: \"IC_DEFAULT\"\n}, {\n  no: 1,\n  name: \"IC_JPEG\"\n}]);\nconst BackupCodecPolicy$1 = /* @__PURE__ */proto3.makeEnum(\"livekit.BackupCodecPolicy\", [{\n  no: 0,\n  name: \"PREFER_REGRESSION\"\n}, {\n  no: 1,\n  name: \"SIMULCAST\"\n}, {\n  no: 2,\n  name: \"REGRESSION\"\n}]);\nconst TrackType = /* @__PURE__ */proto3.makeEnum(\"livekit.TrackType\", [{\n  no: 0,\n  name: \"AUDIO\"\n}, {\n  no: 1,\n  name: \"VIDEO\"\n}, {\n  no: 2,\n  name: \"DATA\"\n}]);\nconst TrackSource = /* @__PURE__ */proto3.makeEnum(\"livekit.TrackSource\", [{\n  no: 0,\n  name: \"UNKNOWN\"\n}, {\n  no: 1,\n  name: \"CAMERA\"\n}, {\n  no: 2,\n  name: \"MICROPHONE\"\n}, {\n  no: 3,\n  name: \"SCREEN_SHARE\"\n}, {\n  no: 4,\n  name: \"SCREEN_SHARE_AUDIO\"\n}]);\nconst VideoQuality$1 = /* @__PURE__ */proto3.makeEnum(\"livekit.VideoQuality\", [{\n  no: 0,\n  name: \"LOW\"\n}, {\n  no: 1,\n  name: \"MEDIUM\"\n}, {\n  no: 2,\n  name: \"HIGH\"\n}, {\n  no: 3,\n  name: \"OFF\"\n}]);\nconst ConnectionQuality$1 = /* @__PURE__ */proto3.makeEnum(\"livekit.ConnectionQuality\", [{\n  no: 0,\n  name: \"POOR\"\n}, {\n  no: 1,\n  name: \"GOOD\"\n}, {\n  no: 2,\n  name: \"EXCELLENT\"\n}, {\n  no: 3,\n  name: \"LOST\"\n}]);\nconst ClientConfigSetting = /* @__PURE__ */proto3.makeEnum(\"livekit.ClientConfigSetting\", [{\n  no: 0,\n  name: \"UNSET\"\n}, {\n  no: 1,\n  name: \"DISABLED\"\n}, {\n  no: 2,\n  name: \"ENABLED\"\n}]);\nconst DisconnectReason = /* @__PURE__ */proto3.makeEnum(\"livekit.DisconnectReason\", [{\n  no: 0,\n  name: \"UNKNOWN_REASON\"\n}, {\n  no: 1,\n  name: \"CLIENT_INITIATED\"\n}, {\n  no: 2,\n  name: \"DUPLICATE_IDENTITY\"\n}, {\n  no: 3,\n  name: \"SERVER_SHUTDOWN\"\n}, {\n  no: 4,\n  name: \"PARTICIPANT_REMOVED\"\n}, {\n  no: 5,\n  name: \"ROOM_DELETED\"\n}, {\n  no: 6,\n  name: \"STATE_MISMATCH\"\n}, {\n  no: 7,\n  name: \"JOIN_FAILURE\"\n}, {\n  no: 8,\n  name: \"MIGRATION\"\n}, {\n  no: 9,\n  name: \"SIGNAL_CLOSE\"\n}, {\n  no: 10,\n  name: \"ROOM_CLOSED\"\n}, {\n  no: 11,\n  name: \"USER_UNAVAILABLE\"\n}, {\n  no: 12,\n  name: \"USER_REJECTED\"\n}, {\n  no: 13,\n  name: \"SIP_TRUNK_FAILURE\"\n}, {\n  no: 14,\n  name: \"CONNECTION_TIMEOUT\"\n}, {\n  no: 15,\n  name: \"MEDIA_FAILURE\"\n}]);\nconst ReconnectReason = /* @__PURE__ */proto3.makeEnum(\"livekit.ReconnectReason\", [{\n  no: 0,\n  name: \"RR_UNKNOWN\"\n}, {\n  no: 1,\n  name: \"RR_SIGNAL_DISCONNECTED\"\n}, {\n  no: 2,\n  name: \"RR_PUBLISHER_FAILED\"\n}, {\n  no: 3,\n  name: \"RR_SUBSCRIBER_FAILED\"\n}, {\n  no: 4,\n  name: \"RR_SWITCH_CANDIDATE\"\n}]);\nconst SubscriptionError = /* @__PURE__ */proto3.makeEnum(\"livekit.SubscriptionError\", [{\n  no: 0,\n  name: \"SE_UNKNOWN\"\n}, {\n  no: 1,\n  name: \"SE_CODEC_UNSUPPORTED\"\n}, {\n  no: 2,\n  name: \"SE_TRACK_NOTFOUND\"\n}]);\nconst AudioTrackFeature = /* @__PURE__ */proto3.makeEnum(\"livekit.AudioTrackFeature\", [{\n  no: 0,\n  name: \"TF_STEREO\"\n}, {\n  no: 1,\n  name: \"TF_NO_DTX\"\n}, {\n  no: 2,\n  name: \"TF_AUTO_GAIN_CONTROL\"\n}, {\n  no: 3,\n  name: \"TF_ECHO_CANCELLATION\"\n}, {\n  no: 4,\n  name: \"TF_NOISE_SUPPRESSION\"\n}, {\n  no: 5,\n  name: \"TF_ENHANCED_NOISE_CANCELLATION\"\n}, {\n  no: 6,\n  name: \"TF_PRECONNECT_BUFFER\"\n}]);\nconst Room$1 = /* @__PURE__ */proto3.makeMessageType(\"livekit.Room\", () => [{\n  no: 1,\n  name: \"sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"empty_timeout\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 14,\n  name: \"departure_timeout\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"max_participants\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 5,\n  name: \"creation_time\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 15,\n  name: \"creation_time_ms\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 6,\n  name: \"turn_password\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 7,\n  name: \"enabled_codecs\",\n  kind: \"message\",\n  T: Codec,\n  repeated: true\n}, {\n  no: 8,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 9,\n  name: \"num_participants\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 11,\n  name: \"num_publishers\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 10,\n  name: \"active_recording\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 13,\n  name: \"version\",\n  kind: \"message\",\n  T: TimedVersion\n}]);\nconst Codec = /* @__PURE__ */proto3.makeMessageType(\"livekit.Codec\", () => [{\n  no: 1,\n  name: \"mime\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"fmtp_line\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst ParticipantPermission = /* @__PURE__ */proto3.makeMessageType(\"livekit.ParticipantPermission\", () => [{\n  no: 1,\n  name: \"can_subscribe\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 2,\n  name: \"can_publish\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 3,\n  name: \"can_publish_data\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 9,\n  name: \"can_publish_sources\",\n  kind: \"enum\",\n  T: proto3.getEnumType(TrackSource),\n  repeated: true\n}, {\n  no: 7,\n  name: \"hidden\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 8,\n  name: \"recorder\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 10,\n  name: \"can_update_metadata\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 11,\n  name: \"agent\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 12,\n  name: \"can_subscribe_metrics\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst ParticipantInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.ParticipantInfo\", () => [{\n  no: 1,\n  name: \"sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"identity\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"state\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ParticipantInfo_State)\n}, {\n  no: 4,\n  name: \"tracks\",\n  kind: \"message\",\n  T: TrackInfo,\n  repeated: true\n}, {\n  no: 5,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 6,\n  name: \"joined_at\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 17,\n  name: \"joined_at_ms\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 9,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 10,\n  name: \"version\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 11,\n  name: \"permission\",\n  kind: \"message\",\n  T: ParticipantPermission\n}, {\n  no: 12,\n  name: \"region\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 13,\n  name: \"is_publisher\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 14,\n  name: \"kind\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ParticipantInfo_Kind)\n}, {\n  no: 15,\n  name: \"attributes\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}, {\n  no: 16,\n  name: \"disconnect_reason\",\n  kind: \"enum\",\n  T: proto3.getEnumType(DisconnectReason)\n}, {\n  no: 18,\n  name: \"kind_details\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ParticipantInfo_KindDetail),\n  repeated: true\n}]);\nconst ParticipantInfo_State = /* @__PURE__ */proto3.makeEnum(\"livekit.ParticipantInfo.State\", [{\n  no: 0,\n  name: \"JOINING\"\n}, {\n  no: 1,\n  name: \"JOINED\"\n}, {\n  no: 2,\n  name: \"ACTIVE\"\n}, {\n  no: 3,\n  name: \"DISCONNECTED\"\n}]);\nconst ParticipantInfo_Kind = /* @__PURE__ */proto3.makeEnum(\"livekit.ParticipantInfo.Kind\", [{\n  no: 0,\n  name: \"STANDARD\"\n}, {\n  no: 1,\n  name: \"INGRESS\"\n}, {\n  no: 2,\n  name: \"EGRESS\"\n}, {\n  no: 3,\n  name: \"SIP\"\n}, {\n  no: 4,\n  name: \"AGENT\"\n}, {\n  no: 7,\n  name: \"CONNECTOR\"\n}]);\nconst ParticipantInfo_KindDetail = /* @__PURE__ */proto3.makeEnum(\"livekit.ParticipantInfo.KindDetail\", [{\n  no: 0,\n  name: \"CLOUD_AGENT\"\n}, {\n  no: 1,\n  name: \"FORWARDED\"\n}]);\nconst Encryption_Type = /* @__PURE__ */proto3.makeEnum(\"livekit.Encryption.Type\", [{\n  no: 0,\n  name: \"NONE\"\n}, {\n  no: 1,\n  name: \"GCM\"\n}, {\n  no: 2,\n  name: \"CUSTOM\"\n}]);\nconst SimulcastCodecInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.SimulcastCodecInfo\", () => [{\n  no: 1,\n  name: \"mime_type\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"mid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"cid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"layers\",\n  kind: \"message\",\n  T: VideoLayer,\n  repeated: true\n}, {\n  no: 5,\n  name: \"video_layer_mode\",\n  kind: \"enum\",\n  T: proto3.getEnumType(VideoLayer_Mode)\n}, {\n  no: 6,\n  name: \"sdp_cid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst TrackInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackInfo\", () => [{\n  no: 1,\n  name: \"sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"type\",\n  kind: \"enum\",\n  T: proto3.getEnumType(TrackType)\n}, {\n  no: 3,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"muted\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 5,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 6,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 7,\n  name: \"simulcast\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 8,\n  name: \"disable_dtx\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 9,\n  name: \"source\",\n  kind: \"enum\",\n  T: proto3.getEnumType(TrackSource)\n}, {\n  no: 10,\n  name: \"layers\",\n  kind: \"message\",\n  T: VideoLayer,\n  repeated: true\n}, {\n  no: 11,\n  name: \"mime_type\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 12,\n  name: \"mid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 13,\n  name: \"codecs\",\n  kind: \"message\",\n  T: SimulcastCodecInfo,\n  repeated: true\n}, {\n  no: 14,\n  name: \"stereo\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 15,\n  name: \"disable_red\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 16,\n  name: \"encryption\",\n  kind: \"enum\",\n  T: proto3.getEnumType(Encryption_Type)\n}, {\n  no: 17,\n  name: \"stream\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 18,\n  name: \"version\",\n  kind: \"message\",\n  T: TimedVersion\n}, {\n  no: 19,\n  name: \"audio_features\",\n  kind: \"enum\",\n  T: proto3.getEnumType(AudioTrackFeature),\n  repeated: true\n}, {\n  no: 20,\n  name: \"backup_codec_policy\",\n  kind: \"enum\",\n  T: proto3.getEnumType(BackupCodecPolicy$1)\n}]);\nconst VideoLayer = /* @__PURE__ */proto3.makeMessageType(\"livekit.VideoLayer\", () => [{\n  no: 1,\n  name: \"quality\",\n  kind: \"enum\",\n  T: proto3.getEnumType(VideoQuality$1)\n}, {\n  no: 2,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 3,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"bitrate\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 5,\n  name: \"ssrc\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 6,\n  name: \"spatial_layer\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 7,\n  name: \"rid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst VideoLayer_Mode = /* @__PURE__ */proto3.makeEnum(\"livekit.VideoLayer.Mode\", [{\n  no: 0,\n  name: \"MODE_UNUSED\"\n}, {\n  no: 1,\n  name: \"ONE_SPATIAL_LAYER_PER_STREAM\"\n}, {\n  no: 2,\n  name: \"MULTIPLE_SPATIAL_LAYERS_PER_STREAM\"\n}, {\n  no: 3,\n  name: \"ONE_SPATIAL_LAYER_PER_STREAM_INCOMPLETE_RTCP_SR\"\n}]);\nconst DataPacket = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataPacket\", () => [{\n  no: 1,\n  name: \"kind\",\n  kind: \"enum\",\n  T: proto3.getEnumType(DataPacket_Kind)\n}, {\n  no: 4,\n  name: \"participant_identity\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"destination_identities\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 2,\n  name: \"user\",\n  kind: \"message\",\n  T: UserPacket,\n  oneof: \"value\"\n}, {\n  no: 3,\n  name: \"speaker\",\n  kind: \"message\",\n  T: ActiveSpeakerUpdate,\n  oneof: \"value\"\n}, {\n  no: 6,\n  name: \"sip_dtmf\",\n  kind: \"message\",\n  T: SipDTMF,\n  oneof: \"value\"\n}, {\n  no: 7,\n  name: \"transcription\",\n  kind: \"message\",\n  T: Transcription,\n  oneof: \"value\"\n}, {\n  no: 8,\n  name: \"metrics\",\n  kind: \"message\",\n  T: MetricsBatch,\n  oneof: \"value\"\n}, {\n  no: 9,\n  name: \"chat_message\",\n  kind: \"message\",\n  T: ChatMessage,\n  oneof: \"value\"\n}, {\n  no: 10,\n  name: \"rpc_request\",\n  kind: \"message\",\n  T: RpcRequest,\n  oneof: \"value\"\n}, {\n  no: 11,\n  name: \"rpc_ack\",\n  kind: \"message\",\n  T: RpcAck,\n  oneof: \"value\"\n}, {\n  no: 12,\n  name: \"rpc_response\",\n  kind: \"message\",\n  T: RpcResponse,\n  oneof: \"value\"\n}, {\n  no: 13,\n  name: \"stream_header\",\n  kind: \"message\",\n  T: DataStream_Header,\n  oneof: \"value\"\n}, {\n  no: 14,\n  name: \"stream_chunk\",\n  kind: \"message\",\n  T: DataStream_Chunk,\n  oneof: \"value\"\n}, {\n  no: 15,\n  name: \"stream_trailer\",\n  kind: \"message\",\n  T: DataStream_Trailer,\n  oneof: \"value\"\n}, {\n  no: 18,\n  name: \"encrypted_packet\",\n  kind: \"message\",\n  T: EncryptedPacket,\n  oneof: \"value\"\n}, {\n  no: 16,\n  name: \"sequence\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 17,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst DataPacket_Kind = /* @__PURE__ */proto3.makeEnum(\"livekit.DataPacket.Kind\", [{\n  no: 0,\n  name: \"RELIABLE\"\n}, {\n  no: 1,\n  name: \"LOSSY\"\n}]);\nconst EncryptedPacket = /* @__PURE__ */proto3.makeMessageType(\"livekit.EncryptedPacket\", () => [{\n  no: 1,\n  name: \"encryption_type\",\n  kind: \"enum\",\n  T: proto3.getEnumType(Encryption_Type)\n}, {\n  no: 2,\n  name: \"iv\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}, {\n  no: 3,\n  name: \"key_index\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"encrypted_value\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}]);\nconst EncryptedPacketPayload = /* @__PURE__ */proto3.makeMessageType(\"livekit.EncryptedPacketPayload\", () => [{\n  no: 1,\n  name: \"user\",\n  kind: \"message\",\n  T: UserPacket,\n  oneof: \"value\"\n}, {\n  no: 3,\n  name: \"chat_message\",\n  kind: \"message\",\n  T: ChatMessage,\n  oneof: \"value\"\n}, {\n  no: 4,\n  name: \"rpc_request\",\n  kind: \"message\",\n  T: RpcRequest,\n  oneof: \"value\"\n}, {\n  no: 5,\n  name: \"rpc_ack\",\n  kind: \"message\",\n  T: RpcAck,\n  oneof: \"value\"\n}, {\n  no: 6,\n  name: \"rpc_response\",\n  kind: \"message\",\n  T: RpcResponse,\n  oneof: \"value\"\n}, {\n  no: 7,\n  name: \"stream_header\",\n  kind: \"message\",\n  T: DataStream_Header,\n  oneof: \"value\"\n}, {\n  no: 8,\n  name: \"stream_chunk\",\n  kind: \"message\",\n  T: DataStream_Chunk,\n  oneof: \"value\"\n}, {\n  no: 9,\n  name: \"stream_trailer\",\n  kind: \"message\",\n  T: DataStream_Trailer,\n  oneof: \"value\"\n}]);\nconst ActiveSpeakerUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.ActiveSpeakerUpdate\", () => [{\n  no: 1,\n  name: \"speakers\",\n  kind: \"message\",\n  T: SpeakerInfo,\n  repeated: true\n}]);\nconst SpeakerInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.SpeakerInfo\", () => [{\n  no: 1,\n  name: \"sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"level\",\n  kind: \"scalar\",\n  T: 2\n  /* ScalarType.FLOAT */\n}, {\n  no: 3,\n  name: \"active\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst UserPacket = /* @__PURE__ */proto3.makeMessageType(\"livekit.UserPacket\", () => [{\n  no: 1,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"participant_identity\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"payload\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}, {\n  no: 3,\n  name: \"destination_sids\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 6,\n  name: \"destination_identities\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 4,\n  name: \"topic\",\n  kind: \"scalar\",\n  T: 9,\n  opt: true\n}, {\n  no: 8,\n  name: \"id\",\n  kind: \"scalar\",\n  T: 9,\n  opt: true\n}, {\n  no: 9,\n  name: \"start_time\",\n  kind: \"scalar\",\n  T: 4,\n  opt: true\n}, {\n  no: 10,\n  name: \"end_time\",\n  kind: \"scalar\",\n  T: 4,\n  opt: true\n}, {\n  no: 11,\n  name: \"nonce\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}]);\nconst SipDTMF = /* @__PURE__ */proto3.makeMessageType(\"livekit.SipDTMF\", () => [{\n  no: 3,\n  name: \"code\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"digit\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst Transcription = /* @__PURE__ */proto3.makeMessageType(\"livekit.Transcription\", () => [{\n  no: 2,\n  name: \"transcribed_participant_identity\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"track_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"segments\",\n  kind: \"message\",\n  T: TranscriptionSegment,\n  repeated: true\n}]);\nconst TranscriptionSegment = /* @__PURE__ */proto3.makeMessageType(\"livekit.TranscriptionSegment\", () => [{\n  no: 1,\n  name: \"id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"text\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"start_time\",\n  kind: \"scalar\",\n  T: 4\n  /* ScalarType.UINT64 */\n}, {\n  no: 4,\n  name: \"end_time\",\n  kind: \"scalar\",\n  T: 4\n  /* ScalarType.UINT64 */\n}, {\n  no: 5,\n  name: \"final\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 6,\n  name: \"language\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst ChatMessage = /* @__PURE__ */proto3.makeMessageType(\"livekit.ChatMessage\", () => [{\n  no: 1,\n  name: \"id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"timestamp\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 3,\n  name: \"edit_timestamp\",\n  kind: \"scalar\",\n  T: 3,\n  opt: true\n}, {\n  no: 4,\n  name: \"message\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"deleted\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 6,\n  name: \"generated\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst RpcRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.RpcRequest\", () => [{\n  no: 1,\n  name: \"id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"method\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"payload\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"response_timeout_ms\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 5,\n  name: \"version\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst RpcAck = /* @__PURE__ */proto3.makeMessageType(\"livekit.RpcAck\", () => [{\n  no: 1,\n  name: \"request_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst RpcResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.RpcResponse\", () => [{\n  no: 1,\n  name: \"request_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"payload\",\n  kind: \"scalar\",\n  T: 9,\n  oneof: \"value\"\n}, {\n  no: 3,\n  name: \"error\",\n  kind: \"message\",\n  T: RpcError$1,\n  oneof: \"value\"\n}]);\nconst RpcError$1 = /* @__PURE__ */proto3.makeMessageType(\"livekit.RpcError\", () => [{\n  no: 1,\n  name: \"code\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"message\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"data\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst ParticipantTracks = /* @__PURE__ */proto3.makeMessageType(\"livekit.ParticipantTracks\", () => [{\n  no: 1,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"track_sids\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}]);\nconst ServerInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.ServerInfo\", () => [{\n  no: 1,\n  name: \"edition\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ServerInfo_Edition)\n}, {\n  no: 2,\n  name: \"version\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"protocol\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 4,\n  name: \"region\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"node_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 6,\n  name: \"debug_info\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 7,\n  name: \"agent_protocol\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}]);\nconst ServerInfo_Edition = /* @__PURE__ */proto3.makeEnum(\"livekit.ServerInfo.Edition\", [{\n  no: 0,\n  name: \"Standard\"\n}, {\n  no: 1,\n  name: \"Cloud\"\n}]);\nconst ClientInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.ClientInfo\", () => [{\n  no: 1,\n  name: \"sdk\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ClientInfo_SDK)\n}, {\n  no: 2,\n  name: \"version\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"protocol\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 4,\n  name: \"os\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"os_version\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 6,\n  name: \"device_model\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 7,\n  name: \"browser\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 8,\n  name: \"browser_version\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 9,\n  name: \"address\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 10,\n  name: \"network\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 11,\n  name: \"other_sdks\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst ClientInfo_SDK = /* @__PURE__ */proto3.makeEnum(\"livekit.ClientInfo.SDK\", [{\n  no: 0,\n  name: \"UNKNOWN\"\n}, {\n  no: 1,\n  name: \"JS\"\n}, {\n  no: 2,\n  name: \"SWIFT\"\n}, {\n  no: 3,\n  name: \"ANDROID\"\n}, {\n  no: 4,\n  name: \"FLUTTER\"\n}, {\n  no: 5,\n  name: \"GO\"\n}, {\n  no: 6,\n  name: \"UNITY\"\n}, {\n  no: 7,\n  name: \"REACT_NATIVE\"\n}, {\n  no: 8,\n  name: \"RUST\"\n}, {\n  no: 9,\n  name: \"PYTHON\"\n}, {\n  no: 10,\n  name: \"CPP\"\n}, {\n  no: 11,\n  name: \"UNITY_WEB\"\n}, {\n  no: 12,\n  name: \"NODE\"\n}, {\n  no: 13,\n  name: \"UNREAL\"\n}, {\n  no: 14,\n  name: \"ESP32\"\n}]);\nconst ClientConfiguration = /* @__PURE__ */proto3.makeMessageType(\"livekit.ClientConfiguration\", () => [{\n  no: 1,\n  name: \"video\",\n  kind: \"message\",\n  T: VideoConfiguration\n}, {\n  no: 2,\n  name: \"screen\",\n  kind: \"message\",\n  T: VideoConfiguration\n}, {\n  no: 3,\n  name: \"resume_connection\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ClientConfigSetting)\n}, {\n  no: 4,\n  name: \"disabled_codecs\",\n  kind: \"message\",\n  T: DisabledCodecs\n}, {\n  no: 5,\n  name: \"force_relay\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ClientConfigSetting)\n}]);\nconst VideoConfiguration = /* @__PURE__ */proto3.makeMessageType(\"livekit.VideoConfiguration\", () => [{\n  no: 1,\n  name: \"hardware_encoder\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ClientConfigSetting)\n}]);\nconst DisabledCodecs = /* @__PURE__ */proto3.makeMessageType(\"livekit.DisabledCodecs\", () => [{\n  no: 1,\n  name: \"codecs\",\n  kind: \"message\",\n  T: Codec,\n  repeated: true\n}, {\n  no: 2,\n  name: \"publish\",\n  kind: \"message\",\n  T: Codec,\n  repeated: true\n}]);\nconst TimedVersion = /* @__PURE__ */proto3.makeMessageType(\"livekit.TimedVersion\", () => [{\n  no: 1,\n  name: \"unix_micro\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 2,\n  name: \"ticks\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}]);\nconst DataStream_OperationType = /* @__PURE__ */proto3.makeEnum(\"livekit.DataStream.OperationType\", [{\n  no: 0,\n  name: \"CREATE\"\n}, {\n  no: 1,\n  name: \"UPDATE\"\n}, {\n  no: 2,\n  name: \"DELETE\"\n}, {\n  no: 3,\n  name: \"REACTION\"\n}]);\nconst DataStream_TextHeader = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.TextHeader\", () => [{\n  no: 1,\n  name: \"operation_type\",\n  kind: \"enum\",\n  T: proto3.getEnumType(DataStream_OperationType)\n}, {\n  no: 2,\n  name: \"version\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 3,\n  name: \"reply_to_stream_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"attached_stream_ids\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 5,\n  name: \"generated\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}], {\n  localName: \"DataStream_TextHeader\"\n});\nconst DataStream_ByteHeader = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.ByteHeader\", () => [{\n  no: 1,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}], {\n  localName: \"DataStream_ByteHeader\"\n});\nconst DataStream_Header = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.Header\", () => [{\n  no: 1,\n  name: \"stream_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"timestamp\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 3,\n  name: \"topic\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"mime_type\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"total_length\",\n  kind: \"scalar\",\n  T: 4,\n  opt: true\n}, {\n  no: 7,\n  name: \"encryption_type\",\n  kind: \"enum\",\n  T: proto3.getEnumType(Encryption_Type)\n}, {\n  no: 8,\n  name: \"attributes\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}, {\n  no: 9,\n  name: \"text_header\",\n  kind: \"message\",\n  T: DataStream_TextHeader,\n  oneof: \"content_header\"\n}, {\n  no: 10,\n  name: \"byte_header\",\n  kind: \"message\",\n  T: DataStream_ByteHeader,\n  oneof: \"content_header\"\n}], {\n  localName: \"DataStream_Header\"\n});\nconst DataStream_Chunk = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.Chunk\", () => [{\n  no: 1,\n  name: \"stream_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"chunk_index\",\n  kind: \"scalar\",\n  T: 4\n  /* ScalarType.UINT64 */\n}, {\n  no: 3,\n  name: \"content\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}, {\n  no: 4,\n  name: \"version\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 5,\n  name: \"iv\",\n  kind: \"scalar\",\n  T: 12,\n  opt: true\n}], {\n  localName: \"DataStream_Chunk\"\n});\nconst DataStream_Trailer = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataStream.Trailer\", () => [{\n  no: 1,\n  name: \"stream_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"reason\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"attributes\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}], {\n  localName: \"DataStream_Trailer\"\n});\nconst FilterParams = /* @__PURE__ */proto3.makeMessageType(\"livekit.FilterParams\", () => [{\n  no: 1,\n  name: \"include_events\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 2,\n  name: \"exclude_events\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}]);\nconst WebhookConfig = /* @__PURE__ */proto3.makeMessageType(\"livekit.WebhookConfig\", () => [{\n  no: 1,\n  name: \"url\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"signing_key\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"filter_params\",\n  kind: \"message\",\n  T: FilterParams\n}]);\nconst SubscribedAudioCodec = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedAudioCodec\", () => [{\n  no: 1,\n  name: \"codec\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"enabled\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst RoomAgentDispatch = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomAgentDispatch\", () => [{\n  no: 1,\n  name: \"agent_name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst EncodedFileType = /* @__PURE__ */proto3.makeEnum(\"livekit.EncodedFileType\", [{\n  no: 0,\n  name: \"DEFAULT_FILETYPE\"\n}, {\n  no: 1,\n  name: \"MP4\"\n}, {\n  no: 2,\n  name: \"OGG\"\n}, {\n  no: 3,\n  name: \"MP3\"\n}]);\nconst SegmentedFileProtocol = /* @__PURE__ */proto3.makeEnum(\"livekit.SegmentedFileProtocol\", [{\n  no: 0,\n  name: \"DEFAULT_SEGMENTED_FILE_PROTOCOL\"\n}, {\n  no: 1,\n  name: \"HLS_PROTOCOL\"\n}]);\nconst SegmentedFileSuffix = /* @__PURE__ */proto3.makeEnum(\"livekit.SegmentedFileSuffix\", [{\n  no: 0,\n  name: \"INDEX\"\n}, {\n  no: 1,\n  name: \"TIMESTAMP\"\n}]);\nconst ImageFileSuffix = /* @__PURE__ */proto3.makeEnum(\"livekit.ImageFileSuffix\", [{\n  no: 0,\n  name: \"IMAGE_SUFFIX_INDEX\"\n}, {\n  no: 1,\n  name: \"IMAGE_SUFFIX_TIMESTAMP\"\n}, {\n  no: 2,\n  name: \"IMAGE_SUFFIX_NONE_OVERWRITE\"\n}]);\nconst StreamProtocol = /* @__PURE__ */proto3.makeEnum(\"livekit.StreamProtocol\", [{\n  no: 0,\n  name: \"DEFAULT_PROTOCOL\"\n}, {\n  no: 1,\n  name: \"RTMP\"\n}, {\n  no: 2,\n  name: \"SRT\"\n}]);\nconst AudioMixing = /* @__PURE__ */proto3.makeEnum(\"livekit.AudioMixing\", [{\n  no: 0,\n  name: \"DEFAULT_MIXING\"\n}, {\n  no: 1,\n  name: \"DUAL_CHANNEL_AGENT\"\n}, {\n  no: 2,\n  name: \"DUAL_CHANNEL_ALTERNATE\"\n}]);\nconst EncodingOptionsPreset = /* @__PURE__ */proto3.makeEnum(\"livekit.EncodingOptionsPreset\", [{\n  no: 0,\n  name: \"H264_720P_30\"\n}, {\n  no: 1,\n  name: \"H264_720P_60\"\n}, {\n  no: 2,\n  name: \"H264_1080P_30\"\n}, {\n  no: 3,\n  name: \"H264_1080P_60\"\n}, {\n  no: 4,\n  name: \"PORTRAIT_H264_720P_30\"\n}, {\n  no: 5,\n  name: \"PORTRAIT_H264_720P_60\"\n}, {\n  no: 6,\n  name: \"PORTRAIT_H264_1080P_30\"\n}, {\n  no: 7,\n  name: \"PORTRAIT_H264_1080P_60\"\n}]);\nconst RoomCompositeEgressRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomCompositeEgressRequest\", () => [{\n  no: 1,\n  name: \"room_name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"layout\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"audio_only\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 15,\n  name: \"audio_mixing\",\n  kind: \"enum\",\n  T: proto3.getEnumType(AudioMixing)\n}, {\n  no: 4,\n  name: \"video_only\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 5,\n  name: \"custom_base_url\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 6,\n  name: \"file\",\n  kind: \"message\",\n  T: EncodedFileOutput,\n  oneof: \"output\"\n}, {\n  no: 7,\n  name: \"stream\",\n  kind: \"message\",\n  T: StreamOutput,\n  oneof: \"output\"\n}, {\n  no: 10,\n  name: \"segments\",\n  kind: \"message\",\n  T: SegmentedFileOutput,\n  oneof: \"output\"\n}, {\n  no: 8,\n  name: \"preset\",\n  kind: \"enum\",\n  T: proto3.getEnumType(EncodingOptionsPreset),\n  oneof: \"options\"\n}, {\n  no: 9,\n  name: \"advanced\",\n  kind: \"message\",\n  T: EncodingOptions,\n  oneof: \"options\"\n}, {\n  no: 11,\n  name: \"file_outputs\",\n  kind: \"message\",\n  T: EncodedFileOutput,\n  repeated: true\n}, {\n  no: 12,\n  name: \"stream_outputs\",\n  kind: \"message\",\n  T: StreamOutput,\n  repeated: true\n}, {\n  no: 13,\n  name: \"segment_outputs\",\n  kind: \"message\",\n  T: SegmentedFileOutput,\n  repeated: true\n}, {\n  no: 14,\n  name: \"image_outputs\",\n  kind: \"message\",\n  T: ImageOutput,\n  repeated: true\n}, {\n  no: 16,\n  name: \"webhooks\",\n  kind: \"message\",\n  T: WebhookConfig,\n  repeated: true\n}]);\nconst EncodedFileOutput = /* @__PURE__ */proto3.makeMessageType(\"livekit.EncodedFileOutput\", () => [{\n  no: 1,\n  name: \"file_type\",\n  kind: \"enum\",\n  T: proto3.getEnumType(EncodedFileType)\n}, {\n  no: 2,\n  name: \"filepath\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 6,\n  name: \"disable_manifest\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 3,\n  name: \"s3\",\n  kind: \"message\",\n  T: S3Upload,\n  oneof: \"output\"\n}, {\n  no: 4,\n  name: \"gcp\",\n  kind: \"message\",\n  T: GCPUpload,\n  oneof: \"output\"\n}, {\n  no: 5,\n  name: \"azure\",\n  kind: \"message\",\n  T: AzureBlobUpload,\n  oneof: \"output\"\n}, {\n  no: 7,\n  name: \"aliOSS\",\n  kind: \"message\",\n  T: AliOSSUpload,\n  oneof: \"output\"\n}]);\nconst SegmentedFileOutput = /* @__PURE__ */proto3.makeMessageType(\"livekit.SegmentedFileOutput\", () => [{\n  no: 1,\n  name: \"protocol\",\n  kind: \"enum\",\n  T: proto3.getEnumType(SegmentedFileProtocol)\n}, {\n  no: 2,\n  name: \"filename_prefix\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"playlist_name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 11,\n  name: \"live_playlist_name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"segment_duration\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 10,\n  name: \"filename_suffix\",\n  kind: \"enum\",\n  T: proto3.getEnumType(SegmentedFileSuffix)\n}, {\n  no: 8,\n  name: \"disable_manifest\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 5,\n  name: \"s3\",\n  kind: \"message\",\n  T: S3Upload,\n  oneof: \"output\"\n}, {\n  no: 6,\n  name: \"gcp\",\n  kind: \"message\",\n  T: GCPUpload,\n  oneof: \"output\"\n}, {\n  no: 7,\n  name: \"azure\",\n  kind: \"message\",\n  T: AzureBlobUpload,\n  oneof: \"output\"\n}, {\n  no: 9,\n  name: \"aliOSS\",\n  kind: \"message\",\n  T: AliOSSUpload,\n  oneof: \"output\"\n}]);\nconst ImageOutput = /* @__PURE__ */proto3.makeMessageType(\"livekit.ImageOutput\", () => [{\n  no: 1,\n  name: \"capture_interval\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 3,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 4,\n  name: \"filename_prefix\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"filename_suffix\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ImageFileSuffix)\n}, {\n  no: 6,\n  name: \"image_codec\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ImageCodec)\n}, {\n  no: 7,\n  name: \"disable_manifest\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 8,\n  name: \"s3\",\n  kind: \"message\",\n  T: S3Upload,\n  oneof: \"output\"\n}, {\n  no: 9,\n  name: \"gcp\",\n  kind: \"message\",\n  T: GCPUpload,\n  oneof: \"output\"\n}, {\n  no: 10,\n  name: \"azure\",\n  kind: \"message\",\n  T: AzureBlobUpload,\n  oneof: \"output\"\n}, {\n  no: 11,\n  name: \"aliOSS\",\n  kind: \"message\",\n  T: AliOSSUpload,\n  oneof: \"output\"\n}]);\nconst S3Upload = /* @__PURE__ */proto3.makeMessageType(\"livekit.S3Upload\", () => [{\n  no: 1,\n  name: \"access_key\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"secret\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 11,\n  name: \"session_token\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 12,\n  name: \"assume_role_arn\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 13,\n  name: \"assume_role_external_id\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"region\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"endpoint\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"bucket\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 6,\n  name: \"force_path_style\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 7,\n  name: \"metadata\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}, {\n  no: 8,\n  name: \"tagging\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 9,\n  name: \"content_disposition\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 10,\n  name: \"proxy\",\n  kind: \"message\",\n  T: ProxyConfig\n}]);\nconst GCPUpload = /* @__PURE__ */proto3.makeMessageType(\"livekit.GCPUpload\", () => [{\n  no: 1,\n  name: \"credentials\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"bucket\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"proxy\",\n  kind: \"message\",\n  T: ProxyConfig\n}]);\nconst AzureBlobUpload = /* @__PURE__ */proto3.makeMessageType(\"livekit.AzureBlobUpload\", () => [{\n  no: 1,\n  name: \"account_name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"account_key\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"container_name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst AliOSSUpload = /* @__PURE__ */proto3.makeMessageType(\"livekit.AliOSSUpload\", () => [{\n  no: 1,\n  name: \"access_key\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"secret\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"region\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"endpoint\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"bucket\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst ProxyConfig = /* @__PURE__ */proto3.makeMessageType(\"livekit.ProxyConfig\", () => [{\n  no: 1,\n  name: \"url\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"username\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"password\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst StreamOutput = /* @__PURE__ */proto3.makeMessageType(\"livekit.StreamOutput\", () => [{\n  no: 1,\n  name: \"protocol\",\n  kind: \"enum\",\n  T: proto3.getEnumType(StreamProtocol)\n}, {\n  no: 2,\n  name: \"urls\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}]);\nconst EncodingOptions = /* @__PURE__ */proto3.makeMessageType(\"livekit.EncodingOptions\", () => [{\n  no: 1,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 2,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 3,\n  name: \"depth\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 4,\n  name: \"framerate\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 5,\n  name: \"audio_codec\",\n  kind: \"enum\",\n  T: proto3.getEnumType(AudioCodec)\n}, {\n  no: 6,\n  name: \"audio_bitrate\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 11,\n  name: \"audio_quality\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 7,\n  name: \"audio_frequency\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 8,\n  name: \"video_codec\",\n  kind: \"enum\",\n  T: proto3.getEnumType(VideoCodec)\n}, {\n  no: 9,\n  name: \"video_bitrate\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 12,\n  name: \"video_quality\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 10,\n  name: \"key_frame_interval\",\n  kind: \"scalar\",\n  T: 1\n  /* ScalarType.DOUBLE */\n}]);\nconst AutoParticipantEgress = /* @__PURE__ */proto3.makeMessageType(\"livekit.AutoParticipantEgress\", () => [{\n  no: 1,\n  name: \"preset\",\n  kind: \"enum\",\n  T: proto3.getEnumType(EncodingOptionsPreset),\n  oneof: \"options\"\n}, {\n  no: 2,\n  name: \"advanced\",\n  kind: \"message\",\n  T: EncodingOptions,\n  oneof: \"options\"\n}, {\n  no: 3,\n  name: \"file_outputs\",\n  kind: \"message\",\n  T: EncodedFileOutput,\n  repeated: true\n}, {\n  no: 4,\n  name: \"segment_outputs\",\n  kind: \"message\",\n  T: SegmentedFileOutput,\n  repeated: true\n}]);\nconst AutoTrackEgress = /* @__PURE__ */proto3.makeMessageType(\"livekit.AutoTrackEgress\", () => [{\n  no: 1,\n  name: \"filepath\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"disable_manifest\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 2,\n  name: \"s3\",\n  kind: \"message\",\n  T: S3Upload,\n  oneof: \"output\"\n}, {\n  no: 3,\n  name: \"gcp\",\n  kind: \"message\",\n  T: GCPUpload,\n  oneof: \"output\"\n}, {\n  no: 4,\n  name: \"azure\",\n  kind: \"message\",\n  T: AzureBlobUpload,\n  oneof: \"output\"\n}, {\n  no: 6,\n  name: \"aliOSS\",\n  kind: \"message\",\n  T: AliOSSUpload,\n  oneof: \"output\"\n}]);\nconst RoomEgress = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomEgress\", () => [{\n  no: 1,\n  name: \"room\",\n  kind: \"message\",\n  T: RoomCompositeEgressRequest\n}, {\n  no: 3,\n  name: \"participant\",\n  kind: \"message\",\n  T: AutoParticipantEgress\n}, {\n  no: 2,\n  name: \"tracks\",\n  kind: \"message\",\n  T: AutoTrackEgress\n}]);\nconst RoomConfiguration = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomConfiguration\", () => [{\n  no: 1,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"empty_timeout\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 3,\n  name: \"departure_timeout\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"max_participants\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 11,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"egress\",\n  kind: \"message\",\n  T: RoomEgress\n}, {\n  no: 7,\n  name: \"min_playout_delay\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 8,\n  name: \"max_playout_delay\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 9,\n  name: \"sync_streams\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 10,\n  name: \"agents\",\n  kind: \"message\",\n  T: RoomAgentDispatch,\n  repeated: true\n}]);\nconst SignalTarget = /* @__PURE__ */proto3.makeEnum(\"livekit.SignalTarget\", [{\n  no: 0,\n  name: \"PUBLISHER\"\n}, {\n  no: 1,\n  name: \"SUBSCRIBER\"\n}]);\nconst StreamState = /* @__PURE__ */proto3.makeEnum(\"livekit.StreamState\", [{\n  no: 0,\n  name: \"ACTIVE\"\n}, {\n  no: 1,\n  name: \"PAUSED\"\n}]);\nconst CandidateProtocol = /* @__PURE__ */proto3.makeEnum(\"livekit.CandidateProtocol\", [{\n  no: 0,\n  name: \"UDP\"\n}, {\n  no: 1,\n  name: \"TCP\"\n}, {\n  no: 2,\n  name: \"TLS\"\n}]);\nconst SignalRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.SignalRequest\", () => [{\n  no: 1,\n  name: \"offer\",\n  kind: \"message\",\n  T: SessionDescription,\n  oneof: \"message\"\n}, {\n  no: 2,\n  name: \"answer\",\n  kind: \"message\",\n  T: SessionDescription,\n  oneof: \"message\"\n}, {\n  no: 3,\n  name: \"trickle\",\n  kind: \"message\",\n  T: TrickleRequest,\n  oneof: \"message\"\n}, {\n  no: 4,\n  name: \"add_track\",\n  kind: \"message\",\n  T: AddTrackRequest,\n  oneof: \"message\"\n}, {\n  no: 5,\n  name: \"mute\",\n  kind: \"message\",\n  T: MuteTrackRequest,\n  oneof: \"message\"\n}, {\n  no: 6,\n  name: \"subscription\",\n  kind: \"message\",\n  T: UpdateSubscription,\n  oneof: \"message\"\n}, {\n  no: 7,\n  name: \"track_setting\",\n  kind: \"message\",\n  T: UpdateTrackSettings,\n  oneof: \"message\"\n}, {\n  no: 8,\n  name: \"leave\",\n  kind: \"message\",\n  T: LeaveRequest,\n  oneof: \"message\"\n}, {\n  no: 10,\n  name: \"update_layers\",\n  kind: \"message\",\n  T: UpdateVideoLayers,\n  oneof: \"message\"\n}, {\n  no: 11,\n  name: \"subscription_permission\",\n  kind: \"message\",\n  T: SubscriptionPermission,\n  oneof: \"message\"\n}, {\n  no: 12,\n  name: \"sync_state\",\n  kind: \"message\",\n  T: SyncState,\n  oneof: \"message\"\n}, {\n  no: 13,\n  name: \"simulate\",\n  kind: \"message\",\n  T: SimulateScenario,\n  oneof: \"message\"\n}, {\n  no: 14,\n  name: \"ping\",\n  kind: \"scalar\",\n  T: 3,\n  oneof: \"message\"\n}, {\n  no: 15,\n  name: \"update_metadata\",\n  kind: \"message\",\n  T: UpdateParticipantMetadata,\n  oneof: \"message\"\n}, {\n  no: 16,\n  name: \"ping_req\",\n  kind: \"message\",\n  T: Ping,\n  oneof: \"message\"\n}, {\n  no: 17,\n  name: \"update_audio_track\",\n  kind: \"message\",\n  T: UpdateLocalAudioTrack,\n  oneof: \"message\"\n}, {\n  no: 18,\n  name: \"update_video_track\",\n  kind: \"message\",\n  T: UpdateLocalVideoTrack,\n  oneof: \"message\"\n}]);\nconst SignalResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.SignalResponse\", () => [{\n  no: 1,\n  name: \"join\",\n  kind: \"message\",\n  T: JoinResponse,\n  oneof: \"message\"\n}, {\n  no: 2,\n  name: \"answer\",\n  kind: \"message\",\n  T: SessionDescription,\n  oneof: \"message\"\n}, {\n  no: 3,\n  name: \"offer\",\n  kind: \"message\",\n  T: SessionDescription,\n  oneof: \"message\"\n}, {\n  no: 4,\n  name: \"trickle\",\n  kind: \"message\",\n  T: TrickleRequest,\n  oneof: \"message\"\n}, {\n  no: 5,\n  name: \"update\",\n  kind: \"message\",\n  T: ParticipantUpdate,\n  oneof: \"message\"\n}, {\n  no: 6,\n  name: \"track_published\",\n  kind: \"message\",\n  T: TrackPublishedResponse,\n  oneof: \"message\"\n}, {\n  no: 8,\n  name: \"leave\",\n  kind: \"message\",\n  T: LeaveRequest,\n  oneof: \"message\"\n}, {\n  no: 9,\n  name: \"mute\",\n  kind: \"message\",\n  T: MuteTrackRequest,\n  oneof: \"message\"\n}, {\n  no: 10,\n  name: \"speakers_changed\",\n  kind: \"message\",\n  T: SpeakersChanged,\n  oneof: \"message\"\n}, {\n  no: 11,\n  name: \"room_update\",\n  kind: \"message\",\n  T: RoomUpdate,\n  oneof: \"message\"\n}, {\n  no: 12,\n  name: \"connection_quality\",\n  kind: \"message\",\n  T: ConnectionQualityUpdate,\n  oneof: \"message\"\n}, {\n  no: 13,\n  name: \"stream_state_update\",\n  kind: \"message\",\n  T: StreamStateUpdate,\n  oneof: \"message\"\n}, {\n  no: 14,\n  name: \"subscribed_quality_update\",\n  kind: \"message\",\n  T: SubscribedQualityUpdate,\n  oneof: \"message\"\n}, {\n  no: 15,\n  name: \"subscription_permission_update\",\n  kind: \"message\",\n  T: SubscriptionPermissionUpdate,\n  oneof: \"message\"\n}, {\n  no: 16,\n  name: \"refresh_token\",\n  kind: \"scalar\",\n  T: 9,\n  oneof: \"message\"\n}, {\n  no: 17,\n  name: \"track_unpublished\",\n  kind: \"message\",\n  T: TrackUnpublishedResponse,\n  oneof: \"message\"\n}, {\n  no: 18,\n  name: \"pong\",\n  kind: \"scalar\",\n  T: 3,\n  oneof: \"message\"\n}, {\n  no: 19,\n  name: \"reconnect\",\n  kind: \"message\",\n  T: ReconnectResponse,\n  oneof: \"message\"\n}, {\n  no: 20,\n  name: \"pong_resp\",\n  kind: \"message\",\n  T: Pong,\n  oneof: \"message\"\n}, {\n  no: 21,\n  name: \"subscription_response\",\n  kind: \"message\",\n  T: SubscriptionResponse,\n  oneof: \"message\"\n}, {\n  no: 22,\n  name: \"request_response\",\n  kind: \"message\",\n  T: RequestResponse,\n  oneof: \"message\"\n}, {\n  no: 23,\n  name: \"track_subscribed\",\n  kind: \"message\",\n  T: TrackSubscribed,\n  oneof: \"message\"\n}, {\n  no: 24,\n  name: \"room_moved\",\n  kind: \"message\",\n  T: RoomMovedResponse,\n  oneof: \"message\"\n}, {\n  no: 25,\n  name: \"media_sections_requirement\",\n  kind: \"message\",\n  T: MediaSectionsRequirement,\n  oneof: \"message\"\n}, {\n  no: 26,\n  name: \"subscribed_audio_codec_update\",\n  kind: \"message\",\n  T: SubscribedAudioCodecUpdate,\n  oneof: \"message\"\n}]);\nconst SimulcastCodec = /* @__PURE__ */proto3.makeMessageType(\"livekit.SimulcastCodec\", () => [{\n  no: 1,\n  name: \"codec\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"cid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"layers\",\n  kind: \"message\",\n  T: VideoLayer,\n  repeated: true\n}, {\n  no: 5,\n  name: \"video_layer_mode\",\n  kind: \"enum\",\n  T: proto3.getEnumType(VideoLayer_Mode)\n}]);\nconst AddTrackRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.AddTrackRequest\", () => [{\n  no: 1,\n  name: \"cid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"type\",\n  kind: \"enum\",\n  T: proto3.getEnumType(TrackType)\n}, {\n  no: 4,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 5,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 6,\n  name: \"muted\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 7,\n  name: \"disable_dtx\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 8,\n  name: \"source\",\n  kind: \"enum\",\n  T: proto3.getEnumType(TrackSource)\n}, {\n  no: 9,\n  name: \"layers\",\n  kind: \"message\",\n  T: VideoLayer,\n  repeated: true\n}, {\n  no: 10,\n  name: \"simulcast_codecs\",\n  kind: \"message\",\n  T: SimulcastCodec,\n  repeated: true\n}, {\n  no: 11,\n  name: \"sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 12,\n  name: \"stereo\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 13,\n  name: \"disable_red\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 14,\n  name: \"encryption\",\n  kind: \"enum\",\n  T: proto3.getEnumType(Encryption_Type)\n}, {\n  no: 15,\n  name: \"stream\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 16,\n  name: \"backup_codec_policy\",\n  kind: \"enum\",\n  T: proto3.getEnumType(BackupCodecPolicy$1)\n}, {\n  no: 17,\n  name: \"audio_features\",\n  kind: \"enum\",\n  T: proto3.getEnumType(AudioTrackFeature),\n  repeated: true\n}]);\nconst TrickleRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrickleRequest\", () => [{\n  no: 1,\n  name: \"candidateInit\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"target\",\n  kind: \"enum\",\n  T: proto3.getEnumType(SignalTarget)\n}, {\n  no: 3,\n  name: \"final\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst MuteTrackRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.MuteTrackRequest\", () => [{\n  no: 1,\n  name: \"sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"muted\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst JoinResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.JoinResponse\", () => [{\n  no: 1,\n  name: \"room\",\n  kind: \"message\",\n  T: Room$1\n}, {\n  no: 2,\n  name: \"participant\",\n  kind: \"message\",\n  T: ParticipantInfo\n}, {\n  no: 3,\n  name: \"other_participants\",\n  kind: \"message\",\n  T: ParticipantInfo,\n  repeated: true\n}, {\n  no: 4,\n  name: \"server_version\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 5,\n  name: \"ice_servers\",\n  kind: \"message\",\n  T: ICEServer,\n  repeated: true\n}, {\n  no: 6,\n  name: \"subscriber_primary\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 7,\n  name: \"alternative_url\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 8,\n  name: \"client_configuration\",\n  kind: \"message\",\n  T: ClientConfiguration\n}, {\n  no: 9,\n  name: \"server_region\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 10,\n  name: \"ping_timeout\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 11,\n  name: \"ping_interval\",\n  kind: \"scalar\",\n  T: 5\n  /* ScalarType.INT32 */\n}, {\n  no: 12,\n  name: \"server_info\",\n  kind: \"message\",\n  T: ServerInfo\n}, {\n  no: 13,\n  name: \"sif_trailer\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}, {\n  no: 14,\n  name: \"enabled_publish_codecs\",\n  kind: \"message\",\n  T: Codec,\n  repeated: true\n}, {\n  no: 15,\n  name: \"fast_publish\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst ReconnectResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.ReconnectResponse\", () => [{\n  no: 1,\n  name: \"ice_servers\",\n  kind: \"message\",\n  T: ICEServer,\n  repeated: true\n}, {\n  no: 2,\n  name: \"client_configuration\",\n  kind: \"message\",\n  T: ClientConfiguration\n}, {\n  no: 3,\n  name: \"server_info\",\n  kind: \"message\",\n  T: ServerInfo\n}, {\n  no: 4,\n  name: \"last_message_seq\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst TrackPublishedResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackPublishedResponse\", () => [{\n  no: 1,\n  name: \"cid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"track\",\n  kind: \"message\",\n  T: TrackInfo\n}]);\nconst TrackUnpublishedResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackUnpublishedResponse\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst SessionDescription = /* @__PURE__ */proto3.makeMessageType(\"livekit.SessionDescription\", () => [{\n  no: 1,\n  name: \"type\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"sdp\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"id\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 4,\n  name: \"mid_to_track_id\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}]);\nconst ParticipantUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.ParticipantUpdate\", () => [{\n  no: 1,\n  name: \"participants\",\n  kind: \"message\",\n  T: ParticipantInfo,\n  repeated: true\n}]);\nconst UpdateSubscription = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateSubscription\", () => [{\n  no: 1,\n  name: \"track_sids\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 2,\n  name: \"subscribe\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 3,\n  name: \"participant_tracks\",\n  kind: \"message\",\n  T: ParticipantTracks,\n  repeated: true\n}]);\nconst UpdateTrackSettings = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateTrackSettings\", () => [{\n  no: 1,\n  name: \"track_sids\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 3,\n  name: \"disabled\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 4,\n  name: \"quality\",\n  kind: \"enum\",\n  T: proto3.getEnumType(VideoQuality$1)\n}, {\n  no: 5,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 6,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 7,\n  name: \"fps\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 8,\n  name: \"priority\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst UpdateLocalAudioTrack = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateLocalAudioTrack\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"features\",\n  kind: \"enum\",\n  T: proto3.getEnumType(AudioTrackFeature),\n  repeated: true\n}]);\nconst UpdateLocalVideoTrack = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateLocalVideoTrack\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"width\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 3,\n  name: \"height\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst LeaveRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.LeaveRequest\", () => [{\n  no: 1,\n  name: \"can_reconnect\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 2,\n  name: \"reason\",\n  kind: \"enum\",\n  T: proto3.getEnumType(DisconnectReason)\n}, {\n  no: 3,\n  name: \"action\",\n  kind: \"enum\",\n  T: proto3.getEnumType(LeaveRequest_Action)\n}, {\n  no: 4,\n  name: \"regions\",\n  kind: \"message\",\n  T: RegionSettings\n}]);\nconst LeaveRequest_Action = /* @__PURE__ */proto3.makeEnum(\"livekit.LeaveRequest.Action\", [{\n  no: 0,\n  name: \"DISCONNECT\"\n}, {\n  no: 1,\n  name: \"RESUME\"\n}, {\n  no: 2,\n  name: \"RECONNECT\"\n}]);\nconst UpdateVideoLayers = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateVideoLayers\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"layers\",\n  kind: \"message\",\n  T: VideoLayer,\n  repeated: true\n}]);\nconst UpdateParticipantMetadata = /* @__PURE__ */proto3.makeMessageType(\"livekit.UpdateParticipantMetadata\", () => [{\n  no: 1,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"name\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"attributes\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}, {\n  no: 4,\n  name: \"request_id\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst ICEServer = /* @__PURE__ */proto3.makeMessageType(\"livekit.ICEServer\", () => [{\n  no: 1,\n  name: \"urls\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 2,\n  name: \"username\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"credential\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst SpeakersChanged = /* @__PURE__ */proto3.makeMessageType(\"livekit.SpeakersChanged\", () => [{\n  no: 1,\n  name: \"speakers\",\n  kind: \"message\",\n  T: SpeakerInfo,\n  repeated: true\n}]);\nconst RoomUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomUpdate\", () => [{\n  no: 1,\n  name: \"room\",\n  kind: \"message\",\n  T: Room$1\n}]);\nconst ConnectionQualityInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.ConnectionQualityInfo\", () => [{\n  no: 1,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"quality\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ConnectionQuality$1)\n}, {\n  no: 3,\n  name: \"score\",\n  kind: \"scalar\",\n  T: 2\n  /* ScalarType.FLOAT */\n}]);\nconst ConnectionQualityUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.ConnectionQualityUpdate\", () => [{\n  no: 1,\n  name: \"updates\",\n  kind: \"message\",\n  T: ConnectionQualityInfo,\n  repeated: true\n}]);\nconst StreamStateInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.StreamStateInfo\", () => [{\n  no: 1,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"state\",\n  kind: \"enum\",\n  T: proto3.getEnumType(StreamState)\n}]);\nconst StreamStateUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.StreamStateUpdate\", () => [{\n  no: 1,\n  name: \"stream_states\",\n  kind: \"message\",\n  T: StreamStateInfo,\n  repeated: true\n}]);\nconst SubscribedQuality = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedQuality\", () => [{\n  no: 1,\n  name: \"quality\",\n  kind: \"enum\",\n  T: proto3.getEnumType(VideoQuality$1)\n}, {\n  no: 2,\n  name: \"enabled\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst SubscribedCodec = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedCodec\", () => [{\n  no: 1,\n  name: \"codec\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"qualities\",\n  kind: \"message\",\n  T: SubscribedQuality,\n  repeated: true\n}]);\nconst SubscribedQualityUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedQualityUpdate\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"subscribed_qualities\",\n  kind: \"message\",\n  T: SubscribedQuality,\n  repeated: true\n}, {\n  no: 3,\n  name: \"subscribed_codecs\",\n  kind: \"message\",\n  T: SubscribedCodec,\n  repeated: true\n}]);\nconst SubscribedAudioCodecUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscribedAudioCodecUpdate\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"subscribed_audio_codecs\",\n  kind: \"message\",\n  T: SubscribedAudioCodec,\n  repeated: true\n}]);\nconst TrackPermission = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackPermission\", () => [{\n  no: 1,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"all_tracks\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 3,\n  name: \"track_sids\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 4,\n  name: \"participant_identity\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst SubscriptionPermission = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscriptionPermission\", () => [{\n  no: 1,\n  name: \"all_participants\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 2,\n  name: \"track_permissions\",\n  kind: \"message\",\n  T: TrackPermission,\n  repeated: true\n}]);\nconst SubscriptionPermissionUpdate = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscriptionPermissionUpdate\", () => [{\n  no: 1,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"allowed\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst RoomMovedResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.RoomMovedResponse\", () => [{\n  no: 1,\n  name: \"room\",\n  kind: \"message\",\n  T: Room$1\n}, {\n  no: 2,\n  name: \"token\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"participant\",\n  kind: \"message\",\n  T: ParticipantInfo\n}, {\n  no: 4,\n  name: \"other_participants\",\n  kind: \"message\",\n  T: ParticipantInfo,\n  repeated: true\n}]);\nconst SyncState = /* @__PURE__ */proto3.makeMessageType(\"livekit.SyncState\", () => [{\n  no: 1,\n  name: \"answer\",\n  kind: \"message\",\n  T: SessionDescription\n}, {\n  no: 2,\n  name: \"subscription\",\n  kind: \"message\",\n  T: UpdateSubscription\n}, {\n  no: 3,\n  name: \"publish_tracks\",\n  kind: \"message\",\n  T: TrackPublishedResponse,\n  repeated: true\n}, {\n  no: 4,\n  name: \"data_channels\",\n  kind: \"message\",\n  T: DataChannelInfo,\n  repeated: true\n}, {\n  no: 5,\n  name: \"offer\",\n  kind: \"message\",\n  T: SessionDescription\n}, {\n  no: 6,\n  name: \"track_sids_disabled\",\n  kind: \"scalar\",\n  T: 9,\n  repeated: true\n}, {\n  no: 7,\n  name: \"datachannel_receive_states\",\n  kind: \"message\",\n  T: DataChannelReceiveState,\n  repeated: true\n}]);\nconst DataChannelReceiveState = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataChannelReceiveState\", () => [{\n  no: 1,\n  name: \"publisher_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"last_seq\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst DataChannelInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.DataChannelInfo\", () => [{\n  no: 1,\n  name: \"label\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"id\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 3,\n  name: \"target\",\n  kind: \"enum\",\n  T: proto3.getEnumType(SignalTarget)\n}]);\nconst SimulateScenario = /* @__PURE__ */proto3.makeMessageType(\"livekit.SimulateScenario\", () => [{\n  no: 1,\n  name: \"speaker_update\",\n  kind: \"scalar\",\n  T: 5,\n  oneof: \"scenario\"\n}, {\n  no: 2,\n  name: \"node_failure\",\n  kind: \"scalar\",\n  T: 8,\n  oneof: \"scenario\"\n}, {\n  no: 3,\n  name: \"migration\",\n  kind: \"scalar\",\n  T: 8,\n  oneof: \"scenario\"\n}, {\n  no: 4,\n  name: \"server_leave\",\n  kind: \"scalar\",\n  T: 8,\n  oneof: \"scenario\"\n}, {\n  no: 5,\n  name: \"switch_candidate_protocol\",\n  kind: \"enum\",\n  T: proto3.getEnumType(CandidateProtocol),\n  oneof: \"scenario\"\n}, {\n  no: 6,\n  name: \"subscriber_bandwidth\",\n  kind: \"scalar\",\n  T: 3,\n  oneof: \"scenario\"\n}, {\n  no: 7,\n  name: \"disconnect_signal_on_resume\",\n  kind: \"scalar\",\n  T: 8,\n  oneof: \"scenario\"\n}, {\n  no: 8,\n  name: \"disconnect_signal_on_resume_no_messages\",\n  kind: \"scalar\",\n  T: 8,\n  oneof: \"scenario\"\n}, {\n  no: 9,\n  name: \"leave_request_full_reconnect\",\n  kind: \"scalar\",\n  T: 8,\n  oneof: \"scenario\"\n}]);\nconst Ping = /* @__PURE__ */proto3.makeMessageType(\"livekit.Ping\", () => [{\n  no: 1,\n  name: \"timestamp\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 2,\n  name: \"rtt\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}]);\nconst Pong = /* @__PURE__ */proto3.makeMessageType(\"livekit.Pong\", () => [{\n  no: 1,\n  name: \"last_ping_timestamp\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}, {\n  no: 2,\n  name: \"timestamp\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}]);\nconst RegionSettings = /* @__PURE__ */proto3.makeMessageType(\"livekit.RegionSettings\", () => [{\n  no: 1,\n  name: \"regions\",\n  kind: \"message\",\n  T: RegionInfo,\n  repeated: true\n}]);\nconst RegionInfo = /* @__PURE__ */proto3.makeMessageType(\"livekit.RegionInfo\", () => [{\n  no: 1,\n  name: \"region\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"url\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 3,\n  name: \"distance\",\n  kind: \"scalar\",\n  T: 3\n  /* ScalarType.INT64 */\n}]);\nconst SubscriptionResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.SubscriptionResponse\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"err\",\n  kind: \"enum\",\n  T: proto3.getEnumType(SubscriptionError)\n}]);\nconst RequestResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.RequestResponse\", () => [{\n  no: 1,\n  name: \"request_id\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"reason\",\n  kind: \"enum\",\n  T: proto3.getEnumType(RequestResponse_Reason)\n}, {\n  no: 3,\n  name: \"message\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"trickle\",\n  kind: \"message\",\n  T: TrickleRequest,\n  oneof: \"request\"\n}, {\n  no: 5,\n  name: \"add_track\",\n  kind: \"message\",\n  T: AddTrackRequest,\n  oneof: \"request\"\n}, {\n  no: 6,\n  name: \"mute\",\n  kind: \"message\",\n  T: MuteTrackRequest,\n  oneof: \"request\"\n}, {\n  no: 7,\n  name: \"update_metadata\",\n  kind: \"message\",\n  T: UpdateParticipantMetadata,\n  oneof: \"request\"\n}, {\n  no: 8,\n  name: \"update_audio_track\",\n  kind: \"message\",\n  T: UpdateLocalAudioTrack,\n  oneof: \"request\"\n}, {\n  no: 9,\n  name: \"update_video_track\",\n  kind: \"message\",\n  T: UpdateLocalVideoTrack,\n  oneof: \"request\"\n}]);\nconst RequestResponse_Reason = /* @__PURE__ */proto3.makeEnum(\"livekit.RequestResponse.Reason\", [{\n  no: 0,\n  name: \"OK\"\n}, {\n  no: 1,\n  name: \"NOT_FOUND\"\n}, {\n  no: 2,\n  name: \"NOT_ALLOWED\"\n}, {\n  no: 3,\n  name: \"LIMIT_EXCEEDED\"\n}, {\n  no: 4,\n  name: \"QUEUED\"\n}, {\n  no: 5,\n  name: \"UNSUPPORTED_TYPE\"\n}, {\n  no: 6,\n  name: \"UNCLASSIFIED_ERROR\"\n}]);\nconst TrackSubscribed = /* @__PURE__ */proto3.makeMessageType(\"livekit.TrackSubscribed\", () => [{\n  no: 1,\n  name: \"track_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);\nconst ConnectionSettings = /* @__PURE__ */proto3.makeMessageType(\"livekit.ConnectionSettings\", () => [{\n  no: 1,\n  name: \"auto_subscribe\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 2,\n  name: \"adaptive_stream\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 3,\n  name: \"subscriber_allow_pause\",\n  kind: \"scalar\",\n  T: 8,\n  opt: true\n}, {\n  no: 4,\n  name: \"disable_ice_lite\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}]);\nconst JoinRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.JoinRequest\", () => [{\n  no: 1,\n  name: \"client_info\",\n  kind: \"message\",\n  T: ClientInfo\n}, {\n  no: 2,\n  name: \"connection_settings\",\n  kind: \"message\",\n  T: ConnectionSettings\n}, {\n  no: 3,\n  name: \"metadata\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 4,\n  name: \"participant_attributes\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}, {\n  no: 5,\n  name: \"add_track_requests\",\n  kind: \"message\",\n  T: AddTrackRequest,\n  repeated: true\n}, {\n  no: 6,\n  name: \"publisher_offer\",\n  kind: \"message\",\n  T: SessionDescription\n}, {\n  no: 7,\n  name: \"reconnect\",\n  kind: \"scalar\",\n  T: 8\n  /* ScalarType.BOOL */\n}, {\n  no: 8,\n  name: \"reconnect_reason\",\n  kind: \"enum\",\n  T: proto3.getEnumType(ReconnectReason)\n}, {\n  no: 9,\n  name: \"participant_sid\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 10,\n  name: \"sync_state\",\n  kind: \"message\",\n  T: SyncState\n}]);\nconst WrappedJoinRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.WrappedJoinRequest\", () => [{\n  no: 1,\n  name: \"compression\",\n  kind: \"enum\",\n  T: proto3.getEnumType(WrappedJoinRequest_Compression)\n}, {\n  no: 2,\n  name: \"join_request\",\n  kind: \"scalar\",\n  T: 12\n  /* ScalarType.BYTES */\n}]);\nconst WrappedJoinRequest_Compression = /* @__PURE__ */proto3.makeEnum(\"livekit.WrappedJoinRequest.Compression\", [{\n  no: 0,\n  name: \"NONE\"\n}, {\n  no: 1,\n  name: \"GZIP\"\n}]);\nconst MediaSectionsRequirement = /* @__PURE__ */proto3.makeMessageType(\"livekit.MediaSectionsRequirement\", () => [{\n  no: 1,\n  name: \"num_audios\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}, {\n  no: 2,\n  name: \"num_videos\",\n  kind: \"scalar\",\n  T: 13\n  /* ScalarType.UINT32 */\n}]);\nconst TokenSourceRequest = /* @__PURE__ */proto3.makeMessageType(\"livekit.TokenSourceRequest\", () => [{\n  no: 1,\n  name: \"room_name\",\n  kind: \"scalar\",\n  T: 9,\n  opt: true\n}, {\n  no: 2,\n  name: \"participant_name\",\n  kind: \"scalar\",\n  T: 9,\n  opt: true\n}, {\n  no: 3,\n  name: \"participant_identity\",\n  kind: \"scalar\",\n  T: 9,\n  opt: true\n}, {\n  no: 4,\n  name: \"participant_metadata\",\n  kind: \"scalar\",\n  T: 9,\n  opt: true\n}, {\n  no: 5,\n  name: \"participant_attributes\",\n  kind: \"map\",\n  K: 9,\n  V: {\n    kind: \"scalar\",\n    T: 9\n    /* ScalarType.STRING */\n  }\n}, {\n  no: 6,\n  name: \"room_config\",\n  kind: \"message\",\n  T: RoomConfiguration,\n  opt: true\n}]);\nconst TokenSourceResponse = /* @__PURE__ */proto3.makeMessageType(\"livekit.TokenSourceResponse\", () => [{\n  no: 1,\n  name: \"server_url\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}, {\n  no: 2,\n  name: \"participant_token\",\n  kind: \"scalar\",\n  T: 9\n  /* ScalarType.STRING */\n}]);function getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}var loglevel$1 = {exports: {}};/*\n* loglevel - https://github.com/pimterry/loglevel\n*\n* Copyright (c) 2013 Tim Perry\n* Licensed under the MIT license.\n*/\nvar loglevel = loglevel$1.exports;\nvar hasRequiredLoglevel;\nfunction requireLoglevel() {\n  if (hasRequiredLoglevel) return loglevel$1.exports;\n  hasRequiredLoglevel = 1;\n  (function (module) {\n    (function (root, definition) {\n\n      if (module.exports) {\n        module.exports = definition();\n      } else {\n        root.log = definition();\n      }\n    })(loglevel, function () {\n\n      // Slightly dubious tricks to cut down minimized file size\n      var noop = function () {};\n      var undefinedType = \"undefined\";\n      var isIE = typeof window !== undefinedType && typeof window.navigator !== undefinedType && /Trident\\/|MSIE /.test(window.navigator.userAgent);\n      var logMethods = [\"trace\", \"debug\", \"info\", \"warn\", \"error\"];\n      var _loggersByName = {};\n      var defaultLogger = null;\n\n      // Cross-browser bind equivalent that works at least back to IE6\n      function bindMethod(obj, methodName) {\n        var method = obj[methodName];\n        if (typeof method.bind === 'function') {\n          return method.bind(obj);\n        } else {\n          try {\n            return Function.prototype.bind.call(method, obj);\n          } catch (e) {\n            // Missing bind shim or IE8 + Modernizr, fallback to wrapping\n            return function () {\n              return Function.prototype.apply.apply(method, [obj, arguments]);\n            };\n          }\n        }\n      }\n\n      // Trace() doesn't print the message in IE, so for that case we need to wrap it\n      function traceForIE() {\n        if (console.log) {\n          if (console.log.apply) {\n            console.log.apply(console, arguments);\n          } else {\n            // In old IE, native console methods themselves don't have apply().\n            Function.prototype.apply.apply(console.log, [console, arguments]);\n          }\n        }\n        if (console.trace) console.trace();\n      }\n\n      // Build the best logging method possible for this env\n      // Wherever possible we want to bind, not wrap, to preserve stack traces\n      function realMethod(methodName) {\n        if (methodName === 'debug') {\n          methodName = 'log';\n        }\n        if (typeof console === undefinedType) {\n          return false; // No method possible, for now - fixed later by enableLoggingWhenConsoleArrives\n        } else if (methodName === 'trace' && isIE) {\n          return traceForIE;\n        } else if (console[methodName] !== undefined) {\n          return bindMethod(console, methodName);\n        } else if (console.log !== undefined) {\n          return bindMethod(console, 'log');\n        } else {\n          return noop;\n        }\n      }\n\n      // These private functions always need `this` to be set properly\n\n      function replaceLoggingMethods() {\n        /*jshint validthis:true */\n        var level = this.getLevel();\n\n        // Replace the actual methods.\n        for (var i = 0; i < logMethods.length; i++) {\n          var methodName = logMethods[i];\n          this[methodName] = i < level ? noop : this.methodFactory(methodName, level, this.name);\n        }\n\n        // Define log.log as an alias for log.debug\n        this.log = this.debug;\n\n        // Return any important warnings.\n        if (typeof console === undefinedType && level < this.levels.SILENT) {\n          return \"No console available for logging\";\n        }\n      }\n\n      // In old IE versions, the console isn't present until you first open it.\n      // We build realMethod() replacements here that regenerate logging methods\n      function enableLoggingWhenConsoleArrives(methodName) {\n        return function () {\n          if (typeof console !== undefinedType) {\n            replaceLoggingMethods.call(this);\n            this[methodName].apply(this, arguments);\n          }\n        };\n      }\n\n      // By default, we use closely bound real methods wherever possible, and\n      // otherwise we wait for a console to appear, and then try again.\n      function defaultMethodFactory(methodName, _level, _loggerName) {\n        /*jshint validthis:true */\n        return realMethod(methodName) || enableLoggingWhenConsoleArrives.apply(this, arguments);\n      }\n      function Logger(name, factory) {\n        // Private instance variables.\n        var self = this;\n        /**\n         * The level inherited from a parent logger (or a global default). We\n         * cache this here rather than delegating to the parent so that it stays\n         * in sync with the actual logging methods that we have installed (the\n         * parent could change levels but we might not have rebuilt the loggers\n         * in this child yet).\n         * @type {number}\n         */\n        var inheritedLevel;\n        /**\n         * The default level for this logger, if any. If set, this overrides\n         * `inheritedLevel`.\n         * @type {number|null}\n         */\n        var defaultLevel;\n        /**\n         * A user-specific level for this logger. If set, this overrides\n         * `defaultLevel`.\n         * @type {number|null}\n         */\n        var userLevel;\n        var storageKey = \"loglevel\";\n        if (typeof name === \"string\") {\n          storageKey += \":\" + name;\n        } else if (typeof name === \"symbol\") {\n          storageKey = undefined;\n        }\n        function persistLevelIfPossible(levelNum) {\n          var levelName = (logMethods[levelNum] || 'silent').toUpperCase();\n          if (typeof window === undefinedType || !storageKey) return;\n\n          // Use localStorage if available\n          try {\n            window.localStorage[storageKey] = levelName;\n            return;\n          } catch (ignore) {}\n\n          // Use session cookie as fallback\n          try {\n            window.document.cookie = encodeURIComponent(storageKey) + \"=\" + levelName + \";\";\n          } catch (ignore) {}\n        }\n        function getPersistedLevel() {\n          var storedLevel;\n          if (typeof window === undefinedType || !storageKey) return;\n          try {\n            storedLevel = window.localStorage[storageKey];\n          } catch (ignore) {}\n\n          // Fallback to cookies if local storage gives us nothing\n          if (typeof storedLevel === undefinedType) {\n            try {\n              var cookie = window.document.cookie;\n              var cookieName = encodeURIComponent(storageKey);\n              var location = cookie.indexOf(cookieName + \"=\");\n              if (location !== -1) {\n                storedLevel = /^([^;]+)/.exec(cookie.slice(location + cookieName.length + 1))[1];\n              }\n            } catch (ignore) {}\n          }\n\n          // If the stored level is not valid, treat it as if nothing was stored.\n          if (self.levels[storedLevel] === undefined) {\n            storedLevel = undefined;\n          }\n          return storedLevel;\n        }\n        function clearPersistedLevel() {\n          if (typeof window === undefinedType || !storageKey) return;\n\n          // Use localStorage if available\n          try {\n            window.localStorage.removeItem(storageKey);\n          } catch (ignore) {}\n\n          // Use session cookie as fallback\n          try {\n            window.document.cookie = encodeURIComponent(storageKey) + \"=; expires=Thu, 01 Jan 1970 00:00:00 UTC\";\n          } catch (ignore) {}\n        }\n        function normalizeLevel(input) {\n          var level = input;\n          if (typeof level === \"string\" && self.levels[level.toUpperCase()] !== undefined) {\n            level = self.levels[level.toUpperCase()];\n          }\n          if (typeof level === \"number\" && level >= 0 && level <= self.levels.SILENT) {\n            return level;\n          } else {\n            throw new TypeError(\"log.setLevel() called with invalid level: \" + input);\n          }\n        }\n\n        /*\n         *\n         * Public logger API - see https://github.com/pimterry/loglevel for details\n         *\n         */\n\n        self.name = name;\n        self.levels = {\n          \"TRACE\": 0,\n          \"DEBUG\": 1,\n          \"INFO\": 2,\n          \"WARN\": 3,\n          \"ERROR\": 4,\n          \"SILENT\": 5\n        };\n        self.methodFactory = factory || defaultMethodFactory;\n        self.getLevel = function () {\n          if (userLevel != null) {\n            return userLevel;\n          } else if (defaultLevel != null) {\n            return defaultLevel;\n          } else {\n            return inheritedLevel;\n          }\n        };\n        self.setLevel = function (level, persist) {\n          userLevel = normalizeLevel(level);\n          if (persist !== false) {\n            // defaults to true\n            persistLevelIfPossible(userLevel);\n          }\n\n          // NOTE: in v2, this should call rebuild(), which updates children.\n          return replaceLoggingMethods.call(self);\n        };\n        self.setDefaultLevel = function (level) {\n          defaultLevel = normalizeLevel(level);\n          if (!getPersistedLevel()) {\n            self.setLevel(level, false);\n          }\n        };\n        self.resetLevel = function () {\n          userLevel = null;\n          clearPersistedLevel();\n          replaceLoggingMethods.call(self);\n        };\n        self.enableAll = function (persist) {\n          self.setLevel(self.levels.TRACE, persist);\n        };\n        self.disableAll = function (persist) {\n          self.setLevel(self.levels.SILENT, persist);\n        };\n        self.rebuild = function () {\n          if (defaultLogger !== self) {\n            inheritedLevel = normalizeLevel(defaultLogger.getLevel());\n          }\n          replaceLoggingMethods.call(self);\n          if (defaultLogger === self) {\n            for (var childName in _loggersByName) {\n              _loggersByName[childName].rebuild();\n            }\n          }\n        };\n\n        // Initialize all the internal levels.\n        inheritedLevel = normalizeLevel(defaultLogger ? defaultLogger.getLevel() : \"WARN\");\n        var initialLevel = getPersistedLevel();\n        if (initialLevel != null) {\n          userLevel = normalizeLevel(initialLevel);\n        }\n        replaceLoggingMethods.call(self);\n      }\n\n      /*\n       *\n       * Top-level API\n       *\n       */\n\n      defaultLogger = new Logger();\n      defaultLogger.getLogger = function getLogger(name) {\n        if (typeof name !== \"symbol\" && typeof name !== \"string\" || name === \"\") {\n          throw new TypeError(\"You must supply a name when creating a logger.\");\n        }\n        var logger = _loggersByName[name];\n        if (!logger) {\n          logger = _loggersByName[name] = new Logger(name, defaultLogger.methodFactory);\n        }\n        return logger;\n      };\n\n      // Grab the current global log variable in case of overwrite\n      var _log = typeof window !== undefinedType ? window.log : undefined;\n      defaultLogger.noConflict = function () {\n        if (typeof window !== undefinedType && window.log === defaultLogger) {\n          window.log = _log;\n        }\n        return defaultLogger;\n      };\n      defaultLogger.getLoggers = function getLoggers() {\n        return _loggersByName;\n      };\n\n      // ES6 default export, for compatibility\n      defaultLogger['default'] = defaultLogger;\n      return defaultLogger;\n    });\n  })(loglevel$1);\n  return loglevel$1.exports;\n}var loglevelExports = requireLoglevel();var LogLevel;\n(function (LogLevel) {\n  LogLevel[LogLevel[\"trace\"] = 0] = \"trace\";\n  LogLevel[LogLevel[\"debug\"] = 1] = \"debug\";\n  LogLevel[LogLevel[\"info\"] = 2] = \"info\";\n  LogLevel[LogLevel[\"warn\"] = 3] = \"warn\";\n  LogLevel[LogLevel[\"error\"] = 4] = \"error\";\n  LogLevel[LogLevel[\"silent\"] = 5] = \"silent\";\n})(LogLevel || (LogLevel = {}));\nvar LoggerNames;\n(function (LoggerNames) {\n  LoggerNames[\"Default\"] = \"livekit\";\n  LoggerNames[\"Room\"] = \"livekit-room\";\n  LoggerNames[\"TokenSource\"] = \"livekit-token-source\";\n  LoggerNames[\"Participant\"] = \"livekit-participant\";\n  LoggerNames[\"Track\"] = \"livekit-track\";\n  LoggerNames[\"Publication\"] = \"livekit-track-publication\";\n  LoggerNames[\"Engine\"] = \"livekit-engine\";\n  LoggerNames[\"Signal\"] = \"livekit-signal\";\n  LoggerNames[\"PCManager\"] = \"livekit-pc-manager\";\n  LoggerNames[\"PCTransport\"] = \"livekit-pc-transport\";\n  LoggerNames[\"E2EE\"] = \"lk-e2ee\";\n})(LoggerNames || (LoggerNames = {}));\nlet livekitLogger = loglevelExports.getLogger('livekit');\nconst livekitLoggers = Object.values(LoggerNames).map(name => loglevelExports.getLogger(name));\nlivekitLogger.setDefaultLevel(LogLevel.info);\n/**\n * @internal\n */\nfunction getLogger(name) {\n  const logger = loglevelExports.getLogger(name);\n  logger.setDefaultLevel(livekitLogger.getLevel());\n  return logger;\n}\nfunction setLogLevel(level, loggerName) {\n  if (loggerName) {\n    loglevelExports.getLogger(loggerName).setLevel(level);\n  } else {\n    for (const logger of livekitLoggers) {\n      logger.setLevel(level);\n    }\n  }\n}\n/**\n * use this to hook into the logging function to allow sending internal livekit logs to third party services\n * if set, the browser logs will lose their stacktrace information (see https://github.com/pimterry/loglevel#writing-plugins)\n */\nfunction setLogExtension(extension, logger) {\n  const loggers = logger ? [logger] : livekitLoggers;\n  loggers.forEach(logR => {\n    const originalFactory = logR.methodFactory;\n    logR.methodFactory = (methodName, configLevel, loggerName) => {\n      const rawMethod = originalFactory(methodName, configLevel, loggerName);\n      const logLevel = LogLevel[methodName];\n      const needLog = logLevel >= configLevel && logLevel < LogLevel.silent;\n      return (msg, context) => {\n        if (context) rawMethod(msg, context);else rawMethod(msg);\n        if (needLog) {\n          extension(logLevel, msg, context);\n        }\n      };\n    };\n    logR.setLevel(logR.getLevel());\n  });\n}\nconst workerLogger = loglevelExports.getLogger('lk-e2ee');const maxRetryDelay = 7000;\nconst DEFAULT_RETRY_DELAYS_IN_MS = [0, 300, 2 * 2 * 300, 3 * 3 * 300, 4 * 4 * 300, maxRetryDelay, maxRetryDelay, maxRetryDelay, maxRetryDelay, maxRetryDelay];\nclass DefaultReconnectPolicy {\n  constructor(retryDelays) {\n    this._retryDelays = retryDelays !== undefined ? [...retryDelays] : DEFAULT_RETRY_DELAYS_IN_MS;\n  }\n  nextRetryDelayInMs(context) {\n    if (context.retryCount >= this._retryDelays.length) return null;\n    const retryDelay = this._retryDelays[context.retryCount];\n    if (context.retryCount <= 1) return retryDelay;\n    return retryDelay + Math.random() * 1000;\n  }\n}/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\r\n\r\n\r\nfunction __rest(s, e) {\r\n    var t = {};\r\n    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n        t[p] = s[p];\r\n    if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n                t[p[i]] = s[p[i]];\r\n        }\r\n    return t;\r\n}\r\n\r\nfunction __awaiter(thisArg, _arguments, P, generator) {\r\n    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n    return new (P || (P = Promise))(function (resolve, reject) {\r\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n    });\r\n}\r\n\r\nfunction __values(o) {\r\n    var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n    if (m) return m.call(o);\r\n    if (o && typeof o.length === \"number\") return {\r\n        next: function () {\r\n            if (o && i >= o.length) o = void 0;\r\n            return { value: o && o[i++], done: !o };\r\n        }\r\n    };\r\n    throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nfunction __asyncValues(o) {\r\n    if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n    var m = o[Symbol.asyncIterator], i;\r\n    return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n    function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};var events = {exports: {}};var hasRequiredEvents;\nfunction requireEvents() {\n  if (hasRequiredEvents) return events.exports;\n  hasRequiredEvents = 1;\n  var R = typeof Reflect === 'object' ? Reflect : null;\n  var ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {\n    return Function.prototype.apply.call(target, receiver, args);\n  };\n  var ReflectOwnKeys;\n  if (R && typeof R.ownKeys === 'function') {\n    ReflectOwnKeys = R.ownKeys;\n  } else if (Object.getOwnPropertySymbols) {\n    ReflectOwnKeys = function ReflectOwnKeys(target) {\n      return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));\n    };\n  } else {\n    ReflectOwnKeys = function ReflectOwnKeys(target) {\n      return Object.getOwnPropertyNames(target);\n    };\n  }\n  function ProcessEmitWarning(warning) {\n    if (console && console.warn) console.warn(warning);\n  }\n  var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n    return value !== value;\n  };\n  function EventEmitter() {\n    EventEmitter.init.call(this);\n  }\n  events.exports = EventEmitter;\n  events.exports.once = once;\n\n  // Backwards-compat with node 0.10.x\n  EventEmitter.EventEmitter = EventEmitter;\n  EventEmitter.prototype._events = undefined;\n  EventEmitter.prototype._eventsCount = 0;\n  EventEmitter.prototype._maxListeners = undefined;\n\n  // By default EventEmitters will print a warning if more than 10 listeners are\n  // added to it. This is a useful default which helps finding memory leaks.\n  var defaultMaxListeners = 10;\n  function checkListener(listener) {\n    if (typeof listener !== 'function') {\n      throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n    }\n  }\n  Object.defineProperty(EventEmitter, 'defaultMaxListeners', {\n    enumerable: true,\n    get: function () {\n      return defaultMaxListeners;\n    },\n    set: function (arg) {\n      if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n        throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n      }\n      defaultMaxListeners = arg;\n    }\n  });\n  EventEmitter.init = function () {\n    if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {\n      this._events = Object.create(null);\n      this._eventsCount = 0;\n    }\n    this._maxListeners = this._maxListeners || undefined;\n  };\n\n  // Obviously not all Emitters should be limited to 10. This function allows\n  // that to be increased. Set to zero for unlimited.\n  EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n    if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n      throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n    }\n    this._maxListeners = n;\n    return this;\n  };\n  function _getMaxListeners(that) {\n    if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;\n    return that._maxListeners;\n  }\n  EventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n    return _getMaxListeners(this);\n  };\n  EventEmitter.prototype.emit = function emit(type) {\n    var args = [];\n    for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n    var doError = type === 'error';\n    var events = this._events;\n    if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false;\n\n    // If there is no 'error' event listener then throw.\n    if (doError) {\n      var er;\n      if (args.length > 0) er = args[0];\n      if (er instanceof Error) {\n        // Note: The comments on the `throw` lines are intentional, they show\n        // up in Node's output if this results in an unhandled exception.\n        throw er; // Unhandled 'error' event\n      }\n      // At least give some kind of context to the user\n      var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n      err.context = er;\n      throw err; // Unhandled 'error' event\n    }\n    var handler = events[type];\n    if (handler === undefined) return false;\n    if (typeof handler === 'function') {\n      ReflectApply(handler, this, args);\n    } else {\n      var len = handler.length;\n      var listeners = arrayClone(handler, len);\n      for (var i = 0; i < len; ++i) ReflectApply(listeners[i], this, args);\n    }\n    return true;\n  };\n  function _addListener(target, type, listener, prepend) {\n    var m;\n    var events;\n    var existing;\n    checkListener(listener);\n    events = target._events;\n    if (events === undefined) {\n      events = target._events = Object.create(null);\n      target._eventsCount = 0;\n    } else {\n      // To avoid recursion in the case that type === \"newListener\"! Before\n      // adding it to the listeners, first emit \"newListener\".\n      if (events.newListener !== undefined) {\n        target.emit('newListener', type, listener.listener ? listener.listener : listener);\n\n        // Re-assign `events` because a newListener handler could have caused the\n        // this._events to be assigned to a new object\n        events = target._events;\n      }\n      existing = events[type];\n    }\n    if (existing === undefined) {\n      // Optimize the case of one listener. Don't need the extra array object.\n      existing = events[type] = listener;\n      ++target._eventsCount;\n    } else {\n      if (typeof existing === 'function') {\n        // Adding the second element, need to change to array.\n        existing = events[type] = prepend ? [listener, existing] : [existing, listener];\n        // If we've already got an array, just append.\n      } else if (prepend) {\n        existing.unshift(listener);\n      } else {\n        existing.push(listener);\n      }\n\n      // Check for listener leak\n      m = _getMaxListeners(target);\n      if (m > 0 && existing.length > m && !existing.warned) {\n        existing.warned = true;\n        // No error code for this since it is a Warning\n        // eslint-disable-next-line no-restricted-syntax\n        var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');\n        w.name = 'MaxListenersExceededWarning';\n        w.emitter = target;\n        w.type = type;\n        w.count = existing.length;\n        ProcessEmitWarning(w);\n      }\n    }\n    return target;\n  }\n  EventEmitter.prototype.addListener = function addListener(type, listener) {\n    return _addListener(this, type, listener, false);\n  };\n  EventEmitter.prototype.on = EventEmitter.prototype.addListener;\n  EventEmitter.prototype.prependListener = function prependListener(type, listener) {\n    return _addListener(this, type, listener, true);\n  };\n  function onceWrapper() {\n    if (!this.fired) {\n      this.target.removeListener(this.type, this.wrapFn);\n      this.fired = true;\n      if (arguments.length === 0) return this.listener.call(this.target);\n      return this.listener.apply(this.target, arguments);\n    }\n  }\n  function _onceWrap(target, type, listener) {\n    var state = {\n      fired: false,\n      wrapFn: undefined,\n      target: target,\n      type: type,\n      listener: listener\n    };\n    var wrapped = onceWrapper.bind(state);\n    wrapped.listener = listener;\n    state.wrapFn = wrapped;\n    return wrapped;\n  }\n  EventEmitter.prototype.once = function once(type, listener) {\n    checkListener(listener);\n    this.on(type, _onceWrap(this, type, listener));\n    return this;\n  };\n  EventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {\n    checkListener(listener);\n    this.prependListener(type, _onceWrap(this, type, listener));\n    return this;\n  };\n\n  // Emits a 'removeListener' event if and only if the listener was removed.\n  EventEmitter.prototype.removeListener = function removeListener(type, listener) {\n    var list, events, position, i, originalListener;\n    checkListener(listener);\n    events = this._events;\n    if (events === undefined) return this;\n    list = events[type];\n    if (list === undefined) return this;\n    if (list === listener || list.listener === listener) {\n      if (--this._eventsCount === 0) this._events = Object.create(null);else {\n        delete events[type];\n        if (events.removeListener) this.emit('removeListener', type, list.listener || listener);\n      }\n    } else if (typeof list !== 'function') {\n      position = -1;\n      for (i = list.length - 1; i >= 0; i--) {\n        if (list[i] === listener || list[i].listener === listener) {\n          originalListener = list[i].listener;\n          position = i;\n          break;\n        }\n      }\n      if (position < 0) return this;\n      if (position === 0) list.shift();else {\n        spliceOne(list, position);\n      }\n      if (list.length === 1) events[type] = list[0];\n      if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);\n    }\n    return this;\n  };\n  EventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n  EventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {\n    var listeners, events, i;\n    events = this._events;\n    if (events === undefined) return this;\n\n    // not listening for removeListener, no need to emit\n    if (events.removeListener === undefined) {\n      if (arguments.length === 0) {\n        this._events = Object.create(null);\n        this._eventsCount = 0;\n      } else if (events[type] !== undefined) {\n        if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];\n      }\n      return this;\n    }\n\n    // emit removeListener for all listeners on all events\n    if (arguments.length === 0) {\n      var keys = Object.keys(events);\n      var key;\n      for (i = 0; i < keys.length; ++i) {\n        key = keys[i];\n        if (key === 'removeListener') continue;\n        this.removeAllListeners(key);\n      }\n      this.removeAllListeners('removeListener');\n      this._events = Object.create(null);\n      this._eventsCount = 0;\n      return this;\n    }\n    listeners = events[type];\n    if (typeof listeners === 'function') {\n      this.removeListener(type, listeners);\n    } else if (listeners !== undefined) {\n      // LIFO order\n      for (i = listeners.length - 1; i >= 0; i--) {\n        this.removeListener(type, listeners[i]);\n      }\n    }\n    return this;\n  };\n  function _listeners(target, type, unwrap) {\n    var events = target._events;\n    if (events === undefined) return [];\n    var evlistener = events[type];\n    if (evlistener === undefined) return [];\n    if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n    return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n  }\n  EventEmitter.prototype.listeners = function listeners(type) {\n    return _listeners(this, type, true);\n  };\n  EventEmitter.prototype.rawListeners = function rawListeners(type) {\n    return _listeners(this, type, false);\n  };\n  EventEmitter.listenerCount = function (emitter, type) {\n    if (typeof emitter.listenerCount === 'function') {\n      return emitter.listenerCount(type);\n    } else {\n      return listenerCount.call(emitter, type);\n    }\n  };\n  EventEmitter.prototype.listenerCount = listenerCount;\n  function listenerCount(type) {\n    var events = this._events;\n    if (events !== undefined) {\n      var evlistener = events[type];\n      if (typeof evlistener === 'function') {\n        return 1;\n      } else if (evlistener !== undefined) {\n        return evlistener.length;\n      }\n    }\n    return 0;\n  }\n  EventEmitter.prototype.eventNames = function eventNames() {\n    return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n  };\n  function arrayClone(arr, n) {\n    var copy = new Array(n);\n    for (var i = 0; i < n; ++i) copy[i] = arr[i];\n    return copy;\n  }\n  function spliceOne(list, index) {\n    for (; index + 1 < list.length; index++) list[index] = list[index + 1];\n    list.pop();\n  }\n  function unwrapListeners(arr) {\n    var ret = new Array(arr.length);\n    for (var i = 0; i < ret.length; ++i) {\n      ret[i] = arr[i].listener || arr[i];\n    }\n    return ret;\n  }\n  function once(emitter, name) {\n    return new Promise(function (resolve, reject) {\n      function errorListener(err) {\n        emitter.removeListener(name, resolver);\n        reject(err);\n      }\n      function resolver() {\n        if (typeof emitter.removeListener === 'function') {\n          emitter.removeListener('error', errorListener);\n        }\n        resolve([].slice.call(arguments));\n      }\n      eventTargetAgnosticAddListener(emitter, name, resolver, {\n        once: true\n      });\n      if (name !== 'error') {\n        addErrorHandlerIfEventEmitter(emitter, errorListener, {\n          once: true\n        });\n      }\n    });\n  }\n  function addErrorHandlerIfEventEmitter(emitter, handler, flags) {\n    if (typeof emitter.on === 'function') {\n      eventTargetAgnosticAddListener(emitter, 'error', handler, flags);\n    }\n  }\n  function eventTargetAgnosticAddListener(emitter, name, listener, flags) {\n    if (typeof emitter.on === 'function') {\n      if (flags.once) {\n        emitter.once(name, listener);\n      } else {\n        emitter.on(name, listener);\n      }\n    } else if (typeof emitter.addEventListener === 'function') {\n      // EventTarget does not have `error` event semantics like Node\n      // EventEmitters, we do not listen for `error` events here.\n      emitter.addEventListener(name, function wrapListener(arg) {\n        // IE does not have builtin `{ once: true }` support so we\n        // have to do it manually.\n        if (flags.once) {\n          emitter.removeEventListener(name, wrapListener);\n        }\n        listener(arg);\n      });\n    } else {\n      throw new TypeError('The \"emitter\" argument must be of type EventEmitter. Received type ' + typeof emitter);\n    }\n  }\n  return events.exports;\n}var eventsExports = requireEvents();/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\n\nlet logDisabled_ = true;\nlet deprecationWarnings_ = true;\n\n/**\n * Extract browser version out of the provided user agent string.\n *\n * @param {!string} uastring userAgent string.\n * @param {!string} expr Regular expression used as match criteria.\n * @param {!number} pos position in the version string to be returned.\n * @return {!number} browser version.\n */\nfunction extractVersion(uastring, expr, pos) {\n  const match = uastring.match(expr);\n  return match && match.length >= pos && parseFloat(match[pos], 10);\n}\n\n// Wraps the peerconnection event eventNameToWrap in a function\n// which returns the modified event object (or false to prevent\n// the event).\nfunction wrapPeerConnectionEvent(window, eventNameToWrap, wrapper) {\n  if (!window.RTCPeerConnection) {\n    return;\n  }\n  const proto = window.RTCPeerConnection.prototype;\n  const nativeAddEventListener = proto.addEventListener;\n  proto.addEventListener = function (nativeEventName, cb) {\n    if (nativeEventName !== eventNameToWrap) {\n      return nativeAddEventListener.apply(this, arguments);\n    }\n    const wrappedCallback = e => {\n      const modifiedEvent = wrapper(e);\n      if (modifiedEvent) {\n        if (cb.handleEvent) {\n          cb.handleEvent(modifiedEvent);\n        } else {\n          cb(modifiedEvent);\n        }\n      }\n    };\n    this._eventMap = this._eventMap || {};\n    if (!this._eventMap[eventNameToWrap]) {\n      this._eventMap[eventNameToWrap] = new Map();\n    }\n    this._eventMap[eventNameToWrap].set(cb, wrappedCallback);\n    return nativeAddEventListener.apply(this, [nativeEventName, wrappedCallback]);\n  };\n  const nativeRemoveEventListener = proto.removeEventListener;\n  proto.removeEventListener = function (nativeEventName, cb) {\n    if (nativeEventName !== eventNameToWrap || !this._eventMap || !this._eventMap[eventNameToWrap]) {\n      return nativeRemoveEventListener.apply(this, arguments);\n    }\n    if (!this._eventMap[eventNameToWrap].has(cb)) {\n      return nativeRemoveEventListener.apply(this, arguments);\n    }\n    const unwrappedCb = this._eventMap[eventNameToWrap].get(cb);\n    this._eventMap[eventNameToWrap].delete(cb);\n    if (this._eventMap[eventNameToWrap].size === 0) {\n      delete this._eventMap[eventNameToWrap];\n    }\n    if (Object.keys(this._eventMap).length === 0) {\n      delete this._eventMap;\n    }\n    return nativeRemoveEventListener.apply(this, [nativeEventName, unwrappedCb]);\n  };\n  Object.defineProperty(proto, 'on' + eventNameToWrap, {\n    get() {\n      return this['_on' + eventNameToWrap];\n    },\n    set(cb) {\n      if (this['_on' + eventNameToWrap]) {\n        this.removeEventListener(eventNameToWrap, this['_on' + eventNameToWrap]);\n        delete this['_on' + eventNameToWrap];\n      }\n      if (cb) {\n        this.addEventListener(eventNameToWrap, this['_on' + eventNameToWrap] = cb);\n      }\n    },\n    enumerable: true,\n    configurable: true\n  });\n}\nfunction disableLog(bool) {\n  if (typeof bool !== 'boolean') {\n    return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');\n  }\n  logDisabled_ = bool;\n  return bool ? 'adapter.js logging disabled' : 'adapter.js logging enabled';\n}\n\n/**\n * Disable or enable deprecation warnings\n * @param {!boolean} bool set to true to disable warnings.\n */\nfunction disableWarnings(bool) {\n  if (typeof bool !== 'boolean') {\n    return new Error('Argument type: ' + typeof bool + '. Please use a boolean.');\n  }\n  deprecationWarnings_ = !bool;\n  return 'adapter.js deprecation warnings ' + (bool ? 'disabled' : 'enabled');\n}\nfunction log() {\n  if (typeof window === 'object') {\n    if (logDisabled_) {\n      return;\n    }\n    if (typeof console !== 'undefined' && typeof console.log === 'function') {\n      console.log.apply(console, arguments);\n    }\n  }\n}\n\n/**\n * Shows a deprecation warning suggesting the modern and spec-compatible API.\n */\nfunction deprecated(oldMethod, newMethod) {\n  if (!deprecationWarnings_) {\n    return;\n  }\n  console.warn(oldMethod + ' is deprecated, please use ' + newMethod + ' instead.');\n}\n\n/**\n * Browser detector.\n *\n * @return {object} result containing browser and version\n *     properties.\n */\nfunction detectBrowser(window) {\n  // Returned result object.\n  const result = {\n    browser: null,\n    version: null\n  };\n\n  // Fail early if it's not a browser\n  if (typeof window === 'undefined' || !window.navigator || !window.navigator.userAgent) {\n    result.browser = 'Not a browser.';\n    return result;\n  }\n  const {\n    navigator\n  } = window;\n\n  // Prefer navigator.userAgentData.\n  if (navigator.userAgentData && navigator.userAgentData.brands) {\n    const chromium = navigator.userAgentData.brands.find(brand => {\n      return brand.brand === 'Chromium';\n    });\n    if (chromium) {\n      return {\n        browser: 'chrome',\n        version: parseInt(chromium.version, 10)\n      };\n    }\n  }\n  if (navigator.mozGetUserMedia) {\n    // Firefox.\n    result.browser = 'firefox';\n    result.version = parseInt(extractVersion(navigator.userAgent, /Firefox\\/(\\d+)\\./, 1));\n  } else if (navigator.webkitGetUserMedia || window.isSecureContext === false && window.webkitRTCPeerConnection) {\n    // Chrome, Chromium, Webview, Opera.\n    // Version matches Chrome/WebRTC version.\n    // Chrome 74 removed webkitGetUserMedia on http as well so we need the\n    // more complicated fallback to webkitRTCPeerConnection.\n    result.browser = 'chrome';\n    result.version = parseInt(extractVersion(navigator.userAgent, /Chrom(e|ium)\\/(\\d+)\\./, 2));\n  } else if (window.RTCPeerConnection && navigator.userAgent.match(/AppleWebKit\\/(\\d+)\\./)) {\n    // Safari.\n    result.browser = 'safari';\n    result.version = parseInt(extractVersion(navigator.userAgent, /AppleWebKit\\/(\\d+)\\./, 1));\n    result.supportsUnifiedPlan = window.RTCRtpTransceiver && 'currentDirection' in window.RTCRtpTransceiver.prototype;\n    // Only for internal usage.\n    result._safariVersion = extractVersion(navigator.userAgent, /Version\\/(\\d+(\\.?\\d+))/, 1);\n  } else {\n    // Default fallthrough: not supported.\n    result.browser = 'Not a supported browser.';\n    return result;\n  }\n  return result;\n}\n\n/**\n * Checks if something is an object.\n *\n * @param {*} val The something you want to check.\n * @return true if val is an object, false otherwise.\n */\nfunction isObject$1(val) {\n  return Object.prototype.toString.call(val) === '[object Object]';\n}\n\n/**\n * Remove all empty objects and undefined values\n * from a nested object -- an enhanced and vanilla version\n * of Lodash's `compact`.\n */\nfunction compactObject(data) {\n  if (!isObject$1(data)) {\n    return data;\n  }\n  return Object.keys(data).reduce(function (accumulator, key) {\n    const isObj = isObject$1(data[key]);\n    const value = isObj ? compactObject(data[key]) : data[key];\n    const isEmptyObject = isObj && !Object.keys(value).length;\n    if (value === undefined || isEmptyObject) {\n      return accumulator;\n    }\n    return Object.assign(accumulator, {\n      [key]: value\n    });\n  }, {});\n}\n\n/* iterates the stats graph recursively. */\nfunction walkStats(stats, base, resultSet) {\n  if (!base || resultSet.has(base.id)) {\n    return;\n  }\n  resultSet.set(base.id, base);\n  Object.keys(base).forEach(name => {\n    if (name.endsWith('Id')) {\n      walkStats(stats, stats.get(base[name]), resultSet);\n    } else if (name.endsWith('Ids')) {\n      base[name].forEach(id => {\n        walkStats(stats, stats.get(id), resultSet);\n      });\n    }\n  });\n}\n\n/* filter getStats for a sender/receiver track. */\nfunction filterStats(result, track, outbound) {\n  const streamStatsType = outbound ? 'outbound-rtp' : 'inbound-rtp';\n  const filteredResult = new Map();\n  if (track === null) {\n    return filteredResult;\n  }\n  const trackStats = [];\n  result.forEach(value => {\n    if (value.type === 'track' && value.trackIdentifier === track.id) {\n      trackStats.push(value);\n    }\n  });\n  trackStats.forEach(trackStat => {\n    result.forEach(stats => {\n      if (stats.type === streamStatsType && stats.trackId === trackStat.id) {\n        walkStats(result, stats, filteredResult);\n      }\n    });\n  });\n  return filteredResult;\n}/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\nconst logging = log;\nfunction shimGetUserMedia$2(window, browserDetails) {\n  const navigator = window && window.navigator;\n  if (!navigator.mediaDevices) {\n    return;\n  }\n  const constraintsToChrome_ = function (c) {\n    if (typeof c !== 'object' || c.mandatory || c.optional) {\n      return c;\n    }\n    const cc = {};\n    Object.keys(c).forEach(key => {\n      if (key === 'require' || key === 'advanced' || key === 'mediaSource') {\n        return;\n      }\n      const r = typeof c[key] === 'object' ? c[key] : {\n        ideal: c[key]\n      };\n      if (r.exact !== undefined && typeof r.exact === 'number') {\n        r.min = r.max = r.exact;\n      }\n      const oldname_ = function (prefix, name) {\n        if (prefix) {\n          return prefix + name.charAt(0).toUpperCase() + name.slice(1);\n        }\n        return name === 'deviceId' ? 'sourceId' : name;\n      };\n      if (r.ideal !== undefined) {\n        cc.optional = cc.optional || [];\n        let oc = {};\n        if (typeof r.ideal === 'number') {\n          oc[oldname_('min', key)] = r.ideal;\n          cc.optional.push(oc);\n          oc = {};\n          oc[oldname_('max', key)] = r.ideal;\n          cc.optional.push(oc);\n        } else {\n          oc[oldname_('', key)] = r.ideal;\n          cc.optional.push(oc);\n        }\n      }\n      if (r.exact !== undefined && typeof r.exact !== 'number') {\n        cc.mandatory = cc.mandatory || {};\n        cc.mandatory[oldname_('', key)] = r.exact;\n      } else {\n        ['min', 'max'].forEach(mix => {\n          if (r[mix] !== undefined) {\n            cc.mandatory = cc.mandatory || {};\n            cc.mandatory[oldname_(mix, key)] = r[mix];\n          }\n        });\n      }\n    });\n    if (c.advanced) {\n      cc.optional = (cc.optional || []).concat(c.advanced);\n    }\n    return cc;\n  };\n  const shimConstraints_ = function (constraints, func) {\n    if (browserDetails.version >= 61) {\n      return func(constraints);\n    }\n    constraints = JSON.parse(JSON.stringify(constraints));\n    if (constraints && typeof constraints.audio === 'object') {\n      const remap = function (obj, a, b) {\n        if (a in obj && !(b in obj)) {\n          obj[b] = obj[a];\n          delete obj[a];\n        }\n      };\n      constraints = JSON.parse(JSON.stringify(constraints));\n      remap(constraints.audio, 'autoGainControl', 'googAutoGainControl');\n      remap(constraints.audio, 'noiseSuppression', 'googNoiseSuppression');\n      constraints.audio = constraintsToChrome_(constraints.audio);\n    }\n    if (constraints && typeof constraints.video === 'object') {\n      // Shim facingMode for mobile & surface pro.\n      let face = constraints.video.facingMode;\n      face = face && (typeof face === 'object' ? face : {\n        ideal: face\n      });\n      const getSupportedFacingModeLies = browserDetails.version < 66;\n      if (face && (face.exact === 'user' || face.exact === 'environment' || face.ideal === 'user' || face.ideal === 'environment') && !(navigator.mediaDevices.getSupportedConstraints && navigator.mediaDevices.getSupportedConstraints().facingMode && !getSupportedFacingModeLies)) {\n        delete constraints.video.facingMode;\n        let matches;\n        if (face.exact === 'environment' || face.ideal === 'environment') {\n          matches = ['back', 'rear'];\n        } else if (face.exact === 'user' || face.ideal === 'user') {\n          matches = ['front'];\n        }\n        if (matches) {\n          // Look for matches in label, or use last cam for back (typical).\n          return navigator.mediaDevices.enumerateDevices().then(devices => {\n            devices = devices.filter(d => d.kind === 'videoinput');\n            let dev = devices.find(d => matches.some(match => d.label.toLowerCase().includes(match)));\n            if (!dev && devices.length && matches.includes('back')) {\n              dev = devices[devices.length - 1]; // more likely the back cam\n            }\n            if (dev) {\n              constraints.video.deviceId = face.exact ? {\n                exact: dev.deviceId\n              } : {\n                ideal: dev.deviceId\n              };\n            }\n            constraints.video = constraintsToChrome_(constraints.video);\n            logging('chrome: ' + JSON.stringify(constraints));\n            return func(constraints);\n          });\n        }\n      }\n      constraints.video = constraintsToChrome_(constraints.video);\n    }\n    logging('chrome: ' + JSON.stringify(constraints));\n    return func(constraints);\n  };\n  const shimError_ = function (e) {\n    if (browserDetails.version >= 64) {\n      return e;\n    }\n    return {\n      name: {\n        PermissionDeniedError: 'NotAllowedError',\n        PermissionDismissedError: 'NotAllowedError',\n        InvalidStateError: 'NotAllowedError',\n        DevicesNotFoundError: 'NotFoundError',\n        ConstraintNotSatisfiedError: 'OverconstrainedError',\n        TrackStartError: 'NotReadableError',\n        MediaDeviceFailedDueToShutdown: 'NotAllowedError',\n        MediaDeviceKillSwitchOn: 'NotAllowedError',\n        TabCaptureError: 'AbortError',\n        ScreenCaptureError: 'AbortError',\n        DeviceCaptureError: 'AbortError'\n      }[e.name] || e.name,\n      message: e.message,\n      constraint: e.constraint || e.constraintName,\n      toString() {\n        return this.name + (this.message && ': ') + this.message;\n      }\n    };\n  };\n  const getUserMedia_ = function (constraints, onSuccess, onError) {\n    shimConstraints_(constraints, c => {\n      navigator.webkitGetUserMedia(c, onSuccess, e => {\n        if (onError) {\n          onError(shimError_(e));\n        }\n      });\n    });\n  };\n  navigator.getUserMedia = getUserMedia_.bind(navigator);\n\n  // Even though Chrome 45 has navigator.mediaDevices and a getUserMedia\n  // function which returns a Promise, it does not accept spec-style\n  // constraints.\n  if (navigator.mediaDevices.getUserMedia) {\n    const origGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n    navigator.mediaDevices.getUserMedia = function (cs) {\n      return shimConstraints_(cs, c => origGetUserMedia(c).then(stream => {\n        if (c.audio && !stream.getAudioTracks().length || c.video && !stream.getVideoTracks().length) {\n          stream.getTracks().forEach(track => {\n            track.stop();\n          });\n          throw new DOMException('', 'NotFoundError');\n        }\n        return stream;\n      }, e => Promise.reject(shimError_(e))));\n    };\n  }\n}/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\nfunction shimMediaStream(window) {\n  window.MediaStream = window.MediaStream || window.webkitMediaStream;\n}\nfunction shimOnTrack$1(window) {\n  if (typeof window === 'object' && window.RTCPeerConnection && !('ontrack' in window.RTCPeerConnection.prototype)) {\n    Object.defineProperty(window.RTCPeerConnection.prototype, 'ontrack', {\n      get() {\n        return this._ontrack;\n      },\n      set(f) {\n        if (this._ontrack) {\n          this.removeEventListener('track', this._ontrack);\n        }\n        this.addEventListener('track', this._ontrack = f);\n      },\n      enumerable: true,\n      configurable: true\n    });\n    const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n    window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n      if (!this._ontrackpoly) {\n        this._ontrackpoly = e => {\n          // onaddstream does not fire when a track is added to an existing\n          // stream. But stream.onaddtrack is implemented so we use that.\n          e.stream.addEventListener('addtrack', te => {\n            let receiver;\n            if (window.RTCPeerConnection.prototype.getReceivers) {\n              receiver = this.getReceivers().find(r => r.track && r.track.id === te.track.id);\n            } else {\n              receiver = {\n                track: te.track\n              };\n            }\n            const event = new Event('track');\n            event.track = te.track;\n            event.receiver = receiver;\n            event.transceiver = {\n              receiver\n            };\n            event.streams = [e.stream];\n            this.dispatchEvent(event);\n          });\n          e.stream.getTracks().forEach(track => {\n            let receiver;\n            if (window.RTCPeerConnection.prototype.getReceivers) {\n              receiver = this.getReceivers().find(r => r.track && r.track.id === track.id);\n            } else {\n              receiver = {\n                track\n              };\n            }\n            const event = new Event('track');\n            event.track = track;\n            event.receiver = receiver;\n            event.transceiver = {\n              receiver\n            };\n            event.streams = [e.stream];\n            this.dispatchEvent(event);\n          });\n        };\n        this.addEventListener('addstream', this._ontrackpoly);\n      }\n      return origSetRemoteDescription.apply(this, arguments);\n    };\n  } else {\n    // even if RTCRtpTransceiver is in window, it is only used and\n    // emitted in unified-plan. Unfortunately this means we need\n    // to unconditionally wrap the event.\n    wrapPeerConnectionEvent(window, 'track', e => {\n      if (!e.transceiver) {\n        Object.defineProperty(e, 'transceiver', {\n          value: {\n            receiver: e.receiver\n          }\n        });\n      }\n      return e;\n    });\n  }\n}\nfunction shimGetSendersWithDtmf(window) {\n  // Overrides addTrack/removeTrack, depends on shimAddTrackRemoveTrack.\n  if (typeof window === 'object' && window.RTCPeerConnection && !('getSenders' in window.RTCPeerConnection.prototype) && 'createDTMFSender' in window.RTCPeerConnection.prototype) {\n    const shimSenderWithDtmf = function (pc, track) {\n      return {\n        track,\n        get dtmf() {\n          if (this._dtmf === undefined) {\n            if (track.kind === 'audio') {\n              this._dtmf = pc.createDTMFSender(track);\n            } else {\n              this._dtmf = null;\n            }\n          }\n          return this._dtmf;\n        },\n        _pc: pc\n      };\n    };\n\n    // augment addTrack when getSenders is not available.\n    if (!window.RTCPeerConnection.prototype.getSenders) {\n      window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n        this._senders = this._senders || [];\n        return this._senders.slice(); // return a copy of the internal state.\n      };\n      const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n      window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n        let sender = origAddTrack.apply(this, arguments);\n        if (!sender) {\n          sender = shimSenderWithDtmf(this, track);\n          this._senders.push(sender);\n        }\n        return sender;\n      };\n      const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n      window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n        origRemoveTrack.apply(this, arguments);\n        const idx = this._senders.indexOf(sender);\n        if (idx !== -1) {\n          this._senders.splice(idx, 1);\n        }\n      };\n    }\n    const origAddStream = window.RTCPeerConnection.prototype.addStream;\n    window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n      this._senders = this._senders || [];\n      origAddStream.apply(this, [stream]);\n      stream.getTracks().forEach(track => {\n        this._senders.push(shimSenderWithDtmf(this, track));\n      });\n    };\n    const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n    window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n      this._senders = this._senders || [];\n      origRemoveStream.apply(this, [stream]);\n      stream.getTracks().forEach(track => {\n        const sender = this._senders.find(s => s.track === track);\n        if (sender) {\n          // remove sender\n          this._senders.splice(this._senders.indexOf(sender), 1);\n        }\n      });\n    };\n  } else if (typeof window === 'object' && window.RTCPeerConnection && 'getSenders' in window.RTCPeerConnection.prototype && 'createDTMFSender' in window.RTCPeerConnection.prototype && window.RTCRtpSender && !('dtmf' in window.RTCRtpSender.prototype)) {\n    const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n    window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n      const senders = origGetSenders.apply(this, []);\n      senders.forEach(sender => sender._pc = this);\n      return senders;\n    };\n    Object.defineProperty(window.RTCRtpSender.prototype, 'dtmf', {\n      get() {\n        if (this._dtmf === undefined) {\n          if (this.track.kind === 'audio') {\n            this._dtmf = this._pc.createDTMFSender(this.track);\n          } else {\n            this._dtmf = null;\n          }\n        }\n        return this._dtmf;\n      }\n    });\n  }\n}\nfunction shimSenderReceiverGetStats(window) {\n  if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender && window.RTCRtpReceiver)) {\n    return;\n  }\n\n  // shim sender stats.\n  if (!('getStats' in window.RTCRtpSender.prototype)) {\n    const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n    if (origGetSenders) {\n      window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n        const senders = origGetSenders.apply(this, []);\n        senders.forEach(sender => sender._pc = this);\n        return senders;\n      };\n    }\n    const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n    if (origAddTrack) {\n      window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n        const sender = origAddTrack.apply(this, arguments);\n        sender._pc = this;\n        return sender;\n      };\n    }\n    window.RTCRtpSender.prototype.getStats = function getStats() {\n      const sender = this;\n      return this._pc.getStats().then(result =>\n      /* Note: this will include stats of all senders that\n       *   send a track with the same id as sender.track as\n       *   it is not possible to identify the RTCRtpSender.\n       */\n      filterStats(result, sender.track, true));\n    };\n  }\n\n  // shim receiver stats.\n  if (!('getStats' in window.RTCRtpReceiver.prototype)) {\n    const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n    if (origGetReceivers) {\n      window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n        const receivers = origGetReceivers.apply(this, []);\n        receivers.forEach(receiver => receiver._pc = this);\n        return receivers;\n      };\n    }\n    wrapPeerConnectionEvent(window, 'track', e => {\n      e.receiver._pc = e.srcElement;\n      return e;\n    });\n    window.RTCRtpReceiver.prototype.getStats = function getStats() {\n      const receiver = this;\n      return this._pc.getStats().then(result => filterStats(result, receiver.track, false));\n    };\n  }\n  if (!('getStats' in window.RTCRtpSender.prototype && 'getStats' in window.RTCRtpReceiver.prototype)) {\n    return;\n  }\n\n  // shim RTCPeerConnection.getStats(track).\n  const origGetStats = window.RTCPeerConnection.prototype.getStats;\n  window.RTCPeerConnection.prototype.getStats = function getStats() {\n    if (arguments.length > 0 && arguments[0] instanceof window.MediaStreamTrack) {\n      const track = arguments[0];\n      let sender;\n      let receiver;\n      let err;\n      this.getSenders().forEach(s => {\n        if (s.track === track) {\n          if (sender) {\n            err = true;\n          } else {\n            sender = s;\n          }\n        }\n      });\n      this.getReceivers().forEach(r => {\n        if (r.track === track) {\n          if (receiver) {\n            err = true;\n          } else {\n            receiver = r;\n          }\n        }\n        return r.track === track;\n      });\n      if (err || sender && receiver) {\n        return Promise.reject(new DOMException('There are more than one sender or receiver for the track.', 'InvalidAccessError'));\n      } else if (sender) {\n        return sender.getStats();\n      } else if (receiver) {\n        return receiver.getStats();\n      }\n      return Promise.reject(new DOMException('There is no sender or receiver for the track.', 'InvalidAccessError'));\n    }\n    return origGetStats.apply(this, arguments);\n  };\n}\nfunction shimAddTrackRemoveTrackWithNative(window) {\n  // shim addTrack/removeTrack with native variants in order to make\n  // the interactions with legacy getLocalStreams behave as in other browsers.\n  // Keeps a mapping stream.id => [stream, rtpsenders...]\n  window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n    return Object.keys(this._shimmedLocalStreams).map(streamId => this._shimmedLocalStreams[streamId][0]);\n  };\n  const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n  window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n    if (!stream) {\n      return origAddTrack.apply(this, arguments);\n    }\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n    const sender = origAddTrack.apply(this, arguments);\n    if (!this._shimmedLocalStreams[stream.id]) {\n      this._shimmedLocalStreams[stream.id] = [stream, sender];\n    } else if (this._shimmedLocalStreams[stream.id].indexOf(sender) === -1) {\n      this._shimmedLocalStreams[stream.id].push(sender);\n    }\n    return sender;\n  };\n  const origAddStream = window.RTCPeerConnection.prototype.addStream;\n  window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n    stream.getTracks().forEach(track => {\n      const alreadyExists = this.getSenders().find(s => s.track === track);\n      if (alreadyExists) {\n        throw new DOMException('Track already exists.', 'InvalidAccessError');\n      }\n    });\n    const existingSenders = this.getSenders();\n    origAddStream.apply(this, arguments);\n    const newSenders = this.getSenders().filter(newSender => existingSenders.indexOf(newSender) === -1);\n    this._shimmedLocalStreams[stream.id] = [stream].concat(newSenders);\n  };\n  const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n  window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n    delete this._shimmedLocalStreams[stream.id];\n    return origRemoveStream.apply(this, arguments);\n  };\n  const origRemoveTrack = window.RTCPeerConnection.prototype.removeTrack;\n  window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n    this._shimmedLocalStreams = this._shimmedLocalStreams || {};\n    if (sender) {\n      Object.keys(this._shimmedLocalStreams).forEach(streamId => {\n        const idx = this._shimmedLocalStreams[streamId].indexOf(sender);\n        if (idx !== -1) {\n          this._shimmedLocalStreams[streamId].splice(idx, 1);\n        }\n        if (this._shimmedLocalStreams[streamId].length === 1) {\n          delete this._shimmedLocalStreams[streamId];\n        }\n      });\n    }\n    return origRemoveTrack.apply(this, arguments);\n  };\n}\nfunction shimAddTrackRemoveTrack(window, browserDetails) {\n  if (!window.RTCPeerConnection) {\n    return;\n  }\n  // shim addTrack and removeTrack.\n  if (window.RTCPeerConnection.prototype.addTrack && browserDetails.version >= 65) {\n    return shimAddTrackRemoveTrackWithNative(window);\n  }\n\n  // also shim pc.getLocalStreams when addTrack is shimmed\n  // to return the original streams.\n  const origGetLocalStreams = window.RTCPeerConnection.prototype.getLocalStreams;\n  window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n    const nativeStreams = origGetLocalStreams.apply(this);\n    this._reverseStreams = this._reverseStreams || {};\n    return nativeStreams.map(stream => this._reverseStreams[stream.id]);\n  };\n  const origAddStream = window.RTCPeerConnection.prototype.addStream;\n  window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n    this._streams = this._streams || {};\n    this._reverseStreams = this._reverseStreams || {};\n    stream.getTracks().forEach(track => {\n      const alreadyExists = this.getSenders().find(s => s.track === track);\n      if (alreadyExists) {\n        throw new DOMException('Track already exists.', 'InvalidAccessError');\n      }\n    });\n    // Add identity mapping for consistency with addTrack.\n    // Unless this is being used with a stream from addTrack.\n    if (!this._reverseStreams[stream.id]) {\n      const newStream = new window.MediaStream(stream.getTracks());\n      this._streams[stream.id] = newStream;\n      this._reverseStreams[newStream.id] = stream;\n      stream = newStream;\n    }\n    origAddStream.apply(this, [stream]);\n  };\n  const origRemoveStream = window.RTCPeerConnection.prototype.removeStream;\n  window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n    this._streams = this._streams || {};\n    this._reverseStreams = this._reverseStreams || {};\n    origRemoveStream.apply(this, [this._streams[stream.id] || stream]);\n    delete this._reverseStreams[this._streams[stream.id] ? this._streams[stream.id].id : stream.id];\n    delete this._streams[stream.id];\n  };\n  window.RTCPeerConnection.prototype.addTrack = function addTrack(track, stream) {\n    if (this.signalingState === 'closed') {\n      throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n    }\n    const streams = [].slice.call(arguments, 1);\n    if (streams.length !== 1 || !streams[0].getTracks().find(t => t === track)) {\n      // this is not fully correct but all we can manage without\n      // [[associated MediaStreams]] internal slot.\n      throw new DOMException('The adapter.js addTrack polyfill only supports a single ' + ' stream which is associated with the specified track.', 'NotSupportedError');\n    }\n    const alreadyExists = this.getSenders().find(s => s.track === track);\n    if (alreadyExists) {\n      throw new DOMException('Track already exists.', 'InvalidAccessError');\n    }\n    this._streams = this._streams || {};\n    this._reverseStreams = this._reverseStreams || {};\n    const oldStream = this._streams[stream.id];\n    if (oldStream) {\n      // this is using odd Chrome behaviour, use with caution:\n      // https://bugs.chromium.org/p/webrtc/issues/detail?id=7815\n      // Note: we rely on the high-level addTrack/dtmf shim to\n      // create the sender with a dtmf sender.\n      oldStream.addTrack(track);\n\n      // Trigger ONN async.\n      Promise.resolve().then(() => {\n        this.dispatchEvent(new Event('negotiationneeded'));\n      });\n    } else {\n      const newStream = new window.MediaStream([track]);\n      this._streams[stream.id] = newStream;\n      this._reverseStreams[newStream.id] = stream;\n      this.addStream(newStream);\n    }\n    return this.getSenders().find(s => s.track === track);\n  };\n\n  // replace the internal stream id with the external one and\n  // vice versa.\n  function replaceInternalStreamId(pc, description) {\n    let sdp = description.sdp;\n    Object.keys(pc._reverseStreams || []).forEach(internalId => {\n      const externalStream = pc._reverseStreams[internalId];\n      const internalStream = pc._streams[externalStream.id];\n      sdp = sdp.replace(new RegExp(internalStream.id, 'g'), externalStream.id);\n    });\n    return new RTCSessionDescription({\n      type: description.type,\n      sdp\n    });\n  }\n  function replaceExternalStreamId(pc, description) {\n    let sdp = description.sdp;\n    Object.keys(pc._reverseStreams || []).forEach(internalId => {\n      const externalStream = pc._reverseStreams[internalId];\n      const internalStream = pc._streams[externalStream.id];\n      sdp = sdp.replace(new RegExp(externalStream.id, 'g'), internalStream.id);\n    });\n    return new RTCSessionDescription({\n      type: description.type,\n      sdp\n    });\n  }\n  ['createOffer', 'createAnswer'].forEach(function (method) {\n    const nativeMethod = window.RTCPeerConnection.prototype[method];\n    const methodObj = {\n      [method]() {\n        const args = arguments;\n        const isLegacyCall = arguments.length && typeof arguments[0] === 'function';\n        if (isLegacyCall) {\n          return nativeMethod.apply(this, [description => {\n            const desc = replaceInternalStreamId(this, description);\n            args[0].apply(null, [desc]);\n          }, err => {\n            if (args[1]) {\n              args[1].apply(null, err);\n            }\n          }, arguments[2]]);\n        }\n        return nativeMethod.apply(this, arguments).then(description => replaceInternalStreamId(this, description));\n      }\n    };\n    window.RTCPeerConnection.prototype[method] = methodObj[method];\n  });\n  const origSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n  window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n    if (!arguments.length || !arguments[0].type) {\n      return origSetLocalDescription.apply(this, arguments);\n    }\n    arguments[0] = replaceExternalStreamId(this, arguments[0]);\n    return origSetLocalDescription.apply(this, arguments);\n  };\n\n  // TODO: mangle getStats: https://w3c.github.io/webrtc-stats/#dom-rtcmediastreamstats-streamidentifier\n\n  const origLocalDescription = Object.getOwnPropertyDescriptor(window.RTCPeerConnection.prototype, 'localDescription');\n  Object.defineProperty(window.RTCPeerConnection.prototype, 'localDescription', {\n    get() {\n      const description = origLocalDescription.get.apply(this);\n      if (description.type === '') {\n        return description;\n      }\n      return replaceInternalStreamId(this, description);\n    }\n  });\n  window.RTCPeerConnection.prototype.removeTrack = function removeTrack(sender) {\n    if (this.signalingState === 'closed') {\n      throw new DOMException('The RTCPeerConnection\\'s signalingState is \\'closed\\'.', 'InvalidStateError');\n    }\n    // We can not yet check for sender instanceof RTCRtpSender\n    // since we shim RTPSender. So we check if sender._pc is set.\n    if (!sender._pc) {\n      throw new DOMException('Argument 1 of RTCPeerConnection.removeTrack ' + 'does not implement interface RTCRtpSender.', 'TypeError');\n    }\n    const isLocal = sender._pc === this;\n    if (!isLocal) {\n      throw new DOMException('Sender was not created by this connection.', 'InvalidAccessError');\n    }\n\n    // Search for the native stream the senders track belongs to.\n    this._streams = this._streams || {};\n    let stream;\n    Object.keys(this._streams).forEach(streamid => {\n      const hasTrack = this._streams[streamid].getTracks().find(track => sender.track === track);\n      if (hasTrack) {\n        stream = this._streams[streamid];\n      }\n    });\n    if (stream) {\n      if (stream.getTracks().length === 1) {\n        // if this is the last track of the stream, remove the stream. This\n        // takes care of any shimmed _senders.\n        this.removeStream(this._reverseStreams[stream.id]);\n      } else {\n        // relying on the same odd chrome behaviour as above.\n        stream.removeTrack(sender.track);\n      }\n      this.dispatchEvent(new Event('negotiationneeded'));\n    }\n  };\n}\nfunction shimPeerConnection$1(window, browserDetails) {\n  if (!window.RTCPeerConnection && window.webkitRTCPeerConnection) {\n    // very basic support for old versions.\n    window.RTCPeerConnection = window.webkitRTCPeerConnection;\n  }\n  if (!window.RTCPeerConnection) {\n    return;\n  }\n\n  // shim implicit creation of RTCSessionDescription/RTCIceCandidate\n  if (browserDetails.version < 53) {\n    ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n      const nativeMethod = window.RTCPeerConnection.prototype[method];\n      const methodObj = {\n        [method]() {\n          arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n          return nativeMethod.apply(this, arguments);\n        }\n      };\n      window.RTCPeerConnection.prototype[method] = methodObj[method];\n    });\n  }\n}\n\n// Attempt to fix ONN in plan-b mode.\nfunction fixNegotiationNeeded(window, browserDetails) {\n  wrapPeerConnectionEvent(window, 'negotiationneeded', e => {\n    const pc = e.target;\n    if (browserDetails.version < 72 || pc.getConfiguration && pc.getConfiguration().sdpSemantics === 'plan-b') {\n      if (pc.signalingState !== 'stable') {\n        return;\n      }\n    }\n    return e;\n  });\n}var chromeShim=/*#__PURE__*/Object.freeze({__proto__:null,fixNegotiationNeeded:fixNegotiationNeeded,shimAddTrackRemoveTrack:shimAddTrackRemoveTrack,shimAddTrackRemoveTrackWithNative:shimAddTrackRemoveTrackWithNative,shimGetSendersWithDtmf:shimGetSendersWithDtmf,shimGetUserMedia:shimGetUserMedia$2,shimMediaStream:shimMediaStream,shimOnTrack:shimOnTrack$1,shimPeerConnection:shimPeerConnection$1,shimSenderReceiverGetStats:shimSenderReceiverGetStats});/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\nfunction shimGetUserMedia$1(window, browserDetails) {\n  const navigator = window && window.navigator;\n  const MediaStreamTrack = window && window.MediaStreamTrack;\n  navigator.getUserMedia = function (constraints, onSuccess, onError) {\n    // Replace Firefox 44+'s deprecation warning with unprefixed version.\n    deprecated('navigator.getUserMedia', 'navigator.mediaDevices.getUserMedia');\n    navigator.mediaDevices.getUserMedia(constraints).then(onSuccess, onError);\n  };\n  if (!(browserDetails.version > 55 && 'autoGainControl' in navigator.mediaDevices.getSupportedConstraints())) {\n    const remap = function (obj, a, b) {\n      if (a in obj && !(b in obj)) {\n        obj[b] = obj[a];\n        delete obj[a];\n      }\n    };\n    const nativeGetUserMedia = navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);\n    navigator.mediaDevices.getUserMedia = function (c) {\n      if (typeof c === 'object' && typeof c.audio === 'object') {\n        c = JSON.parse(JSON.stringify(c));\n        remap(c.audio, 'autoGainControl', 'mozAutoGainControl');\n        remap(c.audio, 'noiseSuppression', 'mozNoiseSuppression');\n      }\n      return nativeGetUserMedia(c);\n    };\n    if (MediaStreamTrack && MediaStreamTrack.prototype.getSettings) {\n      const nativeGetSettings = MediaStreamTrack.prototype.getSettings;\n      MediaStreamTrack.prototype.getSettings = function () {\n        const obj = nativeGetSettings.apply(this, arguments);\n        remap(obj, 'mozAutoGainControl', 'autoGainControl');\n        remap(obj, 'mozNoiseSuppression', 'noiseSuppression');\n        return obj;\n      };\n    }\n    if (MediaStreamTrack && MediaStreamTrack.prototype.applyConstraints) {\n      const nativeApplyConstraints = MediaStreamTrack.prototype.applyConstraints;\n      MediaStreamTrack.prototype.applyConstraints = function (c) {\n        if (this.kind === 'audio' && typeof c === 'object') {\n          c = JSON.parse(JSON.stringify(c));\n          remap(c, 'autoGainControl', 'mozAutoGainControl');\n          remap(c, 'noiseSuppression', 'mozNoiseSuppression');\n        }\n        return nativeApplyConstraints.apply(this, [c]);\n      };\n    }\n  }\n}/*\n *  Copyright (c) 2018 The adapter.js project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\n\nfunction shimGetDisplayMedia(window, preferredMediaSource) {\n  if (window.navigator.mediaDevices && 'getDisplayMedia' in window.navigator.mediaDevices) {\n    return;\n  }\n  if (!window.navigator.mediaDevices) {\n    return;\n  }\n  window.navigator.mediaDevices.getDisplayMedia = function getDisplayMedia(constraints) {\n    if (!(constraints && constraints.video)) {\n      const err = new DOMException('getDisplayMedia without video ' + 'constraints is undefined');\n      err.name = 'NotFoundError';\n      // from https://heycam.github.io/webidl/#idl-DOMException-error-names\n      err.code = 8;\n      return Promise.reject(err);\n    }\n    if (constraints.video === true) {\n      constraints.video = {\n        mediaSource: preferredMediaSource\n      };\n    } else {\n      constraints.video.mediaSource = preferredMediaSource;\n    }\n    return window.navigator.mediaDevices.getUserMedia(constraints);\n  };\n}/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\nfunction shimOnTrack(window) {\n  if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n    Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n      get() {\n        return {\n          receiver: this.receiver\n        };\n      }\n    });\n  }\n}\nfunction shimPeerConnection(window, browserDetails) {\n  if (typeof window !== 'object' || !(window.RTCPeerConnection || window.mozRTCPeerConnection)) {\n    return; // probably media.peerconnection.enabled=false in about:config\n  }\n  if (!window.RTCPeerConnection && window.mozRTCPeerConnection) {\n    // very basic support for old versions.\n    window.RTCPeerConnection = window.mozRTCPeerConnection;\n  }\n  if (browserDetails.version < 53) {\n    // shim away need for obsolete RTCIceCandidate/RTCSessionDescription.\n    ['setLocalDescription', 'setRemoteDescription', 'addIceCandidate'].forEach(function (method) {\n      const nativeMethod = window.RTCPeerConnection.prototype[method];\n      const methodObj = {\n        [method]() {\n          arguments[0] = new (method === 'addIceCandidate' ? window.RTCIceCandidate : window.RTCSessionDescription)(arguments[0]);\n          return nativeMethod.apply(this, arguments);\n        }\n      };\n      window.RTCPeerConnection.prototype[method] = methodObj[method];\n    });\n  }\n  const modernStatsTypes = {\n    inboundrtp: 'inbound-rtp',\n    outboundrtp: 'outbound-rtp',\n    candidatepair: 'candidate-pair',\n    localcandidate: 'local-candidate',\n    remotecandidate: 'remote-candidate'\n  };\n  const nativeGetStats = window.RTCPeerConnection.prototype.getStats;\n  window.RTCPeerConnection.prototype.getStats = function getStats() {\n    const [selector, onSucc, onErr] = arguments;\n    return nativeGetStats.apply(this, [selector || null]).then(stats => {\n      if (browserDetails.version < 53 && !onSucc) {\n        // Shim only promise getStats with spec-hyphens in type names\n        // Leave callback version alone; misc old uses of forEach before Map\n        try {\n          stats.forEach(stat => {\n            stat.type = modernStatsTypes[stat.type] || stat.type;\n          });\n        } catch (e) {\n          if (e.name !== 'TypeError') {\n            throw e;\n          }\n          // Avoid TypeError: \"type\" is read-only, in old versions. 34-43ish\n          stats.forEach((stat, i) => {\n            stats.set(i, Object.assign({}, stat, {\n              type: modernStatsTypes[stat.type] || stat.type\n            }));\n          });\n        }\n      }\n      return stats;\n    }).then(onSucc, onErr);\n  };\n}\nfunction shimSenderGetStats(window) {\n  if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n    return;\n  }\n  if (window.RTCRtpSender && 'getStats' in window.RTCRtpSender.prototype) {\n    return;\n  }\n  const origGetSenders = window.RTCPeerConnection.prototype.getSenders;\n  if (origGetSenders) {\n    window.RTCPeerConnection.prototype.getSenders = function getSenders() {\n      const senders = origGetSenders.apply(this, []);\n      senders.forEach(sender => sender._pc = this);\n      return senders;\n    };\n  }\n  const origAddTrack = window.RTCPeerConnection.prototype.addTrack;\n  if (origAddTrack) {\n    window.RTCPeerConnection.prototype.addTrack = function addTrack() {\n      const sender = origAddTrack.apply(this, arguments);\n      sender._pc = this;\n      return sender;\n    };\n  }\n  window.RTCRtpSender.prototype.getStats = function getStats() {\n    return this.track ? this._pc.getStats(this.track) : Promise.resolve(new Map());\n  };\n}\nfunction shimReceiverGetStats(window) {\n  if (!(typeof window === 'object' && window.RTCPeerConnection && window.RTCRtpSender)) {\n    return;\n  }\n  if (window.RTCRtpSender && 'getStats' in window.RTCRtpReceiver.prototype) {\n    return;\n  }\n  const origGetReceivers = window.RTCPeerConnection.prototype.getReceivers;\n  if (origGetReceivers) {\n    window.RTCPeerConnection.prototype.getReceivers = function getReceivers() {\n      const receivers = origGetReceivers.apply(this, []);\n      receivers.forEach(receiver => receiver._pc = this);\n      return receivers;\n    };\n  }\n  wrapPeerConnectionEvent(window, 'track', e => {\n    e.receiver._pc = e.srcElement;\n    return e;\n  });\n  window.RTCRtpReceiver.prototype.getStats = function getStats() {\n    return this._pc.getStats(this.track);\n  };\n}\nfunction shimRemoveStream(window) {\n  if (!window.RTCPeerConnection || 'removeStream' in window.RTCPeerConnection.prototype) {\n    return;\n  }\n  window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n    deprecated('removeStream', 'removeTrack');\n    this.getSenders().forEach(sender => {\n      if (sender.track && stream.getTracks().includes(sender.track)) {\n        this.removeTrack(sender);\n      }\n    });\n  };\n}\nfunction shimRTCDataChannel(window) {\n  // rename DataChannel to RTCDataChannel (native fix in FF60):\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=1173851\n  if (window.DataChannel && !window.RTCDataChannel) {\n    window.RTCDataChannel = window.DataChannel;\n  }\n}\nfunction shimAddTransceiver(window) {\n  // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n  // Firefox ignores the init sendEncodings options passed to addTransceiver\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n  if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n    return;\n  }\n  const origAddTransceiver = window.RTCPeerConnection.prototype.addTransceiver;\n  if (origAddTransceiver) {\n    window.RTCPeerConnection.prototype.addTransceiver = function addTransceiver() {\n      this.setParametersPromises = [];\n      // WebIDL input coercion and validation\n      let sendEncodings = arguments[1] && arguments[1].sendEncodings;\n      if (sendEncodings === undefined) {\n        sendEncodings = [];\n      }\n      sendEncodings = [...sendEncodings];\n      const shouldPerformCheck = sendEncodings.length > 0;\n      if (shouldPerformCheck) {\n        // If sendEncodings params are provided, validate grammar\n        sendEncodings.forEach(encodingParam => {\n          if ('rid' in encodingParam) {\n            const ridRegex = /^[a-z0-9]{0,16}$/i;\n            if (!ridRegex.test(encodingParam.rid)) {\n              throw new TypeError('Invalid RID value provided.');\n            }\n          }\n          if ('scaleResolutionDownBy' in encodingParam) {\n            if (!(parseFloat(encodingParam.scaleResolutionDownBy) >= 1.0)) {\n              throw new RangeError('scale_resolution_down_by must be >= 1.0');\n            }\n          }\n          if ('maxFramerate' in encodingParam) {\n            if (!(parseFloat(encodingParam.maxFramerate) >= 0)) {\n              throw new RangeError('max_framerate must be >= 0.0');\n            }\n          }\n        });\n      }\n      const transceiver = origAddTransceiver.apply(this, arguments);\n      if (shouldPerformCheck) {\n        // Check if the init options were applied. If not we do this in an\n        // asynchronous way and save the promise reference in a global object.\n        // This is an ugly hack, but at the same time is way more robust than\n        // checking the sender parameters before and after the createOffer\n        // Also note that after the createoffer we are not 100% sure that\n        // the params were asynchronously applied so we might miss the\n        // opportunity to recreate offer.\n        const {\n          sender\n        } = transceiver;\n        const params = sender.getParameters();\n        if (!('encodings' in params) ||\n        // Avoid being fooled by patched getParameters() below.\n        params.encodings.length === 1 && Object.keys(params.encodings[0]).length === 0) {\n          params.encodings = sendEncodings;\n          sender.sendEncodings = sendEncodings;\n          this.setParametersPromises.push(sender.setParameters(params).then(() => {\n            delete sender.sendEncodings;\n          }).catch(() => {\n            delete sender.sendEncodings;\n          }));\n        }\n      }\n      return transceiver;\n    };\n  }\n}\nfunction shimGetParameters(window) {\n  if (!(typeof window === 'object' && window.RTCRtpSender)) {\n    return;\n  }\n  const origGetParameters = window.RTCRtpSender.prototype.getParameters;\n  if (origGetParameters) {\n    window.RTCRtpSender.prototype.getParameters = function getParameters() {\n      const params = origGetParameters.apply(this, arguments);\n      if (!('encodings' in params)) {\n        params.encodings = [].concat(this.sendEncodings || [{}]);\n      }\n      return params;\n    };\n  }\n}\nfunction shimCreateOffer(window) {\n  // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n  // Firefox ignores the init sendEncodings options passed to addTransceiver\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n  if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n    return;\n  }\n  const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n  window.RTCPeerConnection.prototype.createOffer = function createOffer() {\n    if (this.setParametersPromises && this.setParametersPromises.length) {\n      return Promise.all(this.setParametersPromises).then(() => {\n        return origCreateOffer.apply(this, arguments);\n      }).finally(() => {\n        this.setParametersPromises = [];\n      });\n    }\n    return origCreateOffer.apply(this, arguments);\n  };\n}\nfunction shimCreateAnswer(window) {\n  // https://github.com/webrtcHacks/adapter/issues/998#issuecomment-516921647\n  // Firefox ignores the init sendEncodings options passed to addTransceiver\n  // https://bugzilla.mozilla.org/show_bug.cgi?id=1396918\n  if (!(typeof window === 'object' && window.RTCPeerConnection)) {\n    return;\n  }\n  const origCreateAnswer = window.RTCPeerConnection.prototype.createAnswer;\n  window.RTCPeerConnection.prototype.createAnswer = function createAnswer() {\n    if (this.setParametersPromises && this.setParametersPromises.length) {\n      return Promise.all(this.setParametersPromises).then(() => {\n        return origCreateAnswer.apply(this, arguments);\n      }).finally(() => {\n        this.setParametersPromises = [];\n      });\n    }\n    return origCreateAnswer.apply(this, arguments);\n  };\n}var firefoxShim=/*#__PURE__*/Object.freeze({__proto__:null,shimAddTransceiver:shimAddTransceiver,shimCreateAnswer:shimCreateAnswer,shimCreateOffer:shimCreateOffer,shimGetDisplayMedia:shimGetDisplayMedia,shimGetParameters:shimGetParameters,shimGetUserMedia:shimGetUserMedia$1,shimOnTrack:shimOnTrack,shimPeerConnection:shimPeerConnection,shimRTCDataChannel:shimRTCDataChannel,shimReceiverGetStats:shimReceiverGetStats,shimRemoveStream:shimRemoveStream,shimSenderGetStats:shimSenderGetStats});/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\nfunction shimLocalStreamsAPI(window) {\n  if (typeof window !== 'object' || !window.RTCPeerConnection) {\n    return;\n  }\n  if (!('getLocalStreams' in window.RTCPeerConnection.prototype)) {\n    window.RTCPeerConnection.prototype.getLocalStreams = function getLocalStreams() {\n      if (!this._localStreams) {\n        this._localStreams = [];\n      }\n      return this._localStreams;\n    };\n  }\n  if (!('addStream' in window.RTCPeerConnection.prototype)) {\n    const _addTrack = window.RTCPeerConnection.prototype.addTrack;\n    window.RTCPeerConnection.prototype.addStream = function addStream(stream) {\n      if (!this._localStreams) {\n        this._localStreams = [];\n      }\n      if (!this._localStreams.includes(stream)) {\n        this._localStreams.push(stream);\n      }\n      // Try to emulate Chrome's behaviour of adding in audio-video order.\n      // Safari orders by track id.\n      stream.getAudioTracks().forEach(track => _addTrack.call(this, track, stream));\n      stream.getVideoTracks().forEach(track => _addTrack.call(this, track, stream));\n    };\n    window.RTCPeerConnection.prototype.addTrack = function addTrack(track) {\n      for (var _len = arguments.length, streams = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        streams[_key - 1] = arguments[_key];\n      }\n      if (streams) {\n        streams.forEach(stream => {\n          if (!this._localStreams) {\n            this._localStreams = [stream];\n          } else if (!this._localStreams.includes(stream)) {\n            this._localStreams.push(stream);\n          }\n        });\n      }\n      return _addTrack.apply(this, arguments);\n    };\n  }\n  if (!('removeStream' in window.RTCPeerConnection.prototype)) {\n    window.RTCPeerConnection.prototype.removeStream = function removeStream(stream) {\n      if (!this._localStreams) {\n        this._localStreams = [];\n      }\n      const index = this._localStreams.indexOf(stream);\n      if (index === -1) {\n        return;\n      }\n      this._localStreams.splice(index, 1);\n      const tracks = stream.getTracks();\n      this.getSenders().forEach(sender => {\n        if (tracks.includes(sender.track)) {\n          this.removeTrack(sender);\n        }\n      });\n    };\n  }\n}\nfunction shimRemoteStreamsAPI(window) {\n  if (typeof window !== 'object' || !window.RTCPeerConnection) {\n    return;\n  }\n  if (!('getRemoteStreams' in window.RTCPeerConnection.prototype)) {\n    window.RTCPeerConnection.prototype.getRemoteStreams = function getRemoteStreams() {\n      return this._remoteStreams ? this._remoteStreams : [];\n    };\n  }\n  if (!('onaddstream' in window.RTCPeerConnection.prototype)) {\n    Object.defineProperty(window.RTCPeerConnection.prototype, 'onaddstream', {\n      get() {\n        return this._onaddstream;\n      },\n      set(f) {\n        if (this._onaddstream) {\n          this.removeEventListener('addstream', this._onaddstream);\n          this.removeEventListener('track', this._onaddstreampoly);\n        }\n        this.addEventListener('addstream', this._onaddstream = f);\n        this.addEventListener('track', this._onaddstreampoly = e => {\n          e.streams.forEach(stream => {\n            if (!this._remoteStreams) {\n              this._remoteStreams = [];\n            }\n            if (this._remoteStreams.includes(stream)) {\n              return;\n            }\n            this._remoteStreams.push(stream);\n            const event = new Event('addstream');\n            event.stream = stream;\n            this.dispatchEvent(event);\n          });\n        });\n      }\n    });\n    const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n    window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n      const pc = this;\n      if (!this._onaddstreampoly) {\n        this.addEventListener('track', this._onaddstreampoly = function (e) {\n          e.streams.forEach(stream => {\n            if (!pc._remoteStreams) {\n              pc._remoteStreams = [];\n            }\n            if (pc._remoteStreams.indexOf(stream) >= 0) {\n              return;\n            }\n            pc._remoteStreams.push(stream);\n            const event = new Event('addstream');\n            event.stream = stream;\n            pc.dispatchEvent(event);\n          });\n        });\n      }\n      return origSetRemoteDescription.apply(pc, arguments);\n    };\n  }\n}\nfunction shimCallbacksAPI(window) {\n  if (typeof window !== 'object' || !window.RTCPeerConnection) {\n    return;\n  }\n  const prototype = window.RTCPeerConnection.prototype;\n  const origCreateOffer = prototype.createOffer;\n  const origCreateAnswer = prototype.createAnswer;\n  const setLocalDescription = prototype.setLocalDescription;\n  const setRemoteDescription = prototype.setRemoteDescription;\n  const addIceCandidate = prototype.addIceCandidate;\n  prototype.createOffer = function createOffer(successCallback, failureCallback) {\n    const options = arguments.length >= 2 ? arguments[2] : arguments[0];\n    const promise = origCreateOffer.apply(this, [options]);\n    if (!failureCallback) {\n      return promise;\n    }\n    promise.then(successCallback, failureCallback);\n    return Promise.resolve();\n  };\n  prototype.createAnswer = function createAnswer(successCallback, failureCallback) {\n    const options = arguments.length >= 2 ? arguments[2] : arguments[0];\n    const promise = origCreateAnswer.apply(this, [options]);\n    if (!failureCallback) {\n      return promise;\n    }\n    promise.then(successCallback, failureCallback);\n    return Promise.resolve();\n  };\n  let withCallback = function (description, successCallback, failureCallback) {\n    const promise = setLocalDescription.apply(this, [description]);\n    if (!failureCallback) {\n      return promise;\n    }\n    promise.then(successCallback, failureCallback);\n    return Promise.resolve();\n  };\n  prototype.setLocalDescription = withCallback;\n  withCallback = function (description, successCallback, failureCallback) {\n    const promise = setRemoteDescription.apply(this, [description]);\n    if (!failureCallback) {\n      return promise;\n    }\n    promise.then(successCallback, failureCallback);\n    return Promise.resolve();\n  };\n  prototype.setRemoteDescription = withCallback;\n  withCallback = function (candidate, successCallback, failureCallback) {\n    const promise = addIceCandidate.apply(this, [candidate]);\n    if (!failureCallback) {\n      return promise;\n    }\n    promise.then(successCallback, failureCallback);\n    return Promise.resolve();\n  };\n  prototype.addIceCandidate = withCallback;\n}\nfunction shimGetUserMedia(window) {\n  const navigator = window && window.navigator;\n  if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n    // shim not needed in Safari 12.1\n    const mediaDevices = navigator.mediaDevices;\n    const _getUserMedia = mediaDevices.getUserMedia.bind(mediaDevices);\n    navigator.mediaDevices.getUserMedia = constraints => {\n      return _getUserMedia(shimConstraints(constraints));\n    };\n  }\n  if (!navigator.getUserMedia && navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n    navigator.getUserMedia = function getUserMedia(constraints, cb, errcb) {\n      navigator.mediaDevices.getUserMedia(constraints).then(cb, errcb);\n    }.bind(navigator);\n  }\n}\nfunction shimConstraints(constraints) {\n  if (constraints && constraints.video !== undefined) {\n    return Object.assign({}, constraints, {\n      video: compactObject(constraints.video)\n    });\n  }\n  return constraints;\n}\nfunction shimRTCIceServerUrls(window) {\n  if (!window.RTCPeerConnection) {\n    return;\n  }\n  // migrate from non-spec RTCIceServer.url to RTCIceServer.urls\n  const OrigPeerConnection = window.RTCPeerConnection;\n  window.RTCPeerConnection = function RTCPeerConnection(pcConfig, pcConstraints) {\n    if (pcConfig && pcConfig.iceServers) {\n      const newIceServers = [];\n      for (let i = 0; i < pcConfig.iceServers.length; i++) {\n        let server = pcConfig.iceServers[i];\n        if (server.urls === undefined && server.url) {\n          deprecated('RTCIceServer.url', 'RTCIceServer.urls');\n          server = JSON.parse(JSON.stringify(server));\n          server.urls = server.url;\n          delete server.url;\n          newIceServers.push(server);\n        } else {\n          newIceServers.push(pcConfig.iceServers[i]);\n        }\n      }\n      pcConfig.iceServers = newIceServers;\n    }\n    return new OrigPeerConnection(pcConfig, pcConstraints);\n  };\n  window.RTCPeerConnection.prototype = OrigPeerConnection.prototype;\n  // wrap static methods. Currently just generateCertificate.\n  if ('generateCertificate' in OrigPeerConnection) {\n    Object.defineProperty(window.RTCPeerConnection, 'generateCertificate', {\n      get() {\n        return OrigPeerConnection.generateCertificate;\n      }\n    });\n  }\n}\nfunction shimTrackEventTransceiver(window) {\n  // Add event.transceiver member over deprecated event.receiver\n  if (typeof window === 'object' && window.RTCTrackEvent && 'receiver' in window.RTCTrackEvent.prototype && !('transceiver' in window.RTCTrackEvent.prototype)) {\n    Object.defineProperty(window.RTCTrackEvent.prototype, 'transceiver', {\n      get() {\n        return {\n          receiver: this.receiver\n        };\n      }\n    });\n  }\n}\nfunction shimCreateOfferLegacy(window) {\n  const origCreateOffer = window.RTCPeerConnection.prototype.createOffer;\n  window.RTCPeerConnection.prototype.createOffer = function createOffer(offerOptions) {\n    if (offerOptions) {\n      if (typeof offerOptions.offerToReceiveAudio !== 'undefined') {\n        // support bit values\n        offerOptions.offerToReceiveAudio = !!offerOptions.offerToReceiveAudio;\n      }\n      const audioTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'audio');\n      if (offerOptions.offerToReceiveAudio === false && audioTransceiver) {\n        if (audioTransceiver.direction === 'sendrecv') {\n          if (audioTransceiver.setDirection) {\n            audioTransceiver.setDirection('sendonly');\n          } else {\n            audioTransceiver.direction = 'sendonly';\n          }\n        } else if (audioTransceiver.direction === 'recvonly') {\n          if (audioTransceiver.setDirection) {\n            audioTransceiver.setDirection('inactive');\n          } else {\n            audioTransceiver.direction = 'inactive';\n          }\n        }\n      } else if (offerOptions.offerToReceiveAudio === true && !audioTransceiver) {\n        this.addTransceiver('audio', {\n          direction: 'recvonly'\n        });\n      }\n      if (typeof offerOptions.offerToReceiveVideo !== 'undefined') {\n        // support bit values\n        offerOptions.offerToReceiveVideo = !!offerOptions.offerToReceiveVideo;\n      }\n      const videoTransceiver = this.getTransceivers().find(transceiver => transceiver.receiver.track.kind === 'video');\n      if (offerOptions.offerToReceiveVideo === false && videoTransceiver) {\n        if (videoTransceiver.direction === 'sendrecv') {\n          if (videoTransceiver.setDirection) {\n            videoTransceiver.setDirection('sendonly');\n          } else {\n            videoTransceiver.direction = 'sendonly';\n          }\n        } else if (videoTransceiver.direction === 'recvonly') {\n          if (videoTransceiver.setDirection) {\n            videoTransceiver.setDirection('inactive');\n          } else {\n            videoTransceiver.direction = 'inactive';\n          }\n        }\n      } else if (offerOptions.offerToReceiveVideo === true && !videoTransceiver) {\n        this.addTransceiver('video', {\n          direction: 'recvonly'\n        });\n      }\n    }\n    return origCreateOffer.apply(this, arguments);\n  };\n}\nfunction shimAudioContext(window) {\n  if (typeof window !== 'object' || window.AudioContext) {\n    return;\n  }\n  window.AudioContext = window.webkitAudioContext;\n}var safariShim=/*#__PURE__*/Object.freeze({__proto__:null,shimAudioContext:shimAudioContext,shimCallbacksAPI:shimCallbacksAPI,shimConstraints:shimConstraints,shimCreateOfferLegacy:shimCreateOfferLegacy,shimGetUserMedia:shimGetUserMedia,shimLocalStreamsAPI:shimLocalStreamsAPI,shimRTCIceServerUrls:shimRTCIceServerUrls,shimRemoteStreamsAPI:shimRemoteStreamsAPI,shimTrackEventTransceiver:shimTrackEventTransceiver});var sdp$1 = {exports: {}};/* eslint-env node */\nvar hasRequiredSdp;\nfunction requireSdp() {\n  if (hasRequiredSdp) return sdp$1.exports;\n  hasRequiredSdp = 1;\n  (function (module) {\n\n    // SDP helpers.\n    const SDPUtils = {};\n\n    // Generate an alphanumeric identifier for cname or mids.\n    // TODO: use UUIDs instead? https://gist.github.com/jed/982883\n    SDPUtils.generateIdentifier = function () {\n      return Math.random().toString(36).substring(2, 12);\n    };\n\n    // The RTCP CNAME used by all peerconnections from the same JS.\n    SDPUtils.localCName = SDPUtils.generateIdentifier();\n\n    // Splits SDP into lines, dealing with both CRLF and LF.\n    SDPUtils.splitLines = function (blob) {\n      return blob.trim().split('\\n').map(line => line.trim());\n    };\n    // Splits SDP into sessionpart and mediasections. Ensures CRLF.\n    SDPUtils.splitSections = function (blob) {\n      const parts = blob.split('\\nm=');\n      return parts.map((part, index) => (index > 0 ? 'm=' + part : part).trim() + '\\r\\n');\n    };\n\n    // Returns the session description.\n    SDPUtils.getDescription = function (blob) {\n      const sections = SDPUtils.splitSections(blob);\n      return sections && sections[0];\n    };\n\n    // Returns the individual media sections.\n    SDPUtils.getMediaSections = function (blob) {\n      const sections = SDPUtils.splitSections(blob);\n      sections.shift();\n      return sections;\n    };\n\n    // Returns lines that start with a certain prefix.\n    SDPUtils.matchPrefix = function (blob, prefix) {\n      return SDPUtils.splitLines(blob).filter(line => line.indexOf(prefix) === 0);\n    };\n\n    // Parses an ICE candidate line. Sample input:\n    // candidate:702786350 2 udp 41819902 8.8.8.8 60769 typ relay raddr 8.8.8.8\n    // rport 55996\"\n    // Input can be prefixed with a=.\n    SDPUtils.parseCandidate = function (line) {\n      let parts;\n      // Parse both variants.\n      if (line.indexOf('a=candidate:') === 0) {\n        parts = line.substring(12).split(' ');\n      } else {\n        parts = line.substring(10).split(' ');\n      }\n      const candidate = {\n        foundation: parts[0],\n        component: {\n          1: 'rtp',\n          2: 'rtcp'\n        }[parts[1]] || parts[1],\n        protocol: parts[2].toLowerCase(),\n        priority: parseInt(parts[3], 10),\n        ip: parts[4],\n        address: parts[4],\n        // address is an alias for ip.\n        port: parseInt(parts[5], 10),\n        // skip parts[6] == 'typ'\n        type: parts[7]\n      };\n      for (let i = 8; i < parts.length; i += 2) {\n        switch (parts[i]) {\n          case 'raddr':\n            candidate.relatedAddress = parts[i + 1];\n            break;\n          case 'rport':\n            candidate.relatedPort = parseInt(parts[i + 1], 10);\n            break;\n          case 'tcptype':\n            candidate.tcpType = parts[i + 1];\n            break;\n          case 'ufrag':\n            candidate.ufrag = parts[i + 1]; // for backward compatibility.\n            candidate.usernameFragment = parts[i + 1];\n            break;\n          default:\n            // extension handling, in particular ufrag. Don't overwrite.\n            if (candidate[parts[i]] === undefined) {\n              candidate[parts[i]] = parts[i + 1];\n            }\n            break;\n        }\n      }\n      return candidate;\n    };\n\n    // Translates a candidate object into SDP candidate attribute.\n    // This does not include the a= prefix!\n    SDPUtils.writeCandidate = function (candidate) {\n      const sdp = [];\n      sdp.push(candidate.foundation);\n      const component = candidate.component;\n      if (component === 'rtp') {\n        sdp.push(1);\n      } else if (component === 'rtcp') {\n        sdp.push(2);\n      } else {\n        sdp.push(component);\n      }\n      sdp.push(candidate.protocol.toUpperCase());\n      sdp.push(candidate.priority);\n      sdp.push(candidate.address || candidate.ip);\n      sdp.push(candidate.port);\n      const type = candidate.type;\n      sdp.push('typ');\n      sdp.push(type);\n      if (type !== 'host' && candidate.relatedAddress && candidate.relatedPort) {\n        sdp.push('raddr');\n        sdp.push(candidate.relatedAddress);\n        sdp.push('rport');\n        sdp.push(candidate.relatedPort);\n      }\n      if (candidate.tcpType && candidate.protocol.toLowerCase() === 'tcp') {\n        sdp.push('tcptype');\n        sdp.push(candidate.tcpType);\n      }\n      if (candidate.usernameFragment || candidate.ufrag) {\n        sdp.push('ufrag');\n        sdp.push(candidate.usernameFragment || candidate.ufrag);\n      }\n      return 'candidate:' + sdp.join(' ');\n    };\n\n    // Parses an ice-options line, returns an array of option tags.\n    // Sample input:\n    // a=ice-options:foo bar\n    SDPUtils.parseIceOptions = function (line) {\n      return line.substring(14).split(' ');\n    };\n\n    // Parses a rtpmap line, returns RTCRtpCoddecParameters. Sample input:\n    // a=rtpmap:111 opus/48000/2\n    SDPUtils.parseRtpMap = function (line) {\n      let parts = line.substring(9).split(' ');\n      const parsed = {\n        payloadType: parseInt(parts.shift(), 10) // was: id\n      };\n      parts = parts[0].split('/');\n      parsed.name = parts[0];\n      parsed.clockRate = parseInt(parts[1], 10); // was: clockrate\n      parsed.channels = parts.length === 3 ? parseInt(parts[2], 10) : 1;\n      // legacy alias, got renamed back to channels in ORTC.\n      parsed.numChannels = parsed.channels;\n      return parsed;\n    };\n\n    // Generates a rtpmap line from RTCRtpCodecCapability or\n    // RTCRtpCodecParameters.\n    SDPUtils.writeRtpMap = function (codec) {\n      let pt = codec.payloadType;\n      if (codec.preferredPayloadType !== undefined) {\n        pt = codec.preferredPayloadType;\n      }\n      const channels = codec.channels || codec.numChannels || 1;\n      return 'a=rtpmap:' + pt + ' ' + codec.name + '/' + codec.clockRate + (channels !== 1 ? '/' + channels : '') + '\\r\\n';\n    };\n\n    // Parses a extmap line (headerextension from RFC 5285). Sample input:\n    // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n    // a=extmap:2/sendonly urn:ietf:params:rtp-hdrext:toffset\n    SDPUtils.parseExtmap = function (line) {\n      const parts = line.substring(9).split(' ');\n      return {\n        id: parseInt(parts[0], 10),\n        direction: parts[0].indexOf('/') > 0 ? parts[0].split('/')[1] : 'sendrecv',\n        uri: parts[1],\n        attributes: parts.slice(2).join(' ')\n      };\n    };\n\n    // Generates an extmap line from RTCRtpHeaderExtensionParameters or\n    // RTCRtpHeaderExtension.\n    SDPUtils.writeExtmap = function (headerExtension) {\n      return 'a=extmap:' + (headerExtension.id || headerExtension.preferredId) + (headerExtension.direction && headerExtension.direction !== 'sendrecv' ? '/' + headerExtension.direction : '') + ' ' + headerExtension.uri + (headerExtension.attributes ? ' ' + headerExtension.attributes : '') + '\\r\\n';\n    };\n\n    // Parses a fmtp line, returns dictionary. Sample input:\n    // a=fmtp:96 vbr=on;cng=on\n    // Also deals with vbr=on; cng=on\n    SDPUtils.parseFmtp = function (line) {\n      const parsed = {};\n      let kv;\n      const parts = line.substring(line.indexOf(' ') + 1).split(';');\n      for (let j = 0; j < parts.length; j++) {\n        kv = parts[j].trim().split('=');\n        parsed[kv[0].trim()] = kv[1];\n      }\n      return parsed;\n    };\n\n    // Generates a fmtp line from RTCRtpCodecCapability or RTCRtpCodecParameters.\n    SDPUtils.writeFmtp = function (codec) {\n      let line = '';\n      let pt = codec.payloadType;\n      if (codec.preferredPayloadType !== undefined) {\n        pt = codec.preferredPayloadType;\n      }\n      if (codec.parameters && Object.keys(codec.parameters).length) {\n        const params = [];\n        Object.keys(codec.parameters).forEach(param => {\n          if (codec.parameters[param] !== undefined) {\n            params.push(param + '=' + codec.parameters[param]);\n          } else {\n            params.push(param);\n          }\n        });\n        line += 'a=fmtp:' + pt + ' ' + params.join(';') + '\\r\\n';\n      }\n      return line;\n    };\n\n    // Parses a rtcp-fb line, returns RTCPRtcpFeedback object. Sample input:\n    // a=rtcp-fb:98 nack rpsi\n    SDPUtils.parseRtcpFb = function (line) {\n      const parts = line.substring(line.indexOf(' ') + 1).split(' ');\n      return {\n        type: parts.shift(),\n        parameter: parts.join(' ')\n      };\n    };\n\n    // Generate a=rtcp-fb lines from RTCRtpCodecCapability or RTCRtpCodecParameters.\n    SDPUtils.writeRtcpFb = function (codec) {\n      let lines = '';\n      let pt = codec.payloadType;\n      if (codec.preferredPayloadType !== undefined) {\n        pt = codec.preferredPayloadType;\n      }\n      if (codec.rtcpFeedback && codec.rtcpFeedback.length) {\n        // FIXME: special handling for trr-int?\n        codec.rtcpFeedback.forEach(fb => {\n          lines += 'a=rtcp-fb:' + pt + ' ' + fb.type + (fb.parameter && fb.parameter.length ? ' ' + fb.parameter : '') + '\\r\\n';\n        });\n      }\n      return lines;\n    };\n\n    // Parses a RFC 5576 ssrc media attribute. Sample input:\n    // a=ssrc:3735928559 cname:something\n    SDPUtils.parseSsrcMedia = function (line) {\n      const sp = line.indexOf(' ');\n      const parts = {\n        ssrc: parseInt(line.substring(7, sp), 10)\n      };\n      const colon = line.indexOf(':', sp);\n      if (colon > -1) {\n        parts.attribute = line.substring(sp + 1, colon);\n        parts.value = line.substring(colon + 1);\n      } else {\n        parts.attribute = line.substring(sp + 1);\n      }\n      return parts;\n    };\n\n    // Parse a ssrc-group line (see RFC 5576). Sample input:\n    // a=ssrc-group:semantics 12 34\n    SDPUtils.parseSsrcGroup = function (line) {\n      const parts = line.substring(13).split(' ');\n      return {\n        semantics: parts.shift(),\n        ssrcs: parts.map(ssrc => parseInt(ssrc, 10))\n      };\n    };\n\n    // Extracts the MID (RFC 5888) from a media section.\n    // Returns the MID or undefined if no mid line was found.\n    SDPUtils.getMid = function (mediaSection) {\n      const mid = SDPUtils.matchPrefix(mediaSection, 'a=mid:')[0];\n      if (mid) {\n        return mid.substring(6);\n      }\n    };\n\n    // Parses a fingerprint line for DTLS-SRTP.\n    SDPUtils.parseFingerprint = function (line) {\n      const parts = line.substring(14).split(' ');\n      return {\n        algorithm: parts[0].toLowerCase(),\n        // algorithm is case-sensitive in Edge.\n        value: parts[1].toUpperCase() // the definition is upper-case in RFC 4572.\n      };\n    };\n\n    // Extracts DTLS parameters from SDP media section or sessionpart.\n    // FIXME: for consistency with other functions this should only\n    //   get the fingerprint line as input. See also getIceParameters.\n    SDPUtils.getDtlsParameters = function (mediaSection, sessionpart) {\n      const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=fingerprint:');\n      // Note: a=setup line is ignored since we use the 'auto' role in Edge.\n      return {\n        role: 'auto',\n        fingerprints: lines.map(SDPUtils.parseFingerprint)\n      };\n    };\n\n    // Serializes DTLS parameters to SDP.\n    SDPUtils.writeDtlsParameters = function (params, setupType) {\n      let sdp = 'a=setup:' + setupType + '\\r\\n';\n      params.fingerprints.forEach(fp => {\n        sdp += 'a=fingerprint:' + fp.algorithm + ' ' + fp.value + '\\r\\n';\n      });\n      return sdp;\n    };\n\n    // Parses a=crypto lines into\n    //   https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#dictionary-rtcsrtpsdesparameters-members\n    SDPUtils.parseCryptoLine = function (line) {\n      const parts = line.substring(9).split(' ');\n      return {\n        tag: parseInt(parts[0], 10),\n        cryptoSuite: parts[1],\n        keyParams: parts[2],\n        sessionParams: parts.slice(3)\n      };\n    };\n    SDPUtils.writeCryptoLine = function (parameters) {\n      return 'a=crypto:' + parameters.tag + ' ' + parameters.cryptoSuite + ' ' + (typeof parameters.keyParams === 'object' ? SDPUtils.writeCryptoKeyParams(parameters.keyParams) : parameters.keyParams) + (parameters.sessionParams ? ' ' + parameters.sessionParams.join(' ') : '') + '\\r\\n';\n    };\n\n    // Parses the crypto key parameters into\n    //   https://rawgit.com/aboba/edgertc/master/msortc-rs4.html#rtcsrtpkeyparam*\n    SDPUtils.parseCryptoKeyParams = function (keyParams) {\n      if (keyParams.indexOf('inline:') !== 0) {\n        return null;\n      }\n      const parts = keyParams.substring(7).split('|');\n      return {\n        keyMethod: 'inline',\n        keySalt: parts[0],\n        lifeTime: parts[1],\n        mkiValue: parts[2] ? parts[2].split(':')[0] : undefined,\n        mkiLength: parts[2] ? parts[2].split(':')[1] : undefined\n      };\n    };\n    SDPUtils.writeCryptoKeyParams = function (keyParams) {\n      return keyParams.keyMethod + ':' + keyParams.keySalt + (keyParams.lifeTime ? '|' + keyParams.lifeTime : '') + (keyParams.mkiValue && keyParams.mkiLength ? '|' + keyParams.mkiValue + ':' + keyParams.mkiLength : '');\n    };\n\n    // Extracts all SDES parameters.\n    SDPUtils.getCryptoParameters = function (mediaSection, sessionpart) {\n      const lines = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=crypto:');\n      return lines.map(SDPUtils.parseCryptoLine);\n    };\n\n    // Parses ICE information from SDP media section or sessionpart.\n    // FIXME: for consistency with other functions this should only\n    //   get the ice-ufrag and ice-pwd lines as input.\n    SDPUtils.getIceParameters = function (mediaSection, sessionpart) {\n      const ufrag = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-ufrag:')[0];\n      const pwd = SDPUtils.matchPrefix(mediaSection + sessionpart, 'a=ice-pwd:')[0];\n      if (!(ufrag && pwd)) {\n        return null;\n      }\n      return {\n        usernameFragment: ufrag.substring(12),\n        password: pwd.substring(10)\n      };\n    };\n\n    // Serializes ICE parameters to SDP.\n    SDPUtils.writeIceParameters = function (params) {\n      let sdp = 'a=ice-ufrag:' + params.usernameFragment + '\\r\\n' + 'a=ice-pwd:' + params.password + '\\r\\n';\n      if (params.iceLite) {\n        sdp += 'a=ice-lite\\r\\n';\n      }\n      return sdp;\n    };\n\n    // Parses the SDP media section and returns RTCRtpParameters.\n    SDPUtils.parseRtpParameters = function (mediaSection) {\n      const description = {\n        codecs: [],\n        headerExtensions: [],\n        fecMechanisms: [],\n        rtcp: []\n      };\n      const lines = SDPUtils.splitLines(mediaSection);\n      const mline = lines[0].split(' ');\n      description.profile = mline[2];\n      for (let i = 3; i < mline.length; i++) {\n        // find all codecs from mline[3..]\n        const pt = mline[i];\n        const rtpmapline = SDPUtils.matchPrefix(mediaSection, 'a=rtpmap:' + pt + ' ')[0];\n        if (rtpmapline) {\n          const codec = SDPUtils.parseRtpMap(rtpmapline);\n          const fmtps = SDPUtils.matchPrefix(mediaSection, 'a=fmtp:' + pt + ' ');\n          // Only the first a=fmtp:<pt> is considered.\n          codec.parameters = fmtps.length ? SDPUtils.parseFmtp(fmtps[0]) : {};\n          codec.rtcpFeedback = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:' + pt + ' ').map(SDPUtils.parseRtcpFb);\n          description.codecs.push(codec);\n          // parse FEC mechanisms from rtpmap lines.\n          switch (codec.name.toUpperCase()) {\n            case 'RED':\n            case 'ULPFEC':\n              description.fecMechanisms.push(codec.name.toUpperCase());\n              break;\n          }\n        }\n      }\n      SDPUtils.matchPrefix(mediaSection, 'a=extmap:').forEach(line => {\n        description.headerExtensions.push(SDPUtils.parseExtmap(line));\n      });\n      const wildcardRtcpFb = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-fb:* ').map(SDPUtils.parseRtcpFb);\n      description.codecs.forEach(codec => {\n        wildcardRtcpFb.forEach(fb => {\n          const duplicate = codec.rtcpFeedback.find(existingFeedback => {\n            return existingFeedback.type === fb.type && existingFeedback.parameter === fb.parameter;\n          });\n          if (!duplicate) {\n            codec.rtcpFeedback.push(fb);\n          }\n        });\n      });\n      // FIXME: parse rtcp.\n      return description;\n    };\n\n    // Generates parts of the SDP media section describing the capabilities /\n    // parameters.\n    SDPUtils.writeRtpDescription = function (kind, caps) {\n      let sdp = '';\n\n      // Build the mline.\n      sdp += 'm=' + kind + ' ';\n      sdp += caps.codecs.length > 0 ? '9' : '0'; // reject if no codecs.\n      sdp += ' ' + (caps.profile || 'UDP/TLS/RTP/SAVPF') + ' ';\n      sdp += caps.codecs.map(codec => {\n        if (codec.preferredPayloadType !== undefined) {\n          return codec.preferredPayloadType;\n        }\n        return codec.payloadType;\n      }).join(' ') + '\\r\\n';\n      sdp += 'c=IN IP4 0.0.0.0\\r\\n';\n      sdp += 'a=rtcp:9 IN IP4 0.0.0.0\\r\\n';\n\n      // Add a=rtpmap lines for each codec. Also fmtp and rtcp-fb.\n      caps.codecs.forEach(codec => {\n        sdp += SDPUtils.writeRtpMap(codec);\n        sdp += SDPUtils.writeFmtp(codec);\n        sdp += SDPUtils.writeRtcpFb(codec);\n      });\n      let maxptime = 0;\n      caps.codecs.forEach(codec => {\n        if (codec.maxptime > maxptime) {\n          maxptime = codec.maxptime;\n        }\n      });\n      if (maxptime > 0) {\n        sdp += 'a=maxptime:' + maxptime + '\\r\\n';\n      }\n      if (caps.headerExtensions) {\n        caps.headerExtensions.forEach(extension => {\n          sdp += SDPUtils.writeExtmap(extension);\n        });\n      }\n      // FIXME: write fecMechanisms.\n      return sdp;\n    };\n\n    // Parses the SDP media section and returns an array of\n    // RTCRtpEncodingParameters.\n    SDPUtils.parseRtpEncodingParameters = function (mediaSection) {\n      const encodingParameters = [];\n      const description = SDPUtils.parseRtpParameters(mediaSection);\n      const hasRed = description.fecMechanisms.indexOf('RED') !== -1;\n      const hasUlpfec = description.fecMechanisms.indexOf('ULPFEC') !== -1;\n\n      // filter a=ssrc:... cname:, ignore PlanB-msid\n      const ssrcs = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(parts => parts.attribute === 'cname');\n      const primarySsrc = ssrcs.length > 0 && ssrcs[0].ssrc;\n      let secondarySsrc;\n      const flows = SDPUtils.matchPrefix(mediaSection, 'a=ssrc-group:FID').map(line => {\n        const parts = line.substring(17).split(' ');\n        return parts.map(part => parseInt(part, 10));\n      });\n      if (flows.length > 0 && flows[0].length > 1 && flows[0][0] === primarySsrc) {\n        secondarySsrc = flows[0][1];\n      }\n      description.codecs.forEach(codec => {\n        if (codec.name.toUpperCase() === 'RTX' && codec.parameters.apt) {\n          let encParam = {\n            ssrc: primarySsrc,\n            codecPayloadType: parseInt(codec.parameters.apt, 10)\n          };\n          if (primarySsrc && secondarySsrc) {\n            encParam.rtx = {\n              ssrc: secondarySsrc\n            };\n          }\n          encodingParameters.push(encParam);\n          if (hasRed) {\n            encParam = JSON.parse(JSON.stringify(encParam));\n            encParam.fec = {\n              ssrc: primarySsrc,\n              mechanism: hasUlpfec ? 'red+ulpfec' : 'red'\n            };\n            encodingParameters.push(encParam);\n          }\n        }\n      });\n      if (encodingParameters.length === 0 && primarySsrc) {\n        encodingParameters.push({\n          ssrc: primarySsrc\n        });\n      }\n\n      // we support both b=AS and b=TIAS but interpret AS as TIAS.\n      let bandwidth = SDPUtils.matchPrefix(mediaSection, 'b=');\n      if (bandwidth.length) {\n        if (bandwidth[0].indexOf('b=TIAS:') === 0) {\n          bandwidth = parseInt(bandwidth[0].substring(7), 10);\n        } else if (bandwidth[0].indexOf('b=AS:') === 0) {\n          // use formula from JSEP to convert b=AS to TIAS value.\n          bandwidth = parseInt(bandwidth[0].substring(5), 10) * 1000 * 0.95 - 50 * 40 * 8;\n        } else {\n          bandwidth = undefined;\n        }\n        encodingParameters.forEach(params => {\n          params.maxBitrate = bandwidth;\n        });\n      }\n      return encodingParameters;\n    };\n\n    // parses http://draft.ortc.org/#rtcrtcpparameters*\n    SDPUtils.parseRtcpParameters = function (mediaSection) {\n      const rtcpParameters = {};\n\n      // Gets the first SSRC. Note that with RTX there might be multiple\n      // SSRCs.\n      const remoteSsrc = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(obj => obj.attribute === 'cname')[0];\n      if (remoteSsrc) {\n        rtcpParameters.cname = remoteSsrc.value;\n        rtcpParameters.ssrc = remoteSsrc.ssrc;\n      }\n\n      // Edge uses the compound attribute instead of reducedSize\n      // compound is !reducedSize\n      const rsize = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-rsize');\n      rtcpParameters.reducedSize = rsize.length > 0;\n      rtcpParameters.compound = rsize.length === 0;\n\n      // parses the rtcp-mux attrіbute.\n      // Note that Edge does not support unmuxed RTCP.\n      const mux = SDPUtils.matchPrefix(mediaSection, 'a=rtcp-mux');\n      rtcpParameters.mux = mux.length > 0;\n      return rtcpParameters;\n    };\n    SDPUtils.writeRtcpParameters = function (rtcpParameters) {\n      let sdp = '';\n      if (rtcpParameters.reducedSize) {\n        sdp += 'a=rtcp-rsize\\r\\n';\n      }\n      if (rtcpParameters.mux) {\n        sdp += 'a=rtcp-mux\\r\\n';\n      }\n      if (rtcpParameters.ssrc !== undefined && rtcpParameters.cname) {\n        sdp += 'a=ssrc:' + rtcpParameters.ssrc + ' cname:' + rtcpParameters.cname + '\\r\\n';\n      }\n      return sdp;\n    };\n\n    // parses either a=msid: or a=ssrc:... msid lines and returns\n    // the id of the MediaStream and MediaStreamTrack.\n    SDPUtils.parseMsid = function (mediaSection) {\n      let parts;\n      const spec = SDPUtils.matchPrefix(mediaSection, 'a=msid:');\n      if (spec.length === 1) {\n        parts = spec[0].substring(7).split(' ');\n        return {\n          stream: parts[0],\n          track: parts[1]\n        };\n      }\n      const planB = SDPUtils.matchPrefix(mediaSection, 'a=ssrc:').map(line => SDPUtils.parseSsrcMedia(line)).filter(msidParts => msidParts.attribute === 'msid');\n      if (planB.length > 0) {\n        parts = planB[0].value.split(' ');\n        return {\n          stream: parts[0],\n          track: parts[1]\n        };\n      }\n    };\n\n    // SCTP\n    // parses draft-ietf-mmusic-sctp-sdp-26 first and falls back\n    // to draft-ietf-mmusic-sctp-sdp-05\n    SDPUtils.parseSctpDescription = function (mediaSection) {\n      const mline = SDPUtils.parseMLine(mediaSection);\n      const maxSizeLine = SDPUtils.matchPrefix(mediaSection, 'a=max-message-size:');\n      let maxMessageSize;\n      if (maxSizeLine.length > 0) {\n        maxMessageSize = parseInt(maxSizeLine[0].substring(19), 10);\n      }\n      if (isNaN(maxMessageSize)) {\n        maxMessageSize = 65536;\n      }\n      const sctpPort = SDPUtils.matchPrefix(mediaSection, 'a=sctp-port:');\n      if (sctpPort.length > 0) {\n        return {\n          port: parseInt(sctpPort[0].substring(12), 10),\n          protocol: mline.fmt,\n          maxMessageSize\n        };\n      }\n      const sctpMapLines = SDPUtils.matchPrefix(mediaSection, 'a=sctpmap:');\n      if (sctpMapLines.length > 0) {\n        const parts = sctpMapLines[0].substring(10).split(' ');\n        return {\n          port: parseInt(parts[0], 10),\n          protocol: parts[1],\n          maxMessageSize\n        };\n      }\n    };\n\n    // SCTP\n    // outputs the draft-ietf-mmusic-sctp-sdp-26 version that all browsers\n    // support by now receiving in this format, unless we originally parsed\n    // as the draft-ietf-mmusic-sctp-sdp-05 format (indicated by the m-line\n    // protocol of DTLS/SCTP -- without UDP/ or TCP/)\n    SDPUtils.writeSctpDescription = function (media, sctp) {\n      let output = [];\n      if (media.protocol !== 'DTLS/SCTP') {\n        output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.protocol + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctp-port:' + sctp.port + '\\r\\n'];\n      } else {\n        output = ['m=' + media.kind + ' 9 ' + media.protocol + ' ' + sctp.port + '\\r\\n', 'c=IN IP4 0.0.0.0\\r\\n', 'a=sctpmap:' + sctp.port + ' ' + sctp.protocol + ' 65535\\r\\n'];\n      }\n      if (sctp.maxMessageSize !== undefined) {\n        output.push('a=max-message-size:' + sctp.maxMessageSize + '\\r\\n');\n      }\n      return output.join('');\n    };\n\n    // Generate a session ID for SDP.\n    // https://tools.ietf.org/html/draft-ietf-rtcweb-jsep-20#section-5.2.1\n    // recommends using a cryptographically random +ve 64-bit value\n    // but right now this should be acceptable and within the right range\n    SDPUtils.generateSessionId = function () {\n      return Math.random().toString().substr(2, 22);\n    };\n\n    // Write boiler plate for start of SDP\n    // sessId argument is optional - if not supplied it will\n    // be generated randomly\n    // sessVersion is optional and defaults to 2\n    // sessUser is optional and defaults to 'thisisadapterortc'\n    SDPUtils.writeSessionBoilerplate = function (sessId, sessVer, sessUser) {\n      let sessionId;\n      const version = sessVer !== undefined ? sessVer : 2;\n      if (sessId) {\n        sessionId = sessId;\n      } else {\n        sessionId = SDPUtils.generateSessionId();\n      }\n      const user = sessUser || 'thisisadapterortc';\n      // FIXME: sess-id should be an NTP timestamp.\n      return 'v=0\\r\\n' + 'o=' + user + ' ' + sessionId + ' ' + version + ' IN IP4 127.0.0.1\\r\\n' + 's=-\\r\\n' + 't=0 0\\r\\n';\n    };\n\n    // Gets the direction from the mediaSection or the sessionpart.\n    SDPUtils.getDirection = function (mediaSection, sessionpart) {\n      // Look for sendrecv, sendonly, recvonly, inactive, default to sendrecv.\n      const lines = SDPUtils.splitLines(mediaSection);\n      for (let i = 0; i < lines.length; i++) {\n        switch (lines[i]) {\n          case 'a=sendrecv':\n          case 'a=sendonly':\n          case 'a=recvonly':\n          case 'a=inactive':\n            return lines[i].substring(2);\n          // FIXME: What should happen here?\n        }\n      }\n      if (sessionpart) {\n        return SDPUtils.getDirection(sessionpart);\n      }\n      return 'sendrecv';\n    };\n    SDPUtils.getKind = function (mediaSection) {\n      const lines = SDPUtils.splitLines(mediaSection);\n      const mline = lines[0].split(' ');\n      return mline[0].substring(2);\n    };\n    SDPUtils.isRejected = function (mediaSection) {\n      return mediaSection.split(' ', 2)[1] === '0';\n    };\n    SDPUtils.parseMLine = function (mediaSection) {\n      const lines = SDPUtils.splitLines(mediaSection);\n      const parts = lines[0].substring(2).split(' ');\n      return {\n        kind: parts[0],\n        port: parseInt(parts[1], 10),\n        protocol: parts[2],\n        fmt: parts.slice(3).join(' ')\n      };\n    };\n    SDPUtils.parseOLine = function (mediaSection) {\n      const line = SDPUtils.matchPrefix(mediaSection, 'o=')[0];\n      const parts = line.substring(2).split(' ');\n      return {\n        username: parts[0],\n        sessionId: parts[1],\n        sessionVersion: parseInt(parts[2], 10),\n        netType: parts[3],\n        addressType: parts[4],\n        address: parts[5]\n      };\n    };\n\n    // a very naive interpretation of a valid SDP.\n    SDPUtils.isValidSDP = function (blob) {\n      if (typeof blob !== 'string' || blob.length === 0) {\n        return false;\n      }\n      const lines = SDPUtils.splitLines(blob);\n      for (let i = 0; i < lines.length; i++) {\n        if (lines[i].length < 2 || lines[i].charAt(1) !== '=') {\n          return false;\n        }\n        // TODO: check the modifier a bit more.\n      }\n      return true;\n    };\n\n    // Expose public methods.\n    {\n      module.exports = SDPUtils;\n    }\n  })(sdp$1);\n  return sdp$1.exports;\n}var sdpExports = requireSdp();\nvar SDPUtils = /*@__PURE__*/getDefaultExportFromCjs(sdpExports);var sdp=/*#__PURE__*/_mergeNamespaces({__proto__:null,default:SDPUtils},[sdpExports]);/*\n *  Copyright (c) 2017 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\nfunction shimRTCIceCandidate(window) {\n  // foundation is arbitrarily chosen as an indicator for full support for\n  // https://w3c.github.io/webrtc-pc/#rtcicecandidate-interface\n  if (!window.RTCIceCandidate || window.RTCIceCandidate && 'foundation' in window.RTCIceCandidate.prototype) {\n    return;\n  }\n  const NativeRTCIceCandidate = window.RTCIceCandidate;\n  window.RTCIceCandidate = function RTCIceCandidate(args) {\n    // Remove the a= which shouldn't be part of the candidate string.\n    if (typeof args === 'object' && args.candidate && args.candidate.indexOf('a=') === 0) {\n      args = JSON.parse(JSON.stringify(args));\n      args.candidate = args.candidate.substring(2);\n    }\n    if (args.candidate && args.candidate.length) {\n      // Augment the native candidate with the parsed fields.\n      const nativeCandidate = new NativeRTCIceCandidate(args);\n      const parsedCandidate = SDPUtils.parseCandidate(args.candidate);\n      for (const key in parsedCandidate) {\n        if (!(key in nativeCandidate)) {\n          Object.defineProperty(nativeCandidate, key, {\n            value: parsedCandidate[key]\n          });\n        }\n      }\n\n      // Override serializer to not serialize the extra attributes.\n      nativeCandidate.toJSON = function toJSON() {\n        return {\n          candidate: nativeCandidate.candidate,\n          sdpMid: nativeCandidate.sdpMid,\n          sdpMLineIndex: nativeCandidate.sdpMLineIndex,\n          usernameFragment: nativeCandidate.usernameFragment\n        };\n      };\n      return nativeCandidate;\n    }\n    return new NativeRTCIceCandidate(args);\n  };\n  window.RTCIceCandidate.prototype = NativeRTCIceCandidate.prototype;\n\n  // Hook up the augmented candidate in onicecandidate and\n  // addEventListener('icecandidate', ...)\n  wrapPeerConnectionEvent(window, 'icecandidate', e => {\n    if (e.candidate) {\n      Object.defineProperty(e, 'candidate', {\n        value: new window.RTCIceCandidate(e.candidate),\n        writable: 'false'\n      });\n    }\n    return e;\n  });\n}\nfunction shimRTCIceCandidateRelayProtocol(window) {\n  if (!window.RTCIceCandidate || window.RTCIceCandidate && 'relayProtocol' in window.RTCIceCandidate.prototype) {\n    return;\n  }\n\n  // Hook up the augmented candidate in onicecandidate and\n  // addEventListener('icecandidate', ...)\n  wrapPeerConnectionEvent(window, 'icecandidate', e => {\n    if (e.candidate) {\n      const parsedCandidate = SDPUtils.parseCandidate(e.candidate.candidate);\n      if (parsedCandidate.type === 'relay') {\n        // This is a libwebrtc-specific mapping of local type preference\n        // to relayProtocol.\n        e.candidate.relayProtocol = {\n          0: 'tls',\n          1: 'tcp',\n          2: 'udp'\n        }[parsedCandidate.priority >> 24];\n      }\n    }\n    return e;\n  });\n}\nfunction shimMaxMessageSize(window, browserDetails) {\n  if (!window.RTCPeerConnection) {\n    return;\n  }\n  if (!('sctp' in window.RTCPeerConnection.prototype)) {\n    Object.defineProperty(window.RTCPeerConnection.prototype, 'sctp', {\n      get() {\n        return typeof this._sctp === 'undefined' ? null : this._sctp;\n      }\n    });\n  }\n  const sctpInDescription = function (description) {\n    if (!description || !description.sdp) {\n      return false;\n    }\n    const sections = SDPUtils.splitSections(description.sdp);\n    sections.shift();\n    return sections.some(mediaSection => {\n      const mLine = SDPUtils.parseMLine(mediaSection);\n      return mLine && mLine.kind === 'application' && mLine.protocol.indexOf('SCTP') !== -1;\n    });\n  };\n  const getRemoteFirefoxVersion = function (description) {\n    // TODO: Is there a better solution for detecting Firefox?\n    const match = description.sdp.match(/mozilla...THIS_IS_SDPARTA-(\\d+)/);\n    if (match === null || match.length < 2) {\n      return -1;\n    }\n    const version = parseInt(match[1], 10);\n    // Test for NaN (yes, this is ugly)\n    return version !== version ? -1 : version;\n  };\n  const getCanSendMaxMessageSize = function (remoteIsFirefox) {\n    // Every implementation we know can send at least 64 KiB.\n    // Note: Although Chrome is technically able to send up to 256 KiB, the\n    //       data does not reach the other peer reliably.\n    //       See: https://bugs.chromium.org/p/webrtc/issues/detail?id=8419\n    let canSendMaxMessageSize = 65536;\n    if (browserDetails.browser === 'firefox') {\n      if (browserDetails.version < 57) {\n        if (remoteIsFirefox === -1) {\n          // FF < 57 will send in 16 KiB chunks using the deprecated PPID\n          // fragmentation.\n          canSendMaxMessageSize = 16384;\n        } else {\n          // However, other FF (and RAWRTC) can reassemble PPID-fragmented\n          // messages. Thus, supporting ~2 GiB when sending.\n          canSendMaxMessageSize = 2147483637;\n        }\n      } else if (browserDetails.version < 60) {\n        // Currently, all FF >= 57 will reset the remote maximum message size\n        // to the default value when a data channel is created at a later\n        // stage. :(\n        // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n        canSendMaxMessageSize = browserDetails.version === 57 ? 65535 : 65536;\n      } else {\n        // FF >= 60 supports sending ~2 GiB\n        canSendMaxMessageSize = 2147483637;\n      }\n    }\n    return canSendMaxMessageSize;\n  };\n  const getMaxMessageSize = function (description, remoteIsFirefox) {\n    // Note: 65536 bytes is the default value from the SDP spec. Also,\n    //       every implementation we know supports receiving 65536 bytes.\n    let maxMessageSize = 65536;\n\n    // FF 57 has a slightly incorrect default remote max message size, so\n    // we need to adjust it here to avoid a failure when sending.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1425697\n    if (browserDetails.browser === 'firefox' && browserDetails.version === 57) {\n      maxMessageSize = 65535;\n    }\n    const match = SDPUtils.matchPrefix(description.sdp, 'a=max-message-size:');\n    if (match.length > 0) {\n      maxMessageSize = parseInt(match[0].substring(19), 10);\n    } else if (browserDetails.browser === 'firefox' && remoteIsFirefox !== -1) {\n      // If the maximum message size is not present in the remote SDP and\n      // both local and remote are Firefox, the remote peer can receive\n      // ~2 GiB.\n      maxMessageSize = 2147483637;\n    }\n    return maxMessageSize;\n  };\n  const origSetRemoteDescription = window.RTCPeerConnection.prototype.setRemoteDescription;\n  window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription() {\n    this._sctp = null;\n    // Chrome decided to not expose .sctp in plan-b mode.\n    // As usual, adapter.js has to do an 'ugly worakaround'\n    // to cover up the mess.\n    if (browserDetails.browser === 'chrome' && browserDetails.version >= 76) {\n      const {\n        sdpSemantics\n      } = this.getConfiguration();\n      if (sdpSemantics === 'plan-b') {\n        Object.defineProperty(this, 'sctp', {\n          get() {\n            return typeof this._sctp === 'undefined' ? null : this._sctp;\n          },\n          enumerable: true,\n          configurable: true\n        });\n      }\n    }\n    if (sctpInDescription(arguments[0])) {\n      // Check if the remote is FF.\n      const isFirefox = getRemoteFirefoxVersion(arguments[0]);\n\n      // Get the maximum message size the local peer is capable of sending\n      const canSendMMS = getCanSendMaxMessageSize(isFirefox);\n\n      // Get the maximum message size of the remote peer.\n      const remoteMMS = getMaxMessageSize(arguments[0], isFirefox);\n\n      // Determine final maximum message size\n      let maxMessageSize;\n      if (canSendMMS === 0 && remoteMMS === 0) {\n        maxMessageSize = Number.POSITIVE_INFINITY;\n      } else if (canSendMMS === 0 || remoteMMS === 0) {\n        maxMessageSize = Math.max(canSendMMS, remoteMMS);\n      } else {\n        maxMessageSize = Math.min(canSendMMS, remoteMMS);\n      }\n\n      // Create a dummy RTCSctpTransport object and the 'maxMessageSize'\n      // attribute.\n      const sctp = {};\n      Object.defineProperty(sctp, 'maxMessageSize', {\n        get() {\n          return maxMessageSize;\n        }\n      });\n      this._sctp = sctp;\n    }\n    return origSetRemoteDescription.apply(this, arguments);\n  };\n}\nfunction shimSendThrowTypeError(window) {\n  if (!(window.RTCPeerConnection && 'createDataChannel' in window.RTCPeerConnection.prototype)) {\n    return;\n  }\n\n  // Note: Although Firefox >= 57 has a native implementation, the maximum\n  //       message size can be reset for all data channels at a later stage.\n  //       See: https://bugzilla.mozilla.org/show_bug.cgi?id=1426831\n\n  function wrapDcSend(dc, pc) {\n    const origDataChannelSend = dc.send;\n    dc.send = function send() {\n      const data = arguments[0];\n      const length = data.length || data.size || data.byteLength;\n      if (dc.readyState === 'open' && pc.sctp && length > pc.sctp.maxMessageSize) {\n        throw new TypeError('Message too large (can send a maximum of ' + pc.sctp.maxMessageSize + ' bytes)');\n      }\n      return origDataChannelSend.apply(dc, arguments);\n    };\n  }\n  const origCreateDataChannel = window.RTCPeerConnection.prototype.createDataChannel;\n  window.RTCPeerConnection.prototype.createDataChannel = function createDataChannel() {\n    const dataChannel = origCreateDataChannel.apply(this, arguments);\n    wrapDcSend(dataChannel, this);\n    return dataChannel;\n  };\n  wrapPeerConnectionEvent(window, 'datachannel', e => {\n    wrapDcSend(e.channel, e.target);\n    return e;\n  });\n}\n\n/* shims RTCConnectionState by pretending it is the same as iceConnectionState.\n * See https://bugs.chromium.org/p/webrtc/issues/detail?id=6145#c12\n * for why this is a valid hack in Chrome. In Firefox it is slightly incorrect\n * since DTLS failures would be hidden. See\n * https://bugzilla.mozilla.org/show_bug.cgi?id=1265827\n * for the Firefox tracking bug.\n */\nfunction shimConnectionState(window) {\n  if (!window.RTCPeerConnection || 'connectionState' in window.RTCPeerConnection.prototype) {\n    return;\n  }\n  const proto = window.RTCPeerConnection.prototype;\n  Object.defineProperty(proto, 'connectionState', {\n    get() {\n      return {\n        completed: 'connected',\n        checking: 'connecting'\n      }[this.iceConnectionState] || this.iceConnectionState;\n    },\n    enumerable: true,\n    configurable: true\n  });\n  Object.defineProperty(proto, 'onconnectionstatechange', {\n    get() {\n      return this._onconnectionstatechange || null;\n    },\n    set(cb) {\n      if (this._onconnectionstatechange) {\n        this.removeEventListener('connectionstatechange', this._onconnectionstatechange);\n        delete this._onconnectionstatechange;\n      }\n      if (cb) {\n        this.addEventListener('connectionstatechange', this._onconnectionstatechange = cb);\n      }\n    },\n    enumerable: true,\n    configurable: true\n  });\n  ['setLocalDescription', 'setRemoteDescription'].forEach(method => {\n    const origMethod = proto[method];\n    proto[method] = function () {\n      if (!this._connectionstatechangepoly) {\n        this._connectionstatechangepoly = e => {\n          const pc = e.target;\n          if (pc._lastConnectionState !== pc.connectionState) {\n            pc._lastConnectionState = pc.connectionState;\n            const newEvent = new Event('connectionstatechange', e);\n            pc.dispatchEvent(newEvent);\n          }\n          return e;\n        };\n        this.addEventListener('iceconnectionstatechange', this._connectionstatechangepoly);\n      }\n      return origMethod.apply(this, arguments);\n    };\n  });\n}\nfunction removeExtmapAllowMixed(window, browserDetails) {\n  /* remove a=extmap-allow-mixed for webrtc.org < M71 */\n  if (!window.RTCPeerConnection) {\n    return;\n  }\n  if (browserDetails.browser === 'chrome' && browserDetails.version >= 71) {\n    return;\n  }\n  if (browserDetails.browser === 'safari' && browserDetails._safariVersion >= 13.1) {\n    return;\n  }\n  const nativeSRD = window.RTCPeerConnection.prototype.setRemoteDescription;\n  window.RTCPeerConnection.prototype.setRemoteDescription = function setRemoteDescription(desc) {\n    if (desc && desc.sdp && desc.sdp.indexOf('\\na=extmap-allow-mixed') !== -1) {\n      const sdp = desc.sdp.split('\\n').filter(line => {\n        return line.trim() !== 'a=extmap-allow-mixed';\n      }).join('\\n');\n      // Safari enforces read-only-ness of RTCSessionDescription fields.\n      if (window.RTCSessionDescription && desc instanceof window.RTCSessionDescription) {\n        arguments[0] = new window.RTCSessionDescription({\n          type: desc.type,\n          sdp\n        });\n      } else {\n        desc.sdp = sdp;\n      }\n    }\n    return nativeSRD.apply(this, arguments);\n  };\n}\nfunction shimAddIceCandidateNullOrEmpty(window, browserDetails) {\n  // Support for addIceCandidate(null or undefined)\n  // as well as addIceCandidate({candidate: \"\", ...})\n  // https://bugs.chromium.org/p/chromium/issues/detail?id=978582\n  // Note: must be called before other polyfills which change the signature.\n  if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n    return;\n  }\n  const nativeAddIceCandidate = window.RTCPeerConnection.prototype.addIceCandidate;\n  if (!nativeAddIceCandidate || nativeAddIceCandidate.length === 0) {\n    return;\n  }\n  window.RTCPeerConnection.prototype.addIceCandidate = function addIceCandidate() {\n    if (!arguments[0]) {\n      if (arguments[1]) {\n        arguments[1].apply(null);\n      }\n      return Promise.resolve();\n    }\n    // Firefox 68+ emits and processes {candidate: \"\", ...}, ignore\n    // in older versions.\n    // Native support for ignoring exists for Chrome M77+.\n    // Safari ignores as well, exact version unknown but works in the same\n    // version that also ignores addIceCandidate(null).\n    if ((browserDetails.browser === 'chrome' && browserDetails.version < 78 || browserDetails.browser === 'firefox' && browserDetails.version < 68 || browserDetails.browser === 'safari') && arguments[0] && arguments[0].candidate === '') {\n      return Promise.resolve();\n    }\n    return nativeAddIceCandidate.apply(this, arguments);\n  };\n}\n\n// Note: Make sure to call this ahead of APIs that modify\n// setLocalDescription.length\nfunction shimParameterlessSetLocalDescription(window, browserDetails) {\n  if (!(window.RTCPeerConnection && window.RTCPeerConnection.prototype)) {\n    return;\n  }\n  const nativeSetLocalDescription = window.RTCPeerConnection.prototype.setLocalDescription;\n  if (!nativeSetLocalDescription || nativeSetLocalDescription.length === 0) {\n    return;\n  }\n  window.RTCPeerConnection.prototype.setLocalDescription = function setLocalDescription() {\n    let desc = arguments[0] || {};\n    if (typeof desc !== 'object' || desc.type && desc.sdp) {\n      return nativeSetLocalDescription.apply(this, arguments);\n    }\n    // The remaining steps should technically happen when SLD comes off the\n    // RTCPeerConnection's operations chain (not ahead of going on it), but\n    // this is too difficult to shim. Instead, this shim only covers the\n    // common case where the operations chain is empty. This is imperfect, but\n    // should cover many cases. Rationale: Even if we can't reduce the glare\n    // window to zero on imperfect implementations, there's value in tapping\n    // into the perfect negotiation pattern that several browsers support.\n    desc = {\n      type: desc.type,\n      sdp: desc.sdp\n    };\n    if (!desc.type) {\n      switch (this.signalingState) {\n        case 'stable':\n        case 'have-local-offer':\n        case 'have-remote-pranswer':\n          desc.type = 'offer';\n          break;\n        default:\n          desc.type = 'answer';\n          break;\n      }\n    }\n    if (desc.sdp || desc.type !== 'offer' && desc.type !== 'answer') {\n      return nativeSetLocalDescription.apply(this, [desc]);\n    }\n    const func = desc.type === 'offer' ? this.createOffer : this.createAnswer;\n    return func.apply(this).then(d => nativeSetLocalDescription.apply(this, [d]));\n  };\n}var commonShim=/*#__PURE__*/Object.freeze({__proto__:null,removeExtmapAllowMixed:removeExtmapAllowMixed,shimAddIceCandidateNullOrEmpty:shimAddIceCandidateNullOrEmpty,shimConnectionState:shimConnectionState,shimMaxMessageSize:shimMaxMessageSize,shimParameterlessSetLocalDescription:shimParameterlessSetLocalDescription,shimRTCIceCandidate:shimRTCIceCandidate,shimRTCIceCandidateRelayProtocol:shimRTCIceCandidateRelayProtocol,shimSendThrowTypeError:shimSendThrowTypeError});/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n\n// Shimming starts here.\nfunction adapterFactory() {\n  let {\n    window\n  } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n  let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n    shimChrome: true,\n    shimFirefox: true,\n    shimSafari: true\n  };\n  // Utils.\n  const logging = log;\n  const browserDetails = detectBrowser(window);\n  const adapter = {\n    browserDetails,\n    commonShim,\n    extractVersion: extractVersion,\n    disableLog: disableLog,\n    disableWarnings: disableWarnings,\n    // Expose sdp as a convenience. For production apps include directly.\n    sdp\n  };\n\n  // Shim browser if found.\n  switch (browserDetails.browser) {\n    case 'chrome':\n      if (!chromeShim || !shimPeerConnection$1 || !options.shimChrome) {\n        logging('Chrome shim is not included in this adapter release.');\n        return adapter;\n      }\n      if (browserDetails.version === null) {\n        logging('Chrome shim can not determine version, not shimming.');\n        return adapter;\n      }\n      logging('adapter.js shimming chrome.');\n      // Export to the adapter global object visible in the browser.\n      adapter.browserShim = chromeShim;\n\n      // Must be called before shimPeerConnection.\n      shimAddIceCandidateNullOrEmpty(window, browserDetails);\n      shimParameterlessSetLocalDescription(window);\n      shimGetUserMedia$2(window, browserDetails);\n      shimMediaStream(window);\n      shimPeerConnection$1(window, browserDetails);\n      shimOnTrack$1(window);\n      shimAddTrackRemoveTrack(window, browserDetails);\n      shimGetSendersWithDtmf(window);\n      shimSenderReceiverGetStats(window);\n      fixNegotiationNeeded(window, browserDetails);\n      shimRTCIceCandidate(window);\n      shimRTCIceCandidateRelayProtocol(window);\n      shimConnectionState(window);\n      shimMaxMessageSize(window, browserDetails);\n      shimSendThrowTypeError(window);\n      removeExtmapAllowMixed(window, browserDetails);\n      break;\n    case 'firefox':\n      if (!firefoxShim || !shimPeerConnection || !options.shimFirefox) {\n        logging('Firefox shim is not included in this adapter release.');\n        return adapter;\n      }\n      logging('adapter.js shimming firefox.');\n      // Export to the adapter global object visible in the browser.\n      adapter.browserShim = firefoxShim;\n\n      // Must be called before shimPeerConnection.\n      shimAddIceCandidateNullOrEmpty(window, browserDetails);\n      shimParameterlessSetLocalDescription(window);\n      shimGetUserMedia$1(window, browserDetails);\n      shimPeerConnection(window, browserDetails);\n      shimOnTrack(window);\n      shimRemoveStream(window);\n      shimSenderGetStats(window);\n      shimReceiverGetStats(window);\n      shimRTCDataChannel(window);\n      shimAddTransceiver(window);\n      shimGetParameters(window);\n      shimCreateOffer(window);\n      shimCreateAnswer(window);\n      shimRTCIceCandidate(window);\n      shimConnectionState(window);\n      shimMaxMessageSize(window, browserDetails);\n      shimSendThrowTypeError(window);\n      break;\n    case 'safari':\n      if (!safariShim || !options.shimSafari) {\n        logging('Safari shim is not included in this adapter release.');\n        return adapter;\n      }\n      logging('adapter.js shimming safari.');\n      // Export to the adapter global object visible in the browser.\n      adapter.browserShim = safariShim;\n\n      // Must be called before shimCallbackAPI.\n      shimAddIceCandidateNullOrEmpty(window, browserDetails);\n      shimParameterlessSetLocalDescription(window);\n      shimRTCIceServerUrls(window);\n      shimCreateOfferLegacy(window);\n      shimCallbacksAPI(window);\n      shimLocalStreamsAPI(window);\n      shimRemoteStreamsAPI(window);\n      shimTrackEventTransceiver(window);\n      shimGetUserMedia(window);\n      shimAudioContext(window);\n      shimRTCIceCandidate(window);\n      shimRTCIceCandidateRelayProtocol(window);\n      shimMaxMessageSize(window, browserDetails);\n      shimSendThrowTypeError(window);\n      removeExtmapAllowMixed(window, browserDetails);\n      break;\n    default:\n      logging('Unsupported browser!');\n      break;\n  }\n  return adapter;\n}/*\n *  Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.\n *\n *  Use of this source code is governed by a BSD-style license\n *  that can be found in the LICENSE file in the root of the source\n *  tree.\n */\n/* eslint-env node */\n\nadapterFactory({\n  window: typeof window === 'undefined' ? undefined : window\n});// tiny, simplified version of https://github.com/lancedikson/bowser/blob/master/src/parser-browsers.js\n// reduced to only differentiate Chrome(ium) based browsers / Firefox / Safari\nconst commonVersionIdentifier = /version\\/(\\d+(\\.?_?\\d+)+)/i;\nlet browserDetails;\n/**\n * @internal\n */\nfunction getBrowser(userAgent) {\n  let force = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n  if (typeof userAgent === 'undefined' && typeof navigator === 'undefined') {\n    return;\n  }\n  const ua = (userAgent !== null && userAgent !== void 0 ? userAgent : navigator.userAgent).toLowerCase();\n  if (browserDetails === undefined || force) {\n    const browser = browsersList.find(_ref => {\n      let {\n        test\n      } = _ref;\n      return test.test(ua);\n    });\n    browserDetails = browser === null || browser === void 0 ? void 0 : browser.describe(ua);\n  }\n  return browserDetails;\n}\nconst browsersList = [{\n  test: /firefox|iceweasel|fxios/i,\n  describe(ua) {\n    const browser = {\n      name: 'Firefox',\n      version: getMatch(/(?:firefox|iceweasel|fxios)[\\s/](\\d+(\\.?_?\\d+)+)/i, ua),\n      os: ua.toLowerCase().includes('fxios') ? 'iOS' : undefined,\n      osVersion: getOSVersion(ua)\n    };\n    return browser;\n  }\n}, {\n  test: /chrom|crios|crmo/i,\n  describe(ua) {\n    const browser = {\n      name: 'Chrome',\n      version: getMatch(/(?:chrome|chromium|crios|crmo)\\/(\\d+(\\.?_?\\d+)+)/i, ua),\n      os: ua.toLowerCase().includes('crios') ? 'iOS' : undefined,\n      osVersion: getOSVersion(ua)\n    };\n    return browser;\n  }\n}, /* Safari */\n{\n  test: /safari|applewebkit/i,\n  describe(ua) {\n    const browser = {\n      name: 'Safari',\n      version: getMatch(commonVersionIdentifier, ua),\n      os: ua.includes('mobile/') ? 'iOS' : 'macOS',\n      osVersion: getOSVersion(ua)\n    };\n    return browser;\n  }\n}];\nfunction getMatch(exp, ua) {\n  let id = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n  const match = ua.match(exp);\n  return match && match.length >= id && match[id] || '';\n}\nfunction getOSVersion(ua) {\n  return ua.includes('mac os') ? getMatch(/\\(.+?(\\d+_\\d+(:?_\\d+)?)/, ua, 1).replace(/_/g, '.') : undefined;\n}var version$1 = \"2.16.1\";const version = version$1;\nconst protocolVersion = 16;class LivekitError extends Error {\n  constructor(code, message) {\n    super(message || 'an error has occured');\n    this.name = 'LiveKitError';\n    this.code = code;\n  }\n}\nclass SimulatedError extends LivekitError {\n  constructor() {\n    let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'Simulated failure';\n    super(-1, message);\n    this.name = 'simulated';\n  }\n}\nvar ConnectionErrorReason;\n(function (ConnectionErrorReason) {\n  ConnectionErrorReason[ConnectionErrorReason[\"NotAllowed\"] = 0] = \"NotAllowed\";\n  ConnectionErrorReason[ConnectionErrorReason[\"ServerUnreachable\"] = 1] = \"ServerUnreachable\";\n  ConnectionErrorReason[ConnectionErrorReason[\"InternalError\"] = 2] = \"InternalError\";\n  ConnectionErrorReason[ConnectionErrorReason[\"Cancelled\"] = 3] = \"Cancelled\";\n  ConnectionErrorReason[ConnectionErrorReason[\"LeaveRequest\"] = 4] = \"LeaveRequest\";\n  ConnectionErrorReason[ConnectionErrorReason[\"Timeout\"] = 5] = \"Timeout\";\n  ConnectionErrorReason[ConnectionErrorReason[\"WebSocket\"] = 6] = \"WebSocket\";\n})(ConnectionErrorReason || (ConnectionErrorReason = {}));\nclass ConnectionError extends LivekitError {\n  constructor(message, reason, status, context) {\n    super(1, message);\n    this.name = 'ConnectionError';\n    this.status = status;\n    this.reason = reason;\n    this.context = context;\n    this.reasonName = ConnectionErrorReason[reason];\n  }\n  static notAllowed(message, status, context) {\n    return new ConnectionError(message, ConnectionErrorReason.NotAllowed, status, context);\n  }\n  static timeout(message) {\n    return new ConnectionError(message, ConnectionErrorReason.Timeout);\n  }\n  static leaveRequest(message, context) {\n    return new ConnectionError(message, ConnectionErrorReason.LeaveRequest, undefined, context);\n  }\n  static internal(message, context) {\n    return new ConnectionError(message, ConnectionErrorReason.InternalError, undefined, context);\n  }\n  static cancelled(message) {\n    return new ConnectionError(message, ConnectionErrorReason.Cancelled);\n  }\n  static serverUnreachable(message, status) {\n    return new ConnectionError(message, ConnectionErrorReason.ServerUnreachable, status);\n  }\n  static websocket(message, status, reason) {\n    return new ConnectionError(message, ConnectionErrorReason.WebSocket, status, reason);\n  }\n}\nclass DeviceUnsupportedError extends LivekitError {\n  constructor(message) {\n    super(21, message !== null && message !== void 0 ? message : 'device is unsupported');\n    this.name = 'DeviceUnsupportedError';\n  }\n}\nclass TrackInvalidError extends LivekitError {\n  constructor(message) {\n    super(20, message !== null && message !== void 0 ? message : 'track is invalid');\n    this.name = 'TrackInvalidError';\n  }\n}\nclass UnsupportedServer extends LivekitError {\n  constructor(message) {\n    super(10, message !== null && message !== void 0 ? message : 'unsupported server');\n    this.name = 'UnsupportedServer';\n  }\n}\nclass UnexpectedConnectionState extends LivekitError {\n  constructor(message) {\n    super(12, message !== null && message !== void 0 ? message : 'unexpected connection state');\n    this.name = 'UnexpectedConnectionState';\n  }\n}\nclass NegotiationError extends LivekitError {\n  constructor(message) {\n    super(13, message !== null && message !== void 0 ? message : 'unable to negotiate');\n    this.name = 'NegotiationError';\n  }\n}\nclass PublishDataError extends LivekitError {\n  constructor(message) {\n    super(14, message !== null && message !== void 0 ? message : 'unable to publish data');\n    this.name = 'PublishDataError';\n  }\n}\nclass PublishTrackError extends LivekitError {\n  constructor(message, status) {\n    super(15, message);\n    this.name = 'PublishTrackError';\n    this.status = status;\n  }\n}\nclass SignalRequestError extends LivekitError {\n  constructor(message, reason) {\n    super(15, message);\n    this.name = 'SignalRequestError';\n    this.reason = reason;\n    this.reasonName = typeof reason === 'string' ? reason : RequestResponse_Reason[reason];\n  }\n}\n// NOTE: matches with https://github.com/livekit/client-sdk-swift/blob/f37bbd260d61e165084962db822c79f995f1a113/Sources/LiveKit/DataStream/StreamError.swift#L17\nvar DataStreamErrorReason;\n(function (DataStreamErrorReason) {\n  // Unable to open a stream with the same ID more than once.\n  DataStreamErrorReason[DataStreamErrorReason[\"AlreadyOpened\"] = 0] = \"AlreadyOpened\";\n  // Stream closed abnormally by remote participant.\n  DataStreamErrorReason[DataStreamErrorReason[\"AbnormalEnd\"] = 1] = \"AbnormalEnd\";\n  // Incoming chunk data could not be decoded.\n  DataStreamErrorReason[DataStreamErrorReason[\"DecodeFailed\"] = 2] = \"DecodeFailed\";\n  // Read length exceeded total length specified in stream header.\n  DataStreamErrorReason[DataStreamErrorReason[\"LengthExceeded\"] = 3] = \"LengthExceeded\";\n  // Read length less than total length specified in stream header.\n  DataStreamErrorReason[DataStreamErrorReason[\"Incomplete\"] = 4] = \"Incomplete\";\n  // Unable to register a stream handler more than once.\n  DataStreamErrorReason[DataStreamErrorReason[\"HandlerAlreadyRegistered\"] = 7] = \"HandlerAlreadyRegistered\";\n  // Encryption type mismatch.\n  DataStreamErrorReason[DataStreamErrorReason[\"EncryptionTypeMismatch\"] = 8] = \"EncryptionTypeMismatch\";\n})(DataStreamErrorReason || (DataStreamErrorReason = {}));\nclass DataStreamError extends LivekitError {\n  constructor(message, reason) {\n    super(16, message);\n    this.name = 'DataStreamError';\n    this.reason = reason;\n    this.reasonName = DataStreamErrorReason[reason];\n  }\n}\nclass SignalReconnectError extends LivekitError {\n  constructor(message) {\n    super(18, message);\n    this.name = 'SignalReconnectError';\n  }\n}\nvar MediaDeviceFailure;\n(function (MediaDeviceFailure) {\n  // user rejected permissions\n  MediaDeviceFailure[\"PermissionDenied\"] = \"PermissionDenied\";\n  // device is not available\n  MediaDeviceFailure[\"NotFound\"] = \"NotFound\";\n  // device is in use. On Windows, only a single tab may get access to a device at a time.\n  MediaDeviceFailure[\"DeviceInUse\"] = \"DeviceInUse\";\n  MediaDeviceFailure[\"Other\"] = \"Other\";\n})(MediaDeviceFailure || (MediaDeviceFailure = {}));\n(function (MediaDeviceFailure) {\n  function getFailure(error) {\n    if (error && 'name' in error) {\n      if (error.name === 'NotFoundError' || error.name === 'DevicesNotFoundError') {\n        return MediaDeviceFailure.NotFound;\n      }\n      if (error.name === 'NotAllowedError' || error.name === 'PermissionDeniedError') {\n        return MediaDeviceFailure.PermissionDenied;\n      }\n      if (error.name === 'NotReadableError' || error.name === 'TrackStartError') {\n        return MediaDeviceFailure.DeviceInUse;\n      }\n      return MediaDeviceFailure.Other;\n    }\n  }\n  MediaDeviceFailure.getFailure = getFailure;\n})(MediaDeviceFailure || (MediaDeviceFailure = {}));/**\n * Timers that can be overridden with platform specific implementations\n * that ensure that they are fired. These should be used when it is critical\n * that the timer fires on time.\n */\nclass CriticalTimers {}\nCriticalTimers.setTimeout = function () {\n  return setTimeout(...arguments);\n};\nCriticalTimers.setInterval =\n// eslint-disable-next-line @typescript-eslint/no-implied-eval\nfunction () {\n  return setInterval(...arguments);\n};\nCriticalTimers.clearTimeout = function () {\n  return clearTimeout(...arguments);\n};\nCriticalTimers.clearInterval = function () {\n  return clearInterval(...arguments);\n};/**\n * Events are the primary way LiveKit notifies your application of changes.\n *\n * The following are events emitted by [[Room]], listen to room events like\n *\n * ```typescript\n * room.on(RoomEvent.TrackPublished, (track, publication, participant) => {})\n * ```\n */\nvar RoomEvent;\n(function (RoomEvent) {\n  /**\n   * When the connection to the server has been established\n   */\n  RoomEvent[\"Connected\"] = \"connected\";\n  /**\n   * When the connection to the server has been interrupted and it's attempting\n   * to reconnect.\n   */\n  RoomEvent[\"Reconnecting\"] = \"reconnecting\";\n  /**\n   * When the signal connection to the server has been interrupted. This isn't noticeable to users most of the time.\n   * It will resolve with a `RoomEvent.Reconnected` once the signal connection has been re-established.\n   * If media fails additionally it an additional `RoomEvent.Reconnecting` will be emitted.\n   */\n  RoomEvent[\"SignalReconnecting\"] = \"signalReconnecting\";\n  /**\n   * Fires when a reconnection has been successful.\n   */\n  RoomEvent[\"Reconnected\"] = \"reconnected\";\n  /**\n   * When disconnected from room. This fires when room.disconnect() is called or\n   * when an unrecoverable connection issue had occured.\n   *\n   * DisconnectReason can be used to determine why the participant was disconnected. Notable reasons are\n   * - DUPLICATE_IDENTITY: another client with the same identity has joined the room\n   * - PARTICIPANT_REMOVED: participant was removed by RemoveParticipant API\n   * - ROOM_DELETED: the room has ended via DeleteRoom API\n   *\n   * args: ([[DisconnectReason]])\n   */\n  RoomEvent[\"Disconnected\"] = \"disconnected\";\n  /**\n   * Whenever the connection state of the room changes\n   *\n   * args: ([[ConnectionState]])\n   */\n  RoomEvent[\"ConnectionStateChanged\"] = \"connectionStateChanged\";\n  /**\n   * When participant has been moved to a different room by the service request.\n   * The behavior looks like the participant has been disconnected and reconnected to a different room\n   * seamlessly without connection state transition.\n   * A new token will be provided for reconnecting to the new room if needed.\n   *\n   * args: ([[room: string, token: string]])\n   */\n  RoomEvent[\"Moved\"] = \"moved\";\n  /**\n   * When input or output devices on the machine have changed.\n   */\n  RoomEvent[\"MediaDevicesChanged\"] = \"mediaDevicesChanged\";\n  /**\n   * When a [[RemoteParticipant]] joins *after* the local\n   * participant. It will not emit events for participants that are already\n   * in the room\n   *\n   * args: ([[RemoteParticipant]])\n   */\n  RoomEvent[\"ParticipantConnected\"] = \"participantConnected\";\n  /**\n   * When a [[RemoteParticipant]] leaves *after* the local\n   * participant has joined.\n   *\n   * args: ([[RemoteParticipant]])\n   */\n  RoomEvent[\"ParticipantDisconnected\"] = \"participantDisconnected\";\n  /**\n   * When a new track is published to room *after* the local\n   * participant has joined. It will not fire for tracks that are already published.\n   *\n   * A track published doesn't mean the participant has subscribed to it. It's\n   * simply reflecting the state of the room.\n   *\n   * args: ([[RemoteTrackPublication]], [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackPublished\"] = \"trackPublished\";\n  /**\n   * The [[LocalParticipant]] has subscribed to a new track. This event will **always**\n   * fire as long as new tracks are ready for use.\n   *\n   * args: ([[RemoteTrack]], [[RemoteTrackPublication]], [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackSubscribed\"] = \"trackSubscribed\";\n  /**\n   * Could not subscribe to a track\n   *\n   * args: (track sid, [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackSubscriptionFailed\"] = \"trackSubscriptionFailed\";\n  /**\n   * A [[RemoteParticipant]] has unpublished a track\n   *\n   * args: ([[RemoteTrackPublication]], [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackUnpublished\"] = \"trackUnpublished\";\n  /**\n   * A subscribed track is no longer available. Clients should listen to this\n   * event and ensure they detach tracks.\n   *\n   * args: ([[Track]], [[RemoteTrackPublication]], [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackUnsubscribed\"] = \"trackUnsubscribed\";\n  /**\n   * A track that was muted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n   *\n   * args: ([[TrackPublication]], [[Participant]])\n   */\n  RoomEvent[\"TrackMuted\"] = \"trackMuted\";\n  /**\n   * A track that was unmuted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n   *\n   * args: ([[TrackPublication]], [[Participant]])\n   */\n  RoomEvent[\"TrackUnmuted\"] = \"trackUnmuted\";\n  /**\n   * A local track was published successfully. This event is helpful to know\n   * when to update your local UI with the newly published track.\n   *\n   * args: ([[LocalTrackPublication]], [[LocalParticipant]])\n   */\n  RoomEvent[\"LocalTrackPublished\"] = \"localTrackPublished\";\n  /**\n   * A local track was unpublished. This event is helpful to know when to remove\n   * the local track from your UI.\n   *\n   * When a user stops sharing their screen by pressing \"End\" on the browser UI,\n   * this event will also fire.\n   *\n   * args: ([[LocalTrackPublication]], [[LocalParticipant]])\n   */\n  RoomEvent[\"LocalTrackUnpublished\"] = \"localTrackUnpublished\";\n  /**\n   * When a local audio track is published the SDK checks whether there is complete silence\n   * on that track and emits the LocalAudioSilenceDetected event in that case.\n   * This allows for applications to show UI informing users that they might have to\n   * reset their audio hardware or check for proper device connectivity.\n   */\n  RoomEvent[\"LocalAudioSilenceDetected\"] = \"localAudioSilenceDetected\";\n  /**\n   * Active speakers changed. List of speakers are ordered by their audio level.\n   * loudest speakers first. This will include the LocalParticipant too.\n   *\n   * Speaker updates are sent only to the publishing participant and their subscribers.\n   *\n   * args: (Array<[[Participant]]>)\n   */\n  RoomEvent[\"ActiveSpeakersChanged\"] = \"activeSpeakersChanged\";\n  /**\n   * Participant metadata is a simple way for app-specific state to be pushed to\n   * all users.\n   * When RoomService.UpdateParticipantMetadata is called to change a participant's\n   * state, *all*  participants in the room will fire this event.\n   *\n   * args: (prevMetadata: string, [[Participant]])\n   *\n   */\n  RoomEvent[\"ParticipantMetadataChanged\"] = \"participantMetadataChanged\";\n  /**\n   * Participant's display name changed\n   *\n   * args: (name: string, [[Participant]])\n   *\n   */\n  RoomEvent[\"ParticipantNameChanged\"] = \"participantNameChanged\";\n  /**\n   * Participant attributes is an app-specific key value state to be pushed to\n   * all users.\n   * When a participant's attributes changed, this event will be emitted with the changed attributes and the participant\n   * args: (changedAttributes: [[Record<string, string]], participant: [[Participant]])\n   */\n  RoomEvent[\"ParticipantAttributesChanged\"] = \"participantAttributesChanged\";\n  /**\n   * Emitted when the participant's state changes to ACTIVE and is ready to send/receive data messages\n   *\n   * args: (participant: [[Participant]])\n   */\n  RoomEvent[\"ParticipantActive\"] = \"participantActive\";\n  /**\n   * Room metadata is a simple way for app-specific state to be pushed to\n   * all users.\n   * When RoomService.UpdateRoomMetadata is called to change a room's state,\n   * *all*  participants in the room will fire this event.\n   *\n   * args: (string)\n   */\n  RoomEvent[\"RoomMetadataChanged\"] = \"roomMetadataChanged\";\n  /**\n   * Data received from another participant.\n   * Data packets provides the ability to use LiveKit to send/receive arbitrary payloads.\n   * All participants in the room will receive the messages sent to the room.\n   *\n   * args: (payload: Uint8Array, participant: [[Participant]], kind: [[DataPacket_Kind]], topic?: string)\n   */\n  RoomEvent[\"DataReceived\"] = \"dataReceived\";\n  /**\n   * SIP DTMF tones received from another participant.\n   *\n   * args: (participant: [[Participant]], dtmf: [[DataPacket_Kind]])\n   */\n  RoomEvent[\"SipDTMFReceived\"] = \"sipDTMFReceived\";\n  /**\n   * Transcription received from a participant's track.\n   * @beta\n   */\n  RoomEvent[\"TranscriptionReceived\"] = \"transcriptionReceived\";\n  /**\n   * Connection quality was changed for a Participant. It'll receive updates\n   * from the local participant, as well as any [[RemoteParticipant]]s that we are\n   * subscribed to.\n   *\n   * args: (connectionQuality: [[ConnectionQuality]], participant: [[Participant]])\n   */\n  RoomEvent[\"ConnectionQualityChanged\"] = \"connectionQualityChanged\";\n  /**\n   * StreamState indicates if a subscribed (remote) track has been paused by the SFU\n   * (typically this happens because of subscriber's bandwidth constraints)\n   *\n   * When bandwidth conditions allow, the track will be resumed automatically.\n   * TrackStreamStateChanged will also be emitted when that happens.\n   *\n   * args: (pub: [[RemoteTrackPublication]], streamState: [[Track.StreamState]],\n   *        participant: [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackStreamStateChanged\"] = \"trackStreamStateChanged\";\n  /**\n   * One of subscribed tracks have changed its permissions for the current\n   * participant. If permission was revoked, then the track will no longer\n   * be subscribed. If permission was granted, a TrackSubscribed event will\n   * be emitted.\n   *\n   * args: (pub: [[RemoteTrackPublication]],\n   *        status: [[TrackPublication.PermissionStatus]],\n   *        participant: [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackSubscriptionPermissionChanged\"] = \"trackSubscriptionPermissionChanged\";\n  /**\n   * One of subscribed tracks have changed its status for the current\n   * participant.\n   *\n   * args: (pub: [[RemoteTrackPublication]],\n   *        status: [[TrackPublication.SubscriptionStatus]],\n   *        participant: [[RemoteParticipant]])\n   */\n  RoomEvent[\"TrackSubscriptionStatusChanged\"] = \"trackSubscriptionStatusChanged\";\n  /**\n   * LiveKit will attempt to autoplay all audio tracks when you attach them to\n   * audio elements. However, if that fails, we'll notify you via AudioPlaybackStatusChanged.\n   * `Room.canPlaybackAudio` will indicate if audio playback is permitted.\n   */\n  RoomEvent[\"AudioPlaybackStatusChanged\"] = \"audioPlaybackChanged\";\n  /**\n   * LiveKit will attempt to autoplay all video tracks when you attach them to\n   * a video element. However, if that fails, we'll notify you via VideoPlaybackStatusChanged.\n   * Calling `room.startVideo()` in a user gesture event handler will resume the video playback.\n   */\n  RoomEvent[\"VideoPlaybackStatusChanged\"] = \"videoPlaybackChanged\";\n  /**\n   * When we have encountered an error while attempting to create a track.\n   * The errors take place in getUserMedia().\n   * Use MediaDeviceFailure.getFailure(error) to get the reason of failure.\n   * [[LocalParticipant.lastCameraError]] and [[LocalParticipant.lastMicrophoneError]]\n   * will indicate if it had an error while creating the audio or video track respectively.\n   *\n   * args: (error: Error)\n   */\n  RoomEvent[\"MediaDevicesError\"] = \"mediaDevicesError\";\n  /**\n   * A participant's permission has changed.\n   * args: (prevPermissions: [[ParticipantPermission]], participant: [[Participant]])\n   */\n  RoomEvent[\"ParticipantPermissionsChanged\"] = \"participantPermissionsChanged\";\n  /**\n   * Signal connected, can publish tracks.\n   */\n  RoomEvent[\"SignalConnected\"] = \"signalConnected\";\n  /**\n   * Recording of a room has started/stopped. Room.isRecording will be updated too.\n   * args: (isRecording: boolean)\n   */\n  RoomEvent[\"RecordingStatusChanged\"] = \"recordingStatusChanged\";\n  RoomEvent[\"ParticipantEncryptionStatusChanged\"] = \"participantEncryptionStatusChanged\";\n  RoomEvent[\"EncryptionError\"] = \"encryptionError\";\n  /**\n   * Emits whenever the current buffer status of a data channel changes\n   * args: (isLow: boolean, kind: [[DataPacket_Kind]])\n   */\n  RoomEvent[\"DCBufferStatusChanged\"] = \"dcBufferStatusChanged\";\n  /**\n   * Triggered by a call to room.switchActiveDevice\n   * args: (kind: MediaDeviceKind, deviceId: string)\n   */\n  RoomEvent[\"ActiveDeviceChanged\"] = \"activeDeviceChanged\";\n  RoomEvent[\"ChatMessage\"] = \"chatMessage\";\n  /**\n   * fired when the first remote participant has subscribed to the localParticipant's track\n   */\n  RoomEvent[\"LocalTrackSubscribed\"] = \"localTrackSubscribed\";\n  /**\n   * fired when the client receives connection metrics from other participants\n   */\n  RoomEvent[\"MetricsReceived\"] = \"metricsReceived\";\n})(RoomEvent || (RoomEvent = {}));\nvar ParticipantEvent;\n(function (ParticipantEvent) {\n  /**\n   * When a new track is published to room *after* the local\n   * participant has joined. It will not fire for tracks that are already published.\n   *\n   * A track published doesn't mean the participant has subscribed to it. It's\n   * simply reflecting the state of the room.\n   *\n   * args: ([[RemoteTrackPublication]])\n   */\n  ParticipantEvent[\"TrackPublished\"] = \"trackPublished\";\n  /**\n   * Successfully subscribed to the [[RemoteParticipant]]'s track.\n   * This event will **always** fire as long as new tracks are ready for use.\n   *\n   * args: ([[RemoteTrack]], [[RemoteTrackPublication]])\n   */\n  ParticipantEvent[\"TrackSubscribed\"] = \"trackSubscribed\";\n  /**\n   * Could not subscribe to a track\n   *\n   * args: (track sid)\n   */\n  ParticipantEvent[\"TrackSubscriptionFailed\"] = \"trackSubscriptionFailed\";\n  /**\n   * A [[RemoteParticipant]] has unpublished a track\n   *\n   * args: ([[RemoteTrackPublication]])\n   */\n  ParticipantEvent[\"TrackUnpublished\"] = \"trackUnpublished\";\n  /**\n   * A subscribed track is no longer available. Clients should listen to this\n   * event and ensure they detach tracks.\n   *\n   * args: ([[RemoteTrack]], [[RemoteTrackPublication]])\n   */\n  ParticipantEvent[\"TrackUnsubscribed\"] = \"trackUnsubscribed\";\n  /**\n   * A track that was muted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n   *\n   * args: ([[TrackPublication]])\n   */\n  ParticipantEvent[\"TrackMuted\"] = \"trackMuted\";\n  /**\n   * A track that was unmuted, fires on both [[RemoteParticipant]]s and [[LocalParticipant]]\n   *\n   * args: ([[TrackPublication]])\n   */\n  ParticipantEvent[\"TrackUnmuted\"] = \"trackUnmuted\";\n  /**\n   * A local track was published successfully. This event is helpful to know\n   * when to update your local UI with the newly published track.\n   *\n   * args: ([[LocalTrackPublication]])\n   */\n  ParticipantEvent[\"LocalTrackPublished\"] = \"localTrackPublished\";\n  /**\n   * A local track was unpublished. This event is helpful to know when to remove\n   * the local track from your UI.\n   *\n   * When a user stops sharing their screen by pressing \"End\" on the browser UI,\n   * this event will also fire.\n   *\n   * args: ([[LocalTrackPublication]])\n   */\n  ParticipantEvent[\"LocalTrackUnpublished\"] = \"localTrackUnpublished\";\n  /**\n   * A local track has been constrained by cpu.\n   * This event is useful to know when to reduce the capture resolution of the track.\n   *\n   * This event is emitted on the local participant.\n   *\n   * args: ([[LocalVideoTrack]], [[LocalTrackPublication]])\n   */\n  ParticipantEvent[\"LocalTrackCpuConstrained\"] = \"localTrackCpuConstrained\";\n  /**\n   * @internal\n   */\n  ParticipantEvent[\"LocalSenderCreated\"] = \"localSenderCreated\";\n  /**\n   * Participant metadata is a simple way for app-specific state to be pushed to\n   * all users.\n   * When RoomService.UpdateParticipantMetadata is called to change a participant's\n   * state, *all*  participants in the room will fire this event.\n   * To access the current metadata, see [[Participant.metadata]].\n   *\n   * args: (prevMetadata: string)\n   *\n   */\n  ParticipantEvent[\"ParticipantMetadataChanged\"] = \"participantMetadataChanged\";\n  /**\n   * Participant's display name changed\n   *\n   * args: (name: string, [[Participant]])\n   *\n   */\n  ParticipantEvent[\"ParticipantNameChanged\"] = \"participantNameChanged\";\n  /**\n   * Data received from this participant as sender.\n   * Data packets provides the ability to use LiveKit to send/receive arbitrary payloads.\n   * All participants in the room will receive the messages sent to the room.\n   *\n   * args: (payload: Uint8Array, kind: [[DataPacket_Kind]])\n   */\n  ParticipantEvent[\"DataReceived\"] = \"dataReceived\";\n  /**\n   * SIP DTMF tones received from this participant as sender.\n   *\n   * args: (dtmf: [[DataPacket_Kind]])\n   */\n  ParticipantEvent[\"SipDTMFReceived\"] = \"sipDTMFReceived\";\n  /**\n   * Transcription received from this participant as data source.\n   * @beta\n   */\n  ParticipantEvent[\"TranscriptionReceived\"] = \"transcriptionReceived\";\n  /**\n   * Has speaking status changed for the current participant\n   *\n   * args: (speaking: boolean)\n   */\n  ParticipantEvent[\"IsSpeakingChanged\"] = \"isSpeakingChanged\";\n  /**\n   * Connection quality was changed for a Participant. It'll receive updates\n   * from the local participant, as well as any [[RemoteParticipant]]s that we are\n   * subscribed to.\n   *\n   * args: (connectionQuality: [[ConnectionQuality]])\n   */\n  ParticipantEvent[\"ConnectionQualityChanged\"] = \"connectionQualityChanged\";\n  /**\n   * StreamState indicates if a subscribed track has been paused by the SFU\n   * (typically this happens because of subscriber's bandwidth constraints)\n   *\n   * When bandwidth conditions allow, the track will be resumed automatically.\n   * TrackStreamStateChanged will also be emitted when that happens.\n   *\n   * args: (pub: [[RemoteTrackPublication]], streamState: [[Track.StreamState]])\n   */\n  ParticipantEvent[\"TrackStreamStateChanged\"] = \"trackStreamStateChanged\";\n  /**\n   * One of subscribed tracks have changed its permissions for the current\n   * participant. If permission was revoked, then the track will no longer\n   * be subscribed. If permission was granted, a TrackSubscribed event will\n   * be emitted.\n   *\n   * args: (pub: [[RemoteTrackPublication]],\n   *        status: [[TrackPublication.SubscriptionStatus]])\n   */\n  ParticipantEvent[\"TrackSubscriptionPermissionChanged\"] = \"trackSubscriptionPermissionChanged\";\n  /**\n   * One of the remote participants publications has changed its subscription status.\n   *\n   */\n  ParticipantEvent[\"TrackSubscriptionStatusChanged\"] = \"trackSubscriptionStatusChanged\";\n  /**\n   * a local track has been constrained by cpu\n   */\n  ParticipantEvent[\"TrackCpuConstrained\"] = \"trackCpuConstrained\";\n  // fired only on LocalParticipant\n  /** @internal */\n  ParticipantEvent[\"MediaDevicesError\"] = \"mediaDevicesError\";\n  // fired only on LocalParticipant\n  /** @internal */\n  ParticipantEvent[\"AudioStreamAcquired\"] = \"audioStreamAcquired\";\n  /**\n   * A participant's permission has changed.\n   * args: (prevPermissions: [[ParticipantPermission]])\n   */\n  ParticipantEvent[\"ParticipantPermissionsChanged\"] = \"participantPermissionsChanged\";\n  /** @internal */\n  ParticipantEvent[\"PCTrackAdded\"] = \"pcTrackAdded\";\n  /**\n   * Participant attributes is an app-specific key value state to be pushed to\n   * all users.\n   * When a participant's attributes changed, this event will be emitted with the changed attributes\n   * args: (changedAttributes: [[Record<string, string]])\n   */\n  ParticipantEvent[\"AttributesChanged\"] = \"attributesChanged\";\n  /**\n   * fired on local participant only, when the first remote participant has subscribed to the track specified in the payload\n   */\n  ParticipantEvent[\"LocalTrackSubscribed\"] = \"localTrackSubscribed\";\n  /** only emitted on local participant */\n  ParticipantEvent[\"ChatMessage\"] = \"chatMessage\";\n  /**\n   * Emitted when the participant's state changes to ACTIVE and is ready to send/receive data messages\n   */\n  ParticipantEvent[\"Active\"] = \"active\";\n})(ParticipantEvent || (ParticipantEvent = {}));\n/** @internal */\nvar EngineEvent;\n(function (EngineEvent) {\n  EngineEvent[\"TransportsCreated\"] = \"transportsCreated\";\n  EngineEvent[\"Connected\"] = \"connected\";\n  EngineEvent[\"Disconnected\"] = \"disconnected\";\n  EngineEvent[\"Resuming\"] = \"resuming\";\n  EngineEvent[\"Resumed\"] = \"resumed\";\n  EngineEvent[\"Restarting\"] = \"restarting\";\n  EngineEvent[\"Restarted\"] = \"restarted\";\n  EngineEvent[\"SignalResumed\"] = \"signalResumed\";\n  EngineEvent[\"SignalRestarted\"] = \"signalRestarted\";\n  EngineEvent[\"Closing\"] = \"closing\";\n  EngineEvent[\"MediaTrackAdded\"] = \"mediaTrackAdded\";\n  EngineEvent[\"ActiveSpeakersUpdate\"] = \"activeSpeakersUpdate\";\n  EngineEvent[\"DataPacketReceived\"] = \"dataPacketReceived\";\n  EngineEvent[\"RTPVideoMapUpdate\"] = \"rtpVideoMapUpdate\";\n  EngineEvent[\"DCBufferStatusChanged\"] = \"dcBufferStatusChanged\";\n  EngineEvent[\"ParticipantUpdate\"] = \"participantUpdate\";\n  EngineEvent[\"RoomUpdate\"] = \"roomUpdate\";\n  EngineEvent[\"SpeakersChanged\"] = \"speakersChanged\";\n  EngineEvent[\"StreamStateChanged\"] = \"streamStateChanged\";\n  EngineEvent[\"ConnectionQualityUpdate\"] = \"connectionQualityUpdate\";\n  EngineEvent[\"SubscriptionError\"] = \"subscriptionError\";\n  EngineEvent[\"SubscriptionPermissionUpdate\"] = \"subscriptionPermissionUpdate\";\n  EngineEvent[\"RemoteMute\"] = \"remoteMute\";\n  EngineEvent[\"SubscribedQualityUpdate\"] = \"subscribedQualityUpdate\";\n  EngineEvent[\"LocalTrackUnpublished\"] = \"localTrackUnpublished\";\n  EngineEvent[\"LocalTrackSubscribed\"] = \"localTrackSubscribed\";\n  EngineEvent[\"Offline\"] = \"offline\";\n  EngineEvent[\"SignalRequestResponse\"] = \"signalRequestResponse\";\n  EngineEvent[\"SignalConnected\"] = \"signalConnected\";\n  EngineEvent[\"RoomMoved\"] = \"roomMoved\";\n})(EngineEvent || (EngineEvent = {}));\nvar TrackEvent;\n(function (TrackEvent) {\n  TrackEvent[\"Message\"] = \"message\";\n  TrackEvent[\"Muted\"] = \"muted\";\n  TrackEvent[\"Unmuted\"] = \"unmuted\";\n  /**\n   * Only fires on LocalTracks\n   */\n  TrackEvent[\"Restarted\"] = \"restarted\";\n  TrackEvent[\"Ended\"] = \"ended\";\n  TrackEvent[\"Subscribed\"] = \"subscribed\";\n  TrackEvent[\"Unsubscribed\"] = \"unsubscribed\";\n  TrackEvent[\"CpuConstrained\"] = \"cpuConstrained\";\n  /** @internal */\n  TrackEvent[\"UpdateSettings\"] = \"updateSettings\";\n  /** @internal */\n  TrackEvent[\"UpdateSubscription\"] = \"updateSubscription\";\n  /** @internal */\n  TrackEvent[\"AudioPlaybackStarted\"] = \"audioPlaybackStarted\";\n  /** @internal */\n  TrackEvent[\"AudioPlaybackFailed\"] = \"audioPlaybackFailed\";\n  /**\n   * @internal\n   * Only fires on LocalAudioTrack instances\n   */\n  TrackEvent[\"AudioSilenceDetected\"] = \"audioSilenceDetected\";\n  /** @internal */\n  TrackEvent[\"VisibilityChanged\"] = \"visibilityChanged\";\n  /** @internal */\n  TrackEvent[\"VideoDimensionsChanged\"] = \"videoDimensionsChanged\";\n  /** @internal */\n  TrackEvent[\"VideoPlaybackStarted\"] = \"videoPlaybackStarted\";\n  /** @internal */\n  TrackEvent[\"VideoPlaybackFailed\"] = \"videoPlaybackFailed\";\n  /** @internal */\n  TrackEvent[\"ElementAttached\"] = \"elementAttached\";\n  /** @internal */\n  TrackEvent[\"ElementDetached\"] = \"elementDetached\";\n  /**\n   * @internal\n   * Only fires on LocalTracks\n   */\n  TrackEvent[\"UpstreamPaused\"] = \"upstreamPaused\";\n  /**\n   * @internal\n   * Only fires on LocalTracks\n   */\n  TrackEvent[\"UpstreamResumed\"] = \"upstreamResumed\";\n  /**\n   * @internal\n   * Fires on RemoteTrackPublication\n   */\n  TrackEvent[\"SubscriptionPermissionChanged\"] = \"subscriptionPermissionChanged\";\n  /**\n   * Fires on RemoteTrackPublication\n   */\n  TrackEvent[\"SubscriptionStatusChanged\"] = \"subscriptionStatusChanged\";\n  /**\n   * Fires on RemoteTrackPublication\n   */\n  TrackEvent[\"SubscriptionFailed\"] = \"subscriptionFailed\";\n  /**\n   * @internal\n   */\n  TrackEvent[\"TrackProcessorUpdate\"] = \"trackProcessorUpdate\";\n  /**\n   * @internal\n   */\n  TrackEvent[\"AudioTrackFeatureUpdate\"] = \"audioTrackFeatureUpdate\";\n  /**\n   * @beta\n   */\n  TrackEvent[\"TranscriptionReceived\"] = \"transcriptionReceived\";\n  /**\n   * @experimental\n   */\n  TrackEvent[\"TimeSyncUpdate\"] = \"timeSyncUpdate\";\n  /**\n   * @internal\n   */\n  TrackEvent[\"PreConnectBufferFlushed\"] = \"preConnectBufferFlushed\";\n})(TrackEvent || (TrackEvent = {}));function cloneDeep(value) {\n  if (typeof value === 'undefined') {\n    return value;\n  }\n  if (typeof structuredClone === 'function') {\n    if (typeof value === 'object' && value !== null) {\n      // ensure that the value is not a proxy by spreading it\n      return structuredClone(Object.assign({}, value));\n    }\n    return structuredClone(value);\n  } else {\n    return JSON.parse(JSON.stringify(value));\n  }\n}class VideoPreset {\n  constructor(widthOrOptions, height, maxBitrate, maxFramerate, priority) {\n    if (typeof widthOrOptions === 'object') {\n      this.width = widthOrOptions.width;\n      this.height = widthOrOptions.height;\n      this.aspectRatio = widthOrOptions.aspectRatio;\n      this.encoding = {\n        maxBitrate: widthOrOptions.maxBitrate,\n        maxFramerate: widthOrOptions.maxFramerate,\n        priority: widthOrOptions.priority\n      };\n    } else if (height !== undefined && maxBitrate !== undefined) {\n      this.width = widthOrOptions;\n      this.height = height;\n      this.aspectRatio = widthOrOptions / height;\n      this.encoding = {\n        maxBitrate,\n        maxFramerate,\n        priority\n      };\n    } else {\n      throw new TypeError('Unsupported options: provide at least width, height and maxBitrate');\n    }\n  }\n  get resolution() {\n    return {\n      width: this.width,\n      height: this.height,\n      frameRate: this.encoding.maxFramerate,\n      aspectRatio: this.aspectRatio\n    };\n  }\n}\n// `red` is not technically a codec, but treated as one in signalling protocol\nconst audioCodecs = ['opus', 'red'];\nconst backupVideoCodecs = ['vp8', 'h264'];\nconst videoCodecs = ['vp8', 'h264', 'vp9', 'av1', 'h265'];\nfunction isBackupVideoCodec(codec) {\n  return !!backupVideoCodecs.find(backup => backup === codec);\n}\n/** @deprecated Use {@link isBackupVideoCodec} instead */\nconst isBackupCodec = isBackupVideoCodec;\nvar BackupCodecPolicy;\n(function (BackupCodecPolicy) {\n  // codec regression is preferred, the sfu will try to regress codec if possible but not guaranteed\n  BackupCodecPolicy[BackupCodecPolicy[\"PREFER_REGRESSION\"] = 0] = \"PREFER_REGRESSION\";\n  // multi-codec simulcast, publish both primary and backup codec at the same time\n  BackupCodecPolicy[BackupCodecPolicy[\"SIMULCAST\"] = 1] = \"SIMULCAST\";\n  // always use backup codec only\n  BackupCodecPolicy[BackupCodecPolicy[\"REGRESSION\"] = 2] = \"REGRESSION\";\n})(BackupCodecPolicy || (BackupCodecPolicy = {}));\nvar AudioPresets;\n(function (AudioPresets) {\n  AudioPresets.telephone = {\n    maxBitrate: 12000\n  };\n  AudioPresets.speech = {\n    maxBitrate: 24000\n  };\n  AudioPresets.music = {\n    maxBitrate: 48000\n  };\n  AudioPresets.musicStereo = {\n    maxBitrate: 64000\n  };\n  AudioPresets.musicHighQuality = {\n    maxBitrate: 96000\n  };\n  AudioPresets.musicHighQualityStereo = {\n    maxBitrate: 128000\n  };\n})(AudioPresets || (AudioPresets = {}));\n/**\n * Sane presets for video resolution/encoding\n */\nconst VideoPresets = {\n  h90: new VideoPreset(160, 90, 90000, 20),\n  h180: new VideoPreset(320, 180, 160000, 20),\n  h216: new VideoPreset(384, 216, 180000, 20),\n  h360: new VideoPreset(640, 360, 450000, 20),\n  h540: new VideoPreset(960, 540, 800000, 25),\n  h720: new VideoPreset(1280, 720, 1700000, 30),\n  h1080: new VideoPreset(1920, 1080, 3000000, 30),\n  h1440: new VideoPreset(2560, 1440, 5000000, 30),\n  h2160: new VideoPreset(3840, 2160, 8000000, 30)\n};\n/**\n * Four by three presets\n */\nconst VideoPresets43 = {\n  h120: new VideoPreset(160, 120, 70000, 20),\n  h180: new VideoPreset(240, 180, 125000, 20),\n  h240: new VideoPreset(320, 240, 140000, 20),\n  h360: new VideoPreset(480, 360, 330000, 20),\n  h480: new VideoPreset(640, 480, 500000, 20),\n  h540: new VideoPreset(720, 540, 600000, 25),\n  h720: new VideoPreset(960, 720, 1300000, 30),\n  h1080: new VideoPreset(1440, 1080, 2300000, 30),\n  h1440: new VideoPreset(1920, 1440, 3800000, 30)\n};\nconst ScreenSharePresets = {\n  h360fps3: new VideoPreset(640, 360, 200000, 3, 'medium'),\n  h360fps15: new VideoPreset(640, 360, 400000, 15, 'medium'),\n  h720fps5: new VideoPreset(1280, 720, 800000, 5, 'medium'),\n  h720fps15: new VideoPreset(1280, 720, 1500000, 15, 'medium'),\n  h720fps30: new VideoPreset(1280, 720, 2000000, 30, 'medium'),\n  h1080fps15: new VideoPreset(1920, 1080, 2500000, 15, 'medium'),\n  h1080fps30: new VideoPreset(1920, 1080, 5000000, 30, 'medium'),\n  // original resolution, without resizing\n  original: new VideoPreset(0, 0, 7000000, 30, 'medium')\n};function mergeDefaultOptions(options, audioDefaults, videoDefaults) {\n  var _a, _b;\n  var _c, _d;\n  const {\n    optionsWithoutProcessor,\n    audioProcessor,\n    videoProcessor\n  } = extractProcessorsFromOptions(options !== null && options !== void 0 ? options : {});\n  const defaultAudioProcessor = audioDefaults === null || audioDefaults === void 0 ? void 0 : audioDefaults.processor;\n  const defaultVideoProcessor = videoDefaults === null || videoDefaults === void 0 ? void 0 : videoDefaults.processor;\n  const clonedOptions = optionsWithoutProcessor !== null && optionsWithoutProcessor !== void 0 ? optionsWithoutProcessor : {};\n  if (clonedOptions.audio === true) clonedOptions.audio = {};\n  if (clonedOptions.video === true) clonedOptions.video = {};\n  // use defaults\n  if (clonedOptions.audio) {\n    mergeObjectWithoutOverwriting(clonedOptions.audio, audioDefaults);\n    (_a = (_c = clonedOptions.audio).deviceId) !== null && _a !== void 0 ? _a : _c.deviceId = {\n      ideal: 'default'\n    };\n    if (audioProcessor || defaultAudioProcessor) {\n      clonedOptions.audio.processor = audioProcessor !== null && audioProcessor !== void 0 ? audioProcessor : defaultAudioProcessor;\n    }\n  }\n  if (clonedOptions.video) {\n    mergeObjectWithoutOverwriting(clonedOptions.video, videoDefaults);\n    (_b = (_d = clonedOptions.video).deviceId) !== null && _b !== void 0 ? _b : _d.deviceId = {\n      ideal: 'default'\n    };\n    if (videoProcessor || defaultVideoProcessor) {\n      clonedOptions.video.processor = videoProcessor !== null && videoProcessor !== void 0 ? videoProcessor : defaultVideoProcessor;\n    }\n  }\n  return clonedOptions;\n}\nfunction mergeObjectWithoutOverwriting(mainObject, objectToMerge) {\n  Object.keys(objectToMerge).forEach(key => {\n    if (mainObject[key] === undefined) mainObject[key] = objectToMerge[key];\n  });\n  return mainObject;\n}\nfunction constraintsForOptions(options) {\n  var _a, _b;\n  var _c, _d;\n  const constraints = {};\n  if (options.video) {\n    // default video options\n    if (typeof options.video === 'object') {\n      const videoOptions = {};\n      const target = videoOptions;\n      const source = options.video;\n      Object.keys(source).forEach(key => {\n        switch (key) {\n          case 'resolution':\n            // flatten VideoResolution fields\n            mergeObjectWithoutOverwriting(target, source.resolution);\n            break;\n          default:\n            target[key] = source[key];\n        }\n      });\n      constraints.video = videoOptions;\n      (_a = (_c = constraints.video).deviceId) !== null && _a !== void 0 ? _a : _c.deviceId = {\n        ideal: 'default'\n      };\n    } else {\n      constraints.video = options.video ? {\n        deviceId: {\n          ideal: 'default'\n        }\n      } : false;\n    }\n  } else {\n    constraints.video = false;\n  }\n  if (options.audio) {\n    if (typeof options.audio === 'object') {\n      constraints.audio = options.audio;\n      (_b = (_d = constraints.audio).deviceId) !== null && _b !== void 0 ? _b : _d.deviceId = {\n        ideal: 'default'\n      };\n    } else {\n      constraints.audio = {\n        deviceId: {\n          ideal: 'default'\n        }\n      };\n    }\n  } else {\n    constraints.audio = false;\n  }\n  return constraints;\n}\n/**\n * This function detects silence on a given [[Track]] instance.\n * Returns true if the track seems to be entirely silent.\n */\nfunction detectSilence(track_1) {\n  return __awaiter(this, arguments, void 0, function (track) {\n    let timeOffset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 200;\n    return function* () {\n      const ctx = getNewAudioContext();\n      if (ctx) {\n        const analyser = ctx.createAnalyser();\n        analyser.fftSize = 2048;\n        const bufferLength = analyser.frequencyBinCount;\n        const dataArray = new Uint8Array(bufferLength);\n        const source = ctx.createMediaStreamSource(new MediaStream([track.mediaStreamTrack]));\n        source.connect(analyser);\n        yield sleep(timeOffset);\n        analyser.getByteTimeDomainData(dataArray);\n        const someNoise = dataArray.some(sample => sample !== 128 && sample !== 0);\n        ctx.close();\n        return !someNoise;\n      }\n      return false;\n    }();\n  });\n}\n/**\n * @internal\n */\nfunction getNewAudioContext() {\n  var _a;\n  const AudioContext =\n  // @ts-ignore\n  typeof window !== 'undefined' && (window.AudioContext || window.webkitAudioContext);\n  if (AudioContext) {\n    const audioContext = new AudioContext({\n      latencyHint: 'interactive'\n    });\n    // If the audio context is suspended, we need to resume it when the user clicks on the page\n    if (audioContext.state === 'suspended' && typeof window !== 'undefined' && ((_a = window.document) === null || _a === void 0 ? void 0 : _a.body)) {\n      const handleResume = () => __awaiter(this, void 0, void 0, function* () {\n        var _a;\n        try {\n          if (audioContext.state === 'suspended') {\n            yield audioContext.resume();\n          }\n        } catch (e) {\n          console.warn('Error trying to auto-resume audio context', e);\n        } finally {\n          (_a = window.document.body) === null || _a === void 0 ? void 0 : _a.removeEventListener('click', handleResume);\n        }\n      });\n      // https://developer.mozilla.org/en-US/docs/Web/API/BaseAudioContext/statechange_event\n      audioContext.addEventListener('statechange', () => {\n        var _a;\n        if (audioContext.state === 'closed') {\n          (_a = window.document.body) === null || _a === void 0 ? void 0 : _a.removeEventListener('click', handleResume);\n        }\n      });\n      window.document.body.addEventListener('click', handleResume);\n    }\n    return audioContext;\n  }\n}\n/**\n * @internal\n */\nfunction kindToSource(kind) {\n  if (kind === 'audioinput') {\n    return Track.Source.Microphone;\n  } else if (kind === 'videoinput') {\n    return Track.Source.Camera;\n  } else {\n    return Track.Source.Unknown;\n  }\n}\n/**\n * @internal\n */\nfunction sourceToKind(source) {\n  if (source === Track.Source.Microphone) {\n    return 'audioinput';\n  } else if (source === Track.Source.Camera) {\n    return 'videoinput';\n  } else {\n    return undefined;\n  }\n}\n/**\n * @internal\n */\nfunction screenCaptureToDisplayMediaStreamOptions(options) {\n  var _a, _b;\n  let videoConstraints = (_a = options.video) !== null && _a !== void 0 ? _a : true;\n  // treat 0 as uncapped\n  if (options.resolution && options.resolution.width > 0 && options.resolution.height > 0) {\n    videoConstraints = typeof videoConstraints === 'boolean' ? {} : videoConstraints;\n    if (isSafari()) {\n      videoConstraints = Object.assign(Object.assign({}, videoConstraints), {\n        width: {\n          max: options.resolution.width\n        },\n        height: {\n          max: options.resolution.height\n        },\n        frameRate: options.resolution.frameRate\n      });\n    } else {\n      videoConstraints = Object.assign(Object.assign({}, videoConstraints), {\n        width: {\n          ideal: options.resolution.width\n        },\n        height: {\n          ideal: options.resolution.height\n        },\n        frameRate: options.resolution.frameRate\n      });\n    }\n  }\n  return {\n    audio: (_b = options.audio) !== null && _b !== void 0 ? _b : false,\n    video: videoConstraints,\n    // @ts-expect-error support for experimental display media features\n    controller: options.controller,\n    selfBrowserSurface: options.selfBrowserSurface,\n    surfaceSwitching: options.surfaceSwitching,\n    systemAudio: options.systemAudio,\n    preferCurrentTab: options.preferCurrentTab\n  };\n}\nfunction mimeTypeToVideoCodecString(mimeType) {\n  return mimeType.split('/')[1].toLowerCase();\n}\nfunction getTrackPublicationInfo(tracks) {\n  const infos = [];\n  tracks.forEach(track => {\n    if (track.track !== undefined) {\n      infos.push(new TrackPublishedResponse({\n        cid: track.track.mediaStreamID,\n        track: track.trackInfo\n      }));\n    }\n  });\n  return infos;\n}\nfunction getLogContextFromTrack(track) {\n  if ('mediaStreamTrack' in track) {\n    return {\n      trackID: track.sid,\n      source: track.source,\n      muted: track.isMuted,\n      enabled: track.mediaStreamTrack.enabled,\n      kind: track.kind,\n      streamID: track.mediaStreamID,\n      streamTrackID: track.mediaStreamTrack.id\n    };\n  } else {\n    return {\n      trackID: track.trackSid,\n      enabled: track.isEnabled,\n      muted: track.isMuted,\n      trackInfo: Object.assign({\n        mimeType: track.mimeType,\n        name: track.trackName,\n        encrypted: track.isEncrypted,\n        kind: track.kind,\n        source: track.source\n      }, track.track ? getLogContextFromTrack(track.track) : {})\n    };\n  }\n}\nfunction supportsSynchronizationSources() {\n  return typeof RTCRtpReceiver !== 'undefined' && 'getSynchronizationSources' in RTCRtpReceiver;\n}\nfunction diffAttributes(oldValues, newValues) {\n  var _a;\n  if (oldValues === undefined) {\n    oldValues = {};\n  }\n  if (newValues === undefined) {\n    newValues = {};\n  }\n  const allKeys = [...Object.keys(newValues), ...Object.keys(oldValues)];\n  const diff = {};\n  for (const key of allKeys) {\n    if (oldValues[key] !== newValues[key]) {\n      diff[key] = (_a = newValues[key]) !== null && _a !== void 0 ? _a : '';\n    }\n  }\n  return diff;\n}\n/** @internal */\nfunction extractProcessorsFromOptions(options) {\n  const newOptions = Object.assign({}, options);\n  let audioProcessor;\n  let videoProcessor;\n  if (typeof newOptions.audio === 'object' && newOptions.audio.processor) {\n    audioProcessor = newOptions.audio.processor;\n    newOptions.audio = Object.assign(Object.assign({}, newOptions.audio), {\n      processor: undefined\n    });\n  }\n  if (typeof newOptions.video === 'object' && newOptions.video.processor) {\n    videoProcessor = newOptions.video.processor;\n    newOptions.video = Object.assign(Object.assign({}, newOptions.video), {\n      processor: undefined\n    });\n  }\n  return {\n    audioProcessor,\n    videoProcessor,\n    optionsWithoutProcessor: cloneDeep(newOptions)\n  };\n}\nfunction getTrackSourceFromProto(source) {\n  switch (source) {\n    case TrackSource.CAMERA:\n      return Track.Source.Camera;\n    case TrackSource.MICROPHONE:\n      return Track.Source.Microphone;\n    case TrackSource.SCREEN_SHARE:\n      return Track.Source.ScreenShare;\n    case TrackSource.SCREEN_SHARE_AUDIO:\n      return Track.Source.ScreenShareAudio;\n    default:\n      return Track.Source.Unknown;\n  }\n}\nfunction areDimensionsSmaller(a, b) {\n  return a.width * a.height < b.width * b.height;\n}\nfunction layerDimensionsFor(trackInfo, quality) {\n  var _a;\n  return (_a = trackInfo.layers) === null || _a === void 0 ? void 0 : _a.find(l => l.quality === quality);\n}const BACKGROUND_REACTION_DELAY = 5000;\n// keep old audio elements when detached, we would re-use them since on iOS\n// Safari tracks which audio elements have been \"blessed\" by the user.\nconst recycledElements = [];\nvar VideoQuality;\n(function (VideoQuality) {\n  VideoQuality[VideoQuality[\"LOW\"] = 0] = \"LOW\";\n  VideoQuality[VideoQuality[\"MEDIUM\"] = 1] = \"MEDIUM\";\n  VideoQuality[VideoQuality[\"HIGH\"] = 2] = \"HIGH\";\n})(VideoQuality || (VideoQuality = {}));\nclass Track extends eventsExports.EventEmitter {\n  /**\n   * indicates current state of stream, it'll indicate `paused` if the track\n   * has been paused by congestion controller\n   */\n  get streamState() {\n    return this._streamState;\n  }\n  /** @internal */\n  setStreamState(value) {\n    this._streamState = value;\n  }\n  constructor(mediaTrack, kind) {\n    let loggerOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var _a;\n    super();\n    this.attachedElements = [];\n    this.isMuted = false;\n    this._streamState = Track.StreamState.Active;\n    this.isInBackground = false;\n    this._currentBitrate = 0;\n    this.log = livekitLogger;\n    this.appVisibilityChangedListener = () => {\n      if (this.backgroundTimeout) {\n        clearTimeout(this.backgroundTimeout);\n      }\n      // delay app visibility update if it goes to hidden\n      // update immediately if it comes back to focus\n      if (document.visibilityState === 'hidden') {\n        this.backgroundTimeout = setTimeout(() => this.handleAppVisibilityChanged(), BACKGROUND_REACTION_DELAY);\n      } else {\n        this.handleAppVisibilityChanged();\n      }\n    };\n    this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Track);\n    this.loggerContextCb = loggerOptions.loggerContextCb;\n    this.setMaxListeners(100);\n    this.kind = kind;\n    this._mediaStreamTrack = mediaTrack;\n    this._mediaStreamID = mediaTrack.id;\n    this.source = Track.Source.Unknown;\n  }\n  get logContext() {\n    var _a;\n    return Object.assign(Object.assign({}, (_a = this.loggerContextCb) === null || _a === void 0 ? void 0 : _a.call(this)), getLogContextFromTrack(this));\n  }\n  /** current receive bits per second */\n  get currentBitrate() {\n    return this._currentBitrate;\n  }\n  get mediaStreamTrack() {\n    return this._mediaStreamTrack;\n  }\n  /**\n   * @internal\n   * used for keep mediaStream's first id, since it's id might change\n   * if we disable/enable a track\n   */\n  get mediaStreamID() {\n    return this._mediaStreamID;\n  }\n  attach(element) {\n    let elementType = 'audio';\n    if (this.kind === Track.Kind.Video) {\n      elementType = 'video';\n    }\n    if (this.attachedElements.length === 0 && this.kind === Track.Kind.Video) {\n      this.addAppVisibilityListener();\n    }\n    if (!element) {\n      if (elementType === 'audio') {\n        recycledElements.forEach(e => {\n          if (e.parentElement === null && !element) {\n            element = e;\n          }\n        });\n        if (element) {\n          // remove it from pool\n          recycledElements.splice(recycledElements.indexOf(element), 1);\n        }\n      }\n      if (!element) {\n        element = document.createElement(elementType);\n      }\n    }\n    if (!this.attachedElements.includes(element)) {\n      this.attachedElements.push(element);\n    }\n    // even if we believe it's already attached to the element, it's possible\n    // the element's srcObject was set to something else out of band.\n    // we'll want to re-attach it in that case\n    attachToElement(this.mediaStreamTrack, element);\n    // handle auto playback failures\n    const allMediaStreamTracks = element.srcObject.getTracks();\n    const hasAudio = allMediaStreamTracks.some(tr => tr.kind === 'audio');\n    // manually play media to detect auto playback status\n    element.play().then(() => {\n      this.emit(hasAudio ? TrackEvent.AudioPlaybackStarted : TrackEvent.VideoPlaybackStarted);\n    }).catch(e => {\n      if (e.name === 'NotAllowedError') {\n        this.emit(hasAudio ? TrackEvent.AudioPlaybackFailed : TrackEvent.VideoPlaybackFailed, e);\n      } else if (e.name === 'AbortError') {\n        // commonly triggered by another `play` request, only log for debugging purposes\n        livekitLogger.debug(\"\".concat(hasAudio ? 'audio' : 'video', \" playback aborted, likely due to new play request\"));\n      } else {\n        livekitLogger.warn(\"could not playback \".concat(hasAudio ? 'audio' : 'video'), e);\n      }\n      // If audio playback isn't allowed make sure we still play back the video\n      if (hasAudio && element && allMediaStreamTracks.some(tr => tr.kind === 'video') && e.name === 'NotAllowedError') {\n        element.muted = true;\n        element.play().catch(() => {\n          // catch for Safari, exceeded options at this point to automatically play the media element\n        });\n      }\n    });\n    this.emit(TrackEvent.ElementAttached, element);\n    return element;\n  }\n  detach(element) {\n    try {\n      // detach from a single element\n      if (element) {\n        detachTrack(this.mediaStreamTrack, element);\n        const idx = this.attachedElements.indexOf(element);\n        if (idx >= 0) {\n          this.attachedElements.splice(idx, 1);\n          this.recycleElement(element);\n          this.emit(TrackEvent.ElementDetached, element);\n        }\n        return element;\n      }\n      const detached = [];\n      this.attachedElements.forEach(elm => {\n        detachTrack(this.mediaStreamTrack, elm);\n        detached.push(elm);\n        this.recycleElement(elm);\n        this.emit(TrackEvent.ElementDetached, elm);\n      });\n      // remove all tracks\n      this.attachedElements = [];\n      return detached;\n    } finally {\n      if (this.attachedElements.length === 0) {\n        this.removeAppVisibilityListener();\n      }\n    }\n  }\n  stop() {\n    this.stopMonitor();\n    this._mediaStreamTrack.stop();\n  }\n  enable() {\n    this._mediaStreamTrack.enabled = true;\n  }\n  disable() {\n    this._mediaStreamTrack.enabled = false;\n  }\n  /* @internal */\n  stopMonitor() {\n    if (this.monitorInterval) {\n      clearInterval(this.monitorInterval);\n    }\n    if (this.timeSyncHandle) {\n      cancelAnimationFrame(this.timeSyncHandle);\n    }\n  }\n  /** @internal */\n  updateLoggerOptions(loggerOptions) {\n    if (loggerOptions.loggerName) {\n      this.log = getLogger(loggerOptions.loggerName);\n    }\n    if (loggerOptions.loggerContextCb) {\n      this.loggerContextCb = loggerOptions.loggerContextCb;\n    }\n  }\n  recycleElement(element) {\n    if (element instanceof HTMLAudioElement) {\n      // we only need to re-use a single element\n      let shouldCache = true;\n      element.pause();\n      recycledElements.forEach(e => {\n        if (!e.parentElement) {\n          shouldCache = false;\n        }\n      });\n      if (shouldCache) {\n        recycledElements.push(element);\n      }\n    }\n  }\n  handleAppVisibilityChanged() {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.isInBackground = document.visibilityState === 'hidden';\n      if (!this.isInBackground && this.kind === Track.Kind.Video) {\n        setTimeout(() => this.attachedElements.forEach(el => el.play().catch(() => {\n          /** catch clause necessary for Safari */\n        })), 0);\n      }\n    });\n  }\n  addAppVisibilityListener() {\n    if (isWeb()) {\n      this.isInBackground = document.visibilityState === 'hidden';\n      document.addEventListener('visibilitychange', this.appVisibilityChangedListener);\n    } else {\n      this.isInBackground = false;\n    }\n  }\n  removeAppVisibilityListener() {\n    if (isWeb()) {\n      document.removeEventListener('visibilitychange', this.appVisibilityChangedListener);\n    }\n  }\n}\nfunction attachToElement(track, element) {\n  let mediaStream;\n  if (element.srcObject instanceof MediaStream) {\n    mediaStream = element.srcObject;\n  } else {\n    mediaStream = new MediaStream();\n  }\n  // check if track matches existing track\n  let existingTracks;\n  if (track.kind === 'audio') {\n    existingTracks = mediaStream.getAudioTracks();\n  } else {\n    existingTracks = mediaStream.getVideoTracks();\n  }\n  if (!existingTracks.includes(track)) {\n    existingTracks.forEach(et => {\n      mediaStream.removeTrack(et);\n    });\n    mediaStream.addTrack(track);\n  }\n  if (!isSafari() || !(element instanceof HTMLVideoElement)) {\n    // when in low power mode (applies to both macOS and iOS), Safari will show a play/pause overlay\n    // when a video starts that has the `autoplay` attribute is set.\n    // we work around this by _not_ setting the autoplay attribute on safari and instead call `setTimeout(() => el.play(),0)` further down\n    element.autoplay = true;\n  }\n  // In case there are no audio tracks present on the mediastream, we set the element as muted to ensure autoplay works\n  element.muted = mediaStream.getAudioTracks().length === 0;\n  if (element instanceof HTMLVideoElement) {\n    element.playsInline = true;\n  }\n  // avoid flicker\n  if (element.srcObject !== mediaStream) {\n    element.srcObject = mediaStream;\n    if ((isSafari() || isFireFox()) && element instanceof HTMLVideoElement) {\n      // Firefox also has a timing issue where video doesn't actually get attached unless\n      // performed out-of-band\n      // Safari 15 has a bug where in certain layouts, video element renders\n      // black until the page is resized or other changes take place.\n      // Resetting the src triggers it to render.\n      // https://developer.apple.com/forums/thread/690523\n      setTimeout(() => {\n        element.srcObject = mediaStream;\n        // Safari 15 sometimes fails to start a video\n        // when the window is backgrounded before the first frame is drawn\n        // manually calling play here seems to fix that\n        element.play().catch(() => {\n          /** do nothing */\n        });\n      }, 0);\n    }\n  }\n}\n/** @internal */\nfunction detachTrack(track, element) {\n  if (element.srcObject instanceof MediaStream) {\n    const mediaStream = element.srcObject;\n    mediaStream.removeTrack(track);\n    if (mediaStream.getTracks().length > 0) {\n      element.srcObject = mediaStream;\n    } else {\n      element.srcObject = null;\n    }\n  }\n}\n(function (Track) {\n  let Kind;\n  (function (Kind) {\n    Kind[\"Audio\"] = \"audio\";\n    Kind[\"Video\"] = \"video\";\n    Kind[\"Unknown\"] = \"unknown\";\n  })(Kind = Track.Kind || (Track.Kind = {}));\n  let Source;\n  (function (Source) {\n    Source[\"Camera\"] = \"camera\";\n    Source[\"Microphone\"] = \"microphone\";\n    Source[\"ScreenShare\"] = \"screen_share\";\n    Source[\"ScreenShareAudio\"] = \"screen_share_audio\";\n    Source[\"Unknown\"] = \"unknown\";\n  })(Source = Track.Source || (Track.Source = {}));\n  let StreamState$1;\n  (function (StreamState) {\n    StreamState[\"Active\"] = \"active\";\n    StreamState[\"Paused\"] = \"paused\";\n    StreamState[\"Unknown\"] = \"unknown\";\n  })(StreamState$1 = Track.StreamState || (Track.StreamState = {}));\n  /** @internal */\n  function kindToProto(k) {\n    switch (k) {\n      case Kind.Audio:\n        return TrackType.AUDIO;\n      case Kind.Video:\n        return TrackType.VIDEO;\n      default:\n        // FIXME this was UNRECOGNIZED before\n        return TrackType.DATA;\n    }\n  }\n  Track.kindToProto = kindToProto;\n  /** @internal */\n  function kindFromProto(t) {\n    switch (t) {\n      case TrackType.AUDIO:\n        return Kind.Audio;\n      case TrackType.VIDEO:\n        return Kind.Video;\n      default:\n        return Kind.Unknown;\n    }\n  }\n  Track.kindFromProto = kindFromProto;\n  /** @internal */\n  function sourceToProto(s) {\n    switch (s) {\n      case Source.Camera:\n        return TrackSource.CAMERA;\n      case Source.Microphone:\n        return TrackSource.MICROPHONE;\n      case Source.ScreenShare:\n        return TrackSource.SCREEN_SHARE;\n      case Source.ScreenShareAudio:\n        return TrackSource.SCREEN_SHARE_AUDIO;\n      default:\n        return TrackSource.UNKNOWN;\n    }\n  }\n  Track.sourceToProto = sourceToProto;\n  /** @internal */\n  function sourceFromProto(s) {\n    switch (s) {\n      case TrackSource.CAMERA:\n        return Source.Camera;\n      case TrackSource.MICROPHONE:\n        return Source.Microphone;\n      case TrackSource.SCREEN_SHARE:\n        return Source.ScreenShare;\n      case TrackSource.SCREEN_SHARE_AUDIO:\n        return Source.ScreenShareAudio;\n      default:\n        return Source.Unknown;\n    }\n  }\n  Track.sourceFromProto = sourceFromProto;\n  /** @internal */\n  function streamStateFromProto(s) {\n    switch (s) {\n      case StreamState.ACTIVE:\n        return StreamState$1.Active;\n      case StreamState.PAUSED:\n        return StreamState$1.Paused;\n      default:\n        return StreamState$1.Unknown;\n    }\n  }\n  Track.streamStateFromProto = streamStateFromProto;\n})(Track || (Track = {}));const separator = '|';\nconst ddExtensionURI = 'https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension';\nfunction unpackStreamId(packed) {\n  const parts = packed.split(separator);\n  if (parts.length > 1) {\n    return [parts[0], packed.substr(parts[0].length + 1)];\n  }\n  return [packed, ''];\n}\nfunction sleep(duration) {\n  return __awaiter(this, void 0, void 0, function* () {\n    return new Promise(resolve => CriticalTimers.setTimeout(resolve, duration));\n  });\n}\n/** @internal */\nfunction supportsTransceiver() {\n  return 'addTransceiver' in RTCPeerConnection.prototype;\n}\n/** @internal */\nfunction supportsAddTrack() {\n  return 'addTrack' in RTCPeerConnection.prototype;\n}\nfunction supportsAdaptiveStream() {\n  return typeof ResizeObserver !== undefined && typeof IntersectionObserver !== undefined;\n}\nfunction supportsDynacast() {\n  return supportsTransceiver();\n}\nfunction supportsAV1() {\n  if (!('getCapabilities' in RTCRtpSender)) {\n    return false;\n  }\n  if (isSafari() || isFireFox()) {\n    // Safari 17 on iPhone14 reports AV1 capability, but does not actually support it\n    // Firefox does support AV1, but SVC publishing is not supported\n    return false;\n  }\n  const capabilities = RTCRtpSender.getCapabilities('video');\n  let hasAV1 = false;\n  if (capabilities) {\n    for (const codec of capabilities.codecs) {\n      if (codec.mimeType.toLowerCase() === 'video/av1') {\n        hasAV1 = true;\n        break;\n      }\n    }\n  }\n  return hasAV1;\n}\nfunction supportsVP9() {\n  if (!('getCapabilities' in RTCRtpSender)) {\n    return false;\n  }\n  if (isFireFox()) {\n    // technically speaking FireFox supports VP9, but SVC publishing is broken\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=1633876\n    return false;\n  }\n  if (isSafari()) {\n    const browser = getBrowser();\n    if ((browser === null || browser === void 0 ? void 0 : browser.version) && compareVersions(browser.version, '16') < 0) {\n      // Safari 16 and below does not support VP9\n      return false;\n    }\n    if ((browser === null || browser === void 0 ? void 0 : browser.os) === 'iOS' && (browser === null || browser === void 0 ? void 0 : browser.osVersion) && compareVersions(browser.osVersion, '16') < 0) {\n      // Safari 16 and below on iOS does not support VP9 we need the iOS check to account for other browsers running webkit under the hood\n      return false;\n    }\n  }\n  const capabilities = RTCRtpSender.getCapabilities('video');\n  let hasVP9 = false;\n  if (capabilities) {\n    for (const codec of capabilities.codecs) {\n      if (codec.mimeType.toLowerCase() === 'video/vp9') {\n        hasVP9 = true;\n        break;\n      }\n    }\n  }\n  return hasVP9;\n}\nfunction isSVCCodec(codec) {\n  return codec === 'av1' || codec === 'vp9';\n}\nfunction supportsSetSinkId(elm) {\n  if (!document || isSafariBased()) {\n    return false;\n  }\n  if (!elm) {\n    elm = document.createElement('audio');\n  }\n  return 'setSinkId' in elm;\n}\n/**\n * Checks whether or not setting an audio output via {@link Room#setActiveDevice}\n * is supported for the current browser.\n */\nfunction supportsAudioOutputSelection() {\n  // Note: this is method publicly exported under a user friendly name and currently only proxying `supportsSetSinkId`\n  return supportsSetSinkId();\n}\nfunction isBrowserSupported() {\n  if (typeof RTCPeerConnection === 'undefined') {\n    return false;\n  }\n  return supportsTransceiver() || supportsAddTrack();\n}\nfunction isFireFox() {\n  var _a;\n  return ((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.name) === 'Firefox';\n}\nfunction isChromiumBased() {\n  const browser = getBrowser();\n  return !!browser && browser.name === 'Chrome' && browser.os !== 'iOS';\n}\nfunction isSafari() {\n  var _a;\n  return ((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.name) === 'Safari';\n}\nfunction isSafariBased() {\n  const b = getBrowser();\n  return (b === null || b === void 0 ? void 0 : b.name) === 'Safari' || (b === null || b === void 0 ? void 0 : b.os) === 'iOS';\n}\nfunction isSafari17Based() {\n  const b = getBrowser();\n  return (b === null || b === void 0 ? void 0 : b.name) === 'Safari' && b.version.startsWith('17.') || (b === null || b === void 0 ? void 0 : b.os) === 'iOS' && !!(b === null || b === void 0 ? void 0 : b.osVersion) && compareVersions(b.osVersion, '17') >= 0;\n}\nfunction isSafariSvcApi(browser) {\n  if (!browser) {\n    browser = getBrowser();\n  }\n  // Safari 18.4 requires legacy svc api and scaleResolutionDown to be set\n  return (browser === null || browser === void 0 ? void 0 : browser.name) === 'Safari' && compareVersions(browser.version, '18.3') > 0 || (browser === null || browser === void 0 ? void 0 : browser.os) === 'iOS' && !!(browser === null || browser === void 0 ? void 0 : browser.osVersion) && compareVersions(browser.osVersion, '18.3') > 0;\n}\nfunction isMobile() {\n  var _a, _b;\n  if (!isWeb()) return false;\n  return (\n    // @ts-expect-error `userAgentData` is not yet part of typescript\n    (_b = (_a = navigator.userAgentData) === null || _a === void 0 ? void 0 : _a.mobile) !== null && _b !== void 0 ? _b : /Tablet|iPad|Mobile|Android|BlackBerry/.test(navigator.userAgent)\n  );\n}\nfunction isE2EESimulcastSupported() {\n  const browser = getBrowser();\n  const supportedSafariVersion = '17.2'; // see https://bugs.webkit.org/show_bug.cgi?id=257803\n  if (browser) {\n    if (browser.name !== 'Safari' && browser.os !== 'iOS') {\n      return true;\n    } else if (browser.os === 'iOS' && browser.osVersion && compareVersions(browser.osVersion, supportedSafariVersion) >= 0) {\n      return true;\n    } else if (browser.name === 'Safari' && compareVersions(browser.version, supportedSafariVersion) >= 0) {\n      return true;\n    } else {\n      return false;\n    }\n  }\n}\nfunction isWeb() {\n  return typeof document !== 'undefined';\n}\nfunction isReactNative() {\n  // navigator.product is deprecated on browsers, but will be set appropriately for react-native.\n  return navigator.product == 'ReactNative';\n}\nfunction isCloud(serverUrl) {\n  return serverUrl.hostname.endsWith('.livekit.cloud') || serverUrl.hostname.endsWith('.livekit.run');\n}\nfunction extractProjectFromUrl(serverUrl) {\n  if (!isCloud(serverUrl)) {\n    return null;\n  }\n  return serverUrl.hostname.split('.')[0];\n}\nfunction getLKReactNativeInfo() {\n  // global defined only for ReactNative.\n  // @ts-ignore\n  if (global && global.LiveKitReactNativeGlobal) {\n    // @ts-ignore\n    return global.LiveKitReactNativeGlobal;\n  }\n  return undefined;\n}\nfunction getReactNativeOs() {\n  if (!isReactNative()) {\n    return undefined;\n  }\n  let info = getLKReactNativeInfo();\n  if (info) {\n    return info.platform;\n  }\n  return undefined;\n}\nfunction getDevicePixelRatio() {\n  if (isWeb()) {\n    return window.devicePixelRatio;\n  }\n  if (isReactNative()) {\n    let info = getLKReactNativeInfo();\n    if (info) {\n      return info.devicePixelRatio;\n    }\n  }\n  return 1;\n}\n/**\n * @param v1 - The first version string to compare.\n * @param v2 - The second version string to compare.\n * @returns A number indicating the order of the versions:\n *   - 1 if v1 is greater than v2\n *   - -1 if v1 is less than v2\n *   - 0 if v1 and v2 are equal\n */\nfunction compareVersions(v1, v2) {\n  const parts1 = v1.split('.');\n  const parts2 = v2.split('.');\n  const k = Math.min(parts1.length, parts2.length);\n  for (let i = 0; i < k; ++i) {\n    const p1 = parseInt(parts1[i], 10);\n    const p2 = parseInt(parts2[i], 10);\n    if (p1 > p2) return 1;\n    if (p1 < p2) return -1;\n    if (i === k - 1 && p1 === p2) return 0;\n  }\n  if (v1 === '' && v2 !== '') {\n    return -1;\n  } else if (v2 === '') {\n    return 1;\n  }\n  return parts1.length == parts2.length ? 0 : parts1.length < parts2.length ? -1 : 1;\n}\nfunction roDispatchCallback(entries) {\n  for (const entry of entries) {\n    entry.target.handleResize(entry);\n  }\n}\nfunction ioDispatchCallback(entries) {\n  for (const entry of entries) {\n    entry.target.handleVisibilityChanged(entry);\n  }\n}\nlet resizeObserver = null;\nconst getResizeObserver = () => {\n  if (!resizeObserver) resizeObserver = new ResizeObserver(roDispatchCallback);\n  return resizeObserver;\n};\nlet intersectionObserver = null;\nconst getIntersectionObserver = () => {\n  if (!intersectionObserver) {\n    intersectionObserver = new IntersectionObserver(ioDispatchCallback, {\n      root: null,\n      rootMargin: '0px'\n    });\n  }\n  return intersectionObserver;\n};\nfunction getClientInfo() {\n  var _a;\n  const info = new ClientInfo({\n    sdk: ClientInfo_SDK.JS,\n    protocol: protocolVersion,\n    version\n  });\n  if (isReactNative()) {\n    info.os = (_a = getReactNativeOs()) !== null && _a !== void 0 ? _a : '';\n  }\n  return info;\n}\nlet emptyVideoStreamTrack;\nfunction getEmptyVideoStreamTrack() {\n  if (!emptyVideoStreamTrack) {\n    emptyVideoStreamTrack = createDummyVideoStreamTrack();\n  }\n  return emptyVideoStreamTrack.clone();\n}\nfunction createDummyVideoStreamTrack() {\n  let width = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 16;\n  let height = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 16;\n  let enabled = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  let paintContent = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n  const canvas = document.createElement('canvas');\n  // the canvas size is set to 16 by default, because electron apps seem to fail with smaller values\n  canvas.width = width;\n  canvas.height = height;\n  const ctx = canvas.getContext('2d');\n  ctx === null || ctx === void 0 ? void 0 : ctx.fillRect(0, 0, canvas.width, canvas.height);\n  if (paintContent && ctx) {\n    ctx.beginPath();\n    ctx.arc(width / 2, height / 2, 50, 0, Math.PI * 2, true);\n    ctx.closePath();\n    ctx.fillStyle = 'grey';\n    ctx.fill();\n  }\n  // @ts-ignore\n  const dummyStream = canvas.captureStream();\n  const [dummyTrack] = dummyStream.getTracks();\n  if (!dummyTrack) {\n    throw Error('Could not get empty media stream video track');\n  }\n  dummyTrack.enabled = enabled;\n  return dummyTrack;\n}\nlet emptyAudioStreamTrack;\nfunction getEmptyAudioStreamTrack() {\n  if (!emptyAudioStreamTrack) {\n    // implementation adapted from https://blog.mozilla.org/webrtc/warm-up-with-replacetrack/\n    const ctx = new AudioContext();\n    const oscillator = ctx.createOscillator();\n    const gain = ctx.createGain();\n    gain.gain.setValueAtTime(0, 0);\n    const dst = ctx.createMediaStreamDestination();\n    oscillator.connect(gain);\n    gain.connect(dst);\n    oscillator.start();\n    [emptyAudioStreamTrack] = dst.stream.getAudioTracks();\n    if (!emptyAudioStreamTrack) {\n      throw Error('Could not get empty media stream audio track');\n    }\n    emptyAudioStreamTrack.enabled = false;\n  }\n  return emptyAudioStreamTrack.clone();\n}\nclass Future {\n  get isResolved() {\n    return this._isResolved;\n  }\n  constructor(futureBase, onFinally) {\n    this._isResolved = false;\n    this.onFinally = onFinally;\n    this.promise = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n      this.resolve = resolve;\n      this.reject = reject;\n      if (futureBase) {\n        yield futureBase(resolve, reject);\n      }\n    })).finally(() => {\n      var _a;\n      this._isResolved = true;\n      (_a = this.onFinally) === null || _a === void 0 ? void 0 : _a.call(this);\n    });\n  }\n}\n/**\n * Creates and returns an analyser web audio node that is attached to the provided track.\n * Additionally returns a convenience method `calculateVolume` to perform instant volume readings on that track.\n * Call the returned `cleanup` function to close the audioContext that has been created for the instance of this helper\n */\nfunction createAudioAnalyser(track, options) {\n  const opts = Object.assign({\n    cloneTrack: false,\n    fftSize: 2048,\n    smoothingTimeConstant: 0.8,\n    minDecibels: -100,\n    maxDecibels: -80\n  }, options);\n  const audioContext = getNewAudioContext();\n  if (!audioContext) {\n    throw new Error('Audio Context not supported on this browser');\n  }\n  const streamTrack = opts.cloneTrack ? track.mediaStreamTrack.clone() : track.mediaStreamTrack;\n  const mediaStreamSource = audioContext.createMediaStreamSource(new MediaStream([streamTrack]));\n  const analyser = audioContext.createAnalyser();\n  analyser.minDecibels = opts.minDecibels;\n  analyser.maxDecibels = opts.maxDecibels;\n  analyser.fftSize = opts.fftSize;\n  analyser.smoothingTimeConstant = opts.smoothingTimeConstant;\n  mediaStreamSource.connect(analyser);\n  const dataArray = new Uint8Array(analyser.frequencyBinCount);\n  /**\n   * Calculates the current volume of the track in the range from 0 to 1\n   */\n  const calculateVolume = () => {\n    analyser.getByteFrequencyData(dataArray);\n    let sum = 0;\n    for (const amplitude of dataArray) {\n      sum += Math.pow(amplitude / 255, 2);\n    }\n    const volume = Math.sqrt(sum / dataArray.length);\n    return volume;\n  };\n  const cleanup = () => __awaiter(this, void 0, void 0, function* () {\n    yield audioContext.close();\n    if (opts.cloneTrack) {\n      streamTrack.stop();\n    }\n  });\n  return {\n    calculateVolume,\n    analyser,\n    cleanup\n  };\n}\nfunction isAudioCodec(maybeCodec) {\n  return audioCodecs.includes(maybeCodec);\n}\nfunction isVideoCodec(maybeCodec) {\n  return videoCodecs.includes(maybeCodec);\n}\nfunction unwrapConstraint(constraint) {\n  if (typeof constraint === 'string' || typeof constraint === 'number') {\n    return constraint;\n  }\n  if (Array.isArray(constraint)) {\n    return constraint[0];\n  }\n  if (constraint.exact !== undefined) {\n    if (Array.isArray(constraint.exact)) {\n      return constraint.exact[0];\n    }\n    return constraint.exact;\n  }\n  if (constraint.ideal !== undefined) {\n    if (Array.isArray(constraint.ideal)) {\n      return constraint.ideal[0];\n    }\n    return constraint.ideal;\n  }\n  throw Error('could not unwrap constraint');\n}\nfunction toWebsocketUrl(url) {\n  if (url.startsWith('http')) {\n    return url.replace(/^(http)/, 'ws');\n  }\n  return url;\n}\nfunction toHttpUrl(url) {\n  if (url.startsWith('ws')) {\n    return url.replace(/^(ws)/, 'http');\n  }\n  return url;\n}\nfunction extractTranscriptionSegments(transcription, firstReceivedTimesMap) {\n  return transcription.segments.map(_ref => {\n    let {\n      id,\n      text,\n      language,\n      startTime,\n      endTime,\n      final\n    } = _ref;\n    var _a;\n    const firstReceivedTime = (_a = firstReceivedTimesMap.get(id)) !== null && _a !== void 0 ? _a : Date.now();\n    const lastReceivedTime = Date.now();\n    if (final) {\n      firstReceivedTimesMap.delete(id);\n    } else {\n      firstReceivedTimesMap.set(id, firstReceivedTime);\n    }\n    return {\n      id,\n      text,\n      startTime: Number.parseInt(startTime.toString()),\n      endTime: Number.parseInt(endTime.toString()),\n      final,\n      language,\n      firstReceivedTime,\n      lastReceivedTime\n    };\n  });\n}\nfunction extractChatMessage(msg) {\n  const {\n    id,\n    timestamp,\n    message,\n    editTimestamp\n  } = msg;\n  return {\n    id,\n    timestamp: Number.parseInt(timestamp.toString()),\n    editTimestamp: editTimestamp ? Number.parseInt(editTimestamp.toString()) : undefined,\n    message\n  };\n}\nfunction getDisconnectReasonFromConnectionError(e) {\n  switch (e.reason) {\n    case ConnectionErrorReason.LeaveRequest:\n      return e.context;\n    case ConnectionErrorReason.Cancelled:\n      return DisconnectReason.CLIENT_INITIATED;\n    case ConnectionErrorReason.NotAllowed:\n      return DisconnectReason.USER_REJECTED;\n    case ConnectionErrorReason.ServerUnreachable:\n      return DisconnectReason.JOIN_FAILURE;\n    default:\n      return DisconnectReason.UNKNOWN_REASON;\n  }\n}\n/** convert bigints to numbers preserving undefined values */\nfunction bigIntToNumber(value) {\n  return value !== undefined ? Number(value) : undefined;\n}\n/** convert numbers to bigints preserving undefined values */\nfunction numberToBigInt(value) {\n  return value !== undefined ? BigInt(value) : undefined;\n}\nfunction isLocalTrack(track) {\n  return !!track && !(track instanceof MediaStreamTrack) && track.isLocal;\n}\nfunction isAudioTrack(track) {\n  return !!track && track.kind == Track.Kind.Audio;\n}\nfunction isVideoTrack(track) {\n  return !!track && track.kind == Track.Kind.Video;\n}\nfunction isLocalVideoTrack(track) {\n  return isLocalTrack(track) && isVideoTrack(track);\n}\nfunction isLocalAudioTrack(track) {\n  return isLocalTrack(track) && isAudioTrack(track);\n}\nfunction isRemoteTrack(track) {\n  return !!track && !track.isLocal;\n}\nfunction isRemotePub(pub) {\n  return !!pub && !pub.isLocal;\n}\nfunction isRemoteVideoTrack(track) {\n  return isRemoteTrack(track) && isVideoTrack(track);\n}\nfunction isLocalParticipant(p) {\n  return p.isLocal;\n}\nfunction isRemoteParticipant(p) {\n  return !p.isLocal;\n}\nfunction splitUtf8(s, n) {\n  // adapted from https://stackoverflow.com/a/6043797\n  const result = [];\n  let encoded = new TextEncoder().encode(s);\n  while (encoded.length > n) {\n    let k = n;\n    while (k > 0) {\n      const byte = encoded[k];\n      if (byte !== undefined && (byte & 0xc0) !== 0x80) {\n        break;\n      }\n      k--;\n    }\n    result.push(encoded.slice(0, k));\n    encoded = encoded.slice(k);\n  }\n  if (encoded.length > 0) {\n    result.push(encoded);\n  }\n  return result;\n}\nfunction extractMaxAgeFromRequestHeaders(headers) {\n  var _a;\n  const cacheControl = headers.get('Cache-Control');\n  if (cacheControl) {\n    const maxAge = (_a = cacheControl.match(/(?:^|[,\\s])max-age=(\\d+)/)) === null || _a === void 0 ? void 0 : _a[1];\n    if (maxAge) {\n      return parseInt(maxAge, 10);\n    }\n  }\n  return undefined;\n}function createRtcUrl(url, searchParams) {\n  const urlObj = new URL(toWebsocketUrl(url));\n  searchParams.forEach((value, key) => {\n    urlObj.searchParams.set(key, value);\n  });\n  return appendUrlPath(urlObj, 'rtc');\n}\nfunction createValidateUrl(rtcWsUrl) {\n  const urlObj = new URL(toHttpUrl(rtcWsUrl));\n  return appendUrlPath(urlObj, 'validate');\n}\nfunction ensureTrailingSlash(path) {\n  return path.endsWith('/') ? path : \"\".concat(path, \"/\");\n}\nfunction appendUrlPath(urlObj, path) {\n  urlObj.pathname = \"\".concat(ensureTrailingSlash(urlObj.pathname)).concat(path);\n  return urlObj.toString();\n}\nfunction parseSignalResponse(value) {\n  if (typeof value === 'string') {\n    return SignalResponse.fromJson(JSON.parse(value), {\n      ignoreUnknownFields: true\n    });\n  } else if (value instanceof ArrayBuffer) {\n    return SignalResponse.fromBinary(new Uint8Array(value));\n  }\n  throw new Error(\"could not decode websocket message: \".concat(typeof value));\n}\nfunction getAbortReasonAsString(signal) {\n  let defaultMessage = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Unknown reason';\n  if (!(signal instanceof AbortSignal)) {\n    return defaultMessage;\n  }\n  const reason = signal.reason;\n  switch (typeof reason) {\n    case 'string':\n      return reason;\n    case 'object':\n      return reason instanceof Error ? reason.message : defaultMessage;\n    default:\n      return 'toString' in reason ? reason.toString() : defaultMessage;\n  }\n}const ENCRYPTION_ALGORITHM = 'AES-GCM';\n// How many consecutive frames can fail decrypting before a particular key gets marked as invalid\nconst DECRYPTION_FAILURE_TOLERANCE = 10;\n// flag set to indicate that e2ee has been setup for sender/receiver;\nconst E2EE_FLAG = 'lk_e2ee';\nconst SALT = 'LKFrameEncryptionKey';\nconst KEY_PROVIDER_DEFAULTS = {\n  sharedKey: false,\n  ratchetSalt: SALT,\n  ratchetWindowSize: 8,\n  failureTolerance: DECRYPTION_FAILURE_TOLERANCE,\n  keyringSize: 16\n};var KeyProviderEvent;\n(function (KeyProviderEvent) {\n  KeyProviderEvent[\"SetKey\"] = \"setKey\";\n  /** Event for requesting to ratchet the key used to encrypt the stream */\n  KeyProviderEvent[\"RatchetRequest\"] = \"ratchetRequest\";\n  /** Emitted when a key is ratcheted. Could be after auto-ratcheting on decryption failure or\n   *  following a `RatchetRequest`, will contain the ratcheted key material */\n  KeyProviderEvent[\"KeyRatcheted\"] = \"keyRatcheted\";\n})(KeyProviderEvent || (KeyProviderEvent = {}));\nvar KeyHandlerEvent;\n(function (KeyHandlerEvent) {\n  /** Emitted when a key has been ratcheted. Is emitted when any key has been ratcheted\n   * i.e. when the FrameCryptor tried to ratchet when decryption is failing  */\n  KeyHandlerEvent[\"KeyRatcheted\"] = \"keyRatcheted\";\n})(KeyHandlerEvent || (KeyHandlerEvent = {}));\nvar EncryptionEvent;\n(function (EncryptionEvent) {\n  EncryptionEvent[\"ParticipantEncryptionStatusChanged\"] = \"participantEncryptionStatusChanged\";\n  EncryptionEvent[\"EncryptionError\"] = \"encryptionError\";\n})(EncryptionEvent || (EncryptionEvent = {}));\nvar CryptorEvent;\n(function (CryptorEvent) {\n  CryptorEvent[\"Error\"] = \"cryptorError\";\n})(CryptorEvent || (CryptorEvent = {}));function isE2EESupported() {\n  return isInsertableStreamSupported() || isScriptTransformSupported();\n}\nfunction isScriptTransformSupported() {\n  // @ts-ignore\n  return typeof window.RTCRtpScriptTransform !== 'undefined';\n}\nfunction isInsertableStreamSupported() {\n  return typeof window.RTCRtpSender !== 'undefined' &&\n  // @ts-ignore\n  typeof window.RTCRtpSender.prototype.createEncodedStreams !== 'undefined';\n}\nfunction isVideoFrame(frame) {\n  return 'type' in frame;\n}\nfunction importKey(keyBytes_1) {\n  return __awaiter(this, arguments, void 0, function (keyBytes) {\n    let algorithm = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {\n      name: ENCRYPTION_ALGORITHM\n    };\n    let usage = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'encrypt';\n    return function* () {\n      // https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/importKey\n      return crypto.subtle.importKey('raw', keyBytes, algorithm, false, usage === 'derive' ? ['deriveBits', 'deriveKey'] : ['encrypt', 'decrypt']);\n    }();\n  });\n}\nfunction createKeyMaterialFromString(password) {\n  return __awaiter(this, void 0, void 0, function* () {\n    let enc = new TextEncoder();\n    const keyMaterial = yield crypto.subtle.importKey('raw', enc.encode(password), {\n      name: 'PBKDF2'\n    }, false, ['deriveBits', 'deriveKey']);\n    return keyMaterial;\n  });\n}\nfunction createKeyMaterialFromBuffer(cryptoBuffer) {\n  return __awaiter(this, void 0, void 0, function* () {\n    const keyMaterial = yield crypto.subtle.importKey('raw', cryptoBuffer, 'HKDF', false, ['deriveBits', 'deriveKey']);\n    return keyMaterial;\n  });\n}\nfunction getAlgoOptions(algorithmName, salt) {\n  const textEncoder = new TextEncoder();\n  const encodedSalt = textEncoder.encode(salt);\n  switch (algorithmName) {\n    case 'HKDF':\n      return {\n        name: 'HKDF',\n        salt: encodedSalt,\n        hash: 'SHA-256',\n        info: new ArrayBuffer(128)\n      };\n    case 'PBKDF2':\n      {\n        return {\n          name: 'PBKDF2',\n          salt: encodedSalt,\n          hash: 'SHA-256',\n          iterations: 100000\n        };\n      }\n    default:\n      throw new Error(\"algorithm \".concat(algorithmName, \" is currently unsupported\"));\n  }\n}\n/**\n * Derives a set of keys from the master key.\n * See https://tools.ietf.org/html/draft-omara-sframe-00#section-4.3.1\n */\nfunction deriveKeys(material, salt) {\n  return __awaiter(this, void 0, void 0, function* () {\n    const algorithmOptions = getAlgoOptions(material.algorithm.name, salt);\n    // https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveKey#HKDF\n    // https://developer.mozilla.org/en-US/docs/Web/API/HkdfParams\n    const encryptionKey = yield crypto.subtle.deriveKey(algorithmOptions, material, {\n      name: ENCRYPTION_ALGORITHM,\n      length: 128\n    }, false, ['encrypt', 'decrypt']);\n    return {\n      material,\n      encryptionKey\n    };\n  });\n}\nfunction createE2EEKey() {\n  return window.crypto.getRandomValues(new Uint8Array(32));\n}\n/**\n * Ratchets a key. See\n * https://tools.ietf.org/html/draft-omara-sframe-00#section-4.3.5.1\n */\nfunction ratchet(material, salt) {\n  return __awaiter(this, void 0, void 0, function* () {\n    const algorithmOptions = getAlgoOptions(material.algorithm.name, salt);\n    // https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/deriveBits\n    return crypto.subtle.deriveBits(algorithmOptions, material, 256);\n  });\n}\nfunction needsRbspUnescaping(frameData) {\n  for (var i = 0; i < frameData.length - 3; i++) {\n    if (frameData[i] == 0 && frameData[i + 1] == 0 && frameData[i + 2] == 3) return true;\n  }\n  return false;\n}\nfunction parseRbsp(stream) {\n  const dataOut = [];\n  var length = stream.length;\n  for (var i = 0; i < stream.length;) {\n    // Be careful about over/underflow here. byte_length_ - 3 can underflow, and\n    // i + 3 can overflow, but byte_length_ - i can't, because i < byte_length_\n    // above, and that expression will produce the number of bytes left in\n    // the stream including the byte at i.\n    if (length - i >= 3 && !stream[i] && !stream[i + 1] && stream[i + 2] == 3) {\n      // Two rbsp bytes.\n      dataOut.push(stream[i++]);\n      dataOut.push(stream[i++]);\n      // Skip the emulation byte.\n      i++;\n    } else {\n      // Single rbsp byte.\n      dataOut.push(stream[i++]);\n    }\n  }\n  return new Uint8Array(dataOut);\n}\nconst kZerosInStartSequence = 2;\nconst kEmulationByte = 3;\nfunction writeRbsp(data_in) {\n  const dataOut = [];\n  var numConsecutiveZeros = 0;\n  for (var i = 0; i < data_in.length; ++i) {\n    var byte = data_in[i];\n    if (byte <= kEmulationByte && numConsecutiveZeros >= kZerosInStartSequence) {\n      // Need to escape.\n      dataOut.push(kEmulationByte);\n      numConsecutiveZeros = 0;\n    }\n    dataOut.push(byte);\n    if (byte == 0) {\n      ++numConsecutiveZeros;\n    } else {\n      numConsecutiveZeros = 0;\n    }\n  }\n  return new Uint8Array(dataOut);\n}\nfunction asEncryptablePacket(packet) {\n  var _a, _b, _c, _d, _e;\n  if (((_a = packet.value) === null || _a === void 0 ? void 0 : _a.case) !== 'sipDtmf' && ((_b = packet.value) === null || _b === void 0 ? void 0 : _b.case) !== 'metrics' && ((_c = packet.value) === null || _c === void 0 ? void 0 : _c.case) !== 'speaker' && ((_d = packet.value) === null || _d === void 0 ? void 0 : _d.case) !== 'transcription' && ((_e = packet.value) === null || _e === void 0 ? void 0 : _e.case) !== 'encryptedPacket') {\n    return new EncryptedPacketPayload({\n      value: packet.value\n    });\n  }\n  return undefined;\n}/**\n * @experimental\n */\nclass BaseKeyProvider extends eventsExports.EventEmitter {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    super();\n    /**\n     * Callback being invoked after a key has been ratcheted.\n     * Can happen when:\n     * - A decryption failure occurs and the key is auto-ratcheted\n     * - A ratchet request is sent (see {@link ratchetKey()})\n     * @param ratchetResult Contains the ratcheted chain key (exportable to other participants) and the derived new key material.\n     * @param participantId\n     * @param keyIndex\n     */\n    this.onKeyRatcheted = (ratchetResult, participantId, keyIndex) => {\n      livekitLogger.debug('key ratcheted event received', {\n        ratchetResult,\n        participantId,\n        keyIndex\n      });\n    };\n    this.keyInfoMap = new Map();\n    this.options = Object.assign(Object.assign({}, KEY_PROVIDER_DEFAULTS), options);\n    this.on(KeyProviderEvent.KeyRatcheted, this.onKeyRatcheted);\n  }\n  /**\n   * callback to invoke once a key has been set for a participant\n   * @param key\n   * @param participantIdentity\n   * @param keyIndex\n   */\n  onSetEncryptionKey(key, participantIdentity, keyIndex) {\n    const keyInfo = {\n      key,\n      participantIdentity,\n      keyIndex\n    };\n    if (!this.options.sharedKey && !participantIdentity) {\n      throw new Error('participant identity needs to be passed for encryption key if sharedKey option is false');\n    }\n    this.keyInfoMap.set(\"\".concat(participantIdentity !== null && participantIdentity !== void 0 ? participantIdentity : 'shared', \"-\").concat(keyIndex !== null && keyIndex !== void 0 ? keyIndex : 0), keyInfo);\n    this.emit(KeyProviderEvent.SetKey, keyInfo);\n  }\n  getKeys() {\n    return Array.from(this.keyInfoMap.values());\n  }\n  getOptions() {\n    return this.options;\n  }\n  ratchetKey(participantIdentity, keyIndex) {\n    this.emit(KeyProviderEvent.RatchetRequest, participantIdentity, keyIndex);\n  }\n}\n/**\n * A basic KeyProvider implementation intended for a single shared\n * passphrase between all participants\n * @experimental\n */\nclass ExternalE2EEKeyProvider extends BaseKeyProvider {\n  constructor() {\n    let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n    const opts = Object.assign(Object.assign({}, options), {\n      sharedKey: true,\n      // for a shared key provider failing to decrypt for a specific participant\n      // should not mark the key as invalid, so we accept wrong keys forever\n      // and won't try to auto-ratchet\n      ratchetWindowSize: 0,\n      failureTolerance: -1\n    });\n    super(opts);\n  }\n  /**\n   * Accepts a passphrase that's used to create the crypto keys.\n   * When passing in a string, PBKDF2 is used.\n   * When passing in an Array buffer of cryptographically random numbers, HKDF is being used. (recommended)\n   * @param key\n   */\n  setKey(key) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const derivedKey = typeof key === 'string' ? yield createKeyMaterialFromString(key) : yield createKeyMaterialFromBuffer(key);\n      this.onSetEncryptionKey(derivedKey);\n    });\n  }\n}var CryptorErrorReason;\n(function (CryptorErrorReason) {\n  CryptorErrorReason[CryptorErrorReason[\"InvalidKey\"] = 0] = \"InvalidKey\";\n  CryptorErrorReason[CryptorErrorReason[\"MissingKey\"] = 1] = \"MissingKey\";\n  CryptorErrorReason[CryptorErrorReason[\"InternalError\"] = 2] = \"InternalError\";\n})(CryptorErrorReason || (CryptorErrorReason = {}));\nclass CryptorError extends LivekitError {\n  constructor(message) {\n    let reason = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : CryptorErrorReason.InternalError;\n    let participantIdentity = arguments.length > 2 ? arguments[2] : undefined;\n    super(40, message);\n    this.reason = reason;\n    this.participantIdentity = participantIdentity;\n  }\n}/**\n * @experimental\n */\nclass E2EEManager extends eventsExports.EventEmitter {\n  constructor(options, dcEncryptionEnabled) {\n    super();\n    this.decryptDataRequests = new Map();\n    this.encryptDataRequests = new Map();\n    this.onWorkerMessage = ev => {\n      var _a, _b;\n      const {\n        kind,\n        data\n      } = ev.data;\n      switch (kind) {\n        case 'error':\n          livekitLogger.error(data.error.message);\n          // If error has uuid, it's from an async operation (encrypt/decrypt)\n          // Reject the corresponding future\n          if (data.uuid) {\n            const decryptFuture = this.decryptDataRequests.get(data.uuid);\n            if (decryptFuture === null || decryptFuture === void 0 ? void 0 : decryptFuture.reject) {\n              decryptFuture.reject(data.error);\n              break; // Don't emit general error if it's handled by future\n            }\n            const encryptFuture = this.encryptDataRequests.get(data.uuid);\n            if (encryptFuture === null || encryptFuture === void 0 ? void 0 : encryptFuture.reject) {\n              encryptFuture.reject(data.error);\n              break; // Don't emit general error if it's handled by future\n            }\n          }\n          // Emit general error event for unhandled errors\n          this.emit(EncryptionEvent.EncryptionError, data.error, data.participantIdentity);\n          break;\n        case 'initAck':\n          if (data.enabled) {\n            this.keyProvider.getKeys().forEach(keyInfo => {\n              this.postKey(keyInfo);\n            });\n          }\n          break;\n        case 'enable':\n          if (data.enabled) {\n            this.keyProvider.getKeys().forEach(keyInfo => {\n              this.postKey(keyInfo);\n            });\n          }\n          if (this.encryptionEnabled !== data.enabled && data.participantIdentity === ((_a = this.room) === null || _a === void 0 ? void 0 : _a.localParticipant.identity)) {\n            this.emit(EncryptionEvent.ParticipantEncryptionStatusChanged, data.enabled, this.room.localParticipant);\n            this.encryptionEnabled = data.enabled;\n          } else if (data.participantIdentity) {\n            const participant = (_b = this.room) === null || _b === void 0 ? void 0 : _b.getParticipantByIdentity(data.participantIdentity);\n            if (!participant) {\n              throw TypeError(\"couldn't set encryption status, participant not found\".concat(data.participantIdentity));\n            }\n            this.emit(EncryptionEvent.ParticipantEncryptionStatusChanged, data.enabled, participant);\n          }\n          break;\n        case 'ratchetKey':\n          this.keyProvider.emit(KeyProviderEvent.KeyRatcheted, data.ratchetResult, data.participantIdentity, data.keyIndex);\n          break;\n        case 'decryptDataResponse':\n          const decryptFuture = this.decryptDataRequests.get(data.uuid);\n          if (decryptFuture === null || decryptFuture === void 0 ? void 0 : decryptFuture.resolve) {\n            decryptFuture.resolve(data);\n          }\n          break;\n        case 'encryptDataResponse':\n          const encryptFuture = this.encryptDataRequests.get(data.uuid);\n          if (encryptFuture === null || encryptFuture === void 0 ? void 0 : encryptFuture.resolve) {\n            encryptFuture.resolve(data);\n          }\n          break;\n      }\n    };\n    this.onWorkerError = ev => {\n      livekitLogger.error('e2ee worker encountered an error:', {\n        error: ev.error\n      });\n      this.emit(EncryptionEvent.EncryptionError, ev.error, undefined);\n    };\n    this.keyProvider = options.keyProvider;\n    this.worker = options.worker;\n    this.encryptionEnabled = false;\n    this.dataChannelEncryptionEnabled = dcEncryptionEnabled;\n  }\n  get isEnabled() {\n    return this.encryptionEnabled;\n  }\n  get isDataChannelEncryptionEnabled() {\n    return this.isEnabled && this.dataChannelEncryptionEnabled;\n  }\n  /**\n   * @internal\n   */\n  setup(room) {\n    if (!isE2EESupported()) {\n      throw new DeviceUnsupportedError('tried to setup end-to-end encryption on an unsupported browser');\n    }\n    livekitLogger.info('setting up e2ee');\n    if (room !== this.room) {\n      this.room = room;\n      this.setupEventListeners(room, this.keyProvider);\n      // this.worker = new Worker('');\n      const msg = {\n        kind: 'init',\n        data: {\n          keyProviderOptions: this.keyProvider.getOptions(),\n          loglevel: workerLogger.getLevel()\n        }\n      };\n      if (this.worker) {\n        livekitLogger.info(\"initializing worker\", {\n          worker: this.worker\n        });\n        this.worker.onmessage = this.onWorkerMessage;\n        this.worker.onerror = this.onWorkerError;\n        this.worker.postMessage(msg);\n      }\n    }\n  }\n  /**\n   * @internal\n   */\n  setParticipantCryptorEnabled(enabled, participantIdentity) {\n    livekitLogger.debug(\"set e2ee to \".concat(enabled, \" for participant \").concat(participantIdentity));\n    this.postEnable(enabled, participantIdentity);\n  }\n  /**\n   * @internal\n   */\n  setSifTrailer(trailer) {\n    if (!trailer || trailer.length === 0) {\n      livekitLogger.warn(\"ignoring server sent trailer as it's empty\");\n    } else {\n      this.postSifTrailer(trailer);\n    }\n  }\n  setupEngine(engine) {\n    engine.on(EngineEvent.RTPVideoMapUpdate, rtpMap => {\n      this.postRTPMap(rtpMap);\n    });\n  }\n  setupEventListeners(room, keyProvider) {\n    room.on(RoomEvent.TrackPublished, (pub, participant) => this.setParticipantCryptorEnabled(pub.trackInfo.encryption !== Encryption_Type.NONE, participant.identity));\n    room.on(RoomEvent.ConnectionStateChanged, state => {\n      if (state === ConnectionState.Connected) {\n        room.remoteParticipants.forEach(participant => {\n          participant.trackPublications.forEach(pub => {\n            this.setParticipantCryptorEnabled(pub.trackInfo.encryption !== Encryption_Type.NONE, participant.identity);\n          });\n        });\n      }\n    }).on(RoomEvent.TrackUnsubscribed, (track, _, participant) => {\n      var _a;\n      const msg = {\n        kind: 'removeTransform',\n        data: {\n          participantIdentity: participant.identity,\n          trackId: track.mediaStreamID\n        }\n      };\n      (_a = this.worker) === null || _a === void 0 ? void 0 : _a.postMessage(msg);\n    }).on(RoomEvent.TrackSubscribed, (track, pub, participant) => {\n      this.setupE2EEReceiver(track, participant.identity, pub.trackInfo);\n    }).on(RoomEvent.SignalConnected, () => {\n      if (!this.room) {\n        throw new TypeError(\"expected room to be present on signal connect\");\n      }\n      keyProvider.getKeys().forEach(keyInfo => {\n        this.postKey(keyInfo);\n      });\n      this.setParticipantCryptorEnabled(this.room.localParticipant.isE2EEEnabled, this.room.localParticipant.identity);\n    });\n    room.localParticipant.on(ParticipantEvent.LocalSenderCreated, (sender, track) => __awaiter(this, void 0, void 0, function* () {\n      this.setupE2EESender(track, sender);\n    }));\n    room.localParticipant.on(ParticipantEvent.LocalTrackPublished, publication => {\n      // Safari doesn't support retrieving payload information on RTCEncodedVideoFrame, so we need to update the codec manually once we have the trackInfo from the server\n      if (!isVideoTrack(publication.track) || !isSafariBased()) {\n        return;\n      }\n      const msg = {\n        kind: 'updateCodec',\n        data: {\n          trackId: publication.track.mediaStreamID,\n          codec: mimeTypeToVideoCodecString(publication.trackInfo.codecs[0].mimeType),\n          participantIdentity: this.room.localParticipant.identity\n        }\n      };\n      this.worker.postMessage(msg);\n    });\n    keyProvider.on(KeyProviderEvent.SetKey, keyInfo => this.postKey(keyInfo)).on(KeyProviderEvent.RatchetRequest, (participantId, keyIndex) => this.postRatchetRequest(participantId, keyIndex));\n  }\n  encryptData(data) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.worker) {\n        throw Error('could not encrypt data, worker is missing');\n      }\n      const uuid = crypto.randomUUID();\n      const msg = {\n        kind: 'encryptDataRequest',\n        data: {\n          uuid,\n          payload: data,\n          participantIdentity: this.room.localParticipant.identity\n        }\n      };\n      const future = new Future();\n      future.onFinally = () => {\n        this.encryptDataRequests.delete(uuid);\n      };\n      this.encryptDataRequests.set(uuid, future);\n      this.worker.postMessage(msg);\n      return future.promise;\n    });\n  }\n  handleEncryptedData(payload, iv, participantIdentity, keyIndex) {\n    if (!this.worker) {\n      throw Error('could not handle encrypted data, worker is missing');\n    }\n    const uuid = crypto.randomUUID();\n    const msg = {\n      kind: 'decryptDataRequest',\n      data: {\n        uuid,\n        payload,\n        iv,\n        participantIdentity,\n        keyIndex\n      }\n    };\n    const future = new Future();\n    future.onFinally = () => {\n      this.decryptDataRequests.delete(uuid);\n    };\n    this.decryptDataRequests.set(uuid, future);\n    this.worker.postMessage(msg);\n    return future.promise;\n  }\n  postRatchetRequest(participantIdentity, keyIndex) {\n    if (!this.worker) {\n      throw Error('could not ratchet key, worker is missing');\n    }\n    const msg = {\n      kind: 'ratchetRequest',\n      data: {\n        participantIdentity: participantIdentity,\n        keyIndex\n      }\n    };\n    this.worker.postMessage(msg);\n  }\n  postKey(_ref) {\n    let {\n      key,\n      participantIdentity,\n      keyIndex\n    } = _ref;\n    var _a;\n    if (!this.worker) {\n      throw Error('could not set key, worker is missing');\n    }\n    const msg = {\n      kind: 'setKey',\n      data: {\n        participantIdentity: participantIdentity,\n        isPublisher: participantIdentity === ((_a = this.room) === null || _a === void 0 ? void 0 : _a.localParticipant.identity),\n        key,\n        keyIndex\n      }\n    };\n    this.worker.postMessage(msg);\n  }\n  postEnable(enabled, participantIdentity) {\n    if (this.worker) {\n      const enableMsg = {\n        kind: 'enable',\n        data: {\n          enabled,\n          participantIdentity\n        }\n      };\n      this.worker.postMessage(enableMsg);\n    } else {\n      throw new ReferenceError('failed to enable e2ee, worker is not ready');\n    }\n  }\n  postRTPMap(map) {\n    var _a;\n    if (!this.worker) {\n      throw TypeError('could not post rtp map, worker is missing');\n    }\n    if (!((_a = this.room) === null || _a === void 0 ? void 0 : _a.localParticipant.identity)) {\n      throw TypeError('could not post rtp map, local participant identity is missing');\n    }\n    const msg = {\n      kind: 'setRTPMap',\n      data: {\n        map,\n        participantIdentity: this.room.localParticipant.identity\n      }\n    };\n    this.worker.postMessage(msg);\n  }\n  postSifTrailer(trailer) {\n    if (!this.worker) {\n      throw Error('could not post SIF trailer, worker is missing');\n    }\n    const msg = {\n      kind: 'setSifTrailer',\n      data: {\n        trailer\n      }\n    };\n    this.worker.postMessage(msg);\n  }\n  setupE2EEReceiver(track, remoteId, trackInfo) {\n    if (!track.receiver) {\n      return;\n    }\n    if (!(trackInfo === null || trackInfo === void 0 ? void 0 : trackInfo.mimeType) || trackInfo.mimeType === '') {\n      throw new TypeError('MimeType missing from trackInfo, cannot set up E2EE cryptor');\n    }\n    this.handleReceiver(track.receiver, track.mediaStreamID, remoteId, track.kind === 'video' ? mimeTypeToVideoCodecString(trackInfo.mimeType) : undefined);\n  }\n  setupE2EESender(track, sender) {\n    if (!isLocalTrack(track) || !sender) {\n      if (!sender) livekitLogger.warn('early return because sender is not ready');\n      return;\n    }\n    this.handleSender(sender, track.mediaStreamID, undefined);\n  }\n  /**\n   * Handles the given {@code RTCRtpReceiver} by creating a {@code TransformStream} which will inject\n   * a frame decoder.\n   *\n   */\n  handleReceiver(receiver, trackId, participantIdentity, codec) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.worker) {\n        return;\n      }\n      if (isScriptTransformSupported() &&\n      // Chrome occasionally throws an `InvalidState` error when using script transforms directly after introducing this API in 141.\n      // Disabling it for Chrome based browsers until the API has stabilized\n      !isChromiumBased()) {\n        const options = {\n          kind: 'decode',\n          participantIdentity,\n          trackId,\n          codec\n        };\n        // @ts-ignore\n        receiver.transform = new RTCRtpScriptTransform(this.worker, options);\n      } else {\n        if (E2EE_FLAG in receiver && codec) {\n          // only update codec\n          const msg = {\n            kind: 'updateCodec',\n            data: {\n              trackId,\n              codec,\n              participantIdentity: participantIdentity\n            }\n          };\n          this.worker.postMessage(msg);\n          return;\n        }\n        // @ts-ignore\n        let writable = receiver.writableStream;\n        // @ts-ignore\n        let readable = receiver.readableStream;\n        if (!writable || !readable) {\n          // @ts-ignore\n          const receiverStreams = receiver.createEncodedStreams();\n          // @ts-ignore\n          receiver.writableStream = receiverStreams.writable;\n          writable = receiverStreams.writable;\n          // @ts-ignore\n          receiver.readableStream = receiverStreams.readable;\n          readable = receiverStreams.readable;\n        }\n        const msg = {\n          kind: 'decode',\n          data: {\n            readableStream: readable,\n            writableStream: writable,\n            trackId: trackId,\n            codec,\n            participantIdentity: participantIdentity,\n            isReuse: E2EE_FLAG in receiver\n          }\n        };\n        this.worker.postMessage(msg, [readable, writable]);\n      }\n      // @ts-ignore\n      receiver[E2EE_FLAG] = true;\n    });\n  }\n  /**\n   * Handles the given {@code RTCRtpSender} by creating a {@code TransformStream} which will inject\n   * a frame encoder.\n   *\n   */\n  handleSender(sender, trackId, codec) {\n    var _a;\n    if (E2EE_FLAG in sender || !this.worker) {\n      return;\n    }\n    if (!((_a = this.room) === null || _a === void 0 ? void 0 : _a.localParticipant.identity) || this.room.localParticipant.identity === '') {\n      throw TypeError('local identity needs to be known in order to set up encrypted sender');\n    }\n    if (isScriptTransformSupported() &&\n    // Chrome occasionally throws an `InvalidState` error when using script transforms directly after introducing this API in 141.\n    // Disabling it for Chrome based browsers until the API has stabilized\n    !isChromiumBased()) {\n      livekitLogger.info('initialize script transform');\n      const options = {\n        kind: 'encode',\n        participantIdentity: this.room.localParticipant.identity,\n        trackId,\n        codec\n      };\n      // @ts-ignore\n      sender.transform = new RTCRtpScriptTransform(this.worker, options);\n    } else {\n      livekitLogger.info('initialize encoded streams');\n      // @ts-ignore\n      const senderStreams = sender.createEncodedStreams();\n      const msg = {\n        kind: 'encode',\n        data: {\n          readableStream: senderStreams.readable,\n          writableStream: senderStreams.writable,\n          codec,\n          trackId,\n          participantIdentity: this.room.localParticipant.identity,\n          isReuse: false\n        }\n      };\n      this.worker.postMessage(msg, [senderStreams.readable, senderStreams.writable]);\n    }\n    // @ts-ignore\n    sender[E2EE_FLAG] = true;\n  }\n}const CONNECTION_BACKOFF_MIN_MS = 500;\nconst CONNECTION_BACKOFF_MAX_MS = 15000;\n/**\n * BackOffStrategy implements exponential backoff for connection failures.\n *\n * When severe connection failures occur (e.g., network issues, server unavailability),\n * this strategy introduces increasing delays between reconnection attempts to avoid\n * overwhelming the server and to give transient issues time to resolve.\n *\n * This strategy is only applied to LiveKit Cloud projects. It identifies\n * projects by extracting the project name from the connection URL and tracks failures\n * per project. Self-hosted deployments (URLs without a project identifier) are not\n * subject to backoff delays.\n *\n * The class is implemented as a singleton to maintain consistent backoff state across\n * the entire application lifecycle instead of room instance lifecycle.\n */\nclass BackOffStrategy {\n  // eslint-disable-next-line @typescript-eslint/no-empty-function\n  constructor() {\n    this.failedConnectionAttempts = new Map();\n    this.backOffPromises = new Map();\n  }\n  static getInstance() {\n    if (!this._instance) {\n      this._instance = new BackOffStrategy();\n    }\n    return this._instance;\n  }\n  addFailedConnectionAttempt(urlString) {\n    var _a;\n    const url = new URL(urlString);\n    const projectName = extractProjectFromUrl(url);\n    if (!projectName) {\n      return;\n    }\n    let failureCount = (_a = this.failedConnectionAttempts.get(projectName)) !== null && _a !== void 0 ? _a : 0;\n    this.failedConnectionAttempts.set(projectName, failureCount + 1);\n    this.backOffPromises.set(projectName, sleep(Math.min(CONNECTION_BACKOFF_MIN_MS * Math.pow(2, failureCount), CONNECTION_BACKOFF_MAX_MS)));\n  }\n  getBackOffPromise(urlString) {\n    const url = new URL(urlString);\n    const projectName = url && extractProjectFromUrl(url);\n    const backoffPromise = projectName && this.backOffPromises.get(projectName);\n    return backoffPromise || Promise.resolve();\n  }\n  resetFailedConnectionAttempts(urlString) {\n    const url = new URL(urlString);\n    const projectName = url && extractProjectFromUrl(url);\n    if (projectName) {\n      this.failedConnectionAttempts.set(projectName, 0);\n      this.backOffPromises.set(projectName, Promise.resolve());\n    }\n  }\n  resetAll() {\n    this.backOffPromises.clear();\n    this.failedConnectionAttempts.clear();\n  }\n}\nBackOffStrategy._instance = null;const defaultId = 'default';\nclass DeviceManager {\n  constructor() {\n    this._previousDevices = [];\n  }\n  static getInstance() {\n    if (this.instance === undefined) {\n      this.instance = new DeviceManager();\n    }\n    return this.instance;\n  }\n  get previousDevices() {\n    return this._previousDevices;\n  }\n  getDevices(kind_1) {\n    return __awaiter(this, arguments, void 0, function (kind) {\n      var _this = this;\n      let requestPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      return function* () {\n        var _a;\n        if (((_a = DeviceManager.userMediaPromiseMap) === null || _a === void 0 ? void 0 : _a.size) > 0) {\n          livekitLogger.debug('awaiting getUserMedia promise');\n          try {\n            if (kind) {\n              yield DeviceManager.userMediaPromiseMap.get(kind);\n            } else {\n              yield Promise.all(DeviceManager.userMediaPromiseMap.values());\n            }\n          } catch (e) {\n            livekitLogger.warn('error waiting for media permissons');\n          }\n        }\n        let devices = yield navigator.mediaDevices.enumerateDevices();\n        if (requestPermissions &&\n        // for safari we need to skip this check, as otherwise it will re-acquire user media and fail on iOS https://bugs.webkit.org/show_bug.cgi?id=179363\n        !(isSafari() && _this.hasDeviceInUse(kind))) {\n          const isDummyDeviceOrEmpty = devices.filter(d => d.kind === kind).length === 0 || devices.some(device => {\n            const noLabel = device.label === '';\n            const isRelevant = kind ? device.kind === kind : true;\n            return noLabel && isRelevant;\n          });\n          if (isDummyDeviceOrEmpty) {\n            const permissionsToAcquire = {\n              video: kind !== 'audioinput' && kind !== 'audiooutput',\n              audio: kind !== 'videoinput' && {\n                deviceId: {\n                  ideal: 'default'\n                }\n              }\n            };\n            const stream = yield navigator.mediaDevices.getUserMedia(permissionsToAcquire);\n            devices = yield navigator.mediaDevices.enumerateDevices();\n            stream.getTracks().forEach(track => {\n              track.stop();\n            });\n          }\n        }\n        _this._previousDevices = devices;\n        if (kind) {\n          devices = devices.filter(device => device.kind === kind);\n        }\n        return devices;\n      }();\n    });\n  }\n  normalizeDeviceId(kind, deviceId, groupId) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (deviceId !== defaultId) {\n        return deviceId;\n      }\n      // resolve actual device id if it's 'default': Chrome returns it when no\n      // device has been chosen\n      const devices = yield this.getDevices(kind);\n      const defaultDevice = devices.find(d => d.deviceId === defaultId);\n      if (!defaultDevice) {\n        livekitLogger.warn('could not reliably determine default device');\n        return undefined;\n      }\n      const device = devices.find(d => d.deviceId !== defaultId && d.groupId === (groupId !== null && groupId !== void 0 ? groupId : defaultDevice.groupId));\n      if (!device) {\n        livekitLogger.warn('could not reliably determine default device');\n        return undefined;\n      }\n      return device === null || device === void 0 ? void 0 : device.deviceId;\n    });\n  }\n  hasDeviceInUse(kind) {\n    return kind ? DeviceManager.userMediaPromiseMap.has(kind) : DeviceManager.userMediaPromiseMap.size > 0;\n  }\n}\nDeviceManager.mediaDeviceKinds = ['audioinput', 'audiooutput', 'videoinput'];\nDeviceManager.userMediaPromiseMap = new Map();var QueueTaskStatus;\n(function (QueueTaskStatus) {\n  QueueTaskStatus[QueueTaskStatus[\"WAITING\"] = 0] = \"WAITING\";\n  QueueTaskStatus[QueueTaskStatus[\"RUNNING\"] = 1] = \"RUNNING\";\n  QueueTaskStatus[QueueTaskStatus[\"COMPLETED\"] = 2] = \"COMPLETED\";\n})(QueueTaskStatus || (QueueTaskStatus = {}));\nclass AsyncQueue {\n  constructor() {\n    this.pendingTasks = new Map();\n    this.taskMutex = new _();\n    this.nextTaskIndex = 0;\n  }\n  run(task) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const taskInfo = {\n        id: this.nextTaskIndex++,\n        enqueuedAt: Date.now(),\n        status: QueueTaskStatus.WAITING\n      };\n      this.pendingTasks.set(taskInfo.id, taskInfo);\n      const unlock = yield this.taskMutex.lock();\n      try {\n        taskInfo.executedAt = Date.now();\n        taskInfo.status = QueueTaskStatus.RUNNING;\n        return yield task();\n      } finally {\n        taskInfo.status = QueueTaskStatus.COMPLETED;\n        this.pendingTasks.delete(taskInfo.id);\n        unlock();\n      }\n    });\n  }\n  flush() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.run(() => __awaiter(this, void 0, void 0, function* () {}));\n    });\n  }\n  snapshot() {\n    return Array.from(this.pendingTasks.values());\n  }\n}/**\n * [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) with [Streams API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API)\n *\n * @see https://web.dev/websocketstream/\n */\nclass WebSocketStream {\n  get readyState() {\n    return this.ws.readyState;\n  }\n  constructor(url) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _a, _b;\n    if ((_a = options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {\n      throw new DOMException('This operation was aborted', 'AbortError');\n    }\n    this.url = url;\n    const ws = new WebSocket(url, (_b = options.protocols) !== null && _b !== void 0 ? _b : []);\n    ws.binaryType = 'arraybuffer';\n    this.ws = ws;\n    const closeWithInfo = function () {\n      let {\n        closeCode: code,\n        reason\n      } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return ws.close(code, reason);\n    };\n    this.opened = new Promise((resolve, reject) => {\n      ws.onopen = () => {\n        resolve({\n          readable: new ReadableStream({\n            start(controller) {\n              ws.onmessage = _ref => {\n                let {\n                  data\n                } = _ref;\n                return controller.enqueue(data);\n              };\n              ws.onerror = e => controller.error(e);\n            },\n            cancel: closeWithInfo\n          }),\n          writable: new WritableStream({\n            write(chunk) {\n              ws.send(chunk);\n            },\n            abort() {\n              ws.close();\n            },\n            close: closeWithInfo\n          }),\n          protocol: ws.protocol,\n          extensions: ws.extensions\n        });\n        ws.removeEventListener('error', reject);\n      };\n      ws.addEventListener('error', reject);\n    });\n    this.closed = new Promise((resolve, reject) => {\n      const rejectHandler = () => __awaiter(this, void 0, void 0, function* () {\n        const closePromise = new Promise(res => {\n          if (ws.readyState === WebSocket.CLOSED) return;else {\n            ws.addEventListener('close', closeEv => {\n              res(closeEv);\n            }, {\n              once: true\n            });\n          }\n        });\n        const reason = yield Promise.race([sleep(250), closePromise]);\n        if (!reason) {\n          reject(new Error('Encountered unspecified websocket error without a timely close event'));\n        } else {\n          // if we can infer the close reason from the close event then resolve the promise, we don't need to throw\n          resolve(reason);\n        }\n      });\n      ws.onclose = _ref2 => {\n        let {\n          code,\n          reason\n        } = _ref2;\n        resolve({\n          closeCode: code,\n          reason\n        });\n        ws.removeEventListener('error', rejectHandler);\n      };\n      ws.addEventListener('error', rejectHandler);\n    });\n    if (options.signal) {\n      options.signal.onabort = () => ws.close();\n    }\n    this.close = closeWithInfo;\n  }\n}const passThroughQueueSignals = ['syncState', 'trickle', 'offer', 'answer', 'simulate', 'leave'];\nfunction canPassThroughQueue(req) {\n  const canPass = passThroughQueueSignals.indexOf(req.case) >= 0;\n  livekitLogger.trace('request allowed to bypass queue:', {\n    canPass,\n    req\n  });\n  return canPass;\n}\nvar SignalConnectionState;\n(function (SignalConnectionState) {\n  SignalConnectionState[SignalConnectionState[\"CONNECTING\"] = 0] = \"CONNECTING\";\n  SignalConnectionState[SignalConnectionState[\"CONNECTED\"] = 1] = \"CONNECTED\";\n  SignalConnectionState[SignalConnectionState[\"RECONNECTING\"] = 2] = \"RECONNECTING\";\n  SignalConnectionState[SignalConnectionState[\"DISCONNECTING\"] = 3] = \"DISCONNECTING\";\n  SignalConnectionState[SignalConnectionState[\"DISCONNECTED\"] = 4] = \"DISCONNECTED\";\n})(SignalConnectionState || (SignalConnectionState = {}));\n/** specifies how much time (in ms) we allow for the ws to close its connection gracefully before continuing */\nconst MAX_WS_CLOSE_TIME = 250;\n/** @internal */\nclass SignalClient {\n  get currentState() {\n    return this.state;\n  }\n  get isDisconnected() {\n    return this.state === SignalConnectionState.DISCONNECTING || this.state === SignalConnectionState.DISCONNECTED;\n  }\n  get isEstablishingConnection() {\n    return this.state === SignalConnectionState.CONNECTING || this.state === SignalConnectionState.RECONNECTING;\n  }\n  getNextRequestId() {\n    this._requestId += 1;\n    return this._requestId;\n  }\n  constructor() {\n    let useJSON = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    let loggerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _a;\n    /** signal rtt in milliseconds */\n    this.rtt = 0;\n    this.state = SignalConnectionState.DISCONNECTED;\n    this.log = livekitLogger;\n    this._requestId = 0;\n    /** @internal */\n    this.resetCallbacks = () => {\n      this.onAnswer = undefined;\n      this.onLeave = undefined;\n      this.onLocalTrackPublished = undefined;\n      this.onLocalTrackUnpublished = undefined;\n      this.onNegotiateRequested = undefined;\n      this.onOffer = undefined;\n      this.onRemoteMuteChanged = undefined;\n      this.onSubscribedQualityUpdate = undefined;\n      this.onTokenRefresh = undefined;\n      this.onTrickle = undefined;\n      this.onClose = undefined;\n      this.onMediaSectionsRequirement = undefined;\n    };\n    this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Signal);\n    this.loggerContextCb = loggerOptions.loggerContextCb;\n    this.useJSON = useJSON;\n    this.requestQueue = new AsyncQueue();\n    this.queuedRequests = [];\n    this.closingLock = new _();\n    this.connectionLock = new _();\n    this.state = SignalConnectionState.DISCONNECTED;\n  }\n  get logContext() {\n    var _a, _b;\n    return (_b = (_a = this.loggerContextCb) === null || _a === void 0 ? void 0 : _a.call(this)) !== null && _b !== void 0 ? _b : {};\n  }\n  join(url, token, opts, abortSignal) {\n    return __awaiter(this, void 0, void 0, function* () {\n      // during a full reconnect, we'd want to start the sequence even if currently\n      // connected\n      this.state = SignalConnectionState.CONNECTING;\n      this.options = opts;\n      const res = yield this.connect(url, token, opts, abortSignal);\n      return res;\n    });\n  }\n  reconnect(url, token, sid, reason) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.options) {\n        this.log.warn('attempted to reconnect without signal options being set, ignoring', this.logContext);\n        return;\n      }\n      this.state = SignalConnectionState.RECONNECTING;\n      // clear ping interval and restart it once reconnected\n      this.clearPingInterval();\n      const res = yield this.connect(url, token, Object.assign(Object.assign({}, this.options), {\n        reconnect: true,\n        sid,\n        reconnectReason: reason\n      }));\n      return res;\n    });\n  }\n  connect(url, token, opts, abortSignal) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.connectionLock.lock();\n      this.connectOptions = opts;\n      const clientInfo = getClientInfo();\n      const params = opts.singlePeerConnection ? createJoinRequestConnectionParams(token, clientInfo, opts) : createConnectionParams(token, clientInfo, opts);\n      const rtcUrl = createRtcUrl(url, params);\n      const validateUrl = createValidateUrl(rtcUrl);\n      return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n        var _a, _b;\n        try {\n          let alreadyAborted = false;\n          const abortHandler = eventOrError => __awaiter(this, void 0, void 0, function* () {\n            if (alreadyAborted) {\n              return;\n            }\n            alreadyAborted = true;\n            const target = eventOrError instanceof Event ? eventOrError.currentTarget : eventOrError;\n            const reason = getAbortReasonAsString(target, 'Abort handler called');\n            // send leave if we have an active stream writer (connection is open)\n            if (this.streamWriter && !this.isDisconnected) {\n              this.sendLeave().then(() => this.close(reason)).catch(e => {\n                this.log.error(e);\n                this.close();\n              });\n            } else {\n              this.close();\n            }\n            cleanupAbortHandlers();\n            reject(ConnectionError.cancelled(reason));\n          });\n          abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.addEventListener('abort', abortHandler);\n          const cleanupAbortHandlers = () => {\n            clearTimeout(wsTimeout);\n            abortSignal === null || abortSignal === void 0 ? void 0 : abortSignal.removeEventListener('abort', abortHandler);\n          };\n          const wsTimeout = setTimeout(() => {\n            abortHandler(ConnectionError.timeout('room connection has timed out (signal)'));\n          }, opts.websocketTimeout);\n          const handleSignalConnected = (connection, firstMessage) => {\n            this.handleSignalConnected(connection, wsTimeout, firstMessage);\n          };\n          const redactedUrl = new URL(rtcUrl);\n          if (redactedUrl.searchParams.has('access_token')) {\n            redactedUrl.searchParams.set('access_token', '<redacted>');\n          }\n          this.log.debug(\"connecting to \".concat(redactedUrl), Object.assign({\n            reconnect: opts.reconnect,\n            reconnectReason: opts.reconnectReason\n          }, this.logContext));\n          if (this.ws) {\n            yield this.close(false);\n          }\n          this.ws = new WebSocketStream(rtcUrl);\n          try {\n            this.ws.closed.then(closeInfo => {\n              var _a;\n              if (this.isEstablishingConnection) {\n                reject(ConnectionError.internal(\"Websocket got closed during a (re)connection attempt: \".concat(closeInfo.reason)));\n              }\n              if (closeInfo.closeCode !== 1000) {\n                this.log.warn(\"websocket closed\", Object.assign(Object.assign({}, this.logContext), {\n                  reason: closeInfo.reason,\n                  code: closeInfo.closeCode,\n                  wasClean: closeInfo.closeCode === 1000,\n                  state: this.state\n                }));\n                if (this.state === SignalConnectionState.CONNECTED) {\n                  this.handleOnClose((_a = closeInfo.reason) !== null && _a !== void 0 ? _a : 'Unexpected WS error');\n                }\n              }\n              return;\n            }).catch(reason => {\n              if (this.isEstablishingConnection) {\n                reject(ConnectionError.internal(\"Websocket error during a (re)connection attempt: \".concat(reason)));\n              }\n            });\n            const connection = yield this.ws.opened.catch(reason => __awaiter(this, void 0, void 0, function* () {\n              if (this.state !== SignalConnectionState.CONNECTED) {\n                this.state = SignalConnectionState.DISCONNECTED;\n                clearTimeout(wsTimeout);\n                const error = yield this.handleConnectionError(reason, validateUrl);\n                reject(error);\n                return;\n              }\n              // other errors, handle\n              this.handleWSError(reason);\n              reject(reason);\n              return;\n            }));\n            clearTimeout(wsTimeout);\n            if (!connection) {\n              return;\n            }\n            const signalReader = connection.readable.getReader();\n            this.streamWriter = connection.writable.getWriter();\n            const firstMessage = yield signalReader.read();\n            signalReader.releaseLock();\n            if (!firstMessage.value) {\n              throw ConnectionError.internal('no message received as first message');\n            }\n            const firstSignalResponse = parseSignalResponse(firstMessage.value);\n            // Validate the first message\n            const validation = this.validateFirstMessage(firstSignalResponse, (_a = opts.reconnect) !== null && _a !== void 0 ? _a : false);\n            if (!validation.isValid) {\n              reject(validation.error);\n              return;\n            }\n            // Handle join response - set up ping configuration\n            if (((_b = firstSignalResponse.message) === null || _b === void 0 ? void 0 : _b.case) === 'join') {\n              this.pingTimeoutDuration = firstSignalResponse.message.value.pingTimeout;\n              this.pingIntervalDuration = firstSignalResponse.message.value.pingInterval;\n              if (this.pingTimeoutDuration && this.pingTimeoutDuration > 0) {\n                this.log.debug('ping config', Object.assign(Object.assign({}, this.logContext), {\n                  timeout: this.pingTimeoutDuration,\n                  interval: this.pingIntervalDuration\n                }));\n              }\n            }\n            // Handle successful connection\n            const firstMessageToProcess = validation.shouldProcessFirstMessage ? firstSignalResponse : undefined;\n            handleSignalConnected(connection, firstMessageToProcess);\n            resolve(validation.response);\n          } catch (e) {\n            reject(e);\n          } finally {\n            cleanupAbortHandlers();\n          }\n        } finally {\n          unlock();\n        }\n      }));\n    });\n  }\n  startReadingLoop(signalReader, firstMessage) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (firstMessage) {\n        this.handleSignalResponse(firstMessage);\n      }\n      while (true) {\n        if (this.signalLatency) {\n          yield sleep(this.signalLatency);\n        }\n        const {\n          done,\n          value\n        } = yield signalReader.read();\n        if (done) {\n          break;\n        }\n        const resp = parseSignalResponse(value);\n        this.handleSignalResponse(resp);\n      }\n    });\n  }\n  close() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this = this;\n      let updateState = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      let reason = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Close method called on signal client';\n      return function* () {\n        if ([SignalConnectionState.DISCONNECTING || SignalConnectionState.DISCONNECTED].includes(_this.state)) {\n          _this.log.debug(\"ignoring signal close as it's already in disconnecting state\");\n          return;\n        }\n        const unlock = yield _this.closingLock.lock();\n        try {\n          _this.clearPingInterval();\n          if (updateState) {\n            _this.state = SignalConnectionState.DISCONNECTING;\n          }\n          if (_this.ws) {\n            _this.ws.close({\n              closeCode: 1000,\n              reason\n            });\n            // calling `ws.close()` only starts the closing handshake (CLOSING state), prefer to wait until state is actually CLOSED\n            const closePromise = _this.ws.closed;\n            _this.ws = undefined;\n            _this.streamWriter = undefined;\n            yield Promise.race([closePromise, sleep(MAX_WS_CLOSE_TIME)]);\n          }\n        } catch (e) {\n          _this.log.debug('websocket error while closing', Object.assign(Object.assign({}, _this.logContext), {\n            error: e\n          }));\n        } finally {\n          if (updateState) {\n            _this.state = SignalConnectionState.DISCONNECTED;\n          }\n          unlock();\n        }\n      }();\n    });\n  }\n  // initial offer after joining\n  sendOffer(offer, offerId) {\n    this.log.debug('sending offer', Object.assign(Object.assign({}, this.logContext), {\n      offerSdp: offer.sdp\n    }));\n    this.sendRequest({\n      case: 'offer',\n      value: toProtoSessionDescription(offer, offerId)\n    });\n  }\n  // answer a server-initiated offer\n  sendAnswer(answer, offerId) {\n    this.log.debug('sending answer', Object.assign(Object.assign({}, this.logContext), {\n      answerSdp: answer.sdp\n    }));\n    return this.sendRequest({\n      case: 'answer',\n      value: toProtoSessionDescription(answer, offerId)\n    });\n  }\n  sendIceCandidate(candidate, target) {\n    this.log.debug('sending ice candidate', Object.assign(Object.assign({}, this.logContext), {\n      candidate\n    }));\n    return this.sendRequest({\n      case: 'trickle',\n      value: new TrickleRequest({\n        candidateInit: JSON.stringify(candidate),\n        target\n      })\n    });\n  }\n  sendMuteTrack(trackSid, muted) {\n    return this.sendRequest({\n      case: 'mute',\n      value: new MuteTrackRequest({\n        sid: trackSid,\n        muted\n      })\n    });\n  }\n  sendAddTrack(req) {\n    return this.sendRequest({\n      case: 'addTrack',\n      value: req\n    });\n  }\n  sendUpdateLocalMetadata(metadata_1, name_1) {\n    return __awaiter(this, arguments, void 0, function (metadata, name) {\n      var _this2 = this;\n      let attributes = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n      return function* () {\n        const requestId = _this2.getNextRequestId();\n        yield _this2.sendRequest({\n          case: 'updateMetadata',\n          value: new UpdateParticipantMetadata({\n            requestId,\n            metadata,\n            name,\n            attributes\n          })\n        });\n        return requestId;\n      }();\n    });\n  }\n  sendUpdateTrackSettings(settings) {\n    this.sendRequest({\n      case: 'trackSetting',\n      value: settings\n    });\n  }\n  sendUpdateSubscription(sub) {\n    return this.sendRequest({\n      case: 'subscription',\n      value: sub\n    });\n  }\n  sendSyncState(sync) {\n    return this.sendRequest({\n      case: 'syncState',\n      value: sync\n    });\n  }\n  sendUpdateVideoLayers(trackSid, layers) {\n    return this.sendRequest({\n      case: 'updateLayers',\n      value: new UpdateVideoLayers({\n        trackSid,\n        layers\n      })\n    });\n  }\n  sendUpdateSubscriptionPermissions(allParticipants, trackPermissions) {\n    return this.sendRequest({\n      case: 'subscriptionPermission',\n      value: new SubscriptionPermission({\n        allParticipants,\n        trackPermissions\n      })\n    });\n  }\n  sendSimulateScenario(scenario) {\n    return this.sendRequest({\n      case: 'simulate',\n      value: scenario\n    });\n  }\n  sendPing() {\n    /** send both of ping and pingReq for compatibility to old and new server */\n    return Promise.all([this.sendRequest({\n      case: 'ping',\n      value: protoInt64.parse(Date.now())\n    }), this.sendRequest({\n      case: 'pingReq',\n      value: new Ping({\n        timestamp: protoInt64.parse(Date.now()),\n        rtt: protoInt64.parse(this.rtt)\n      })\n    })]);\n  }\n  sendUpdateLocalAudioTrack(trackSid, features) {\n    return this.sendRequest({\n      case: 'updateAudioTrack',\n      value: new UpdateLocalAudioTrack({\n        trackSid,\n        features\n      })\n    });\n  }\n  sendLeave() {\n    return this.sendRequest({\n      case: 'leave',\n      value: new LeaveRequest({\n        reason: DisconnectReason.CLIENT_INITIATED,\n        // server doesn't process this field, keeping it here to indicate the intent of a full disconnect\n        action: LeaveRequest_Action.DISCONNECT\n      })\n    });\n  }\n  sendRequest(message_1) {\n    return __awaiter(this, arguments, void 0, function (message) {\n      var _this3 = this;\n      let fromQueue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n      return function* () {\n        // capture all requests while reconnecting and put them in a queue\n        // unless the request originates from the queue, then don't enqueue again\n        const canQueue = !fromQueue && !canPassThroughQueue(message);\n        if (canQueue && _this3.state === SignalConnectionState.RECONNECTING) {\n          _this3.queuedRequests.push(() => __awaiter(_this3, void 0, void 0, function* () {\n            yield this.sendRequest(message, true);\n          }));\n          return;\n        }\n        // make sure previously queued requests are being sent first\n        if (!fromQueue) {\n          yield _this3.requestQueue.flush();\n        }\n        if (_this3.signalLatency) {\n          yield sleep(_this3.signalLatency);\n        }\n        if (_this3.isDisconnected) {\n          // Skip requests if the signal layer is disconnected\n          // This can happen if an event is sent in the mist of room.connect() initializing\n          _this3.log.debug(\"skipping signal request (type: \".concat(message.case, \") - SignalClient disconnected\"));\n          return;\n        }\n        if (!_this3.streamWriter) {\n          _this3.log.error(\"cannot send signal request before connected, type: \".concat(message === null || message === void 0 ? void 0 : message.case), _this3.logContext);\n          return;\n        }\n        const req = new SignalRequest({\n          message\n        });\n        try {\n          if (_this3.useJSON) {\n            yield _this3.streamWriter.write(req.toJsonString());\n          } else {\n            yield _this3.streamWriter.write(req.toBinary());\n          }\n        } catch (e) {\n          _this3.log.error('error sending signal message', Object.assign(Object.assign({}, _this3.logContext), {\n            error: e\n          }));\n        }\n      }();\n    });\n  }\n  handleSignalResponse(res) {\n    var _a, _b;\n    const msg = res.message;\n    if (msg == undefined) {\n      this.log.debug('received unsupported message', this.logContext);\n      return;\n    }\n    let pingHandled = false;\n    if (msg.case === 'answer') {\n      const sd = fromProtoSessionDescription(msg.value);\n      if (this.onAnswer) {\n        this.onAnswer(sd, msg.value.id, msg.value.midToTrackId);\n      }\n    } else if (msg.case === 'offer') {\n      const sd = fromProtoSessionDescription(msg.value);\n      if (this.onOffer) {\n        this.onOffer(sd, msg.value.id, msg.value.midToTrackId);\n      }\n    } else if (msg.case === 'trickle') {\n      const candidate = JSON.parse(msg.value.candidateInit);\n      if (this.onTrickle) {\n        this.onTrickle(candidate, msg.value.target);\n      }\n    } else if (msg.case === 'update') {\n      if (this.onParticipantUpdate) {\n        this.onParticipantUpdate((_a = msg.value.participants) !== null && _a !== void 0 ? _a : []);\n      }\n    } else if (msg.case === 'trackPublished') {\n      if (this.onLocalTrackPublished) {\n        this.onLocalTrackPublished(msg.value);\n      }\n    } else if (msg.case === 'speakersChanged') {\n      if (this.onSpeakersChanged) {\n        this.onSpeakersChanged((_b = msg.value.speakers) !== null && _b !== void 0 ? _b : []);\n      }\n    } else if (msg.case === 'leave') {\n      if (this.onLeave) {\n        this.onLeave(msg.value);\n      }\n    } else if (msg.case === 'mute') {\n      if (this.onRemoteMuteChanged) {\n        this.onRemoteMuteChanged(msg.value.sid, msg.value.muted);\n      }\n    } else if (msg.case === 'roomUpdate') {\n      if (this.onRoomUpdate && msg.value.room) {\n        this.onRoomUpdate(msg.value.room);\n      }\n    } else if (msg.case === 'connectionQuality') {\n      if (this.onConnectionQuality) {\n        this.onConnectionQuality(msg.value);\n      }\n    } else if (msg.case === 'streamStateUpdate') {\n      if (this.onStreamStateUpdate) {\n        this.onStreamStateUpdate(msg.value);\n      }\n    } else if (msg.case === 'subscribedQualityUpdate') {\n      if (this.onSubscribedQualityUpdate) {\n        this.onSubscribedQualityUpdate(msg.value);\n      }\n    } else if (msg.case === 'subscriptionPermissionUpdate') {\n      if (this.onSubscriptionPermissionUpdate) {\n        this.onSubscriptionPermissionUpdate(msg.value);\n      }\n    } else if (msg.case === 'refreshToken') {\n      if (this.onTokenRefresh) {\n        this.onTokenRefresh(msg.value);\n      }\n    } else if (msg.case === 'trackUnpublished') {\n      if (this.onLocalTrackUnpublished) {\n        this.onLocalTrackUnpublished(msg.value);\n      }\n    } else if (msg.case === 'subscriptionResponse') {\n      if (this.onSubscriptionError) {\n        this.onSubscriptionError(msg.value);\n      }\n    } else if (msg.case === 'pong') ; else if (msg.case === 'pongResp') {\n      this.rtt = Date.now() - Number.parseInt(msg.value.lastPingTimestamp.toString());\n      this.resetPingTimeout();\n      pingHandled = true;\n    } else if (msg.case === 'requestResponse') {\n      if (this.onRequestResponse) {\n        this.onRequestResponse(msg.value);\n      }\n    } else if (msg.case === 'trackSubscribed') {\n      if (this.onLocalTrackSubscribed) {\n        this.onLocalTrackSubscribed(msg.value.trackSid);\n      }\n    } else if (msg.case === 'roomMoved') {\n      if (this.onTokenRefresh) {\n        this.onTokenRefresh(msg.value.token);\n      }\n      if (this.onRoomMoved) {\n        this.onRoomMoved(msg.value);\n      }\n    } else if (msg.case === 'mediaSectionsRequirement') {\n      if (this.onMediaSectionsRequirement) {\n        this.onMediaSectionsRequirement(msg.value);\n      }\n    } else {\n      this.log.debug('unsupported message', Object.assign(Object.assign({}, this.logContext), {\n        msgCase: msg.case\n      }));\n    }\n    if (!pingHandled) {\n      this.resetPingTimeout();\n    }\n  }\n  setReconnected() {\n    while (this.queuedRequests.length > 0) {\n      const req = this.queuedRequests.shift();\n      if (req) {\n        this.requestQueue.run(req);\n      }\n    }\n  }\n  handleOnClose(reason) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.state === SignalConnectionState.DISCONNECTED) return;\n      const onCloseCallback = this.onClose;\n      yield this.close(undefined, reason);\n      this.log.debug(\"websocket connection closed: \".concat(reason), Object.assign(Object.assign({}, this.logContext), {\n        reason\n      }));\n      if (onCloseCallback) {\n        onCloseCallback(reason);\n      }\n    });\n  }\n  handleWSError(error) {\n    this.log.error('websocket error', Object.assign(Object.assign({}, this.logContext), {\n      error\n    }));\n  }\n  /**\n   * Resets the ping timeout and starts a new timeout.\n   * Call this after receiving a pong message\n   */\n  resetPingTimeout() {\n    this.clearPingTimeout();\n    if (!this.pingTimeoutDuration) {\n      this.log.warn('ping timeout duration not set', this.logContext);\n      return;\n    }\n    this.pingTimeout = CriticalTimers.setTimeout(() => {\n      this.log.warn(\"ping timeout triggered. last pong received at: \".concat(new Date(Date.now() - this.pingTimeoutDuration * 1000).toUTCString()), this.logContext);\n      this.handleOnClose('ping timeout');\n    }, this.pingTimeoutDuration * 1000);\n  }\n  /**\n   * Clears ping timeout (does not start a new timeout)\n   */\n  clearPingTimeout() {\n    if (this.pingTimeout) {\n      CriticalTimers.clearTimeout(this.pingTimeout);\n    }\n  }\n  startPingInterval() {\n    this.clearPingInterval();\n    this.resetPingTimeout();\n    if (!this.pingIntervalDuration) {\n      this.log.warn('ping interval duration not set', this.logContext);\n      return;\n    }\n    this.log.debug('start ping interval', this.logContext);\n    this.pingInterval = CriticalTimers.setInterval(() => {\n      this.sendPing();\n    }, this.pingIntervalDuration * 1000);\n  }\n  clearPingInterval() {\n    this.log.debug('clearing ping interval', this.logContext);\n    this.clearPingTimeout();\n    if (this.pingInterval) {\n      CriticalTimers.clearInterval(this.pingInterval);\n    }\n  }\n  /**\n   * Handles the successful connection to the signal server\n   * @param connection The WebSocket connection\n   * @param timeoutHandle The timeout handle to clear\n   * @param firstMessage Optional first message to process\n   * @internal\n   */\n  handleSignalConnected(connection, timeoutHandle, firstMessage) {\n    this.state = SignalConnectionState.CONNECTED;\n    clearTimeout(timeoutHandle);\n    this.startPingInterval();\n    this.startReadingLoop(connection.readable.getReader(), firstMessage);\n  }\n  /**\n   * Validates the first message received from the signal server\n   * @param firstSignalResponse The first signal response received\n   * @param isReconnect Whether this is a reconnection attempt\n   * @returns Validation result with response or error\n   * @internal\n   */\n  validateFirstMessage(firstSignalResponse, isReconnect) {\n    var _a, _b, _c, _d, _e;\n    if (((_a = firstSignalResponse.message) === null || _a === void 0 ? void 0 : _a.case) === 'join') {\n      return {\n        isValid: true,\n        response: firstSignalResponse.message.value\n      };\n    } else if (this.state === SignalConnectionState.RECONNECTING && ((_b = firstSignalResponse.message) === null || _b === void 0 ? void 0 : _b.case) !== 'leave') {\n      if (((_c = firstSignalResponse.message) === null || _c === void 0 ? void 0 : _c.case) === 'reconnect') {\n        return {\n          isValid: true,\n          response: firstSignalResponse.message.value\n        };\n      } else {\n        // in reconnecting, any message received means signal reconnected and we still need to process it\n        this.log.debug('declaring signal reconnected without reconnect response received', this.logContext);\n        return {\n          isValid: true,\n          response: undefined,\n          shouldProcessFirstMessage: true\n        };\n      }\n    } else if (this.isEstablishingConnection && ((_d = firstSignalResponse.message) === null || _d === void 0 ? void 0 : _d.case) === 'leave') {\n      return {\n        isValid: false,\n        error: ConnectionError.leaveRequest('Received leave request while trying to (re)connect', firstSignalResponse.message.value.reason)\n      };\n    } else if (!isReconnect) {\n      // non-reconnect case, should receive join response first\n      return {\n        isValid: false,\n        error: ConnectionError.internal(\"did not receive join response, got \".concat((_e = firstSignalResponse.message) === null || _e === void 0 ? void 0 : _e.case, \" instead\"))\n      };\n    }\n    return {\n      isValid: false,\n      error: ConnectionError.internal('Unexpected first message')\n    };\n  }\n  /**\n   * Handles WebSocket connection errors by validating with the server\n   * @param reason The error that occurred\n   * @param validateUrl The URL to validate the connection with\n   * @returns A ConnectionError with appropriate reason and status\n   * @internal\n   */\n  handleConnectionError(reason, validateUrl) {\n    return __awaiter(this, void 0, void 0, function* () {\n      try {\n        const resp = yield fetch(validateUrl);\n        if (resp.status.toFixed(0).startsWith('4')) {\n          const msg = yield resp.text();\n          return ConnectionError.notAllowed(msg, resp.status);\n        } else if (reason instanceof ConnectionError) {\n          return reason;\n        } else {\n          return ConnectionError.internal(\"Encountered unknown websocket error during connection: \".concat(reason), {\n            status: resp.status,\n            statusText: resp.statusText\n          });\n        }\n      } catch (e) {\n        return e instanceof ConnectionError ? e : ConnectionError.serverUnreachable(e instanceof Error ? e.message : 'server was not reachable');\n      }\n    });\n  }\n}\nfunction fromProtoSessionDescription(sd) {\n  const rsd = {\n    type: 'offer',\n    sdp: sd.sdp\n  };\n  switch (sd.type) {\n    case 'answer':\n    case 'offer':\n    case 'pranswer':\n    case 'rollback':\n      rsd.type = sd.type;\n      break;\n  }\n  return rsd;\n}\nfunction toProtoSessionDescription(rsd, id) {\n  const sd = new SessionDescription({\n    sdp: rsd.sdp,\n    type: rsd.type,\n    id\n  });\n  return sd;\n}\nfunction createConnectionParams(token, info, opts) {\n  var _a;\n  const params = new URLSearchParams();\n  params.set('access_token', token);\n  // opts\n  if (opts.reconnect) {\n    params.set('reconnect', '1');\n    if (opts.sid) {\n      params.set('sid', opts.sid);\n    }\n  }\n  params.set('auto_subscribe', opts.autoSubscribe ? '1' : '0');\n  // ClientInfo\n  params.set('sdk', isReactNative() ? 'reactnative' : 'js');\n  params.set('version', info.version);\n  params.set('protocol', info.protocol.toString());\n  if (info.deviceModel) {\n    params.set('device_model', info.deviceModel);\n  }\n  if (info.os) {\n    params.set('os', info.os);\n  }\n  if (info.osVersion) {\n    params.set('os_version', info.osVersion);\n  }\n  if (info.browser) {\n    params.set('browser', info.browser);\n  }\n  if (info.browserVersion) {\n    params.set('browser_version', info.browserVersion);\n  }\n  if (opts.adaptiveStream) {\n    params.set('adaptive_stream', '1');\n  }\n  if (opts.reconnectReason) {\n    params.set('reconnect_reason', opts.reconnectReason.toString());\n  }\n  // @ts-ignore\n  if ((_a = navigator.connection) === null || _a === void 0 ? void 0 : _a.type) {\n    // @ts-ignore\n    params.set('network', navigator.connection.type);\n  }\n  return params;\n}\nfunction createJoinRequestConnectionParams(token, info, opts) {\n  const params = new URLSearchParams();\n  params.set('access_token', token);\n  const joinRequest = new JoinRequest({\n    clientInfo: info,\n    connectionSettings: new ConnectionSettings({\n      autoSubscribe: !!opts.autoSubscribe,\n      adaptiveStream: !!opts.adaptiveStream\n    }),\n    reconnect: !!opts.reconnect,\n    participantSid: opts.sid ? opts.sid : undefined\n  });\n  if (opts.reconnectReason) {\n    joinRequest.reconnectReason = opts.reconnectReason;\n  }\n  const wrappedJoinRequest = new WrappedJoinRequest({\n    joinRequest: joinRequest.toBinary()\n  });\n  params.set('join_request', btoa(new TextDecoder('utf-8').decode(wrappedJoinRequest.toBinary())));\n  return params;\n}class DataPacketBuffer {\n  constructor() {\n    this.buffer = [];\n    this._totalSize = 0;\n  }\n  push(item) {\n    this.buffer.push(item);\n    this._totalSize += item.data.byteLength;\n  }\n  pop() {\n    const item = this.buffer.shift();\n    if (item) {\n      this._totalSize -= item.data.byteLength;\n    }\n    return item;\n  }\n  getAll() {\n    return this.buffer.slice();\n  }\n  popToSequence(sequence) {\n    while (this.buffer.length > 0) {\n      const first = this.buffer[0];\n      if (first.sequence <= sequence) {\n        this.pop();\n      } else {\n        break;\n      }\n    }\n  }\n  alignBufferedAmount(bufferedAmount) {\n    while (this.buffer.length > 0) {\n      const first = this.buffer[0];\n      if (this._totalSize - first.data.byteLength <= bufferedAmount) {\n        break;\n      }\n      this.pop();\n    }\n  }\n  get length() {\n    return this.buffer.length;\n  }\n}class TTLMap {\n  /**\n   * @param ttl ttl of the key (ms)\n   */\n  constructor(ttl) {\n    this._map = new Map();\n    this._lastCleanup = 0;\n    this.ttl = ttl;\n  }\n  set(key, value) {\n    const now = Date.now();\n    if (now - this._lastCleanup > this.ttl / 2) {\n      this.cleanup();\n    }\n    const expiresAt = now + this.ttl;\n    this._map.set(key, {\n      value,\n      expiresAt\n    });\n    return this;\n  }\n  get(key) {\n    const entry = this._map.get(key);\n    if (!entry) return undefined;\n    if (entry.expiresAt < Date.now()) {\n      this._map.delete(key);\n      return undefined;\n    }\n    return entry.value;\n  }\n  has(key) {\n    const entry = this._map.get(key);\n    if (!entry) return false;\n    if (entry.expiresAt < Date.now()) {\n      this._map.delete(key);\n      return false;\n    }\n    return true;\n  }\n  delete(key) {\n    return this._map.delete(key);\n  }\n  clear() {\n    this._map.clear();\n  }\n  cleanup() {\n    const now = Date.now();\n    for (const [key, entry] of this._map.entries()) {\n      if (entry.expiresAt < now) {\n        this._map.delete(key);\n      }\n    }\n    this._lastCleanup = now;\n  }\n  get size() {\n    this.cleanup();\n    return this._map.size;\n  }\n  forEach(callback) {\n    this.cleanup();\n    for (const [key, entry] of this._map.entries()) {\n      if (entry.expiresAt >= Date.now()) {\n        callback(entry.value, key, this.asValueMap());\n      }\n    }\n  }\n  map(callback) {\n    this.cleanup();\n    const result = [];\n    const valueMap = this.asValueMap();\n    for (const [key, value] of valueMap.entries()) {\n      result.push(callback(value, key, valueMap));\n    }\n    return result;\n  }\n  asValueMap() {\n    const result = new Map();\n    for (const [key, entry] of this._map.entries()) {\n      if (entry.expiresAt >= Date.now()) {\n        result.set(key, entry.value);\n      }\n    }\n    return result;\n  }\n}var lib = {};var parser = {};var grammar = {exports: {}};var hasRequiredGrammar;\nfunction requireGrammar() {\n  if (hasRequiredGrammar) return grammar.exports;\n  hasRequiredGrammar = 1;\n  var grammar$1 = grammar.exports = {\n    v: [{\n      name: 'version',\n      reg: /^(\\d*)$/\n    }],\n    o: [{\n      // o=- 20518 0 IN IP4 203.0.113.1\n      // NB: sessionId will be a String in most cases because it is huge\n      name: 'origin',\n      reg: /^(\\S*) (\\d*) (\\d*) (\\S*) IP(\\d) (\\S*)/,\n      names: ['username', 'sessionId', 'sessionVersion', 'netType', 'ipVer', 'address'],\n      format: '%s %s %d %s IP%d %s'\n    }],\n    // default parsing of these only (though some of these feel outdated)\n    s: [{\n      name: 'name'\n    }],\n    i: [{\n      name: 'description'\n    }],\n    u: [{\n      name: 'uri'\n    }],\n    e: [{\n      name: 'email'\n    }],\n    p: [{\n      name: 'phone'\n    }],\n    z: [{\n      name: 'timezones'\n    }],\n    // TODO: this one can actually be parsed properly...\n    r: [{\n      name: 'repeats'\n    }],\n    // TODO: this one can also be parsed properly\n    // k: [{}], // outdated thing ignored\n    t: [{\n      // t=0 0\n      name: 'timing',\n      reg: /^(\\d*) (\\d*)/,\n      names: ['start', 'stop'],\n      format: '%d %d'\n    }],\n    c: [{\n      // c=IN IP4 10.47.197.26\n      name: 'connection',\n      reg: /^IN IP(\\d) (\\S*)/,\n      names: ['version', 'ip'],\n      format: 'IN IP%d %s'\n    }],\n    b: [{\n      // b=AS:4000\n      push: 'bandwidth',\n      reg: /^(TIAS|AS|CT|RR|RS):(\\d*)/,\n      names: ['type', 'limit'],\n      format: '%s:%s'\n    }],\n    m: [{\n      // m=video 51744 RTP/AVP 126 97 98 34 31\n      // NB: special - pushes to session\n      // TODO: rtp/fmtp should be filtered by the payloads found here?\n      reg: /^(\\w*) (\\d*) ([\\w/]*)(?: (.*))?/,\n      names: ['type', 'port', 'protocol', 'payloads'],\n      format: '%s %d %s %s'\n    }],\n    a: [{\n      // a=rtpmap:110 opus/48000/2\n      push: 'rtp',\n      reg: /^rtpmap:(\\d*) ([\\w\\-.]*)(?:\\s*\\/(\\d*)(?:\\s*\\/(\\S*))?)?/,\n      names: ['payload', 'codec', 'rate', 'encoding'],\n      format: function (o) {\n        return o.encoding ? 'rtpmap:%d %s/%s/%s' : o.rate ? 'rtpmap:%d %s/%s' : 'rtpmap:%d %s';\n      }\n    }, {\n      // a=fmtp:108 profile-level-id=24;object=23;bitrate=64000\n      // a=fmtp:111 minptime=10; useinbandfec=1\n      push: 'fmtp',\n      reg: /^fmtp:(\\d*) ([\\S| ]*)/,\n      names: ['payload', 'config'],\n      format: 'fmtp:%d %s'\n    }, {\n      // a=control:streamid=0\n      name: 'control',\n      reg: /^control:(.*)/,\n      format: 'control:%s'\n    }, {\n      // a=rtcp:65179 IN IP4 193.84.77.194\n      name: 'rtcp',\n      reg: /^rtcp:(\\d*)(?: (\\S*) IP(\\d) (\\S*))?/,\n      names: ['port', 'netType', 'ipVer', 'address'],\n      format: function (o) {\n        return o.address != null ? 'rtcp:%d %s IP%d %s' : 'rtcp:%d';\n      }\n    }, {\n      // a=rtcp-fb:98 trr-int 100\n      push: 'rtcpFbTrrInt',\n      reg: /^rtcp-fb:(\\*|\\d*) trr-int (\\d*)/,\n      names: ['payload', 'value'],\n      format: 'rtcp-fb:%s trr-int %d'\n    }, {\n      // a=rtcp-fb:98 nack rpsi\n      push: 'rtcpFb',\n      reg: /^rtcp-fb:(\\*|\\d*) ([\\w-_]*)(?: ([\\w-_]*))?/,\n      names: ['payload', 'type', 'subtype'],\n      format: function (o) {\n        return o.subtype != null ? 'rtcp-fb:%s %s %s' : 'rtcp-fb:%s %s';\n      }\n    }, {\n      // a=extmap:2 urn:ietf:params:rtp-hdrext:toffset\n      // a=extmap:1/recvonly URI-gps-string\n      // a=extmap:3 urn:ietf:params:rtp-hdrext:encrypt urn:ietf:params:rtp-hdrext:smpte-tc 25@600/24\n      push: 'ext',\n      reg: /^extmap:(\\d+)(?:\\/(\\w+))?(?: (urn:ietf:params:rtp-hdrext:encrypt))? (\\S*)(?: (\\S*))?/,\n      names: ['value', 'direction', 'encrypt-uri', 'uri', 'config'],\n      format: function (o) {\n        return 'extmap:%d' + (o.direction ? '/%s' : '%v') + (o['encrypt-uri'] ? ' %s' : '%v') + ' %s' + (o.config ? ' %s' : '');\n      }\n    }, {\n      // a=extmap-allow-mixed\n      name: 'extmapAllowMixed',\n      reg: /^(extmap-allow-mixed)/\n    }, {\n      // a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:PS1uQCVeeCFCanVmcjkpPywjNWhcYD0mXXtxaVBR|2^20|1:32\n      push: 'crypto',\n      reg: /^crypto:(\\d*) ([\\w_]*) (\\S*)(?: (\\S*))?/,\n      names: ['id', 'suite', 'config', 'sessionConfig'],\n      format: function (o) {\n        return o.sessionConfig != null ? 'crypto:%d %s %s %s' : 'crypto:%d %s %s';\n      }\n    }, {\n      // a=setup:actpass\n      name: 'setup',\n      reg: /^setup:(\\w*)/,\n      format: 'setup:%s'\n    }, {\n      // a=connection:new\n      name: 'connectionType',\n      reg: /^connection:(new|existing)/,\n      format: 'connection:%s'\n    }, {\n      // a=mid:1\n      name: 'mid',\n      reg: /^mid:([^\\s]*)/,\n      format: 'mid:%s'\n    }, {\n      // a=msid:0c8b064d-d807-43b4-b434-f92a889d8587 98178685-d409-46e0-8e16-7ef0db0db64a\n      name: 'msid',\n      reg: /^msid:(.*)/,\n      format: 'msid:%s'\n    }, {\n      // a=ptime:20\n      name: 'ptime',\n      reg: /^ptime:(\\d*(?:\\.\\d*)*)/,\n      format: 'ptime:%d'\n    }, {\n      // a=maxptime:60\n      name: 'maxptime',\n      reg: /^maxptime:(\\d*(?:\\.\\d*)*)/,\n      format: 'maxptime:%d'\n    }, {\n      // a=sendrecv\n      name: 'direction',\n      reg: /^(sendrecv|recvonly|sendonly|inactive)/\n    }, {\n      // a=ice-lite\n      name: 'icelite',\n      reg: /^(ice-lite)/\n    }, {\n      // a=ice-ufrag:F7gI\n      name: 'iceUfrag',\n      reg: /^ice-ufrag:(\\S*)/,\n      format: 'ice-ufrag:%s'\n    }, {\n      // a=ice-pwd:x9cml/YzichV2+XlhiMu8g\n      name: 'icePwd',\n      reg: /^ice-pwd:(\\S*)/,\n      format: 'ice-pwd:%s'\n    }, {\n      // a=fingerprint:SHA-1 00:11:22:33:44:55:66:77:88:99:AA:BB:CC:DD:EE:FF:00:11:22:33\n      name: 'fingerprint',\n      reg: /^fingerprint:(\\S*) (\\S*)/,\n      names: ['type', 'hash'],\n      format: 'fingerprint:%s %s'\n    }, {\n      // a=candidate:0 1 UDP 2113667327 203.0.113.1 54400 typ host\n      // a=candidate:1162875081 1 udp 2113937151 192.168.34.75 60017 typ host generation 0 network-id 3 network-cost 10\n      // a=candidate:3289912957 2 udp 1845501695 193.84.77.194 60017 typ srflx raddr 192.168.34.75 rport 60017 generation 0 network-id 3 network-cost 10\n      // a=candidate:229815620 1 tcp 1518280447 192.168.150.19 60017 typ host tcptype active generation 0 network-id 3 network-cost 10\n      // a=candidate:3289912957 2 tcp 1845501695 193.84.77.194 60017 typ srflx raddr 192.168.34.75 rport 60017 tcptype passive generation 0 network-id 3 network-cost 10\n      push: 'candidates',\n      reg: /^candidate:(\\S*) (\\d*) (\\S*) (\\d*) (\\S*) (\\d*) typ (\\S*)(?: raddr (\\S*) rport (\\d*))?(?: tcptype (\\S*))?(?: generation (\\d*))?(?: network-id (\\d*))?(?: network-cost (\\d*))?/,\n      names: ['foundation', 'component', 'transport', 'priority', 'ip', 'port', 'type', 'raddr', 'rport', 'tcptype', 'generation', 'network-id', 'network-cost'],\n      format: function (o) {\n        var str = 'candidate:%s %d %s %d %s %d typ %s';\n        str += o.raddr != null ? ' raddr %s rport %d' : '%v%v';\n\n        // NB: candidate has three optional chunks, so %void middles one if it's missing\n        str += o.tcptype != null ? ' tcptype %s' : '%v';\n        if (o.generation != null) {\n          str += ' generation %d';\n        }\n        str += o['network-id'] != null ? ' network-id %d' : '%v';\n        str += o['network-cost'] != null ? ' network-cost %d' : '%v';\n        return str;\n      }\n    }, {\n      // a=end-of-candidates (keep after the candidates line for readability)\n      name: 'endOfCandidates',\n      reg: /^(end-of-candidates)/\n    }, {\n      // a=remote-candidates:1 203.0.113.1 54400 2 203.0.113.1 54401 ...\n      name: 'remoteCandidates',\n      reg: /^remote-candidates:(.*)/,\n      format: 'remote-candidates:%s'\n    }, {\n      // a=ice-options:google-ice\n      name: 'iceOptions',\n      reg: /^ice-options:(\\S*)/,\n      format: 'ice-options:%s'\n    }, {\n      // a=ssrc:2566107569 cname:t9YU8M1UxTF8Y1A1\n      push: 'ssrcs',\n      reg: /^ssrc:(\\d*) ([\\w_-]*)(?::(.*))?/,\n      names: ['id', 'attribute', 'value'],\n      format: function (o) {\n        var str = 'ssrc:%d';\n        if (o.attribute != null) {\n          str += ' %s';\n          if (o.value != null) {\n            str += ':%s';\n          }\n        }\n        return str;\n      }\n    }, {\n      // a=ssrc-group:FEC 1 2\n      // a=ssrc-group:FEC-FR 3004364195 1080772241\n      push: 'ssrcGroups',\n      // token-char = %x21 / %x23-27 / %x2A-2B / %x2D-2E / %x30-39 / %x41-5A / %x5E-7E\n      reg: /^ssrc-group:([\\x21\\x23\\x24\\x25\\x26\\x27\\x2A\\x2B\\x2D\\x2E\\w]*) (.*)/,\n      names: ['semantics', 'ssrcs'],\n      format: 'ssrc-group:%s %s'\n    }, {\n      // a=msid-semantic: WMS Jvlam5X3SX1OP6pn20zWogvaKJz5Hjf9OnlV\n      name: 'msidSemantic',\n      reg: /^msid-semantic:\\s?(\\w*) (\\S*)/,\n      names: ['semantic', 'token'],\n      format: 'msid-semantic: %s %s' // space after ':' is not accidental\n    }, {\n      // a=group:BUNDLE audio video\n      push: 'groups',\n      reg: /^group:(\\w*) (.*)/,\n      names: ['type', 'mids'],\n      format: 'group:%s %s'\n    }, {\n      // a=rtcp-mux\n      name: 'rtcpMux',\n      reg: /^(rtcp-mux)/\n    }, {\n      // a=rtcp-rsize\n      name: 'rtcpRsize',\n      reg: /^(rtcp-rsize)/\n    }, {\n      // a=sctpmap:5000 webrtc-datachannel 1024\n      name: 'sctpmap',\n      reg: /^sctpmap:([\\w_/]*) (\\S*)(?: (\\S*))?/,\n      names: ['sctpmapNumber', 'app', 'maxMessageSize'],\n      format: function (o) {\n        return o.maxMessageSize != null ? 'sctpmap:%s %s %s' : 'sctpmap:%s %s';\n      }\n    }, {\n      // a=x-google-flag:conference\n      name: 'xGoogleFlag',\n      reg: /^x-google-flag:([^\\s]*)/,\n      format: 'x-google-flag:%s'\n    }, {\n      // a=rid:1 send max-width=1280;max-height=720;max-fps=30;depend=0\n      push: 'rids',\n      reg: /^rid:([\\d\\w]+) (\\w+)(?: ([\\S| ]*))?/,\n      names: ['id', 'direction', 'params'],\n      format: function (o) {\n        return o.params ? 'rid:%s %s %s' : 'rid:%s %s';\n      }\n    }, {\n      // a=imageattr:97 send [x=800,y=640,sar=1.1,q=0.6] [x=480,y=320] recv [x=330,y=250]\n      // a=imageattr:* send [x=800,y=640] recv *\n      // a=imageattr:100 recv [x=320,y=240]\n      push: 'imageattrs',\n      reg: new RegExp(\n      // a=imageattr:97\n      '^imageattr:(\\\\d+|\\\\*)' +\n      // send [x=800,y=640,sar=1.1,q=0.6] [x=480,y=320]\n      '[\\\\s\\\\t]+(send|recv)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*)' +\n      // recv [x=330,y=250]\n      '(?:[\\\\s\\\\t]+(recv|send)[\\\\s\\\\t]+(\\\\*|\\\\[\\\\S+\\\\](?:[\\\\s\\\\t]+\\\\[\\\\S+\\\\])*))?'),\n      names: ['pt', 'dir1', 'attrs1', 'dir2', 'attrs2'],\n      format: function (o) {\n        return 'imageattr:%s %s %s' + (o.dir2 ? ' %s %s' : '');\n      }\n    }, {\n      // a=simulcast:send 1,2,3;~4,~5 recv 6;~7,~8\n      // a=simulcast:recv 1;4,5 send 6;7\n      name: 'simulcast',\n      reg: new RegExp(\n      // a=simulcast:\n      '^simulcast:' +\n      // send 1,2,3;~4,~5\n      '(send|recv) ([a-zA-Z0-9\\\\-_~;,]+)' +\n      // space + recv 6;~7,~8\n      '(?:\\\\s?(send|recv) ([a-zA-Z0-9\\\\-_~;,]+))?' +\n      // end\n      '$'),\n      names: ['dir1', 'list1', 'dir2', 'list2'],\n      format: function (o) {\n        return 'simulcast:%s %s' + (o.dir2 ? ' %s %s' : '');\n      }\n    }, {\n      // old simulcast draft 03 (implemented by Firefox)\n      //   https://tools.ietf.org/html/draft-ietf-mmusic-sdp-simulcast-03\n      // a=simulcast: recv pt=97;98 send pt=97\n      // a=simulcast: send rid=5;6;7 paused=6,7\n      name: 'simulcast_03',\n      reg: /^simulcast:[\\s\\t]+([\\S+\\s\\t]+)$/,\n      names: ['value'],\n      format: 'simulcast: %s'\n    }, {\n      // a=framerate:25\n      // a=framerate:29.97\n      name: 'framerate',\n      reg: /^framerate:(\\d+(?:$|\\.\\d+))/,\n      format: 'framerate:%s'\n    }, {\n      // RFC4570\n      // a=source-filter: incl IN IP4 239.5.2.31 10.1.15.5\n      name: 'sourceFilter',\n      reg: /^source-filter: *(excl|incl) (\\S*) (IP4|IP6|\\*) (\\S*) (.*)/,\n      names: ['filterMode', 'netType', 'addressTypes', 'destAddress', 'srcList'],\n      format: 'source-filter: %s %s %s %s %s'\n    }, {\n      // a=bundle-only\n      name: 'bundleOnly',\n      reg: /^(bundle-only)/\n    }, {\n      // a=label:1\n      name: 'label',\n      reg: /^label:(.+)/,\n      format: 'label:%s'\n    }, {\n      // RFC version 26 for SCTP over DTLS\n      // https://tools.ietf.org/html/draft-ietf-mmusic-sctp-sdp-26#section-5\n      name: 'sctpPort',\n      reg: /^sctp-port:(\\d+)$/,\n      format: 'sctp-port:%s'\n    }, {\n      // RFC version 26 for SCTP over DTLS\n      // https://tools.ietf.org/html/draft-ietf-mmusic-sctp-sdp-26#section-6\n      name: 'maxMessageSize',\n      reg: /^max-message-size:(\\d+)$/,\n      format: 'max-message-size:%s'\n    }, {\n      // RFC7273\n      // a=ts-refclk:ptp=IEEE1588-2008:39-A7-94-FF-FE-07-CB-D0:37\n      push: 'tsRefClocks',\n      reg: /^ts-refclk:([^\\s=]*)(?:=(\\S*))?/,\n      names: ['clksrc', 'clksrcExt'],\n      format: function (o) {\n        return 'ts-refclk:%s' + (o.clksrcExt != null ? '=%s' : '');\n      }\n    }, {\n      // RFC7273\n      // a=mediaclk:direct=963214424\n      name: 'mediaClk',\n      reg: /^mediaclk:(?:id=(\\S*))? *([^\\s=]*)(?:=(\\S*))?(?: *rate=(\\d+)\\/(\\d+))?/,\n      names: ['id', 'mediaClockName', 'mediaClockValue', 'rateNumerator', 'rateDenominator'],\n      format: function (o) {\n        var str = 'mediaclk:';\n        str += o.id != null ? 'id=%s %s' : '%v%s';\n        str += o.mediaClockValue != null ? '=%s' : '';\n        str += o.rateNumerator != null ? ' rate=%s' : '';\n        str += o.rateDenominator != null ? '/%s' : '';\n        return str;\n      }\n    }, {\n      // a=keywds:keywords\n      name: 'keywords',\n      reg: /^keywds:(.+)$/,\n      format: 'keywds:%s'\n    }, {\n      // a=content:main\n      name: 'content',\n      reg: /^content:(.+)/,\n      format: 'content:%s'\n    },\n    // BFCP https://tools.ietf.org/html/rfc4583\n    {\n      // a=floorctrl:c-s\n      name: 'bfcpFloorCtrl',\n      reg: /^floorctrl:(c-only|s-only|c-s)/,\n      format: 'floorctrl:%s'\n    }, {\n      // a=confid:1\n      name: 'bfcpConfId',\n      reg: /^confid:(\\d+)/,\n      format: 'confid:%s'\n    }, {\n      // a=userid:1\n      name: 'bfcpUserId',\n      reg: /^userid:(\\d+)/,\n      format: 'userid:%s'\n    }, {\n      // a=floorid:1\n      name: 'bfcpFloorId',\n      reg: /^floorid:(.+) (?:m-stream|mstrm):(.+)/,\n      names: ['id', 'mStream'],\n      format: 'floorid:%s mstrm:%s'\n    }, {\n      // any a= that we don't understand is kept verbatim on media.invalid\n      push: 'invalid',\n      names: ['value']\n    }]\n  };\n\n  // set sensible defaults to avoid polluting the grammar with boring details\n  Object.keys(grammar$1).forEach(function (key) {\n    var objs = grammar$1[key];\n    objs.forEach(function (obj) {\n      if (!obj.reg) {\n        obj.reg = /(.*)/;\n      }\n      if (!obj.format) {\n        obj.format = '%s';\n      }\n    });\n  });\n  return grammar.exports;\n}var hasRequiredParser;\nfunction requireParser() {\n  if (hasRequiredParser) return parser;\n  hasRequiredParser = 1;\n  (function (exports$1) {\n    var toIntIfInt = function (v) {\n      return String(Number(v)) === v ? Number(v) : v;\n    };\n    var attachProperties = function (match, location, names, rawName) {\n      if (rawName && !names) {\n        location[rawName] = toIntIfInt(match[1]);\n      } else {\n        for (var i = 0; i < names.length; i += 1) {\n          if (match[i + 1] != null) {\n            location[names[i]] = toIntIfInt(match[i + 1]);\n          }\n        }\n      }\n    };\n    var parseReg = function (obj, location, content) {\n      var needsBlank = obj.name && obj.names;\n      if (obj.push && !location[obj.push]) {\n        location[obj.push] = [];\n      } else if (needsBlank && !location[obj.name]) {\n        location[obj.name] = {};\n      }\n      var keyLocation = obj.push ? {} :\n      // blank object that will be pushed\n      needsBlank ? location[obj.name] : location; // otherwise, named location or root\n\n      attachProperties(content.match(obj.reg), keyLocation, obj.names, obj.name);\n      if (obj.push) {\n        location[obj.push].push(keyLocation);\n      }\n    };\n    var grammar = requireGrammar();\n    var validLine = RegExp.prototype.test.bind(/^([a-z])=(.*)/);\n    exports$1.parse = function (sdp) {\n      var session = {},\n        media = [],\n        location = session; // points at where properties go under (one of the above)\n\n      // parse lines we understand\n      sdp.split(/(\\r\\n|\\r|\\n)/).filter(validLine).forEach(function (l) {\n        var type = l[0];\n        var content = l.slice(2);\n        if (type === 'm') {\n          media.push({\n            rtp: [],\n            fmtp: []\n          });\n          location = media[media.length - 1]; // point at latest media line\n        }\n        for (var j = 0; j < (grammar[type] || []).length; j += 1) {\n          var obj = grammar[type][j];\n          if (obj.reg.test(content)) {\n            return parseReg(obj, location, content);\n          }\n        }\n      });\n      session.media = media; // link it up\n      return session;\n    };\n    var paramReducer = function (acc, expr) {\n      var s = expr.split(/=(.+)/, 2);\n      if (s.length === 2) {\n        acc[s[0]] = toIntIfInt(s[1]);\n      } else if (s.length === 1 && expr.length > 1) {\n        acc[s[0]] = undefined;\n      }\n      return acc;\n    };\n    exports$1.parseParams = function (str) {\n      return str.split(/;\\s?/).reduce(paramReducer, {});\n    };\n\n    // For backward compatibility - alias will be removed in 3.0.0\n    exports$1.parseFmtpConfig = exports$1.parseParams;\n    exports$1.parsePayloads = function (str) {\n      return str.toString().split(' ').map(Number);\n    };\n    exports$1.parseRemoteCandidates = function (str) {\n      var candidates = [];\n      var parts = str.split(' ').map(toIntIfInt);\n      for (var i = 0; i < parts.length; i += 3) {\n        candidates.push({\n          component: parts[i],\n          ip: parts[i + 1],\n          port: parts[i + 2]\n        });\n      }\n      return candidates;\n    };\n    exports$1.parseImageAttributes = function (str) {\n      return str.split(' ').map(function (item) {\n        return item.substring(1, item.length - 1).split(',').reduce(paramReducer, {});\n      });\n    };\n    exports$1.parseSimulcastStreamList = function (str) {\n      return str.split(';').map(function (stream) {\n        return stream.split(',').map(function (format) {\n          var scid,\n            paused = false;\n          if (format[0] !== '~') {\n            scid = toIntIfInt(format);\n          } else {\n            scid = toIntIfInt(format.substring(1, format.length));\n            paused = true;\n          }\n          return {\n            scid: scid,\n            paused: paused\n          };\n        });\n      });\n    };\n  })(parser);\n  return parser;\n}var writer;\nvar hasRequiredWriter;\nfunction requireWriter() {\n  if (hasRequiredWriter) return writer;\n  hasRequiredWriter = 1;\n  var grammar = requireGrammar();\n\n  // customized util.format - discards excess arguments and can void middle ones\n  var formatRegExp = /%[sdv%]/g;\n  var format = function (formatStr) {\n    var i = 1;\n    var args = arguments;\n    var len = args.length;\n    return formatStr.replace(formatRegExp, function (x) {\n      if (i >= len) {\n        return x; // missing argument\n      }\n      var arg = args[i];\n      i += 1;\n      switch (x) {\n        case '%%':\n          return '%';\n        case '%s':\n          return String(arg);\n        case '%d':\n          return Number(arg);\n        case '%v':\n          return '';\n      }\n    });\n    // NB: we discard excess arguments - they are typically undefined from makeLine\n  };\n  var makeLine = function (type, obj, location) {\n    var str = obj.format instanceof Function ? obj.format(obj.push ? location : location[obj.name]) : obj.format;\n    var args = [type + '=' + str];\n    if (obj.names) {\n      for (var i = 0; i < obj.names.length; i += 1) {\n        var n = obj.names[i];\n        if (obj.name) {\n          args.push(location[obj.name][n]);\n        } else {\n          // for mLine and push attributes\n          args.push(location[obj.names[i]]);\n        }\n      }\n    } else {\n      args.push(location[obj.name]);\n    }\n    return format.apply(null, args);\n  };\n\n  // RFC specified order\n  // TODO: extend this with all the rest\n  var defaultOuterOrder = ['v', 'o', 's', 'i', 'u', 'e', 'p', 'c', 'b', 't', 'r', 'z', 'a'];\n  var defaultInnerOrder = ['i', 'c', 'b', 'a'];\n  writer = function (session, opts) {\n    opts = opts || {};\n    // ensure certain properties exist\n    if (session.version == null) {\n      session.version = 0; // 'v=0' must be there (only defined version atm)\n    }\n    if (session.name == null) {\n      session.name = ' '; // 's= ' must be there if no meaningful name set\n    }\n    session.media.forEach(function (mLine) {\n      if (mLine.payloads == null) {\n        mLine.payloads = '';\n      }\n    });\n    var outerOrder = opts.outerOrder || defaultOuterOrder;\n    var innerOrder = opts.innerOrder || defaultInnerOrder;\n    var sdp = [];\n\n    // loop through outerOrder for matching properties on session\n    outerOrder.forEach(function (type) {\n      grammar[type].forEach(function (obj) {\n        if (obj.name in session && session[obj.name] != null) {\n          sdp.push(makeLine(type, obj, session));\n        } else if (obj.push in session && session[obj.push] != null) {\n          session[obj.push].forEach(function (el) {\n            sdp.push(makeLine(type, obj, el));\n          });\n        }\n      });\n    });\n\n    // then for each media line, follow the innerOrder\n    session.media.forEach(function (mLine) {\n      sdp.push(makeLine('m', grammar.m[0], mLine));\n      innerOrder.forEach(function (type) {\n        grammar[type].forEach(function (obj) {\n          if (obj.name in mLine && mLine[obj.name] != null) {\n            sdp.push(makeLine(type, obj, mLine));\n          } else if (obj.push in mLine && mLine[obj.push] != null) {\n            mLine[obj.push].forEach(function (el) {\n              sdp.push(makeLine(type, obj, el));\n            });\n          }\n        });\n      });\n    });\n    return sdp.join('\\r\\n') + '\\r\\n';\n  };\n  return writer;\n}var hasRequiredLib;\nfunction requireLib() {\n  if (hasRequiredLib) return lib;\n  hasRequiredLib = 1;\n  var parser = requireParser();\n  var writer = requireWriter();\n  var grammar = requireGrammar();\n  lib.grammar = grammar;\n  lib.write = writer;\n  lib.parse = parser.parse;\n  lib.parseParams = parser.parseParams;\n  lib.parseFmtpConfig = parser.parseFmtpConfig; // Alias of parseParams().\n  lib.parsePayloads = parser.parsePayloads;\n  lib.parseRemoteCandidates = parser.parseRemoteCandidates;\n  lib.parseImageAttributes = parser.parseImageAttributes;\n  lib.parseSimulcastStreamList = parser.parseSimulcastStreamList;\n  return lib;\n}var libExports = requireLib();function r(r, e, n) {\n  var i, t, o;\n  void 0 === e && (e = 50), void 0 === n && (n = {});\n  var a = null != (i = n.isImmediate) && i,\n    u = null != (t = n.callback) && t,\n    c = n.maxWait,\n    v = Date.now(),\n    l = [];\n  function f() {\n    if (void 0 !== c) {\n      var r = Date.now() - v;\n      if (r + e >= c) return c - r;\n    }\n    return e;\n  }\n  var d = function () {\n    var e = [].slice.call(arguments),\n      n = this;\n    return new Promise(function (i, t) {\n      var c = a && void 0 === o;\n      if (void 0 !== o && clearTimeout(o), o = setTimeout(function () {\n        if (o = void 0, v = Date.now(), !a) {\n          var i = r.apply(n, e);\n          u && u(i), l.forEach(function (r) {\n            return (0, r.resolve)(i);\n          }), l = [];\n        }\n      }, f()), c) {\n        var d = r.apply(n, e);\n        return u && u(d), i(d);\n      }\n      l.push({\n        resolve: i,\n        reject: t\n      });\n    });\n  };\n  return d.cancel = function (r) {\n    void 0 !== o && clearTimeout(o), l.forEach(function (e) {\n      return (0, e.reject)(r);\n    }), l = [];\n  }, d;\n}/* The svc codec (av1/vp9) would use a very low bitrate at the begining and\nincrease slowly by the bandwidth estimator until it reach the target bitrate. The\nprocess commonly cost more than 10 seconds cause subscriber will get blur video at\nthe first few seconds. So we use a 70% of target bitrate here as the start bitrate to\neliminate this issue.\n*/\nconst startBitrateForSVC = 0.7;\nconst debounceInterval = 20;\nconst PCEvents = {\n  NegotiationStarted: 'negotiationStarted',\n  NegotiationComplete: 'negotiationComplete',\n  RTPVideoPayloadTypes: 'rtpVideoPayloadTypes'\n};\n/** @internal */\nclass PCTransport extends eventsExports.EventEmitter {\n  get pc() {\n    if (!this._pc) {\n      this._pc = this.createPC();\n    }\n    return this._pc;\n  }\n  constructor(config) {\n    let loggerOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    var _a;\n    super();\n    this.log = livekitLogger;\n    this.ddExtID = 0;\n    this.latestOfferId = 0;\n    this.pendingCandidates = [];\n    this.restartingIce = false;\n    this.renegotiate = false;\n    this.trackBitrates = [];\n    this.remoteStereoMids = [];\n    this.remoteNackMids = [];\n    // debounced negotiate interface\n    this.negotiate = r(onError => __awaiter(this, void 0, void 0, function* () {\n      this.emit(PCEvents.NegotiationStarted);\n      try {\n        yield this.createAndSendOffer();\n      } catch (e) {\n        if (onError) {\n          onError(e);\n        } else {\n          throw e;\n        }\n      }\n    }), debounceInterval);\n    this.close = () => {\n      if (!this._pc) {\n        return;\n      }\n      this._pc.close();\n      this._pc.onconnectionstatechange = null;\n      this._pc.oniceconnectionstatechange = null;\n      this._pc.onicegatheringstatechange = null;\n      this._pc.ondatachannel = null;\n      this._pc.onnegotiationneeded = null;\n      this._pc.onsignalingstatechange = null;\n      this._pc.onicecandidate = null;\n      this._pc.ondatachannel = null;\n      this._pc.ontrack = null;\n      this._pc.onconnectionstatechange = null;\n      this._pc.oniceconnectionstatechange = null;\n      this._pc = null;\n    };\n    this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.PCTransport);\n    this.loggerOptions = loggerOptions;\n    this.config = config;\n    this._pc = this.createPC();\n    this.offerLock = new _();\n  }\n  createPC() {\n    const pc = new RTCPeerConnection(this.config);\n    pc.onicecandidate = ev => {\n      var _a;\n      if (!ev.candidate) return;\n      (_a = this.onIceCandidate) === null || _a === void 0 ? void 0 : _a.call(this, ev.candidate);\n    };\n    pc.onicecandidateerror = ev => {\n      var _a;\n      (_a = this.onIceCandidateError) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n    };\n    pc.oniceconnectionstatechange = () => {\n      var _a;\n      (_a = this.onIceConnectionStateChange) === null || _a === void 0 ? void 0 : _a.call(this, pc.iceConnectionState);\n    };\n    pc.onsignalingstatechange = () => {\n      var _a;\n      (_a = this.onSignalingStatechange) === null || _a === void 0 ? void 0 : _a.call(this, pc.signalingState);\n    };\n    pc.onconnectionstatechange = () => {\n      var _a;\n      (_a = this.onConnectionStateChange) === null || _a === void 0 ? void 0 : _a.call(this, pc.connectionState);\n    };\n    pc.ondatachannel = ev => {\n      var _a;\n      (_a = this.onDataChannel) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n    };\n    pc.ontrack = ev => {\n      var _a;\n      (_a = this.onTrack) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n    };\n    return pc;\n  }\n  get logContext() {\n    var _a, _b;\n    return Object.assign({}, (_b = (_a = this.loggerOptions).loggerContextCb) === null || _b === void 0 ? void 0 : _b.call(_a));\n  }\n  get isICEConnected() {\n    return this._pc !== null && (this.pc.iceConnectionState === 'connected' || this.pc.iceConnectionState === 'completed');\n  }\n  addIceCandidate(candidate) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.pc.remoteDescription && !this.restartingIce) {\n        return this.pc.addIceCandidate(candidate);\n      }\n      this.pendingCandidates.push(candidate);\n    });\n  }\n  setRemoteDescription(sd, offerId) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (sd.type === 'answer' && this.latestOfferId > 0 && offerId > 0 && offerId !== this.latestOfferId) {\n        this.log.warn('ignoring answer for old offer', Object.assign(Object.assign({}, this.logContext), {\n          offerId,\n          latestOfferId: this.latestOfferId\n        }));\n        return false;\n      }\n      let mungedSDP = undefined;\n      if (sd.type === 'offer') {\n        let {\n          stereoMids,\n          nackMids\n        } = extractStereoAndNackAudioFromOffer(sd);\n        this.remoteStereoMids = stereoMids;\n        this.remoteNackMids = nackMids;\n      } else if (sd.type === 'answer') {\n        const sdpParsed = libExports.parse((_a = sd.sdp) !== null && _a !== void 0 ? _a : '');\n        sdpParsed.media.forEach(media => {\n          const mid = getMidString(media.mid);\n          if (media.type === 'audio') {\n            // munge sdp for opus bitrate settings\n            this.trackBitrates.some(trackbr => {\n              if (!trackbr.transceiver || mid != trackbr.transceiver.mid) {\n                return false;\n              }\n              let codecPayload = 0;\n              media.rtp.some(rtp => {\n                if (rtp.codec.toUpperCase() === trackbr.codec.toUpperCase()) {\n                  codecPayload = rtp.payload;\n                  return true;\n                }\n                return false;\n              });\n              if (codecPayload === 0) {\n                return true;\n              }\n              let fmtpFound = false;\n              for (const fmtp of media.fmtp) {\n                if (fmtp.payload === codecPayload) {\n                  fmtp.config = fmtp.config.split(';').filter(attr => !attr.includes('maxaveragebitrate')).join(';');\n                  if (trackbr.maxbr > 0) {\n                    fmtp.config += \";maxaveragebitrate=\".concat(trackbr.maxbr * 1000);\n                  }\n                  fmtpFound = true;\n                  break;\n                }\n              }\n              if (!fmtpFound) {\n                if (trackbr.maxbr > 0) {\n                  media.fmtp.push({\n                    payload: codecPayload,\n                    config: \"maxaveragebitrate=\".concat(trackbr.maxbr * 1000)\n                  });\n                }\n              }\n              return true;\n            });\n          }\n        });\n        mungedSDP = libExports.write(sdpParsed);\n      }\n      yield this.setMungedSDP(sd, mungedSDP, true);\n      this.pendingCandidates.forEach(candidate => {\n        this.pc.addIceCandidate(candidate);\n      });\n      this.pendingCandidates = [];\n      this.restartingIce = false;\n      if (this.renegotiate) {\n        this.renegotiate = false;\n        yield this.createAndSendOffer();\n      } else if (sd.type === 'answer') {\n        this.emit(PCEvents.NegotiationComplete);\n        if (sd.sdp) {\n          const sdpParsed = libExports.parse(sd.sdp);\n          sdpParsed.media.forEach(media => {\n            if (media.type === 'video') {\n              this.emit(PCEvents.RTPVideoPayloadTypes, media.rtp);\n            }\n          });\n        }\n      }\n      return true;\n    });\n  }\n  createAndSendOffer(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const unlock = yield this.offerLock.lock();\n      try {\n        if (this.onOffer === undefined) {\n          return;\n        }\n        if (options === null || options === void 0 ? void 0 : options.iceRestart) {\n          this.log.debug('restarting ICE', this.logContext);\n          this.restartingIce = true;\n        }\n        if (this._pc && this._pc.signalingState === 'have-local-offer') {\n          // we're waiting for the peer to accept our offer, so we'll just wait\n          // the only exception to this is when ICE restart is needed\n          const currentSD = this._pc.remoteDescription;\n          if ((options === null || options === void 0 ? void 0 : options.iceRestart) && currentSD) {\n            // TODO: handle when ICE restart is needed but we don't have a remote description\n            // the best thing to do is to recreate the peerconnection\n            yield this._pc.setRemoteDescription(currentSD);\n          } else {\n            this.renegotiate = true;\n            return;\n          }\n        } else if (!this._pc || this._pc.signalingState === 'closed') {\n          this.log.warn('could not createOffer with closed peer connection', this.logContext);\n          return;\n        }\n        // actually negotiate\n        this.log.debug('starting to negotiate', this.logContext);\n        // increase the offer id at the start to ensure the offer is always > 0 so that we can use 0 as a default value for legacy behavior\n        const offerId = this.latestOfferId + 1;\n        this.latestOfferId = offerId;\n        const offer = yield this.pc.createOffer(options);\n        this.log.debug('original offer', Object.assign({\n          sdp: offer.sdp\n        }, this.logContext));\n        const sdpParsed = libExports.parse((_a = offer.sdp) !== null && _a !== void 0 ? _a : '');\n        sdpParsed.media.forEach(media => {\n          ensureIPAddrMatchVersion(media);\n          if (media.type === 'audio') {\n            ensureAudioNackAndStereo(media, ['all'], []);\n          } else if (media.type === 'video') {\n            this.trackBitrates.some(trackbr => {\n              if (!media.msid || !trackbr.cid || !media.msid.includes(trackbr.cid)) {\n                return false;\n              }\n              let codecPayload = 0;\n              media.rtp.some(rtp => {\n                if (rtp.codec.toUpperCase() === trackbr.codec.toUpperCase()) {\n                  codecPayload = rtp.payload;\n                  return true;\n                }\n                return false;\n              });\n              if (codecPayload === 0) {\n                return true;\n              }\n              if (isSVCCodec(trackbr.codec) && !isSafari()) {\n                this.ensureVideoDDExtensionForSVC(media, sdpParsed);\n              }\n              // mung sdp for bitrate setting that can't apply by sendEncoding\n              if (!isSVCCodec(trackbr.codec)) {\n                return true;\n              }\n              const startBitrate = Math.round(trackbr.maxbr * startBitrateForSVC);\n              for (const fmtp of media.fmtp) {\n                if (fmtp.payload === codecPayload) {\n                  // if another track's fmtp already is set, we cannot override the bitrate\n                  // this has the unfortunate consequence of being forced to use the\n                  // initial track's bitrate for all tracks\n                  if (!fmtp.config.includes('x-google-start-bitrate')) {\n                    fmtp.config += \";x-google-start-bitrate=\".concat(startBitrate);\n                  }\n                  break;\n                }\n              }\n              return true;\n            });\n          }\n        });\n        if (this.latestOfferId > offerId) {\n          this.log.warn('latestOfferId mismatch', Object.assign(Object.assign({}, this.logContext), {\n            latestOfferId: this.latestOfferId,\n            offerId\n          }));\n          return;\n        }\n        yield this.setMungedSDP(offer, libExports.write(sdpParsed));\n        this.onOffer(offer, this.latestOfferId);\n      } finally {\n        unlock();\n      }\n    });\n  }\n  createAndSetAnswer() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const answer = yield this.pc.createAnswer();\n      const sdpParsed = libExports.parse((_a = answer.sdp) !== null && _a !== void 0 ? _a : '');\n      sdpParsed.media.forEach(media => {\n        ensureIPAddrMatchVersion(media);\n        if (media.type === 'audio') {\n          ensureAudioNackAndStereo(media, this.remoteStereoMids, this.remoteNackMids);\n        }\n      });\n      yield this.setMungedSDP(answer, libExports.write(sdpParsed));\n      return answer;\n    });\n  }\n  createDataChannel(label, dataChannelDict) {\n    return this.pc.createDataChannel(label, dataChannelDict);\n  }\n  addTransceiver(mediaStreamTrack, transceiverInit) {\n    return this.pc.addTransceiver(mediaStreamTrack, transceiverInit);\n  }\n  addTransceiverOfKind(kind, transceiverInit) {\n    return this.pc.addTransceiver(kind, transceiverInit);\n  }\n  addTrack(track) {\n    if (!this._pc) {\n      throw new UnexpectedConnectionState('PC closed, cannot add track');\n    }\n    return this._pc.addTrack(track);\n  }\n  setTrackCodecBitrate(info) {\n    this.trackBitrates.push(info);\n  }\n  setConfiguration(rtcConfig) {\n    var _a;\n    if (!this._pc) {\n      throw new UnexpectedConnectionState('PC closed, cannot configure');\n    }\n    return (_a = this._pc) === null || _a === void 0 ? void 0 : _a.setConfiguration(rtcConfig);\n  }\n  canRemoveTrack() {\n    var _a;\n    return !!((_a = this._pc) === null || _a === void 0 ? void 0 : _a.removeTrack);\n  }\n  removeTrack(sender) {\n    var _a;\n    return (_a = this._pc) === null || _a === void 0 ? void 0 : _a.removeTrack(sender);\n  }\n  getConnectionState() {\n    var _a, _b;\n    return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.connectionState) !== null && _b !== void 0 ? _b : 'closed';\n  }\n  getICEConnectionState() {\n    var _a, _b;\n    return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.iceConnectionState) !== null && _b !== void 0 ? _b : 'closed';\n  }\n  getSignallingState() {\n    var _a, _b;\n    return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.signalingState) !== null && _b !== void 0 ? _b : 'closed';\n  }\n  getTransceivers() {\n    var _a, _b;\n    return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.getTransceivers()) !== null && _b !== void 0 ? _b : [];\n  }\n  getSenders() {\n    var _a, _b;\n    return (_b = (_a = this._pc) === null || _a === void 0 ? void 0 : _a.getSenders()) !== null && _b !== void 0 ? _b : [];\n  }\n  getLocalDescription() {\n    var _a;\n    return (_a = this._pc) === null || _a === void 0 ? void 0 : _a.localDescription;\n  }\n  getRemoteDescription() {\n    var _a;\n    return (_a = this.pc) === null || _a === void 0 ? void 0 : _a.remoteDescription;\n  }\n  getStats() {\n    return this.pc.getStats();\n  }\n  getConnectedAddress() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!this._pc) {\n        return;\n      }\n      let selectedCandidatePairId = '';\n      const candidatePairs = new Map();\n      // id -> candidate ip\n      const candidates = new Map();\n      const stats = yield this._pc.getStats();\n      stats.forEach(v => {\n        switch (v.type) {\n          case 'transport':\n            selectedCandidatePairId = v.selectedCandidatePairId;\n            break;\n          case 'candidate-pair':\n            if (selectedCandidatePairId === '' && v.selected) {\n              selectedCandidatePairId = v.id;\n            }\n            candidatePairs.set(v.id, v);\n            break;\n          case 'remote-candidate':\n            candidates.set(v.id, \"\".concat(v.address, \":\").concat(v.port));\n            break;\n        }\n      });\n      if (selectedCandidatePairId === '') {\n        return undefined;\n      }\n      const selectedID = (_a = candidatePairs.get(selectedCandidatePairId)) === null || _a === void 0 ? void 0 : _a.remoteCandidateId;\n      if (selectedID === undefined) {\n        return undefined;\n      }\n      return candidates.get(selectedID);\n    });\n  }\n  setMungedSDP(sd, munged, remote) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (munged) {\n        const originalSdp = sd.sdp;\n        sd.sdp = munged;\n        try {\n          this.log.debug(\"setting munged \".concat(remote ? 'remote' : 'local', \" description\"), this.logContext);\n          if (remote) {\n            yield this.pc.setRemoteDescription(sd);\n          } else {\n            yield this.pc.setLocalDescription(sd);\n          }\n          return;\n        } catch (e) {\n          this.log.warn(\"not able to set \".concat(sd.type, \", falling back to unmodified sdp\"), Object.assign(Object.assign({}, this.logContext), {\n            error: e,\n            sdp: munged\n          }));\n          sd.sdp = originalSdp;\n        }\n      }\n      try {\n        if (remote) {\n          yield this.pc.setRemoteDescription(sd);\n        } else {\n          yield this.pc.setLocalDescription(sd);\n        }\n      } catch (e) {\n        let msg = 'unknown error';\n        if (e instanceof Error) {\n          msg = e.message;\n        } else if (typeof e === 'string') {\n          msg = e;\n        }\n        const fields = {\n          error: msg,\n          sdp: sd.sdp\n        };\n        if (!remote && this.pc.remoteDescription) {\n          fields.remoteSdp = this.pc.remoteDescription;\n        }\n        this.log.error(\"unable to set \".concat(sd.type), Object.assign(Object.assign({}, this.logContext), {\n          fields\n        }));\n        throw new NegotiationError(msg);\n      }\n    });\n  }\n  ensureVideoDDExtensionForSVC(media, sdp) {\n    var _a, _b;\n    const ddFound = (_a = media.ext) === null || _a === void 0 ? void 0 : _a.some(ext => {\n      if (ext.uri === ddExtensionURI) {\n        return true;\n      }\n      return false;\n    });\n    if (!ddFound) {\n      if (this.ddExtID === 0) {\n        let maxID = 0;\n        sdp.media.forEach(m => {\n          var _a;\n          if (m.type !== 'video') {\n            return;\n          }\n          (_a = m.ext) === null || _a === void 0 ? void 0 : _a.forEach(ext => {\n            if (ext.value > maxID) {\n              maxID = ext.value;\n            }\n          });\n        });\n        this.ddExtID = maxID + 1;\n      }\n      (_b = media.ext) === null || _b === void 0 ? void 0 : _b.push({\n        value: this.ddExtID,\n        uri: ddExtensionURI\n      });\n    }\n  }\n}\nfunction ensureAudioNackAndStereo(media, stereoMids, nackMids) {\n  // sdp-transform types don't include number however the parser outputs mids as numbers in some cases\n  const mid = getMidString(media.mid);\n  // found opus codec to add nack fb\n  let opusPayload = 0;\n  media.rtp.some(rtp => {\n    if (rtp.codec === 'opus') {\n      opusPayload = rtp.payload;\n      return true;\n    }\n    return false;\n  });\n  // add nack rtcpfb if not exist\n  if (opusPayload > 0) {\n    if (!media.rtcpFb) {\n      media.rtcpFb = [];\n    }\n    if (nackMids.includes(mid) && !media.rtcpFb.some(fb => fb.payload === opusPayload && fb.type === 'nack')) {\n      media.rtcpFb.push({\n        payload: opusPayload,\n        type: 'nack'\n      });\n    }\n    if (stereoMids.includes(mid) || stereoMids.length === 1 && stereoMids[0] === 'all') {\n      media.fmtp.some(fmtp => {\n        if (fmtp.payload === opusPayload) {\n          if (!fmtp.config.includes('stereo=1')) {\n            fmtp.config += ';stereo=1';\n          }\n          return true;\n        }\n        return false;\n      });\n    }\n  }\n}\nfunction extractStereoAndNackAudioFromOffer(offer) {\n  var _a;\n  const stereoMids = [];\n  const nackMids = [];\n  const sdpParsed = libExports.parse((_a = offer.sdp) !== null && _a !== void 0 ? _a : '');\n  let opusPayload = 0;\n  sdpParsed.media.forEach(media => {\n    var _a;\n    const mid = getMidString(media.mid);\n    if (media.type === 'audio') {\n      media.rtp.some(rtp => {\n        if (rtp.codec === 'opus') {\n          opusPayload = rtp.payload;\n          return true;\n        }\n        return false;\n      });\n      if ((_a = media.rtcpFb) === null || _a === void 0 ? void 0 : _a.some(fb => fb.payload === opusPayload && fb.type === 'nack')) {\n        nackMids.push(mid);\n      }\n      media.fmtp.some(fmtp => {\n        if (fmtp.payload === opusPayload) {\n          if (fmtp.config.includes('sprop-stereo=1')) {\n            stereoMids.push(mid);\n          }\n          return true;\n        }\n        return false;\n      });\n    }\n  });\n  return {\n    stereoMids,\n    nackMids\n  };\n}\nfunction ensureIPAddrMatchVersion(media) {\n  // Chrome could generate sdp with c = IN IP4 <ipv6 addr>\n  // in edge case and return error when set sdp.This is not a\n  // sdk error but correct it if the issue detected.\n  if (media.connection) {\n    const isV6 = media.connection.ip.indexOf(':') >= 0;\n    if (media.connection.version === 4 && isV6 || media.connection.version === 6 && !isV6) {\n      // fallback to dummy address\n      media.connection.ip = '0.0.0.0';\n      media.connection.version = 4;\n    }\n  }\n}\nfunction getMidString(mid) {\n  return typeof mid === 'number' ? mid.toFixed(0) : mid;\n}const defaultVideoCodec = 'vp8';\nconst publishDefaults = {\n  audioPreset: AudioPresets.music,\n  dtx: true,\n  red: true,\n  forceStereo: false,\n  simulcast: true,\n  screenShareEncoding: ScreenSharePresets.h1080fps15.encoding,\n  stopMicTrackOnMute: false,\n  videoCodec: defaultVideoCodec,\n  backupCodec: true,\n  preConnectBuffer: false\n};\nconst audioDefaults = {\n  deviceId: {\n    ideal: 'default'\n  },\n  autoGainControl: true,\n  echoCancellation: true,\n  noiseSuppression: true,\n  voiceIsolation: true\n};\nconst videoDefaults = {\n  deviceId: {\n    ideal: 'default'\n  },\n  resolution: VideoPresets.h720.resolution\n};\nconst roomOptionDefaults = {\n  adaptiveStream: false,\n  dynacast: false,\n  stopLocalTrackOnUnpublish: true,\n  reconnectPolicy: new DefaultReconnectPolicy(),\n  disconnectOnPageLeave: true,\n  webAudioMix: false,\n  singlePeerConnection: false\n};\nconst roomConnectOptionDefaults = {\n  autoSubscribe: true,\n  maxRetries: 1,\n  peerConnectionTimeout: 15000,\n  websocketTimeout: 15000\n};var PCTransportState;\n(function (PCTransportState) {\n  PCTransportState[PCTransportState[\"NEW\"] = 0] = \"NEW\";\n  PCTransportState[PCTransportState[\"CONNECTING\"] = 1] = \"CONNECTING\";\n  PCTransportState[PCTransportState[\"CONNECTED\"] = 2] = \"CONNECTED\";\n  PCTransportState[PCTransportState[\"FAILED\"] = 3] = \"FAILED\";\n  PCTransportState[PCTransportState[\"CLOSING\"] = 4] = \"CLOSING\";\n  PCTransportState[PCTransportState[\"CLOSED\"] = 5] = \"CLOSED\";\n})(PCTransportState || (PCTransportState = {}));\nclass PCTransportManager {\n  get needsPublisher() {\n    return this.isPublisherConnectionRequired;\n  }\n  get needsSubscriber() {\n    return this.isSubscriberConnectionRequired;\n  }\n  get currentState() {\n    return this.state;\n  }\n  constructor(rtcConfig, mode, loggerOptions) {\n    var _a;\n    this.peerConnectionTimeout = roomConnectOptionDefaults.peerConnectionTimeout;\n    this.log = livekitLogger;\n    this.updateState = () => {\n      var _a, _b;\n      const previousState = this.state;\n      const connectionStates = this.requiredTransports.map(tr => tr.getConnectionState());\n      if (connectionStates.every(st => st === 'connected')) {\n        this.state = PCTransportState.CONNECTED;\n      } else if (connectionStates.some(st => st === 'failed')) {\n        this.state = PCTransportState.FAILED;\n      } else if (connectionStates.some(st => st === 'connecting')) {\n        this.state = PCTransportState.CONNECTING;\n      } else if (connectionStates.every(st => st === 'closed')) {\n        this.state = PCTransportState.CLOSED;\n      } else if (connectionStates.some(st => st === 'closed')) {\n        this.state = PCTransportState.CLOSING;\n      } else if (connectionStates.every(st => st === 'new')) {\n        this.state = PCTransportState.NEW;\n      }\n      if (previousState !== this.state) {\n        this.log.debug(\"pc state change: from \".concat(PCTransportState[previousState], \" to \").concat(PCTransportState[this.state]), this.logContext);\n        (_a = this.onStateChange) === null || _a === void 0 ? void 0 : _a.call(this, this.state, this.publisher.getConnectionState(), (_b = this.subscriber) === null || _b === void 0 ? void 0 : _b.getConnectionState());\n      }\n    };\n    this.log = getLogger((_a = loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.PCManager);\n    this.loggerOptions = loggerOptions;\n    this.isPublisherConnectionRequired = mode !== 'subscriber-primary';\n    this.isSubscriberConnectionRequired = mode === 'subscriber-primary';\n    this.publisher = new PCTransport(rtcConfig, loggerOptions);\n    if (mode !== 'publisher-only') {\n      this.subscriber = new PCTransport(rtcConfig, loggerOptions);\n      this.subscriber.onConnectionStateChange = this.updateState;\n      this.subscriber.onIceConnectionStateChange = this.updateState;\n      this.subscriber.onSignalingStatechange = this.updateState;\n      this.subscriber.onIceCandidate = candidate => {\n        var _a;\n        (_a = this.onIceCandidate) === null || _a === void 0 ? void 0 : _a.call(this, candidate, SignalTarget.SUBSCRIBER);\n      };\n      // in subscriber primary mode, server side opens sub data channels.\n      this.subscriber.onDataChannel = ev => {\n        var _a;\n        (_a = this.onDataChannel) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n      };\n      this.subscriber.onTrack = ev => {\n        var _a;\n        (_a = this.onTrack) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n      };\n    }\n    this.publisher.onConnectionStateChange = this.updateState;\n    this.publisher.onIceConnectionStateChange = this.updateState;\n    this.publisher.onSignalingStatechange = this.updateState;\n    this.publisher.onIceCandidate = candidate => {\n      var _a;\n      (_a = this.onIceCandidate) === null || _a === void 0 ? void 0 : _a.call(this, candidate, SignalTarget.PUBLISHER);\n    };\n    this.publisher.onTrack = ev => {\n      var _a;\n      (_a = this.onTrack) === null || _a === void 0 ? void 0 : _a.call(this, ev);\n    };\n    this.publisher.onOffer = (offer, offerId) => {\n      var _a;\n      (_a = this.onPublisherOffer) === null || _a === void 0 ? void 0 : _a.call(this, offer, offerId);\n    };\n    this.state = PCTransportState.NEW;\n    this.connectionLock = new _();\n    this.remoteOfferLock = new _();\n  }\n  get logContext() {\n    var _a, _b;\n    return Object.assign({}, (_b = (_a = this.loggerOptions).loggerContextCb) === null || _b === void 0 ? void 0 : _b.call(_a));\n  }\n  requirePublisher() {\n    let require = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n    this.isPublisherConnectionRequired = require;\n    this.updateState();\n  }\n  createAndSendPublisherOffer(options) {\n    return this.publisher.createAndSendOffer(options);\n  }\n  setPublisherAnswer(sd, offerId) {\n    return this.publisher.setRemoteDescription(sd, offerId);\n  }\n  removeTrack(sender) {\n    return this.publisher.removeTrack(sender);\n  }\n  close() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (this.publisher && this.publisher.getSignallingState() !== 'closed') {\n        const publisher = this.publisher;\n        for (const sender of publisher.getSenders()) {\n          try {\n            // TODO: react-native-webrtc doesn't have removeTrack yet.\n            if (publisher.canRemoveTrack()) {\n              publisher.removeTrack(sender);\n            }\n          } catch (e) {\n            this.log.warn('could not removeTrack', Object.assign(Object.assign({}, this.logContext), {\n              error: e\n            }));\n          }\n        }\n      }\n      yield Promise.all([this.publisher.close(), (_a = this.subscriber) === null || _a === void 0 ? void 0 : _a.close()]);\n      this.updateState();\n    });\n  }\n  triggerIceRestart() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.subscriber) {\n        this.subscriber.restartingIce = true;\n      }\n      // only restart publisher if it's needed\n      if (this.needsPublisher) {\n        yield this.createAndSendPublisherOffer({\n          iceRestart: true\n        });\n      }\n    });\n  }\n  addIceCandidate(candidate, target) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (target === SignalTarget.PUBLISHER) {\n        yield this.publisher.addIceCandidate(candidate);\n      } else {\n        yield (_a = this.subscriber) === null || _a === void 0 ? void 0 : _a.addIceCandidate(candidate);\n      }\n    });\n  }\n  createSubscriberAnswerFromOffer(sd, offerId) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      this.log.debug('received server offer', Object.assign(Object.assign({}, this.logContext), {\n        RTCSdpType: sd.type,\n        sdp: sd.sdp,\n        signalingState: (_a = this.subscriber) === null || _a === void 0 ? void 0 : _a.getSignallingState().toString()\n      }));\n      const unlock = yield this.remoteOfferLock.lock();\n      try {\n        const success = yield (_b = this.subscriber) === null || _b === void 0 ? void 0 : _b.setRemoteDescription(sd, offerId);\n        if (!success) {\n          return undefined;\n        }\n        // answer the offer\n        const answer = yield (_c = this.subscriber) === null || _c === void 0 ? void 0 : _c.createAndSetAnswer();\n        return answer;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  updateConfiguration(config, iceRestart) {\n    var _a;\n    this.publisher.setConfiguration(config);\n    (_a = this.subscriber) === null || _a === void 0 ? void 0 : _a.setConfiguration(config);\n    if (iceRestart) {\n      this.triggerIceRestart();\n    }\n  }\n  ensurePCTransportConnection(abortController, timeout) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const unlock = yield this.connectionLock.lock();\n      try {\n        if (this.isPublisherConnectionRequired && this.publisher.getConnectionState() !== 'connected' && this.publisher.getConnectionState() !== 'connecting') {\n          this.log.debug('negotiation required, start negotiating', this.logContext);\n          this.publisher.negotiate();\n        }\n        yield Promise.all((_a = this.requiredTransports) === null || _a === void 0 ? void 0 : _a.map(transport => this.ensureTransportConnected(transport, abortController, timeout)));\n      } finally {\n        unlock();\n      }\n    });\n  }\n  negotiate(abortController) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n        const negotiationTimeout = setTimeout(() => {\n          reject('negotiation timed out');\n        }, this.peerConnectionTimeout);\n        const abortHandler = () => {\n          clearTimeout(negotiationTimeout);\n          reject('negotiation aborted');\n        };\n        abortController.signal.addEventListener('abort', abortHandler);\n        this.publisher.once(PCEvents.NegotiationStarted, () => {\n          if (abortController.signal.aborted) {\n            return;\n          }\n          this.publisher.once(PCEvents.NegotiationComplete, () => {\n            clearTimeout(negotiationTimeout);\n            resolve();\n          });\n        });\n        yield this.publisher.negotiate(e => {\n          clearTimeout(negotiationTimeout);\n          reject(e);\n        });\n      }));\n    });\n  }\n  addPublisherTransceiver(track, transceiverInit) {\n    return this.publisher.addTransceiver(track, transceiverInit);\n  }\n  addPublisherTransceiverOfKind(kind, transceiverInit) {\n    return this.publisher.addTransceiverOfKind(kind, transceiverInit);\n  }\n  getMidForReceiver(receiver) {\n    const transceivers = this.subscriber ? this.subscriber.getTransceivers() : this.publisher.getTransceivers();\n    const matchingTransceiver = transceivers.find(transceiver => transceiver.receiver === receiver);\n    return matchingTransceiver === null || matchingTransceiver === void 0 ? void 0 : matchingTransceiver.mid;\n  }\n  addPublisherTrack(track) {\n    return this.publisher.addTrack(track);\n  }\n  createPublisherDataChannel(label, dataChannelDict) {\n    return this.publisher.createDataChannel(label, dataChannelDict);\n  }\n  /**\n   * Returns the first required transport's address if no explicit target is specified\n   */\n  getConnectedAddress(target) {\n    if (target === SignalTarget.PUBLISHER) {\n      return this.publisher.getConnectedAddress();\n    } else if (target === SignalTarget.SUBSCRIBER) {\n      return this.publisher.getConnectedAddress();\n    }\n    return this.requiredTransports[0].getConnectedAddress();\n  }\n  get requiredTransports() {\n    const transports = [];\n    if (this.isPublisherConnectionRequired) {\n      transports.push(this.publisher);\n    }\n    if (this.isSubscriberConnectionRequired && this.subscriber) {\n      transports.push(this.subscriber);\n    }\n    return transports;\n  }\n  ensureTransportConnected(pcTransport_1, abortController_1) {\n    return __awaiter(this, arguments, void 0, function (pcTransport, abortController) {\n      var _this = this;\n      let timeout = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.peerConnectionTimeout;\n      return function* () {\n        const connectionState = pcTransport.getConnectionState();\n        if (connectionState === 'connected') {\n          return;\n        }\n        return new Promise((resolve, reject) => __awaiter(_this, void 0, void 0, function* () {\n          const abortHandler = () => {\n            this.log.warn('abort transport connection', this.logContext);\n            CriticalTimers.clearTimeout(connectTimeout);\n            reject(ConnectionError.cancelled('room connection has been cancelled'));\n          };\n          if (abortController === null || abortController === void 0 ? void 0 : abortController.signal.aborted) {\n            abortHandler();\n          }\n          abortController === null || abortController === void 0 ? void 0 : abortController.signal.addEventListener('abort', abortHandler);\n          const connectTimeout = CriticalTimers.setTimeout(() => {\n            abortController === null || abortController === void 0 ? void 0 : abortController.signal.removeEventListener('abort', abortHandler);\n            reject(ConnectionError.internal('could not establish pc connection'));\n          }, timeout);\n          while (this.state !== PCTransportState.CONNECTED) {\n            yield sleep(50); // FIXME we shouldn't rely on `sleep` in the connection paths, as it invokes `setTimeout` which can be drastically throttled by browser implementations\n            if (abortController === null || abortController === void 0 ? void 0 : abortController.signal.aborted) {\n              reject(ConnectionError.cancelled('room connection has been cancelled'));\n              return;\n            }\n          }\n          CriticalTimers.clearTimeout(connectTimeout);\n          abortController === null || abortController === void 0 ? void 0 : abortController.signal.removeEventListener('abort', abortHandler);\n          resolve();\n        }));\n      }();\n    });\n  }\n}const DEFAULT_MAX_AGE_MS = 5000;\nconst STOP_REFETCH_DELAY_MS = 30000;\nclass RegionUrlProvider {\n  static fetchRegionSettings(serverUrl, token, signal) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield RegionUrlProvider.fetchLock.lock();\n      try {\n        const regionSettingsResponse = yield fetch(\"\".concat(getCloudConfigUrl(serverUrl), \"/regions\"), {\n          headers: {\n            authorization: \"Bearer \".concat(token)\n          },\n          signal\n        });\n        if (regionSettingsResponse.ok) {\n          const maxAge = extractMaxAgeFromRequestHeaders(regionSettingsResponse.headers);\n          const maxAgeInMs = maxAge ? maxAge * 1000 : DEFAULT_MAX_AGE_MS;\n          const regionSettings = yield regionSettingsResponse.json();\n          return {\n            regionSettings,\n            updatedAtInMs: Date.now(),\n            maxAgeInMs\n          };\n        } else {\n          if (regionSettingsResponse.status === 401) {\n            throw ConnectionError.notAllowed(\"Could not fetch region settings: \".concat(regionSettingsResponse.statusText), regionSettingsResponse.status);\n          } else {\n            throw ConnectionError.internal(\"Could not fetch region settings: \".concat(regionSettingsResponse.statusText));\n          }\n        }\n      } catch (e) {\n        if (e instanceof ConnectionError) {\n          // rethrow connection errors\n          throw e;\n        } else if (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n          throw ConnectionError.cancelled(\"Region fetching was aborted\");\n        } else {\n          // wrap other errors as connection errors\n          throw ConnectionError.serverUnreachable(\"Could not fetch region settings, \".concat(e instanceof Error ? \"\".concat(e.name, \": \").concat(e.message) : e));\n        }\n      } finally {\n        unlock();\n      }\n    });\n  }\n  static scheduleRefetch(url, token, maxAgeInMs) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const timeout = RegionUrlProvider.settingsTimeouts.get(url.hostname);\n      clearTimeout(timeout);\n      RegionUrlProvider.settingsTimeouts.set(url.hostname, setTimeout(() => __awaiter(this, void 0, void 0, function* () {\n        try {\n          const newSettings = yield RegionUrlProvider.fetchRegionSettings(url, token);\n          RegionUrlProvider.updateCachedRegionSettings(url, token, newSettings);\n        } catch (error) {\n          if (error instanceof ConnectionError && error.reason === ConnectionErrorReason.NotAllowed) {\n            livekitLogger.debug('token is not valid, cancelling auto region refresh');\n            return;\n          }\n          livekitLogger.debug('auto refetching of region settings failed', {\n            error\n          });\n          // continue retrying with the same max age\n          RegionUrlProvider.scheduleRefetch(url, token, maxAgeInMs);\n        }\n      }), maxAgeInMs));\n    });\n  }\n  static updateCachedRegionSettings(url, token, settings) {\n    RegionUrlProvider.cache.set(url.hostname, settings);\n    RegionUrlProvider.scheduleRefetch(url, token, settings.maxAgeInMs);\n  }\n  static stopRefetch(hostname) {\n    const timeout = RegionUrlProvider.settingsTimeouts.get(hostname);\n    if (timeout) {\n      clearTimeout(timeout);\n      RegionUrlProvider.settingsTimeouts.delete(hostname);\n    }\n  }\n  static scheduleCleanup(hostname) {\n    let tracker = RegionUrlProvider.connectionTrackers.get(hostname);\n    if (!tracker) {\n      return;\n    }\n    // Cancel any existing cleanup timeout\n    if (tracker.cleanupTimeout) {\n      clearTimeout(tracker.cleanupTimeout);\n    }\n    // Schedule cleanup to stop refetch after delay\n    tracker.cleanupTimeout = setTimeout(() => {\n      const currentTracker = RegionUrlProvider.connectionTrackers.get(hostname);\n      if (currentTracker && currentTracker.connectionCount === 0) {\n        livekitLogger.debug('stopping region refetch after disconnect delay', {\n          hostname\n        });\n        RegionUrlProvider.stopRefetch(hostname);\n      }\n      if (currentTracker) {\n        currentTracker.cleanupTimeout = undefined;\n      }\n    }, STOP_REFETCH_DELAY_MS);\n  }\n  static cancelCleanup(hostname) {\n    const tracker = RegionUrlProvider.connectionTrackers.get(hostname);\n    if (tracker === null || tracker === void 0 ? void 0 : tracker.cleanupTimeout) {\n      clearTimeout(tracker.cleanupTimeout);\n      tracker.cleanupTimeout = undefined;\n    }\n  }\n  notifyConnected() {\n    const hostname = this.serverUrl.hostname;\n    let tracker = RegionUrlProvider.connectionTrackers.get(hostname);\n    if (!tracker) {\n      tracker = {\n        connectionCount: 0\n      };\n      RegionUrlProvider.connectionTrackers.set(hostname, tracker);\n    }\n    tracker.connectionCount++;\n    // Cancel any scheduled cleanup since we have an active connection\n    RegionUrlProvider.cancelCleanup(hostname);\n  }\n  notifyDisconnected() {\n    const hostname = this.serverUrl.hostname;\n    const tracker = RegionUrlProvider.connectionTrackers.get(hostname);\n    if (!tracker) {\n      return;\n    }\n    tracker.connectionCount = Math.max(0, tracker.connectionCount - 1);\n    // If no more connections, schedule cleanup\n    if (tracker.connectionCount === 0) {\n      RegionUrlProvider.scheduleCleanup(hostname);\n    }\n  }\n  constructor(url, token) {\n    this.attemptedRegions = [];\n    this.serverUrl = new URL(url);\n    this.token = token;\n  }\n  updateToken(token) {\n    this.token = token;\n  }\n  isCloud() {\n    return isCloud(this.serverUrl);\n  }\n  getServerUrl() {\n    return this.serverUrl;\n  }\n  /** @internal */\n  fetchRegionSettings(abortSignal) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return RegionUrlProvider.fetchRegionSettings(this.serverUrl, this.token, abortSignal);\n    });\n  }\n  getNextBestRegionUrl(abortSignal) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.isCloud()) {\n        throw Error('region availability is only supported for LiveKit Cloud domains');\n      }\n      let cachedSettings = RegionUrlProvider.cache.get(this.serverUrl.hostname);\n      if (!cachedSettings || Date.now() - cachedSettings.updatedAtInMs > cachedSettings.maxAgeInMs) {\n        cachedSettings = yield this.fetchRegionSettings(abortSignal);\n        RegionUrlProvider.updateCachedRegionSettings(this.serverUrl, this.token, cachedSettings);\n      }\n      const regionsLeft = cachedSettings.regionSettings.regions.filter(region => !this.attemptedRegions.find(attempted => attempted.url === region.url));\n      if (regionsLeft.length > 0) {\n        const nextRegion = regionsLeft[0];\n        this.attemptedRegions.push(nextRegion);\n        livekitLogger.debug(\"next region: \".concat(nextRegion.region));\n        return nextRegion.url;\n      } else {\n        return null;\n      }\n    });\n  }\n  resetAttempts() {\n    this.attemptedRegions = [];\n  }\n  setServerReportedRegions(settings) {\n    RegionUrlProvider.updateCachedRegionSettings(this.serverUrl, this.token, settings);\n  }\n}\nRegionUrlProvider.cache = new Map();\nRegionUrlProvider.settingsTimeouts = new Map();\nRegionUrlProvider.connectionTrackers = new Map();\nRegionUrlProvider.fetchLock = new _();\nfunction getCloudConfigUrl(serverUrl) {\n  return \"\".concat(serverUrl.protocol.replace('ws', 'http'), \"//\").concat(serverUrl.host, \"/settings\");\n}// SPDX-FileCopyrightText: 2024 LiveKit, Inc.\n//\n// SPDX-License-Identifier: Apache-2.0\n/**\n * Specialized error handling for RPC methods.\n *\n * Instances of this type, when thrown in a method handler, will have their `message`\n * serialized and sent across the wire. The sender will receive an equivalent error on the other side.\n *\n * Built-in types are included but developers may use any string, with a max length of 256 bytes.\n */\nclass RpcError extends Error {\n  /**\n   * Creates an error object with the given code and message, plus an optional data payload.\n   *\n   * If thrown in an RPC method handler, the error will be sent back to the caller.\n   *\n   * Error codes 1001-1999 are reserved for built-in errors (see RpcError.ErrorCode for their meanings).\n   */\n  constructor(code, message, data) {\n    super(message);\n    this.code = code;\n    this.message = truncateBytes(message, RpcError.MAX_MESSAGE_BYTES);\n    this.data = data ? truncateBytes(data, RpcError.MAX_DATA_BYTES) : undefined;\n  }\n  /**\n   * @internal\n   */\n  static fromProto(proto) {\n    return new RpcError(proto.code, proto.message, proto.data);\n  }\n  /**\n   * @internal\n   */\n  toProto() {\n    return new RpcError$1({\n      code: this.code,\n      message: this.message,\n      data: this.data\n    });\n  }\n  /**\n   * Creates an error object from the code, with an auto-populated message.\n   *\n   * @internal\n   */\n  static builtIn(key, data) {\n    return new RpcError(RpcError.ErrorCode[key], RpcError.ErrorMessage[key], data);\n  }\n}\nRpcError.MAX_MESSAGE_BYTES = 256;\nRpcError.MAX_DATA_BYTES = 15360; // 15 KB\nRpcError.ErrorCode = {\n  APPLICATION_ERROR: 1500,\n  CONNECTION_TIMEOUT: 1501,\n  RESPONSE_TIMEOUT: 1502,\n  RECIPIENT_DISCONNECTED: 1503,\n  RESPONSE_PAYLOAD_TOO_LARGE: 1504,\n  SEND_FAILED: 1505,\n  UNSUPPORTED_METHOD: 1400,\n  RECIPIENT_NOT_FOUND: 1401,\n  REQUEST_PAYLOAD_TOO_LARGE: 1402,\n  UNSUPPORTED_SERVER: 1403,\n  UNSUPPORTED_VERSION: 1404\n};\n/**\n * @internal\n */\nRpcError.ErrorMessage = {\n  APPLICATION_ERROR: 'Application error in method handler',\n  CONNECTION_TIMEOUT: 'Connection timeout',\n  RESPONSE_TIMEOUT: 'Response timeout',\n  RECIPIENT_DISCONNECTED: 'Recipient disconnected',\n  RESPONSE_PAYLOAD_TOO_LARGE: 'Response payload too large',\n  SEND_FAILED: 'Failed to send',\n  UNSUPPORTED_METHOD: 'Method not supported at destination',\n  RECIPIENT_NOT_FOUND: 'Recipient not found',\n  REQUEST_PAYLOAD_TOO_LARGE: 'Request payload too large',\n  UNSUPPORTED_SERVER: 'RPC not supported by server',\n  UNSUPPORTED_VERSION: 'Unsupported RPC version'\n};\n/*\n * Maximum payload size for RPC requests and responses. If a payload exceeds this size,\n * the RPC call will fail with a REQUEST_PAYLOAD_TOO_LARGE(1402) or RESPONSE_PAYLOAD_TOO_LARGE(1504) error.\n */\nconst MAX_PAYLOAD_BYTES = 15360; // 15 KB\n/**\n * @internal\n */\nfunction byteLength(str) {\n  const encoder = new TextEncoder();\n  return encoder.encode(str).length;\n}\n/**\n * @internal\n */\nfunction truncateBytes(str, maxBytes) {\n  if (byteLength(str) <= maxBytes) {\n    return str;\n  }\n  let low = 0;\n  let high = str.length;\n  const encoder = new TextEncoder();\n  while (low < high) {\n    const mid = Math.floor((low + high + 1) / 2);\n    if (encoder.encode(str.slice(0, mid)).length <= maxBytes) {\n      low = mid;\n    } else {\n      high = mid - 1;\n    }\n  }\n  return str.slice(0, low);\n}const monitorFrequency = 2000;\nfunction computeBitrate(currentStats, prevStats) {\n  if (!prevStats) {\n    return 0;\n  }\n  let bytesNow;\n  let bytesPrev;\n  if ('bytesReceived' in currentStats) {\n    bytesNow = currentStats.bytesReceived;\n    bytesPrev = prevStats.bytesReceived;\n  } else if ('bytesSent' in currentStats) {\n    bytesNow = currentStats.bytesSent;\n    bytesPrev = prevStats.bytesSent;\n  }\n  if (bytesNow === undefined || bytesPrev === undefined || currentStats.timestamp === undefined || prevStats.timestamp === undefined) {\n    return 0;\n  }\n  return (bytesNow - bytesPrev) * 8 * 1000 / (currentStats.timestamp - prevStats.timestamp);\n}// Check if MediaRecorder is available\nconst isMediaRecorderAvailable = typeof MediaRecorder !== 'undefined';\n// Fallback class for environments without MediaRecorder\nclass FallbackRecorder {\n  constructor() {\n    throw new Error('MediaRecorder is not available in this environment');\n  }\n}\n// Use conditional inheritance to avoid parse-time errors\nconst RecorderBase = isMediaRecorderAvailable ? MediaRecorder : FallbackRecorder;\nclass LocalTrackRecorder extends RecorderBase {\n  constructor(track, options) {\n    if (!isMediaRecorderAvailable) {\n      throw new Error('MediaRecorder is not available in this environment');\n    }\n    super(new MediaStream([track.mediaStreamTrack]), options);\n    let dataListener;\n    let streamController;\n    const isClosed = () => streamController === undefined;\n    const onStop = () => {\n      this.removeEventListener('dataavailable', dataListener);\n      this.removeEventListener('stop', onStop);\n      this.removeEventListener('error', onError);\n      streamController === null || streamController === void 0 ? void 0 : streamController.close();\n      streamController = undefined;\n    };\n    const onError = event => {\n      streamController === null || streamController === void 0 ? void 0 : streamController.error(event);\n      this.removeEventListener('dataavailable', dataListener);\n      this.removeEventListener('stop', onStop);\n      this.removeEventListener('error', onError);\n      streamController = undefined;\n    };\n    this.byteStream = new ReadableStream({\n      start: controller => {\n        streamController = controller;\n        dataListener = event => __awaiter(this, void 0, void 0, function* () {\n          let data;\n          if (event.data.arrayBuffer) {\n            const arrayBuffer = yield event.data.arrayBuffer();\n            data = new Uint8Array(arrayBuffer);\n            // @ts-expect-error react-native passes over Uint8Arrays directly\n          } else if (event.data.byteArray) {\n            // @ts-expect-error\n            data = event.data.byteArray;\n          } else {\n            throw new Error('no data available!');\n          }\n          if (isClosed()) {\n            return;\n          }\n          controller.enqueue(data);\n        });\n        this.addEventListener('dataavailable', dataListener);\n      },\n      cancel: () => {\n        onStop();\n      }\n    });\n    this.addEventListener('stop', onStop);\n    this.addEventListener('error', onError);\n  }\n}\n// Helper function to check if recording is supported\nfunction isRecordingSupported() {\n  return isMediaRecorderAvailable;\n}const DEFAULT_DIMENSIONS_TIMEOUT = 1000;\nconst PRE_CONNECT_BUFFER_TIMEOUT = 10000;\nclass LocalTrack extends Track {\n  /** @internal */\n  get sender() {\n    return this._sender;\n  }\n  /** @internal */\n  set sender(sender) {\n    this._sender = sender;\n  }\n  get constraints() {\n    return this._constraints;\n  }\n  get hasPreConnectBuffer() {\n    return !!this.localTrackRecorder;\n  }\n  /**\n   *\n   * @param mediaTrack\n   * @param kind\n   * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks\n   * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK\n   */\n  constructor(mediaTrack, kind, constraints) {\n    let userProvidedTrack = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;\n    let loggerOptions = arguments.length > 4 ? arguments[4] : undefined;\n    super(mediaTrack, kind, loggerOptions);\n    this.manuallyStopped = false;\n    this._isUpstreamPaused = false;\n    this.handleTrackMuteEvent = () => this.debouncedTrackMuteHandler().catch(() => this.log.debug('track mute bounce got cancelled by an unmute event', this.logContext));\n    this.debouncedTrackMuteHandler = r(() => __awaiter(this, void 0, void 0, function* () {\n      yield this.pauseUpstream();\n    }), 5000);\n    this.handleTrackUnmuteEvent = () => __awaiter(this, void 0, void 0, function* () {\n      this.debouncedTrackMuteHandler.cancel('unmute');\n      yield this.resumeUpstream();\n    });\n    this.handleEnded = () => {\n      if (this.isInBackground) {\n        this.reacquireTrack = true;\n      }\n      this._mediaStreamTrack.removeEventListener('mute', this.handleTrackMuteEvent);\n      this._mediaStreamTrack.removeEventListener('unmute', this.handleTrackUnmuteEvent);\n      this.emit(TrackEvent.Ended, this);\n    };\n    this.reacquireTrack = false;\n    this.providedByUser = userProvidedTrack;\n    this.muteLock = new _();\n    this.pauseUpstreamLock = new _();\n    this.trackChangeLock = new _();\n    this.trackChangeLock.lock().then(unlock => __awaiter(this, void 0, void 0, function* () {\n      try {\n        yield this.setMediaStreamTrack(mediaTrack, true);\n      } finally {\n        unlock();\n      }\n    }));\n    // added to satisfy TS compiler, constraints are synced with MediaStreamTrack\n    this._constraints = mediaTrack.getConstraints();\n    if (constraints) {\n      this._constraints = constraints;\n    }\n  }\n  get id() {\n    return this._mediaStreamTrack.id;\n  }\n  get dimensions() {\n    if (this.kind !== Track.Kind.Video) {\n      return undefined;\n    }\n    const {\n      width,\n      height\n    } = this._mediaStreamTrack.getSettings();\n    if (width && height) {\n      return {\n        width,\n        height\n      };\n    }\n    return undefined;\n  }\n  get isUpstreamPaused() {\n    return this._isUpstreamPaused;\n  }\n  get isUserProvided() {\n    return this.providedByUser;\n  }\n  get mediaStreamTrack() {\n    var _a, _b;\n    return (_b = (_a = this.processor) === null || _a === void 0 ? void 0 : _a.processedTrack) !== null && _b !== void 0 ? _b : this._mediaStreamTrack;\n  }\n  get isLocal() {\n    return true;\n  }\n  /**\n   * @internal\n   * returns mediaStreamTrack settings of the capturing mediastreamtrack source - ignoring processors\n   */\n  getSourceTrackSettings() {\n    return this._mediaStreamTrack.getSettings();\n  }\n  setMediaStreamTrack(newTrack, force) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (newTrack === this._mediaStreamTrack && !force) {\n        return;\n      }\n      if (this._mediaStreamTrack) {\n        // detach\n        this.attachedElements.forEach(el => {\n          detachTrack(this._mediaStreamTrack, el);\n        });\n        this.debouncedTrackMuteHandler.cancel('new-track');\n        this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);\n        this._mediaStreamTrack.removeEventListener('mute', this.handleTrackMuteEvent);\n        this._mediaStreamTrack.removeEventListener('unmute', this.handleTrackUnmuteEvent);\n      }\n      this.mediaStream = new MediaStream([newTrack]);\n      if (newTrack) {\n        newTrack.addEventListener('ended', this.handleEnded);\n        // when underlying track emits mute, it indicates that the device is unable\n        // to produce media. In this case we'll need to signal with remote that\n        // the track is \"muted\"\n        // note this is different from LocalTrack.mute because we do not want to\n        // touch MediaStreamTrack.enabled\n        newTrack.addEventListener('mute', this.handleTrackMuteEvent);\n        newTrack.addEventListener('unmute', this.handleTrackUnmuteEvent);\n        this._constraints = newTrack.getConstraints();\n      }\n      let processedTrack;\n      if (this.processor && newTrack) {\n        this.log.debug('restarting processor', this.logContext);\n        if (this.kind === 'unknown') {\n          throw TypeError('cannot set processor on track of unknown kind');\n        }\n        if (this.processorElement) {\n          attachToElement(newTrack, this.processorElement);\n          // ensure the processorElement itself stays muted\n          this.processorElement.muted = true;\n        }\n        yield this.processor.restart({\n          track: newTrack,\n          kind: this.kind,\n          element: this.processorElement\n        });\n        processedTrack = this.processor.processedTrack;\n      }\n      if (this.sender && ((_a = this.sender.transport) === null || _a === void 0 ? void 0 : _a.state) !== 'closed') {\n        yield this.sender.replaceTrack(processedTrack !== null && processedTrack !== void 0 ? processedTrack : newTrack);\n      }\n      // if `newTrack` is different from the existing track, stop the\n      // older track just before replacing it\n      if (!this.providedByUser && this._mediaStreamTrack !== newTrack) {\n        this._mediaStreamTrack.stop();\n      }\n      this._mediaStreamTrack = newTrack;\n      if (newTrack) {\n        // sync muted state with the enabled state of the newly provided track\n        this._mediaStreamTrack.enabled = !this.isMuted;\n        // when a valid track is replace, we'd want to start producing\n        yield this.resumeUpstream();\n        this.attachedElements.forEach(el => {\n          attachToElement(processedTrack !== null && processedTrack !== void 0 ? processedTrack : newTrack, el);\n        });\n      }\n    });\n  }\n  waitForDimensions() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this = this;\n      let timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_DIMENSIONS_TIMEOUT;\n      return function* () {\n        var _a;\n        if (_this.kind === Track.Kind.Audio) {\n          throw new Error('cannot get dimensions for audio tracks');\n        }\n        if (((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.os) === 'iOS') {\n          // browsers report wrong initial resolution on iOS.\n          // when slightly delaying the call to .getSettings(), the correct resolution is being reported\n          yield sleep(10);\n        }\n        const started = Date.now();\n        while (Date.now() - started < timeout) {\n          const dims = _this.dimensions;\n          if (dims) {\n            return dims;\n          }\n          yield sleep(50);\n        }\n        throw new TrackInvalidError('unable to get track dimensions after timeout');\n      }();\n    });\n  }\n  setDeviceId(deviceId) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this._constraints.deviceId === deviceId && this._mediaStreamTrack.getSettings().deviceId === unwrapConstraint(deviceId)) {\n        return true;\n      }\n      this._constraints.deviceId = deviceId;\n      // when track is muted, underlying media stream track is stopped and\n      // will be restarted later\n      if (this.isMuted) {\n        return true;\n      }\n      yield this.restartTrack();\n      return unwrapConstraint(deviceId) === this._mediaStreamTrack.getSettings().deviceId;\n    });\n  }\n  /**\n   * @returns DeviceID of the device that is currently being used for this track\n   */\n  getDeviceId() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this2 = this;\n      let normalize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      return function* () {\n        // screen share doesn't have a usable device id\n        if (_this2.source === Track.Source.ScreenShare) {\n          return;\n        }\n        const {\n          deviceId,\n          groupId\n        } = _this2._mediaStreamTrack.getSettings();\n        const kind = _this2.kind === Track.Kind.Audio ? 'audioinput' : 'videoinput';\n        return normalize ? DeviceManager.getInstance().normalizeDeviceId(kind, deviceId, groupId) : deviceId;\n      }();\n    });\n  }\n  mute() {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.setTrackMuted(true);\n      return this;\n    });\n  }\n  unmute() {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.setTrackMuted(false);\n      return this;\n    });\n  }\n  replaceTrack(track, userProvidedOrOptions) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.trackChangeLock.lock();\n      try {\n        if (!this.sender) {\n          throw new TrackInvalidError('unable to replace an unpublished track');\n        }\n        let userProvidedTrack;\n        let stopProcessor;\n        if (typeof userProvidedOrOptions === 'boolean') {\n          userProvidedTrack = userProvidedOrOptions;\n        } else if (userProvidedOrOptions !== undefined) {\n          userProvidedTrack = userProvidedOrOptions.userProvidedTrack;\n          stopProcessor = userProvidedOrOptions.stopProcessor;\n        }\n        this.providedByUser = userProvidedTrack !== null && userProvidedTrack !== void 0 ? userProvidedTrack : true;\n        this.log.debug('replace MediaStreamTrack', this.logContext);\n        yield this.setMediaStreamTrack(track);\n        // this must be synced *after* setting mediaStreamTrack above, since it relies\n        // on the previous state in order to cleanup\n        if (stopProcessor && this.processor) {\n          yield this.internalStopProcessor();\n        }\n        return this;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  restart(constraints) {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.manuallyStopped = false;\n      const unlock = yield this.trackChangeLock.lock();\n      try {\n        if (!constraints) {\n          constraints = this._constraints;\n        }\n        const {\n            deviceId,\n            facingMode\n          } = constraints,\n          otherConstraints = __rest(constraints, [\"deviceId\", \"facingMode\"]);\n        this.log.debug('restarting track with constraints', Object.assign(Object.assign({}, this.logContext), {\n          constraints\n        }));\n        const streamConstraints = {\n          audio: false,\n          video: false\n        };\n        if (this.kind === Track.Kind.Video) {\n          streamConstraints.video = deviceId || facingMode ? {\n            deviceId,\n            facingMode\n          } : true;\n        } else {\n          streamConstraints.audio = deviceId ? Object.assign({\n            deviceId\n          }, otherConstraints) : true;\n        }\n        // these steps are duplicated from setMediaStreamTrack because we must stop\n        // the previous tracks before new tracks can be acquired\n        this.attachedElements.forEach(el => {\n          detachTrack(this.mediaStreamTrack, el);\n        });\n        this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);\n        // on Safari, the old audio track must be stopped before attempting to acquire\n        // the new track, otherwise the new track will stop with\n        // 'A MediaStreamTrack ended due to a capture failure`\n        this._mediaStreamTrack.stop();\n        // create new track and attach\n        const mediaStream = yield navigator.mediaDevices.getUserMedia(streamConstraints);\n        const newTrack = mediaStream.getTracks()[0];\n        if (this.kind === Track.Kind.Video) {\n          // we already captured the audio track with the constraints, so we only need to apply the video constraints\n          yield newTrack.applyConstraints(otherConstraints);\n        }\n        newTrack.addEventListener('ended', this.handleEnded);\n        this.log.debug('re-acquired MediaStreamTrack', this.logContext);\n        yield this.setMediaStreamTrack(newTrack);\n        this._constraints = constraints;\n        this.emit(TrackEvent.Restarted, this);\n        if (this.manuallyStopped) {\n          this.log.warn('track was stopped during a restart, stopping restarted track', this.logContext);\n          this.stop();\n        }\n        return this;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  setTrackMuted(muted) {\n    this.log.debug(\"setting \".concat(this.kind, \" track \").concat(muted ? 'muted' : 'unmuted'), this.logContext);\n    if (this.isMuted === muted && this._mediaStreamTrack.enabled !== muted) {\n      return;\n    }\n    this.isMuted = muted;\n    this._mediaStreamTrack.enabled = !muted;\n    this.emit(muted ? TrackEvent.Muted : TrackEvent.Unmuted, this);\n  }\n  get needsReAcquisition() {\n    return this._mediaStreamTrack.readyState !== 'live' || this._mediaStreamTrack.muted || !this._mediaStreamTrack.enabled || this.reacquireTrack;\n  }\n  handleAppVisibilityChanged() {\n    const _super = Object.create(null, {\n      handleAppVisibilityChanged: {\n        get: () => super.handleAppVisibilityChanged\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      yield _super.handleAppVisibilityChanged.call(this);\n      if (!isMobile()) return;\n      this.log.debug(\"visibility changed, is in Background: \".concat(this.isInBackground), this.logContext);\n      if (!this.isInBackground && this.needsReAcquisition && !this.isUserProvided && !this.isMuted) {\n        this.log.debug(\"track needs to be reacquired, restarting \".concat(this.source), this.logContext);\n        yield this.restart();\n        this.reacquireTrack = false;\n      }\n    });\n  }\n  stop() {\n    var _a;\n    this.manuallyStopped = true;\n    super.stop();\n    this._mediaStreamTrack.removeEventListener('ended', this.handleEnded);\n    this._mediaStreamTrack.removeEventListener('mute', this.handleTrackMuteEvent);\n    this._mediaStreamTrack.removeEventListener('unmute', this.handleTrackUnmuteEvent);\n    (_a = this.processor) === null || _a === void 0 ? void 0 : _a.destroy();\n    this.processor = undefined;\n  }\n  /**\n   * pauses publishing to the server without disabling the local MediaStreamTrack\n   * this is used to display a user's own video locally while pausing publishing to\n   * the server.\n   * this API is unsupported on Safari < 12 due to a bug\n   **/\n  pauseUpstream() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const unlock = yield this.pauseUpstreamLock.lock();\n      try {\n        if (this._isUpstreamPaused === true) {\n          return;\n        }\n        if (!this.sender) {\n          this.log.warn('unable to pause upstream for an unpublished track', this.logContext);\n          return;\n        }\n        this._isUpstreamPaused = true;\n        this.emit(TrackEvent.UpstreamPaused, this);\n        const browser = getBrowser();\n        if ((browser === null || browser === void 0 ? void 0 : browser.name) === 'Safari' && compareVersions(browser.version, '12.0') < 0) {\n          // https://bugs.webkit.org/show_bug.cgi?id=184911\n          throw new DeviceUnsupportedError('pauseUpstream is not supported on Safari < 12.');\n        }\n        if (((_a = this.sender.transport) === null || _a === void 0 ? void 0 : _a.state) !== 'closed') {\n          yield this.sender.replaceTrack(null);\n        }\n      } finally {\n        unlock();\n      }\n    });\n  }\n  resumeUpstream() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const unlock = yield this.pauseUpstreamLock.lock();\n      try {\n        if (this._isUpstreamPaused === false) {\n          return;\n        }\n        if (!this.sender) {\n          this.log.warn('unable to resume upstream for an unpublished track', this.logContext);\n          return;\n        }\n        this._isUpstreamPaused = false;\n        this.emit(TrackEvent.UpstreamResumed, this);\n        if (((_a = this.sender.transport) === null || _a === void 0 ? void 0 : _a.state) !== 'closed') {\n          // this operation is noop if mediastreamtrack is already being sent\n          yield this.sender.replaceTrack(this.mediaStreamTrack);\n        }\n      } finally {\n        unlock();\n      }\n    });\n  }\n  /**\n   * Gets the RTCStatsReport for the LocalTrack's underlying RTCRtpSender\n   * See https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport\n   *\n   * @returns Promise<RTCStatsReport> | undefined\n   */\n  getRTCStatsReport() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {\n        return;\n      }\n      const statsReport = yield this.sender.getStats();\n      return statsReport;\n    });\n  }\n  /**\n   * Sets a processor on this track.\n   * See https://github.com/livekit/track-processors-js for example usage\n   *\n   * @param processor\n   * @param showProcessedStreamLocally\n   * @returns\n   */\n  setProcessor(processor_1) {\n    return __awaiter(this, arguments, void 0, function (processor) {\n      var _this3 = this;\n      let showProcessedStreamLocally = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      return function* () {\n        var _a;\n        const unlock = yield _this3.trackChangeLock.lock();\n        try {\n          _this3.log.debug('setting up processor', _this3.logContext);\n          const processorElement = document.createElement(_this3.kind);\n          const processorOptions = {\n            kind: _this3.kind,\n            track: _this3._mediaStreamTrack,\n            element: processorElement,\n            audioContext: _this3.audioContext\n          };\n          yield processor.init(processorOptions);\n          _this3.log.debug('processor initialized', _this3.logContext);\n          if (_this3.processor) {\n            yield _this3.internalStopProcessor();\n          }\n          if (_this3.kind === 'unknown') {\n            throw TypeError('cannot set processor on track of unknown kind');\n          }\n          attachToElement(_this3._mediaStreamTrack, processorElement);\n          processorElement.muted = true;\n          processorElement.play().catch(error => {\n            if (error instanceof DOMException && error.name === 'AbortError') {\n              // This happens on Safari when the processor is restarted, try again after a delay\n              _this3.log.warn('failed to play processor element, retrying', Object.assign(Object.assign({}, _this3.logContext), {\n                error\n              }));\n              setTimeout(() => {\n                processorElement.play().catch(err => {\n                  _this3.log.error('failed to play processor element', Object.assign(Object.assign({}, _this3.logContext), {\n                    err\n                  }));\n                });\n              }, 100);\n            } else {\n              _this3.log.error('failed to play processor element', Object.assign(Object.assign({}, _this3.logContext), {\n                error\n              }));\n            }\n          });\n          _this3.processor = processor;\n          _this3.processorElement = processorElement;\n          if (_this3.processor.processedTrack) {\n            for (const el of _this3.attachedElements) {\n              if (el !== _this3.processorElement && showProcessedStreamLocally) {\n                detachTrack(_this3._mediaStreamTrack, el);\n                attachToElement(_this3.processor.processedTrack, el);\n              }\n            }\n            yield (_a = _this3.sender) === null || _a === void 0 ? void 0 : _a.replaceTrack(_this3.processor.processedTrack);\n          }\n          _this3.emit(TrackEvent.TrackProcessorUpdate, _this3.processor);\n        } finally {\n          unlock();\n        }\n      }();\n    });\n  }\n  getProcessor() {\n    return this.processor;\n  }\n  /**\n   * Stops the track processor\n   * See https://github.com/livekit/track-processors-js for example usage\n   *\n   */\n  stopProcessor() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this4 = this;\n      let keepElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      return function* () {\n        const unlock = yield _this4.trackChangeLock.lock();\n        try {\n          yield _this4.internalStopProcessor(keepElement);\n        } finally {\n          unlock();\n        }\n      }();\n    });\n  }\n  /**\n   * @internal\n   * This method assumes the caller has acquired a trackChangeLock already.\n   * The public facing method for stopping the processor is `stopProcessor` and it wraps this method in the trackChangeLock.\n   */\n  internalStopProcessor() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this5 = this;\n      let keepElement = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n      return function* () {\n        var _a, _b;\n        if (!_this5.processor) return;\n        _this5.log.debug('stopping processor', _this5.logContext);\n        (_a = _this5.processor.processedTrack) === null || _a === void 0 ? void 0 : _a.stop();\n        yield _this5.processor.destroy();\n        _this5.processor = undefined;\n        if (!keepElement) {\n          (_b = _this5.processorElement) === null || _b === void 0 ? void 0 : _b.remove();\n          _this5.processorElement = undefined;\n        }\n        // apply original track constraints in case the processor changed them\n        yield _this5._mediaStreamTrack.applyConstraints(_this5._constraints);\n        // force re-setting of the mediaStreamTrack on the sender\n        yield _this5.setMediaStreamTrack(_this5._mediaStreamTrack, true);\n        _this5.emit(TrackEvent.TrackProcessorUpdate);\n      }();\n    });\n  }\n  /** @internal */\n  startPreConnectBuffer() {\n    let timeslice = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100;\n    if (!isRecordingSupported()) {\n      this.log.warn('MediaRecorder is not available, cannot start preconnect buffer', this.logContext);\n      return;\n    }\n    if (!this.localTrackRecorder) {\n      let mimeType = 'audio/webm;codecs=opus';\n      if (!MediaRecorder.isTypeSupported(mimeType)) {\n        // iOS currently only supports video/mp4 as a mime type - even for audio.\n        mimeType = 'video/mp4';\n      }\n      this.localTrackRecorder = new LocalTrackRecorder(this, {\n        mimeType\n      });\n    } else {\n      this.log.warn('preconnect buffer already started');\n      return;\n    }\n    this.localTrackRecorder.start(timeslice);\n    this.autoStopPreConnectBuffer = setTimeout(() => {\n      this.log.warn('preconnect buffer timed out, stopping recording automatically', this.logContext);\n      this.stopPreConnectBuffer();\n    }, PRE_CONNECT_BUFFER_TIMEOUT);\n  }\n  /** @internal */\n  stopPreConnectBuffer() {\n    clearTimeout(this.autoStopPreConnectBuffer);\n    if (this.localTrackRecorder) {\n      this.localTrackRecorder.stop();\n      this.localTrackRecorder = undefined;\n    }\n  }\n  /** @internal */\n  getPreConnectBuffer() {\n    var _a;\n    return (_a = this.localTrackRecorder) === null || _a === void 0 ? void 0 : _a.byteStream;\n  }\n  getPreConnectBufferMimeType() {\n    var _a;\n    return (_a = this.localTrackRecorder) === null || _a === void 0 ? void 0 : _a.mimeType;\n  }\n}class LocalAudioTrack extends LocalTrack {\n  /**\n   * boolean indicating whether enhanced noise cancellation is currently being used on this track\n   */\n  get enhancedNoiseCancellation() {\n    return this.isKrispNoiseFilterEnabled;\n  }\n  /**\n   *\n   * @param mediaTrack\n   * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks\n   * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK\n   */\n  constructor(mediaTrack, constraints) {\n    let userProvidedTrack = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n    let audioContext = arguments.length > 3 ? arguments[3] : undefined;\n    let loggerOptions = arguments.length > 4 ? arguments[4] : undefined;\n    super(mediaTrack, Track.Kind.Audio, constraints, userProvidedTrack, loggerOptions);\n    /** @internal */\n    this.stopOnMute = false;\n    this.isKrispNoiseFilterEnabled = false;\n    this.monitorSender = () => __awaiter(this, void 0, void 0, function* () {\n      if (!this.sender) {\n        this._currentBitrate = 0;\n        return;\n      }\n      let stats;\n      try {\n        stats = yield this.getSenderStats();\n      } catch (e) {\n        this.log.error('could not get audio sender stats', Object.assign(Object.assign({}, this.logContext), {\n          error: e\n        }));\n        return;\n      }\n      if (stats && this.prevStats) {\n        this._currentBitrate = computeBitrate(stats, this.prevStats);\n      }\n      this.prevStats = stats;\n    });\n    this.handleKrispNoiseFilterEnable = () => {\n      this.isKrispNoiseFilterEnabled = true;\n      this.log.debug(\"Krisp noise filter enabled\", this.logContext);\n      this.emit(TrackEvent.AudioTrackFeatureUpdate, this, AudioTrackFeature.TF_ENHANCED_NOISE_CANCELLATION, true);\n    };\n    this.handleKrispNoiseFilterDisable = () => {\n      this.isKrispNoiseFilterEnabled = false;\n      this.log.debug(\"Krisp noise filter disabled\", this.logContext);\n      this.emit(TrackEvent.AudioTrackFeatureUpdate, this, AudioTrackFeature.TF_ENHANCED_NOISE_CANCELLATION, false);\n    };\n    this.audioContext = audioContext;\n    this.checkForSilence();\n  }\n  mute() {\n    const _super = Object.create(null, {\n      mute: {\n        get: () => super.mute\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.muteLock.lock();\n      try {\n        if (this.isMuted) {\n          this.log.debug('Track already muted', this.logContext);\n          return this;\n        }\n        // disabled special handling as it will cause BT headsets to switch communication modes\n        if (this.source === Track.Source.Microphone && this.stopOnMute && !this.isUserProvided) {\n          this.log.debug('stopping mic track', this.logContext);\n          // also stop the track, so that microphone indicator is turned off\n          this._mediaStreamTrack.stop();\n        }\n        yield _super.mute.call(this);\n        return this;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  unmute() {\n    const _super = Object.create(null, {\n      unmute: {\n        get: () => super.unmute\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.muteLock.lock();\n      try {\n        if (!this.isMuted) {\n          this.log.debug('Track already unmuted', this.logContext);\n          return this;\n        }\n        const deviceHasChanged = this._constraints.deviceId && this._mediaStreamTrack.getSettings().deviceId !== unwrapConstraint(this._constraints.deviceId);\n        if (this.source === Track.Source.Microphone && (this.stopOnMute || this._mediaStreamTrack.readyState === 'ended' || deviceHasChanged) && !this.isUserProvided) {\n          this.log.debug('reacquiring mic track', this.logContext);\n          yield this.restartTrack();\n        }\n        yield _super.unmute.call(this);\n        return this;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  restartTrack(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      let constraints;\n      if (options) {\n        const streamConstraints = constraintsForOptions({\n          audio: options\n        });\n        if (typeof streamConstraints.audio !== 'boolean') {\n          constraints = streamConstraints.audio;\n        }\n      }\n      yield this.restart(constraints);\n    });\n  }\n  restart(constraints) {\n    const _super = Object.create(null, {\n      restart: {\n        get: () => super.restart\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      const track = yield _super.restart.call(this, constraints);\n      this.checkForSilence();\n      return track;\n    });\n  }\n  /* @internal */\n  startMonitor() {\n    if (!isWeb()) {\n      return;\n    }\n    if (this.monitorInterval) {\n      return;\n    }\n    this.monitorInterval = setInterval(() => {\n      this.monitorSender();\n    }, monitorFrequency);\n  }\n  setProcessor(processor) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const unlock = yield this.trackChangeLock.lock();\n      try {\n        if (!isReactNative() && !this.audioContext) {\n          throw Error('Audio context needs to be set on LocalAudioTrack in order to enable processors');\n        }\n        if (this.processor) {\n          yield this.internalStopProcessor();\n        }\n        const processorOptions = {\n          kind: this.kind,\n          track: this._mediaStreamTrack,\n          // RN won't have or use AudioContext\n          audioContext: this.audioContext\n        };\n        this.log.debug(\"setting up audio processor \".concat(processor.name), this.logContext);\n        yield processor.init(processorOptions);\n        this.processor = processor;\n        if (this.processor.processedTrack) {\n          yield (_a = this.sender) === null || _a === void 0 ? void 0 : _a.replaceTrack(this.processor.processedTrack);\n          this.processor.processedTrack.addEventListener('enable-lk-krisp-noise-filter', this.handleKrispNoiseFilterEnable);\n          this.processor.processedTrack.addEventListener('disable-lk-krisp-noise-filter', this.handleKrispNoiseFilterDisable);\n        }\n        this.emit(TrackEvent.TrackProcessorUpdate, this.processor);\n      } finally {\n        unlock();\n      }\n    });\n  }\n  /**\n   * @internal\n   * @experimental\n   */\n  setAudioContext(audioContext) {\n    this.audioContext = audioContext;\n  }\n  getSenderStats() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {\n        return undefined;\n      }\n      const stats = yield this.sender.getStats();\n      let audioStats;\n      stats.forEach(v => {\n        if (v.type === 'outbound-rtp') {\n          audioStats = {\n            type: 'audio',\n            streamId: v.id,\n            packetsSent: v.packetsSent,\n            packetsLost: v.packetsLost,\n            bytesSent: v.bytesSent,\n            timestamp: v.timestamp,\n            roundTripTime: v.roundTripTime,\n            jitter: v.jitter\n          };\n        }\n      });\n      return audioStats;\n    });\n  }\n  checkForSilence() {\n    return __awaiter(this, void 0, void 0, function* () {\n      const trackIsSilent = yield detectSilence(this);\n      if (trackIsSilent) {\n        if (!this.isMuted) {\n          this.log.debug('silence detected on local audio track', this.logContext);\n        }\n        this.emit(TrackEvent.AudioSilenceDetected);\n      }\n      return trackIsSilent;\n    });\n  }\n}/** @internal */\nfunction mediaTrackToLocalTrack(mediaStreamTrack, constraints, loggerOptions) {\n  switch (mediaStreamTrack.kind) {\n    case 'audio':\n      return new LocalAudioTrack(mediaStreamTrack, constraints, false, undefined, loggerOptions);\n    case 'video':\n      return new LocalVideoTrack(mediaStreamTrack, constraints, false, loggerOptions);\n    default:\n      throw new TrackInvalidError(\"unsupported track type: \".concat(mediaStreamTrack.kind));\n  }\n}\n/* @internal */\nconst presets169 = Object.values(VideoPresets);\n/* @internal */\nconst presets43 = Object.values(VideoPresets43);\n/* @internal */\nconst presetsScreenShare = Object.values(ScreenSharePresets);\n/* @internal */\nconst defaultSimulcastPresets169 = [VideoPresets.h180, VideoPresets.h360];\n/* @internal */\nconst defaultSimulcastPresets43 = [VideoPresets43.h180, VideoPresets43.h360];\n/* @internal */\nconst computeDefaultScreenShareSimulcastPresets = fromPreset => {\n  const layers = [{\n    scaleResolutionDownBy: 2,\n    fps: fromPreset.encoding.maxFramerate\n  }];\n  return layers.map(t => {\n    var _a, _b;\n    return new VideoPreset(Math.floor(fromPreset.width / t.scaleResolutionDownBy), Math.floor(fromPreset.height / t.scaleResolutionDownBy), Math.max(150000, Math.floor(fromPreset.encoding.maxBitrate / (Math.pow(t.scaleResolutionDownBy, 2) * (((_a = fromPreset.encoding.maxFramerate) !== null && _a !== void 0 ? _a : 30) / ((_b = t.fps) !== null && _b !== void 0 ? _b : 30))))), t.fps, fromPreset.encoding.priority);\n  });\n};\n// /**\n//  *\n//  * @internal\n//  * @experimental\n//  */\n// const computeDefaultMultiCodecSimulcastEncodings = (width: number, height: number) => {\n//   // use vp8 as a default\n//   const vp8 = determineAppropriateEncoding(false, width, height);\n//   const vp9 = { ...vp8, maxBitrate: vp8.maxBitrate * 0.9 };\n//   const h264 = { ...vp8, maxBitrate: vp8.maxBitrate * 1.1 };\n//   const av1 = { ...vp8, maxBitrate: vp8.maxBitrate * 0.7 };\n//   return {\n//     vp8,\n//     vp9,\n//     h264,\n//     av1,\n//   };\n// };\nconst videoRids = ['q', 'h', 'f'];\n/* @internal */\nfunction computeVideoEncodings(isScreenShare, width, height, options) {\n  var _a, _b;\n  let videoEncoding = options === null || options === void 0 ? void 0 : options.videoEncoding;\n  if (isScreenShare) {\n    videoEncoding = options === null || options === void 0 ? void 0 : options.screenShareEncoding;\n  }\n  const useSimulcast = options === null || options === void 0 ? void 0 : options.simulcast;\n  const scalabilityMode = options === null || options === void 0 ? void 0 : options.scalabilityMode;\n  const videoCodec = options === null || options === void 0 ? void 0 : options.videoCodec;\n  if (!videoEncoding && !useSimulcast && !scalabilityMode || !width || !height) {\n    // when we aren't simulcasting or svc, will need to return a single encoding without\n    // capping bandwidth. we always require a encoding for dynacast\n    return [{}];\n  }\n  if (!videoEncoding) {\n    // find the right encoding based on width/height\n    videoEncoding = determineAppropriateEncoding(isScreenShare, width, height, videoCodec);\n    livekitLogger.debug('using video encoding', videoEncoding);\n  }\n  const sourceFramerate = videoEncoding.maxFramerate;\n  const original = new VideoPreset(width, height, videoEncoding.maxBitrate, videoEncoding.maxFramerate, videoEncoding.priority);\n  if (scalabilityMode && isSVCCodec(videoCodec)) {\n    const sm = new ScalabilityMode(scalabilityMode);\n    const encodings = [];\n    if (sm.spatial > 3) {\n      throw new Error(\"unsupported scalabilityMode: \".concat(scalabilityMode));\n    }\n    // Before M113 in Chrome, defining multiple encodings with an SVC codec indicated\n    // that SVC mode should be used. Safari still works this way.\n    // This is a bit confusing but is due to how libwebrtc interpreted the encodings field\n    // before M113.\n    // Announced here: https://groups.google.com/g/discuss-webrtc/c/-QQ3pxrl-fw?pli=1\n    const browser = getBrowser();\n    if (isSafariBased() ||\n    // Even tho RN runs M114, it does not produce SVC layers when a single encoding\n    // is provided. So we'll use the legacy SVC specification for now.\n    // TODO: when we upstream libwebrtc, this will need additional verification\n    isReactNative() || (browser === null || browser === void 0 ? void 0 : browser.name) === 'Chrome' && compareVersions(browser === null || browser === void 0 ? void 0 : browser.version, '113') < 0) {\n      const bitratesRatio = sm.suffix == 'h' ? 2 : 3;\n      // safari 18.4 uses a different svc API that requires scaleResolutionDownBy to be set.\n      const requireScale = isSafariSvcApi(browser);\n      for (let i = 0; i < sm.spatial; i += 1) {\n        // in legacy SVC, scaleResolutionDownBy cannot be set\n        encodings.push({\n          rid: videoRids[2 - i],\n          maxBitrate: videoEncoding.maxBitrate / Math.pow(bitratesRatio, i),\n          maxFramerate: original.encoding.maxFramerate,\n          scaleResolutionDownBy: requireScale ? Math.pow(2, i) : undefined\n        });\n      }\n      // legacy SVC, scalabilityMode is set only on the first encoding\n      /* @ts-ignore */\n      encodings[0].scalabilityMode = scalabilityMode;\n    } else {\n      encodings.push({\n        maxBitrate: videoEncoding.maxBitrate,\n        maxFramerate: original.encoding.maxFramerate,\n        /* @ts-ignore */\n        scalabilityMode: scalabilityMode\n      });\n    }\n    if (original.encoding.priority) {\n      encodings[0].priority = original.encoding.priority;\n      encodings[0].networkPriority = original.encoding.priority;\n    }\n    livekitLogger.debug(\"using svc encoding\", {\n      encodings\n    });\n    return encodings;\n  }\n  if (!useSimulcast) {\n    return [videoEncoding];\n  }\n  let presets = [];\n  if (isScreenShare) {\n    presets = (_a = sortPresets(options === null || options === void 0 ? void 0 : options.screenShareSimulcastLayers)) !== null && _a !== void 0 ? _a : defaultSimulcastLayers(isScreenShare, original);\n  } else {\n    presets = (_b = sortPresets(options === null || options === void 0 ? void 0 : options.videoSimulcastLayers)) !== null && _b !== void 0 ? _b : defaultSimulcastLayers(isScreenShare, original);\n  }\n  let midPreset;\n  if (presets.length > 0) {\n    const lowPreset = presets[0];\n    if (presets.length > 1) {\n      [, midPreset] = presets;\n    }\n    // NOTE:\n    //   1. Ordering of these encodings is important. Chrome seems\n    //      to use the index into encodings to decide which layer\n    //      to disable when CPU constrained.\n    //      So encodings should be ordered in increasing spatial\n    //      resolution order.\n    //   2. livekit-server translates rids into layers. So, all encodings\n    //      should have the base layer `q` and then more added\n    //      based on other conditions.\n    const size = Math.max(width, height);\n    if (size >= 960 && midPreset) {\n      return encodingsFromPresets(width, height, [lowPreset, midPreset, original], sourceFramerate);\n    }\n    if (size >= 480) {\n      return encodingsFromPresets(width, height, [lowPreset, original], sourceFramerate);\n    }\n  }\n  return encodingsFromPresets(width, height, [original]);\n}\nfunction computeTrackBackupEncodings(track, videoCodec, opts) {\n  var _a, _b, _c, _d;\n  // backupCodec should not be true anymore, default codec is set in LocalParticipant.publish\n  if (!opts.backupCodec || opts.backupCodec === true || opts.backupCodec.codec === opts.videoCodec) {\n    // backup codec publishing is disabled\n    return;\n  }\n  if (videoCodec !== opts.backupCodec.codec) {\n    livekitLogger.warn('requested a different codec than specified as backup', {\n      serverRequested: videoCodec,\n      backup: opts.backupCodec.codec\n    });\n  }\n  opts.videoCodec = videoCodec;\n  // use backup encoding setting as videoEncoding for backup codec publishing\n  opts.videoEncoding = opts.backupCodec.encoding;\n  const settings = track.mediaStreamTrack.getSettings();\n  const width = (_a = settings.width) !== null && _a !== void 0 ? _a : (_b = track.dimensions) === null || _b === void 0 ? void 0 : _b.width;\n  const height = (_c = settings.height) !== null && _c !== void 0 ? _c : (_d = track.dimensions) === null || _d === void 0 ? void 0 : _d.height;\n  // disable simulcast for screenshare backup codec since L1Tx is used by primary codec\n  if (track.source === Track.Source.ScreenShare && opts.simulcast) {\n    opts.simulcast = false;\n  }\n  const encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, width, height, opts);\n  return encodings;\n}\n/* @internal */\nfunction determineAppropriateEncoding(isScreenShare, width, height, codec) {\n  const presets = presetsForResolution(isScreenShare, width, height);\n  let {\n    encoding\n  } = presets[0];\n  // handle portrait by swapping dimensions\n  const size = Math.max(width, height);\n  for (let i = 0; i < presets.length; i += 1) {\n    const preset = presets[i];\n    encoding = preset.encoding;\n    if (preset.width >= size) {\n      break;\n    }\n  }\n  // presets are based on the assumption of vp8 as a codec\n  // for other codecs we adjust the maxBitrate if no specific videoEncoding has been provided\n  // users should override these with ones that are optimized for their use case\n  // NOTE: SVC codec bitrates are inclusive of all scalability layers. while\n  // bitrate for non-SVC codecs does not include other simulcast layers.\n  if (codec) {\n    switch (codec) {\n      case 'av1':\n      case 'h265':\n        encoding = Object.assign({}, encoding);\n        encoding.maxBitrate = encoding.maxBitrate * 0.7;\n        break;\n      case 'vp9':\n        encoding = Object.assign({}, encoding);\n        encoding.maxBitrate = encoding.maxBitrate * 0.85;\n        break;\n    }\n  }\n  return encoding;\n}\n/* @internal */\nfunction presetsForResolution(isScreenShare, width, height) {\n  if (isScreenShare) {\n    return presetsScreenShare;\n  }\n  const aspect = width > height ? width / height : height / width;\n  if (Math.abs(aspect - 16.0 / 9) < Math.abs(aspect - 4.0 / 3)) {\n    return presets169;\n  }\n  return presets43;\n}\n/* @internal */\nfunction defaultSimulcastLayers(isScreenShare, original) {\n  if (isScreenShare) {\n    return computeDefaultScreenShareSimulcastPresets(original);\n  }\n  const {\n    width,\n    height\n  } = original;\n  const aspect = width > height ? width / height : height / width;\n  if (Math.abs(aspect - 16.0 / 9) < Math.abs(aspect - 4.0 / 3)) {\n    return defaultSimulcastPresets169;\n  }\n  return defaultSimulcastPresets43;\n}\n// presets should be ordered by low, medium, high\nfunction encodingsFromPresets(width, height, presets, sourceFramerate) {\n  const encodings = [];\n  presets.forEach((preset, idx) => {\n    if (idx >= videoRids.length) {\n      return;\n    }\n    const size = Math.min(width, height);\n    const rid = videoRids[idx];\n    const encoding = {\n      rid,\n      scaleResolutionDownBy: Math.max(1, size / Math.min(preset.width, preset.height)),\n      maxBitrate: preset.encoding.maxBitrate\n    };\n    // ensure that the sourceFramerate is the highest framerate applied across all layers so that the\n    // original encoding doesn't get bumped unintentionally by any of the other layers\n    const maxFramerate = sourceFramerate && preset.encoding.maxFramerate ? Math.min(sourceFramerate, preset.encoding.maxFramerate) : preset.encoding.maxFramerate;\n    if (maxFramerate) {\n      encoding.maxFramerate = maxFramerate;\n    }\n    const canSetPriority = isFireFox() || idx === 0;\n    if (preset.encoding.priority && canSetPriority) {\n      encoding.priority = preset.encoding.priority;\n      encoding.networkPriority = preset.encoding.priority;\n    }\n    encodings.push(encoding);\n  });\n  // RN ios simulcast requires all same framerates.\n  if (isReactNative() && getReactNativeOs() === 'ios') {\n    let topFramerate = undefined;\n    encodings.forEach(encoding => {\n      if (!topFramerate) {\n        topFramerate = encoding.maxFramerate;\n      } else if (encoding.maxFramerate && encoding.maxFramerate > topFramerate) {\n        topFramerate = encoding.maxFramerate;\n      }\n    });\n    let notifyOnce = true;\n    encodings.forEach(encoding => {\n      var _a;\n      if (encoding.maxFramerate != topFramerate) {\n        if (notifyOnce) {\n          notifyOnce = false;\n          livekitLogger.info(\"Simulcast on iOS React-Native requires all encodings to share the same framerate.\");\n        }\n        livekitLogger.info(\"Setting framerate of encoding \\\"\".concat((_a = encoding.rid) !== null && _a !== void 0 ? _a : '', \"\\\" to \").concat(topFramerate));\n        encoding.maxFramerate = topFramerate;\n      }\n    });\n  }\n  return encodings;\n}\n/** @internal */\nfunction sortPresets(presets) {\n  if (!presets) return;\n  return presets.sort((a, b) => {\n    const {\n      encoding: aEnc\n    } = a;\n    const {\n      encoding: bEnc\n    } = b;\n    if (aEnc.maxBitrate > bEnc.maxBitrate) {\n      return 1;\n    }\n    if (aEnc.maxBitrate < bEnc.maxBitrate) return -1;\n    if (aEnc.maxBitrate === bEnc.maxBitrate && aEnc.maxFramerate && bEnc.maxFramerate) {\n      return aEnc.maxFramerate > bEnc.maxFramerate ? 1 : -1;\n    }\n    return 0;\n  });\n}\n/** @internal */\nclass ScalabilityMode {\n  constructor(scalabilityMode) {\n    const results = scalabilityMode.match(/^L(\\d)T(\\d)(h|_KEY|_KEY_SHIFT){0,1}$/);\n    if (!results) {\n      throw new Error('invalid scalability mode');\n    }\n    this.spatial = parseInt(results[1]);\n    this.temporal = parseInt(results[2]);\n    if (results.length > 3) {\n      switch (results[3]) {\n        case 'h':\n        case '_KEY':\n        case '_KEY_SHIFT':\n          this.suffix = results[3];\n      }\n    }\n  }\n  toString() {\n    var _a;\n    return \"L\".concat(this.spatial, \"T\").concat(this.temporal).concat((_a = this.suffix) !== null && _a !== void 0 ? _a : '');\n  }\n}\nfunction getDefaultDegradationPreference(track) {\n  // a few of reasons we have different default paths:\n  // 1. without this, Chrome seems to aggressively resize the SVC video stating `quality-limitation: bandwidth` even when BW isn't an issue\n  // 2. since we are overriding contentHint to motion (to workaround L1T3 publishing), it overrides the default degradationPreference to `balanced`\n  if (track.source === Track.Source.ScreenShare || track.constraints.height && unwrapConstraint(track.constraints.height) >= 1080) {\n    return 'maintain-resolution';\n  } else {\n    return 'balanced';\n  }\n}const refreshSubscribedCodecAfterNewCodec = 5000;\nclass LocalVideoTrack extends LocalTrack {\n  get sender() {\n    return this._sender;\n  }\n  set sender(sender) {\n    this._sender = sender;\n    if (this.degradationPreference) {\n      this.setDegradationPreference(this.degradationPreference);\n    }\n  }\n  /**\n   *\n   * @param mediaTrack\n   * @param constraints MediaTrackConstraints that are being used when restarting or reacquiring tracks\n   * @param userProvidedTrack Signals to the SDK whether or not the mediaTrack should be managed (i.e. released and reacquired) internally by the SDK\n   */\n  constructor(mediaTrack, constraints) {\n    let userProvidedTrack = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n    let loggerOptions = arguments.length > 3 ? arguments[3] : undefined;\n    super(mediaTrack, Track.Kind.Video, constraints, userProvidedTrack, loggerOptions);\n    /* @internal */\n    this.simulcastCodecs = new Map();\n    this.degradationPreference = 'balanced';\n    this.isCpuConstrained = false;\n    this.optimizeForPerformance = false;\n    this.monitorSender = () => __awaiter(this, void 0, void 0, function* () {\n      if (!this.sender) {\n        this._currentBitrate = 0;\n        return;\n      }\n      let stats;\n      try {\n        stats = yield this.getSenderStats();\n      } catch (e) {\n        this.log.error('could not get video sender stats', Object.assign(Object.assign({}, this.logContext), {\n          error: e\n        }));\n        return;\n      }\n      const statsMap = new Map(stats.map(s => [s.rid, s]));\n      const isCpuConstrained = stats.some(s => s.qualityLimitationReason === 'cpu');\n      if (isCpuConstrained !== this.isCpuConstrained) {\n        this.isCpuConstrained = isCpuConstrained;\n        if (this.isCpuConstrained) {\n          this.emit(TrackEvent.CpuConstrained);\n        }\n      }\n      if (this.prevStats) {\n        let totalBitrate = 0;\n        statsMap.forEach((s, key) => {\n          var _a;\n          const prev = (_a = this.prevStats) === null || _a === void 0 ? void 0 : _a.get(key);\n          totalBitrate += computeBitrate(s, prev);\n        });\n        this._currentBitrate = totalBitrate;\n      }\n      this.prevStats = statsMap;\n    });\n    this.senderLock = new _();\n  }\n  get isSimulcast() {\n    if (this.sender && this.sender.getParameters().encodings.length > 1) {\n      return true;\n    }\n    return false;\n  }\n  /* @internal */\n  startMonitor(signalClient) {\n    var _a;\n    this.signalClient = signalClient;\n    if (!isWeb()) {\n      return;\n    }\n    // save original encodings\n    // TODO : merge simulcast tracks stats\n    const params = (_a = this.sender) === null || _a === void 0 ? void 0 : _a.getParameters();\n    if (params) {\n      this.encodings = params.encodings;\n    }\n    if (this.monitorInterval) {\n      return;\n    }\n    this.monitorInterval = setInterval(() => {\n      this.monitorSender();\n    }, monitorFrequency);\n  }\n  stop() {\n    this._mediaStreamTrack.getConstraints();\n    this.simulcastCodecs.forEach(trackInfo => {\n      trackInfo.mediaStreamTrack.stop();\n    });\n    super.stop();\n  }\n  pauseUpstream() {\n    const _super = Object.create(null, {\n      pauseUpstream: {\n        get: () => super.pauseUpstream\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, e_1, _b, _c;\n      var _d;\n      yield _super.pauseUpstream.call(this);\n      try {\n        for (var _e = true, _f = __asyncValues(this.simulcastCodecs.values()), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {\n          _c = _g.value;\n          _e = false;\n          const sc = _c;\n          yield (_d = sc.sender) === null || _d === void 0 ? void 0 : _d.replaceTrack(null);\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n    });\n  }\n  resumeUpstream() {\n    const _super = Object.create(null, {\n      resumeUpstream: {\n        get: () => super.resumeUpstream\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, e_2, _b, _c;\n      var _d;\n      yield _super.resumeUpstream.call(this);\n      try {\n        for (var _e = true, _f = __asyncValues(this.simulcastCodecs.values()), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {\n          _c = _g.value;\n          _e = false;\n          const sc = _c;\n          yield (_d = sc.sender) === null || _d === void 0 ? void 0 : _d.replaceTrack(sc.mediaStreamTrack);\n        }\n      } catch (e_2_1) {\n        e_2 = {\n          error: e_2_1\n        };\n      } finally {\n        try {\n          if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);\n        } finally {\n          if (e_2) throw e_2.error;\n        }\n      }\n    });\n  }\n  mute() {\n    const _super = Object.create(null, {\n      mute: {\n        get: () => super.mute\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.muteLock.lock();\n      try {\n        if (this.isMuted) {\n          this.log.debug('Track already muted', this.logContext);\n          return this;\n        }\n        if (this.source === Track.Source.Camera && !this.isUserProvided) {\n          this.log.debug('stopping camera track', this.logContext);\n          // also stop the track, so that camera indicator is turned off\n          this._mediaStreamTrack.stop();\n        }\n        yield _super.mute.call(this);\n        return this;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  unmute() {\n    const _super = Object.create(null, {\n      unmute: {\n        get: () => super.unmute\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.muteLock.lock();\n      try {\n        if (!this.isMuted) {\n          this.log.debug('Track already unmuted', this.logContext);\n          return this;\n        }\n        if (this.source === Track.Source.Camera && !this.isUserProvided) {\n          this.log.debug('reacquiring camera track', this.logContext);\n          yield this.restartTrack();\n        }\n        yield _super.unmute.call(this);\n        return this;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  setTrackMuted(muted) {\n    super.setTrackMuted(muted);\n    for (const sc of this.simulcastCodecs.values()) {\n      sc.mediaStreamTrack.enabled = !muted;\n    }\n  }\n  getSenderStats() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!((_a = this.sender) === null || _a === void 0 ? void 0 : _a.getStats)) {\n        return [];\n      }\n      const items = [];\n      const stats = yield this.sender.getStats();\n      stats.forEach(v => {\n        var _a;\n        if (v.type === 'outbound-rtp') {\n          const vs = {\n            type: 'video',\n            streamId: v.id,\n            frameHeight: v.frameHeight,\n            frameWidth: v.frameWidth,\n            framesPerSecond: v.framesPerSecond,\n            framesSent: v.framesSent,\n            firCount: v.firCount,\n            pliCount: v.pliCount,\n            nackCount: v.nackCount,\n            packetsSent: v.packetsSent,\n            bytesSent: v.bytesSent,\n            qualityLimitationReason: v.qualityLimitationReason,\n            qualityLimitationDurations: v.qualityLimitationDurations,\n            qualityLimitationResolutionChanges: v.qualityLimitationResolutionChanges,\n            rid: (_a = v.rid) !== null && _a !== void 0 ? _a : v.id,\n            retransmittedPacketsSent: v.retransmittedPacketsSent,\n            targetBitrate: v.targetBitrate,\n            timestamp: v.timestamp\n          };\n          // locate the appropriate remote-inbound-rtp item\n          const r = stats.get(v.remoteId);\n          if (r) {\n            vs.jitter = r.jitter;\n            vs.packetsLost = r.packetsLost;\n            vs.roundTripTime = r.roundTripTime;\n          }\n          items.push(vs);\n        }\n      });\n      // make sure highest res layer is always first\n      items.sort((a, b) => {\n        var _a, _b;\n        return ((_a = b.frameWidth) !== null && _a !== void 0 ? _a : 0) - ((_b = a.frameWidth) !== null && _b !== void 0 ? _b : 0);\n      });\n      return items;\n    });\n  }\n  setPublishingQuality(maxQuality) {\n    const qualities = [];\n    for (let q = VideoQuality.LOW; q <= VideoQuality.HIGH; q += 1) {\n      qualities.push(new SubscribedQuality({\n        quality: q,\n        enabled: q <= maxQuality\n      }));\n    }\n    this.log.debug(\"setting publishing quality. max quality \".concat(maxQuality), this.logContext);\n    this.setPublishingLayers(isSVCCodec(this.codec), qualities);\n  }\n  restartTrack(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, e_3, _b, _c;\n      var _d;\n      let constraints;\n      if (options) {\n        const streamConstraints = constraintsForOptions({\n          video: options\n        });\n        if (typeof streamConstraints.video !== 'boolean') {\n          constraints = streamConstraints.video;\n        }\n      }\n      yield this.restart(constraints);\n      // reset cpu constrained state after track is restarted\n      this.isCpuConstrained = false;\n      try {\n        for (var _e = true, _f = __asyncValues(this.simulcastCodecs.values()), _g; _g = yield _f.next(), _a = _g.done, !_a; _e = true) {\n          _c = _g.value;\n          _e = false;\n          const sc = _c;\n          if (sc.sender && ((_d = sc.sender.transport) === null || _d === void 0 ? void 0 : _d.state) !== 'closed') {\n            sc.mediaStreamTrack = this.mediaStreamTrack.clone();\n            yield sc.sender.replaceTrack(sc.mediaStreamTrack);\n          }\n        }\n      } catch (e_3_1) {\n        e_3 = {\n          error: e_3_1\n        };\n      } finally {\n        try {\n          if (!_e && !_a && (_b = _f.return)) yield _b.call(_f);\n        } finally {\n          if (e_3) throw e_3.error;\n        }\n      }\n    });\n  }\n  setProcessor(processor_1) {\n    const _super = Object.create(null, {\n      setProcessor: {\n        get: () => super.setProcessor\n      }\n    });\n    return __awaiter(this, arguments, void 0, function (processor) {\n      var _this = this;\n      let showProcessedStreamLocally = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      return function* () {\n        var _a, e_4, _b, _c;\n        var _d, _e;\n        yield _super.setProcessor.call(_this, processor, showProcessedStreamLocally);\n        if ((_d = _this.processor) === null || _d === void 0 ? void 0 : _d.processedTrack) {\n          try {\n            for (var _f = true, _g = __asyncValues(_this.simulcastCodecs.values()), _h; _h = yield _g.next(), _a = _h.done, !_a; _f = true) {\n              _c = _h.value;\n              _f = false;\n              const sc = _c;\n              yield (_e = sc.sender) === null || _e === void 0 ? void 0 : _e.replaceTrack(_this.processor.processedTrack);\n            }\n          } catch (e_4_1) {\n            e_4 = {\n              error: e_4_1\n            };\n          } finally {\n            try {\n              if (!_f && !_a && (_b = _g.return)) yield _b.call(_g);\n            } finally {\n              if (e_4) throw e_4.error;\n            }\n          }\n        }\n      }();\n    });\n  }\n  setDegradationPreference(preference) {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.degradationPreference = preference;\n      if (this.sender) {\n        try {\n          this.log.debug(\"setting degradationPreference to \".concat(preference), this.logContext);\n          const params = this.sender.getParameters();\n          params.degradationPreference = preference;\n          this.sender.setParameters(params);\n        } catch (e) {\n          this.log.warn(\"failed to set degradationPreference\", Object.assign({\n            error: e\n          }, this.logContext));\n        }\n      }\n    });\n  }\n  addSimulcastTrack(codec, encodings) {\n    if (this.simulcastCodecs.has(codec)) {\n      this.log.error(\"\".concat(codec, \" already added, skipping adding simulcast codec\"), this.logContext);\n      return;\n    }\n    const simulcastCodecInfo = {\n      codec,\n      mediaStreamTrack: this.mediaStreamTrack.clone(),\n      sender: undefined,\n      encodings\n    };\n    this.simulcastCodecs.set(codec, simulcastCodecInfo);\n    return simulcastCodecInfo;\n  }\n  setSimulcastTrackSender(codec, sender) {\n    const simulcastCodecInfo = this.simulcastCodecs.get(codec);\n    if (!simulcastCodecInfo) {\n      return;\n    }\n    simulcastCodecInfo.sender = sender;\n    // browser will reenable disabled codec/layers after new codec has been published,\n    // so refresh subscribedCodecs after publish a new codec\n    setTimeout(() => {\n      if (this.subscribedCodecs) {\n        this.setPublishingCodecs(this.subscribedCodecs);\n      }\n    }, refreshSubscribedCodecAfterNewCodec);\n  }\n  /**\n   * @internal\n   * Sets codecs that should be publishing, returns new codecs that have not yet\n   * been published\n   */\n  setPublishingCodecs(codecs) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, codecs_1, codecs_1_1;\n      var _b, e_5, _c, _d;\n      this.log.debug('setting publishing codecs', Object.assign(Object.assign({}, this.logContext), {\n        codecs,\n        currentCodec: this.codec\n      }));\n      // only enable simulcast codec for preference codec setted\n      if (!this.codec && codecs.length > 0) {\n        yield this.setPublishingLayers(isSVCCodec(codecs[0].codec), codecs[0].qualities);\n        return [];\n      }\n      this.subscribedCodecs = codecs;\n      const newCodecs = [];\n      try {\n        for (_a = true, codecs_1 = __asyncValues(codecs); codecs_1_1 = yield codecs_1.next(), _b = codecs_1_1.done, !_b; _a = true) {\n          _d = codecs_1_1.value;\n          _a = false;\n          const codec = _d;\n          if (!this.codec || this.codec === codec.codec) {\n            yield this.setPublishingLayers(isSVCCodec(codec.codec), codec.qualities);\n          } else {\n            const simulcastCodecInfo = this.simulcastCodecs.get(codec.codec);\n            this.log.debug(\"try setPublishingCodec for \".concat(codec.codec), Object.assign(Object.assign({}, this.logContext), {\n              simulcastCodecInfo\n            }));\n            if (!simulcastCodecInfo || !simulcastCodecInfo.sender) {\n              for (const q of codec.qualities) {\n                if (q.enabled) {\n                  newCodecs.push(codec.codec);\n                  break;\n                }\n              }\n            } else if (simulcastCodecInfo.encodings) {\n              this.log.debug(\"try setPublishingLayersForSender \".concat(codec.codec), this.logContext);\n              yield setPublishingLayersForSender(simulcastCodecInfo.sender, simulcastCodecInfo.encodings, codec.qualities, this.senderLock, isSVCCodec(codec.codec), this.log, this.logContext);\n            }\n          }\n        }\n      } catch (e_5_1) {\n        e_5 = {\n          error: e_5_1\n        };\n      } finally {\n        try {\n          if (!_a && !_b && (_c = codecs_1.return)) yield _c.call(codecs_1);\n        } finally {\n          if (e_5) throw e_5.error;\n        }\n      }\n      return newCodecs;\n    });\n  }\n  /**\n   * @internal\n   * Sets layers that should be publishing\n   */\n  setPublishingLayers(isSvc, qualities) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.optimizeForPerformance) {\n        this.log.info('skipping setPublishingLayers due to optimized publishing performance', Object.assign(Object.assign({}, this.logContext), {\n          qualities\n        }));\n        return;\n      }\n      this.log.debug('setting publishing layers', Object.assign(Object.assign({}, this.logContext), {\n        qualities\n      }));\n      if (!this.sender || !this.encodings) {\n        return;\n      }\n      yield setPublishingLayersForSender(this.sender, this.encodings, qualities, this.senderLock, isSvc, this.log, this.logContext);\n    });\n  }\n  /**\n   * Designed for lower powered devices, reduces video publishing quality and disables simulcast.\n   * @experimental\n   */\n  prioritizePerformance() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.sender) {\n        throw new Error('sender not found');\n      }\n      const unlock = yield this.senderLock.lock();\n      try {\n        this.optimizeForPerformance = true;\n        const params = this.sender.getParameters();\n        params.encodings = params.encodings.map((e, idx) => {\n          var _a;\n          return Object.assign(Object.assign({}, e), {\n            active: idx === 0,\n            scaleResolutionDownBy: Math.max(1, Math.ceil(((_a = this.mediaStreamTrack.getSettings().height) !== null && _a !== void 0 ? _a : 360) / 360)),\n            scalabilityMode: idx === 0 && isSVCCodec(this.codec) ? 'L1T3' : undefined,\n            maxFramerate: idx === 0 ? 15 : 0,\n            maxBitrate: idx === 0 ? e.maxBitrate : 0\n          });\n        });\n        this.log.debug('setting performance optimised encodings', Object.assign(Object.assign({}, this.logContext), {\n          encodings: params.encodings\n        }));\n        this.encodings = params.encodings;\n        yield this.sender.setParameters(params);\n      } catch (e) {\n        this.log.error('failed to set performance optimised encodings', Object.assign(Object.assign({}, this.logContext), {\n          error: e\n        }));\n        this.optimizeForPerformance = false;\n      } finally {\n        unlock();\n      }\n    });\n  }\n  handleAppVisibilityChanged() {\n    const _super = Object.create(null, {\n      handleAppVisibilityChanged: {\n        get: () => super.handleAppVisibilityChanged\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      yield _super.handleAppVisibilityChanged.call(this);\n      if (!isMobile()) return;\n      if (this.isInBackground && this.source === Track.Source.Camera) {\n        this._mediaStreamTrack.enabled = false;\n      }\n    });\n  }\n}\nfunction setPublishingLayersForSender(sender, senderEncodings, qualities, senderLock, isSVC, log, logContext) {\n  return __awaiter(this, void 0, void 0, function* () {\n    const unlock = yield senderLock.lock();\n    log.debug('setPublishingLayersForSender', Object.assign(Object.assign({}, logContext), {\n      sender,\n      qualities,\n      senderEncodings\n    }));\n    try {\n      const params = sender.getParameters();\n      const {\n        encodings\n      } = params;\n      if (!encodings) {\n        return;\n      }\n      if (encodings.length !== senderEncodings.length) {\n        log.warn('cannot set publishing layers, encodings mismatch', Object.assign(Object.assign({}, logContext), {\n          encodings,\n          senderEncodings\n        }));\n        return;\n      }\n      let hasChanged = false;\n      /* disable closable spatial layer as it has video blur / frozen issue with current server / client\n      1. chrome 113: when switching to up layer with scalability Mode change, it will generate a\n            low resolution frame and recover very quickly, but noticable\n      2. livekit sfu: additional pli request cause video frozen for a few frames, also noticable */\n      const closableSpatial = false;\n      /* @ts-ignore */\n      if (closableSpatial && encodings[0].scalabilityMode) ; else {\n        if (isSVC) {\n          const hasEnabledEncoding = qualities.some(q => q.enabled);\n          if (hasEnabledEncoding) {\n            qualities.forEach(q => q.enabled = true);\n          }\n        }\n        // simulcast dynacast encodings\n        encodings.forEach((encoding, idx) => {\n          var _a;\n          let rid = (_a = encoding.rid) !== null && _a !== void 0 ? _a : '';\n          if (rid === '') {\n            rid = 'q';\n          }\n          const quality = videoQualityForRid(rid);\n          const subscribedQuality = qualities.find(q => q.quality === quality);\n          if (!subscribedQuality) {\n            return;\n          }\n          if (encoding.active !== subscribedQuality.enabled) {\n            hasChanged = true;\n            encoding.active = subscribedQuality.enabled;\n            log.debug(\"setting layer \".concat(subscribedQuality.quality, \" to \").concat(encoding.active ? 'enabled' : 'disabled'), logContext);\n            // FireFox does not support setting encoding.active to false, so we\n            // have a workaround of lowering its bitrate and resolution to the min.\n            if (isFireFox()) {\n              if (subscribedQuality.enabled) {\n                encoding.scaleResolutionDownBy = senderEncodings[idx].scaleResolutionDownBy;\n                encoding.maxBitrate = senderEncodings[idx].maxBitrate;\n                /* @ts-ignore */\n                encoding.maxFrameRate = senderEncodings[idx].maxFrameRate;\n              } else {\n                encoding.scaleResolutionDownBy = 4;\n                encoding.maxBitrate = 10;\n                /* @ts-ignore */\n                encoding.maxFrameRate = 2;\n              }\n            }\n          }\n        });\n      }\n      if (hasChanged) {\n        params.encodings = encodings;\n        log.debug(\"setting encodings\", Object.assign(Object.assign({}, logContext), {\n          encodings: params.encodings\n        }));\n        yield sender.setParameters(params);\n      }\n    } finally {\n      unlock();\n    }\n  });\n}\nfunction videoQualityForRid(rid) {\n  switch (rid) {\n    case 'f':\n      return VideoQuality.HIGH;\n    case 'h':\n      return VideoQuality.MEDIUM;\n    case 'q':\n      return VideoQuality.LOW;\n    default:\n      return VideoQuality.HIGH;\n  }\n}\nfunction videoLayersFromEncodings(width, height, encodings, svc) {\n  // default to a single layer, HQ\n  if (!encodings) {\n    return [new VideoLayer({\n      quality: VideoQuality.HIGH,\n      width,\n      height,\n      bitrate: 0,\n      ssrc: 0\n    })];\n  }\n  if (svc) {\n    // svc layers\n    /* @ts-ignore */\n    const encodingSM = encodings[0].scalabilityMode;\n    const sm = new ScalabilityMode(encodingSM);\n    const layers = [];\n    const resRatio = sm.suffix == 'h' ? 1.5 : 2;\n    const bitratesRatio = sm.suffix == 'h' ? 2 : 3;\n    for (let i = 0; i < sm.spatial; i += 1) {\n      layers.push(new VideoLayer({\n        quality: Math.min(VideoQuality.HIGH, sm.spatial - 1) - i,\n        width: Math.ceil(width / Math.pow(resRatio, i)),\n        height: Math.ceil(height / Math.pow(resRatio, i)),\n        bitrate: encodings[0].maxBitrate ? Math.ceil(encodings[0].maxBitrate / Math.pow(bitratesRatio, i)) : 0,\n        ssrc: 0\n      }));\n    }\n    return layers;\n  }\n  return encodings.map(encoding => {\n    var _a, _b, _c;\n    const scale = (_a = encoding.scaleResolutionDownBy) !== null && _a !== void 0 ? _a : 1;\n    let quality = videoQualityForRid((_b = encoding.rid) !== null && _b !== void 0 ? _b : '');\n    return new VideoLayer({\n      quality,\n      width: Math.ceil(width / scale),\n      height: Math.ceil(height / scale),\n      bitrate: (_c = encoding.maxBitrate) !== null && _c !== void 0 ? _c : 0,\n      ssrc: 0\n    });\n  });\n}const lossyDataChannel = '_lossy';\nconst reliableDataChannel = '_reliable';\nconst minReconnectWait = 2 * 1000;\nconst leaveReconnect = 'leave-reconnect';\nconst reliabeReceiveStateTTL = 30000;\nconst lossyDataChannelBufferThresholdMin = 8 * 1024;\nconst lossyDataChannelBufferThresholdMax = 256 * 1024;\nvar PCState;\n(function (PCState) {\n  PCState[PCState[\"New\"] = 0] = \"New\";\n  PCState[PCState[\"Connected\"] = 1] = \"Connected\";\n  PCState[PCState[\"Disconnected\"] = 2] = \"Disconnected\";\n  PCState[PCState[\"Reconnecting\"] = 3] = \"Reconnecting\";\n  PCState[PCState[\"Closed\"] = 4] = \"Closed\";\n})(PCState || (PCState = {}));\n/** @internal */\nclass RTCEngine extends eventsExports.EventEmitter {\n  get isClosed() {\n    return this._isClosed;\n  }\n  get pendingReconnect() {\n    return !!this.reconnectTimeout;\n  }\n  constructor(options) {\n    var _a;\n    super();\n    this.options = options;\n    this.rtcConfig = {};\n    this.peerConnectionTimeout = roomConnectOptionDefaults.peerConnectionTimeout;\n    this.fullReconnectOnNext = false;\n    /**\n     * @internal\n     */\n    this.latestRemoteOfferId = 0;\n    this.subscriberPrimary = false;\n    this.pcState = PCState.New;\n    this._isClosed = true;\n    this.pendingTrackResolvers = {};\n    this.reconnectAttempts = 0;\n    this.reconnectStart = 0;\n    this.attemptingReconnect = false;\n    /** keeps track of how often an initial join connection has been tried */\n    this.joinAttempts = 0;\n    /** specifies how often an initial join connection is allowed to retry */\n    this.maxJoinAttempts = 1;\n    this.shouldFailNext = false;\n    this.log = livekitLogger;\n    this.reliableDataSequence = 1;\n    this.reliableMessageBuffer = new DataPacketBuffer();\n    this.reliableReceivedState = new TTLMap(reliabeReceiveStateTTL);\n    this.lossyDataStatCurrentBytes = 0;\n    this.lossyDataStatByterate = 0;\n    this.lossyDataDropCount = 0;\n    this.midToTrackId = {};\n    /** used to indicate whether the browser is currently waiting to reconnect */\n    this.isWaitingForNetworkReconnect = false;\n    this.handleDataChannel = _a => __awaiter(this, [_a], void 0, function (_ref) {\n      var _this = this;\n      let {\n        channel\n      } = _ref;\n      return function* () {\n        if (!channel) {\n          return;\n        }\n        if (channel.label === reliableDataChannel) {\n          _this.reliableDCSub = channel;\n        } else if (channel.label === lossyDataChannel) {\n          _this.lossyDCSub = channel;\n        } else {\n          return;\n        }\n        _this.log.debug(\"on data channel \".concat(channel.id, \", \").concat(channel.label), _this.logContext);\n        channel.onmessage = _this.handleDataMessage;\n      }();\n    });\n    this.handleDataMessage = message => __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c, _d, _e;\n      // make sure to respect incoming data message order by processing message events one after the other\n      const unlock = yield this.dataProcessLock.lock();\n      try {\n        // decode\n        let buffer;\n        if (message.data instanceof ArrayBuffer) {\n          buffer = message.data;\n        } else if (message.data instanceof Blob) {\n          buffer = yield message.data.arrayBuffer();\n        } else {\n          this.log.error('unsupported data type', Object.assign(Object.assign({}, this.logContext), {\n            data: message.data\n          }));\n          return;\n        }\n        const dp = DataPacket.fromBinary(new Uint8Array(buffer));\n        if (dp.sequence > 0 && dp.participantSid !== '') {\n          const lastSeq = this.reliableReceivedState.get(dp.participantSid);\n          if (lastSeq && dp.sequence <= lastSeq) {\n            // ignore duplicate or out-of-order packets in reliable channel\n            return;\n          }\n          this.reliableReceivedState.set(dp.participantSid, dp.sequence);\n        }\n        if (((_a = dp.value) === null || _a === void 0 ? void 0 : _a.case) === 'speaker') {\n          // dispatch speaker updates\n          this.emit(EngineEvent.ActiveSpeakersUpdate, dp.value.value.speakers);\n        } else if (((_b = dp.value) === null || _b === void 0 ? void 0 : _b.case) === 'encryptedPacket') {\n          if (!this.e2eeManager) {\n            this.log.error('Received encrypted packet but E2EE not set up', this.logContext);\n            return;\n          }\n          const decryptedData = yield (_c = this.e2eeManager) === null || _c === void 0 ? void 0 : _c.handleEncryptedData(dp.value.value.encryptedValue, dp.value.value.iv, dp.participantIdentity, dp.value.value.keyIndex);\n          const decryptedPacket = EncryptedPacketPayload.fromBinary(decryptedData.payload);\n          const newDp = new DataPacket({\n            value: decryptedPacket.value,\n            participantIdentity: dp.participantIdentity,\n            participantSid: dp.participantSid\n          });\n          if (((_d = newDp.value) === null || _d === void 0 ? void 0 : _d.case) === 'user') {\n            // compatibility\n            applyUserDataCompat(newDp, newDp.value.value);\n          }\n          this.emit(EngineEvent.DataPacketReceived, newDp, dp.value.value.encryptionType);\n        } else {\n          if (((_e = dp.value) === null || _e === void 0 ? void 0 : _e.case) === 'user') {\n            // compatibility\n            applyUserDataCompat(dp, dp.value.value);\n          }\n          this.emit(EngineEvent.DataPacketReceived, dp, Encryption_Type.NONE);\n        }\n      } finally {\n        unlock();\n      }\n    });\n    this.handleDataError = event => {\n      const channel = event.currentTarget;\n      const channelKind = channel.maxRetransmits === 0 ? 'lossy' : 'reliable';\n      if (event instanceof ErrorEvent && event.error) {\n        const {\n          error\n        } = event.error;\n        this.log.error(\"DataChannel error on \".concat(channelKind, \": \").concat(event.message), Object.assign(Object.assign({}, this.logContext), {\n          error\n        }));\n      } else {\n        this.log.error(\"Unknown DataChannel error on \".concat(channelKind), Object.assign(Object.assign({}, this.logContext), {\n          event\n        }));\n      }\n    };\n    this.handleBufferedAmountLow = event => {\n      const channel = event.currentTarget;\n      const channelKind = channel.maxRetransmits === 0 ? DataPacket_Kind.LOSSY : DataPacket_Kind.RELIABLE;\n      this.updateAndEmitDCBufferStatus(channelKind);\n    };\n    // websocket reconnect behavior. if websocket is interrupted, and the PeerConnection\n    // continues to work, we can reconnect to websocket to continue the session\n    // after a number of retries, we'll close and give up permanently\n    this.handleDisconnect = (connection, disconnectReason) => {\n      if (this._isClosed) {\n        return;\n      }\n      this.log.warn(\"\".concat(connection, \" disconnected\"), this.logContext);\n      if (this.reconnectAttempts === 0) {\n        // only reset start time on the first try\n        this.reconnectStart = Date.now();\n      }\n      const disconnect = duration => {\n        this.log.warn(\"could not recover connection after \".concat(this.reconnectAttempts, \" attempts, \").concat(duration, \"ms. giving up\"), this.logContext);\n        this.emit(EngineEvent.Disconnected);\n        this.close();\n      };\n      const duration = Date.now() - this.reconnectStart;\n      let delay = this.getNextRetryDelay({\n        elapsedMs: duration,\n        retryCount: this.reconnectAttempts\n      });\n      if (delay === null) {\n        disconnect(duration);\n        return;\n      }\n      if (connection === leaveReconnect) {\n        delay = 0;\n      }\n      this.log.debug(\"reconnecting in \".concat(delay, \"ms\"), this.logContext);\n      this.clearReconnectTimeout();\n      if (this.token && this.regionUrlProvider) {\n        // token may have been refreshed, we do not want to recreate the regionUrlProvider\n        // since the current engine may have inherited a regional url\n        this.regionUrlProvider.updateToken(this.token);\n      }\n      this.reconnectTimeout = CriticalTimers.setTimeout(() => this.attemptReconnect(disconnectReason).finally(() => this.reconnectTimeout = undefined), delay);\n    };\n    this.waitForRestarted = () => {\n      return new Promise((resolve, reject) => {\n        if (this.pcState === PCState.Connected) {\n          resolve();\n        }\n        const onRestarted = () => {\n          this.off(EngineEvent.Disconnected, onDisconnected);\n          resolve();\n        };\n        const onDisconnected = () => {\n          this.off(EngineEvent.Restarted, onRestarted);\n          reject();\n        };\n        this.once(EngineEvent.Restarted, onRestarted);\n        this.once(EngineEvent.Disconnected, onDisconnected);\n      });\n    };\n    this.updateAndEmitDCBufferStatus = kind => {\n      if (kind === DataPacket_Kind.RELIABLE) {\n        const dc = this.dataChannelForKind(kind);\n        if (dc) {\n          this.reliableMessageBuffer.alignBufferedAmount(dc.bufferedAmount);\n        }\n      }\n      const status = this.isBufferStatusLow(kind);\n      if (typeof status !== 'undefined' && status !== this.dcBufferStatus.get(kind)) {\n        this.dcBufferStatus.set(kind, status);\n        this.emit(EngineEvent.DCBufferStatusChanged, status, kind);\n      }\n    };\n    this.isBufferStatusLow = kind => {\n      const dc = this.dataChannelForKind(kind);\n      if (dc) {\n        return dc.bufferedAmount <= dc.bufferedAmountLowThreshold;\n      }\n    };\n    this.handleBrowserOnLine = () => __awaiter(this, void 0, void 0, function* () {\n      if (!this.url) {\n        return;\n      }\n      const hasNetworkConnection = yield fetch(toHttpUrl(this.url), {\n        method: 'HEAD'\n      }).then(resp => resp.ok).catch(() => false);\n      if (!hasNetworkConnection) {\n        return;\n      }\n      this.log.info('detected network reconnected');\n      if (\n      // in case the engine is currently reconnecting, attempt a reconnect immediately after the browser state has changed to 'onLine'\n      this.client.currentState === SignalConnectionState.RECONNECTING ||\n      // also if the browser went offline before and the engine still thinks it's in a connected state, treat it as a network interruption that we haven't noticed yet\n      this.isWaitingForNetworkReconnect && this.client.currentState === SignalConnectionState.CONNECTED) {\n        this.clearReconnectTimeout();\n        this.attemptReconnect(ReconnectReason.RR_SIGNAL_DISCONNECTED);\n        this.isWaitingForNetworkReconnect = false;\n      }\n    });\n    this.handleBrowserOffline = () => __awaiter(this, void 0, void 0, function* () {\n      if (!this.url) {\n        return;\n      }\n      try {\n        yield Promise.race([fetch(toHttpUrl(this.url), {\n          method: 'HEAD'\n        }),\n        // if there's no internet connection the fetch rejects immediately, so we only use a short timeout here\n        sleep(4000).then(() => Promise.reject())]);\n      } catch (e) {\n        // only set if the browser still thinks it's offline after the request failed\n        if (window.navigator.onLine === false) {\n          this.log.info('detected network interruption');\n          this.isWaitingForNetworkReconnect = true;\n        }\n      }\n    });\n    this.log = getLogger((_a = options.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Engine);\n    this.loggerOptions = {\n      loggerName: options.loggerName,\n      loggerContextCb: () => this.logContext\n    };\n    this.client = new SignalClient(undefined, this.loggerOptions);\n    this.client.signalLatency = this.options.expSignalLatency;\n    this.reconnectPolicy = this.options.reconnectPolicy;\n    this.closingLock = new _();\n    this.dataProcessLock = new _();\n    this.dcBufferStatus = new Map([[DataPacket_Kind.LOSSY, true], [DataPacket_Kind.RELIABLE, true]]);\n    this.client.onParticipantUpdate = updates => this.emit(EngineEvent.ParticipantUpdate, updates);\n    this.client.onConnectionQuality = update => this.emit(EngineEvent.ConnectionQualityUpdate, update);\n    this.client.onRoomUpdate = update => this.emit(EngineEvent.RoomUpdate, update);\n    this.client.onSubscriptionError = resp => this.emit(EngineEvent.SubscriptionError, resp);\n    this.client.onSubscriptionPermissionUpdate = update => this.emit(EngineEvent.SubscriptionPermissionUpdate, update);\n    this.client.onSpeakersChanged = update => this.emit(EngineEvent.SpeakersChanged, update);\n    this.client.onStreamStateUpdate = update => this.emit(EngineEvent.StreamStateChanged, update);\n    this.client.onRequestResponse = response => this.emit(EngineEvent.SignalRequestResponse, response);\n  }\n  /** @internal */\n  get logContext() {\n    var _a, _b, _c, _d, _e, _f;\n    return {\n      room: (_b = (_a = this.latestJoinResponse) === null || _a === void 0 ? void 0 : _a.room) === null || _b === void 0 ? void 0 : _b.name,\n      roomID: (_d = (_c = this.latestJoinResponse) === null || _c === void 0 ? void 0 : _c.room) === null || _d === void 0 ? void 0 : _d.sid,\n      participant: (_f = (_e = this.latestJoinResponse) === null || _e === void 0 ? void 0 : _e.participant) === null || _f === void 0 ? void 0 : _f.identity,\n      pID: this.participantSid\n    };\n  }\n  join(url, token, opts, abortSignal) {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.url = url;\n      this.token = token;\n      this.signalOpts = opts;\n      this.maxJoinAttempts = opts.maxRetries;\n      try {\n        this.joinAttempts += 1;\n        this.setupSignalClientCallbacks();\n        const joinResponse = yield this.client.join(url, token, opts, abortSignal);\n        this._isClosed = false;\n        this.latestJoinResponse = joinResponse;\n        this.subscriberPrimary = joinResponse.subscriberPrimary;\n        if (!this.pcManager) {\n          yield this.configure(joinResponse);\n        }\n        // create offer\n        if (!this.subscriberPrimary || joinResponse.fastPublish) {\n          this.negotiate().catch(err => {\n            livekitLogger.error(err, this.logContext);\n          });\n        }\n        this.registerOnLineListener();\n        this.clientConfiguration = joinResponse.clientConfiguration;\n        this.emit(EngineEvent.SignalConnected, joinResponse);\n        return joinResponse;\n      } catch (e) {\n        if (e instanceof ConnectionError) {\n          if (e.reason === ConnectionErrorReason.ServerUnreachable) {\n            this.log.warn(\"Couldn't connect to server, attempt \".concat(this.joinAttempts, \" of \").concat(this.maxJoinAttempts), this.logContext);\n            if (this.joinAttempts < this.maxJoinAttempts) {\n              return this.join(url, token, opts, abortSignal);\n            }\n          }\n        }\n        throw e;\n      }\n    });\n  }\n  close() {\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.closingLock.lock();\n      if (this.isClosed) {\n        unlock();\n        return;\n      }\n      try {\n        this._isClosed = true;\n        this.joinAttempts = 0;\n        this.emit(EngineEvent.Closing);\n        this.removeAllListeners();\n        this.deregisterOnLineListener();\n        this.clearPendingReconnect();\n        this.cleanupLossyDataStats();\n        yield this.cleanupPeerConnections();\n        yield this.cleanupClient();\n      } finally {\n        unlock();\n      }\n    });\n  }\n  cleanupPeerConnections() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      yield (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.close();\n      this.pcManager = undefined;\n      const dcCleanup = dc => {\n        if (!dc) return;\n        dc.close();\n        dc.onbufferedamountlow = null;\n        dc.onclose = null;\n        dc.onclosing = null;\n        dc.onerror = null;\n        dc.onmessage = null;\n        dc.onopen = null;\n      };\n      dcCleanup(this.lossyDC);\n      dcCleanup(this.lossyDCSub);\n      dcCleanup(this.reliableDC);\n      dcCleanup(this.reliableDCSub);\n      this.lossyDC = undefined;\n      this.lossyDCSub = undefined;\n      this.reliableDC = undefined;\n      this.reliableDCSub = undefined;\n      this.reliableMessageBuffer = new DataPacketBuffer();\n      this.reliableDataSequence = 1;\n      this.reliableReceivedState.clear();\n    });\n  }\n  cleanupLossyDataStats() {\n    this.lossyDataStatByterate = 0;\n    this.lossyDataStatCurrentBytes = 0;\n    if (this.lossyDataStatInterval) {\n      clearInterval(this.lossyDataStatInterval);\n      this.lossyDataStatInterval = undefined;\n    }\n    this.lossyDataDropCount = 0;\n  }\n  cleanupClient() {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.client.close();\n      this.client.resetCallbacks();\n    });\n  }\n  addTrack(req) {\n    if (this.pendingTrackResolvers[req.cid]) {\n      throw new TrackInvalidError('a track with the same ID has already been published');\n    }\n    return new Promise((resolve, reject) => {\n      const publicationTimeout = setTimeout(() => {\n        delete this.pendingTrackResolvers[req.cid];\n        reject(ConnectionError.timeout('publication of local track timed out, no response from server'));\n      }, 10000);\n      this.pendingTrackResolvers[req.cid] = {\n        resolve: info => {\n          clearTimeout(publicationTimeout);\n          resolve(info);\n        },\n        reject: () => {\n          clearTimeout(publicationTimeout);\n          reject(new Error('Cancelled publication by calling unpublish'));\n        }\n      };\n      this.client.sendAddTrack(req);\n    });\n  }\n  /**\n   * Removes sender from PeerConnection, returning true if it was removed successfully\n   * and a negotiation is necessary\n   * @param sender\n   * @returns\n   */\n  removeTrack(sender) {\n    if (sender.track && this.pendingTrackResolvers[sender.track.id]) {\n      const {\n        reject\n      } = this.pendingTrackResolvers[sender.track.id];\n      if (reject) {\n        reject();\n      }\n      delete this.pendingTrackResolvers[sender.track.id];\n    }\n    try {\n      this.pcManager.removeTrack(sender);\n      return true;\n    } catch (e) {\n      this.log.warn('failed to remove track', Object.assign(Object.assign({}, this.logContext), {\n        error: e\n      }));\n    }\n    return false;\n  }\n  updateMuteStatus(trackSid, muted) {\n    this.client.sendMuteTrack(trackSid, muted);\n  }\n  get dataSubscriberReadyState() {\n    var _a;\n    return (_a = this.reliableDCSub) === null || _a === void 0 ? void 0 : _a.readyState;\n  }\n  getConnectedServerAddress() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      return (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.getConnectedAddress();\n    });\n  }\n  /* @internal */\n  setRegionUrlProvider(provider) {\n    this.regionUrlProvider = provider;\n  }\n  configure(joinResponse) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      // already configured\n      if (this.pcManager && this.pcManager.currentState !== PCTransportState.NEW) {\n        return;\n      }\n      this.participantSid = (_a = joinResponse.participant) === null || _a === void 0 ? void 0 : _a.sid;\n      const rtcConfig = this.makeRTCConfiguration(joinResponse);\n      this.pcManager = new PCTransportManager(rtcConfig, this.options.singlePeerConnection ? 'publisher-only' : joinResponse.subscriberPrimary ? 'subscriber-primary' : 'publisher-primary', this.loggerOptions);\n      this.emit(EngineEvent.TransportsCreated, this.pcManager.publisher, this.pcManager.subscriber);\n      this.pcManager.onIceCandidate = (candidate, target) => {\n        this.client.sendIceCandidate(candidate, target);\n      };\n      this.pcManager.onPublisherOffer = (offer, offerId) => {\n        this.client.sendOffer(offer, offerId);\n      };\n      this.pcManager.onDataChannel = this.handleDataChannel;\n      this.pcManager.onStateChange = (connectionState, publisherState, subscriberState) => __awaiter(this, void 0, void 0, function* () {\n        this.log.debug(\"primary PC state changed \".concat(connectionState), this.logContext);\n        if (['closed', 'disconnected', 'failed'].includes(publisherState)) {\n          // reset publisher connection promise\n          this.publisherConnectionPromise = undefined;\n        }\n        if (connectionState === PCTransportState.CONNECTED) {\n          const shouldEmit = this.pcState === PCState.New;\n          this.pcState = PCState.Connected;\n          if (shouldEmit) {\n            this.emit(EngineEvent.Connected, joinResponse);\n          }\n        } else if (connectionState === PCTransportState.FAILED) {\n          // on Safari, PeerConnection will switch to 'disconnected' during renegotiation\n          if (this.pcState === PCState.Connected || this.pcState === PCState.Reconnecting) {\n            this.pcState = PCState.Disconnected;\n            this.handleDisconnect('peerconnection failed', subscriberState === 'failed' ? ReconnectReason.RR_SUBSCRIBER_FAILED : ReconnectReason.RR_PUBLISHER_FAILED);\n          }\n        }\n        // detect cases where both signal client and peer connection are severed and assume that user has lost network connection\n        const isSignalSevered = this.client.isDisconnected || this.client.currentState === SignalConnectionState.RECONNECTING;\n        const isPCSevered = [PCTransportState.FAILED, PCTransportState.CLOSING, PCTransportState.CLOSED].includes(connectionState);\n        if (isSignalSevered && isPCSevered && !this._isClosed) {\n          this.emit(EngineEvent.Offline);\n        }\n      });\n      this.pcManager.onTrack = ev => {\n        // this fires after the underlying transceiver is stopped and potentially\n        // peer connection closed, so do not bubble up if there are no streams\n        if (ev.streams.length === 0) return;\n        this.emit(EngineEvent.MediaTrackAdded, ev.track, ev.streams[0], ev.receiver);\n      };\n      if (!supportOptionalDatachannel((_b = joinResponse.serverInfo) === null || _b === void 0 ? void 0 : _b.protocol)) {\n        this.createDataChannels();\n      }\n    });\n  }\n  setupSignalClientCallbacks() {\n    // configure signaling client\n    this.client.onAnswer = (sd, offerId, midToTrackId) => __awaiter(this, void 0, void 0, function* () {\n      if (!this.pcManager) {\n        return;\n      }\n      this.log.debug('received server answer', Object.assign(Object.assign({}, this.logContext), {\n        RTCSdpType: sd.type,\n        sdp: sd.sdp,\n        midToTrackId\n      }));\n      this.midToTrackId = midToTrackId;\n      yield this.pcManager.setPublisherAnswer(sd, offerId);\n    });\n    // add candidate on trickle\n    this.client.onTrickle = (candidate, target) => {\n      if (!this.pcManager) {\n        return;\n      }\n      this.log.debug('got ICE candidate from peer', Object.assign(Object.assign({}, this.logContext), {\n        candidate,\n        target\n      }));\n      this.pcManager.addIceCandidate(candidate, target);\n    };\n    // when server creates an offer for the client\n    this.client.onOffer = (sd, offerId, midToTrackId) => __awaiter(this, void 0, void 0, function* () {\n      this.latestRemoteOfferId = offerId;\n      if (!this.pcManager) {\n        return;\n      }\n      this.midToTrackId = midToTrackId;\n      const answer = yield this.pcManager.createSubscriberAnswerFromOffer(sd, offerId);\n      if (answer) {\n        this.client.sendAnswer(answer, offerId);\n      }\n    });\n    this.client.onLocalTrackPublished = res => {\n      var _a;\n      this.log.debug('received trackPublishedResponse', Object.assign(Object.assign({}, this.logContext), {\n        cid: res.cid,\n        track: (_a = res.track) === null || _a === void 0 ? void 0 : _a.sid\n      }));\n      if (!this.pendingTrackResolvers[res.cid]) {\n        this.log.error(\"missing track resolver for \".concat(res.cid), Object.assign(Object.assign({}, this.logContext), {\n          cid: res.cid\n        }));\n        return;\n      }\n      const {\n        resolve\n      } = this.pendingTrackResolvers[res.cid];\n      delete this.pendingTrackResolvers[res.cid];\n      resolve(res.track);\n    };\n    this.client.onLocalTrackUnpublished = response => {\n      this.emit(EngineEvent.LocalTrackUnpublished, response);\n    };\n    this.client.onLocalTrackSubscribed = trackSid => {\n      this.emit(EngineEvent.LocalTrackSubscribed, trackSid);\n    };\n    this.client.onTokenRefresh = token => {\n      var _a;\n      this.token = token;\n      (_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.updateToken(token);\n    };\n    this.client.onRemoteMuteChanged = (trackSid, muted) => {\n      this.emit(EngineEvent.RemoteMute, trackSid, muted);\n    };\n    this.client.onSubscribedQualityUpdate = update => {\n      this.emit(EngineEvent.SubscribedQualityUpdate, update);\n    };\n    this.client.onRoomMoved = res => {\n      var _a;\n      this.participantSid = (_a = res.participant) === null || _a === void 0 ? void 0 : _a.sid;\n      if (this.latestJoinResponse) {\n        this.latestJoinResponse.room = res.room;\n      }\n      this.emit(EngineEvent.RoomMoved, res);\n    };\n    this.client.onMediaSectionsRequirement = requirement => {\n      var _a, _b;\n      const transceiverInit = {\n        direction: 'recvonly'\n      };\n      for (let i = 0; i < requirement.numAudios; i++) {\n        (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.addPublisherTransceiverOfKind('audio', transceiverInit);\n      }\n      for (let i = 0; i < requirement.numVideos; i++) {\n        (_b = this.pcManager) === null || _b === void 0 ? void 0 : _b.addPublisherTransceiverOfKind('video', transceiverInit);\n      }\n      this.negotiate();\n    };\n    this.client.onClose = () => {\n      this.handleDisconnect('signal', ReconnectReason.RR_SIGNAL_DISCONNECTED);\n    };\n    this.client.onLeave = leave => {\n      this.log.debug('client leave request', Object.assign(Object.assign({}, this.logContext), {\n        reason: leave === null || leave === void 0 ? void 0 : leave.reason\n      }));\n      if (leave.regions && this.regionUrlProvider) {\n        this.log.debug('updating regions', this.logContext);\n        this.regionUrlProvider.setServerReportedRegions({\n          updatedAtInMs: Date.now(),\n          maxAgeInMs: DEFAULT_MAX_AGE_MS,\n          regionSettings: leave.regions\n        });\n      }\n      switch (leave.action) {\n        case LeaveRequest_Action.DISCONNECT:\n          this.emit(EngineEvent.Disconnected, leave === null || leave === void 0 ? void 0 : leave.reason);\n          this.close();\n          break;\n        case LeaveRequest_Action.RECONNECT:\n          this.fullReconnectOnNext = true;\n          // reconnect immediately instead of waiting for next attempt\n          this.handleDisconnect(leaveReconnect);\n          break;\n        case LeaveRequest_Action.RESUME:\n          // reconnect immediately instead of waiting for next attempt\n          this.handleDisconnect(leaveReconnect);\n      }\n    };\n  }\n  makeRTCConfiguration(serverResponse) {\n    var _a;\n    const rtcConfig = Object.assign({}, this.rtcConfig);\n    if ((_a = this.signalOpts) === null || _a === void 0 ? void 0 : _a.e2eeEnabled) {\n      this.log.debug('E2EE - setting up transports with insertable streams', this.logContext);\n      //  this makes sure that no data is sent before the transforms are ready\n      // @ts-ignore\n      rtcConfig.encodedInsertableStreams = true;\n    }\n    // update ICE servers before creating PeerConnection\n    if (serverResponse.iceServers && !rtcConfig.iceServers) {\n      const rtcIceServers = [];\n      serverResponse.iceServers.forEach(iceServer => {\n        const rtcIceServer = {\n          urls: iceServer.urls\n        };\n        if (iceServer.username) rtcIceServer.username = iceServer.username;\n        if (iceServer.credential) {\n          rtcIceServer.credential = iceServer.credential;\n        }\n        rtcIceServers.push(rtcIceServer);\n      });\n      rtcConfig.iceServers = rtcIceServers;\n    }\n    if (serverResponse.clientConfiguration && serverResponse.clientConfiguration.forceRelay === ClientConfigSetting.ENABLED) {\n      rtcConfig.iceTransportPolicy = 'relay';\n    }\n    // @ts-ignore\n    rtcConfig.sdpSemantics = 'unified-plan';\n    // @ts-ignore\n    rtcConfig.continualGatheringPolicy = 'gather_continually';\n    return rtcConfig;\n  }\n  createDataChannels() {\n    if (!this.pcManager) {\n      return;\n    }\n    // clear old data channel callbacks if recreate\n    if (this.lossyDC) {\n      this.lossyDC.onmessage = null;\n      this.lossyDC.onerror = null;\n    }\n    if (this.reliableDC) {\n      this.reliableDC.onmessage = null;\n      this.reliableDC.onerror = null;\n    }\n    // create data channels\n    this.lossyDC = this.pcManager.createPublisherDataChannel(lossyDataChannel, {\n      ordered: false,\n      maxRetransmits: 0\n    });\n    this.reliableDC = this.pcManager.createPublisherDataChannel(reliableDataChannel, {\n      ordered: true\n    });\n    // also handle messages over the pub channel, for backwards compatibility\n    this.lossyDC.onmessage = this.handleDataMessage;\n    this.reliableDC.onmessage = this.handleDataMessage;\n    // handle datachannel errors\n    this.lossyDC.onerror = this.handleDataError;\n    this.reliableDC.onerror = this.handleDataError;\n    // set up dc buffer threshold, set to 64kB (otherwise 0 by default)\n    this.lossyDC.bufferedAmountLowThreshold = 65535;\n    this.reliableDC.bufferedAmountLowThreshold = 65535;\n    // handle buffer amount low events\n    this.lossyDC.onbufferedamountlow = this.handleBufferedAmountLow;\n    this.reliableDC.onbufferedamountlow = this.handleBufferedAmountLow;\n    this.cleanupLossyDataStats();\n    this.lossyDataStatInterval = setInterval(() => {\n      this.lossyDataStatByterate = this.lossyDataStatCurrentBytes;\n      this.lossyDataStatCurrentBytes = 0;\n      const dc = this.dataChannelForKind(DataPacket_Kind.LOSSY);\n      if (dc) {\n        // control buffered latency to ~100ms\n        const threshold = this.lossyDataStatByterate / 10;\n        dc.bufferedAmountLowThreshold = Math.min(Math.max(threshold, lossyDataChannelBufferThresholdMin), lossyDataChannelBufferThresholdMax);\n      }\n    }, 1000);\n  }\n  createSender(track, opts, encodings) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (supportsTransceiver()) {\n        const sender = yield this.createTransceiverRTCRtpSender(track, opts, encodings);\n        return sender;\n      }\n      if (supportsAddTrack()) {\n        this.log.warn('using add-track fallback', this.logContext);\n        const sender = yield this.createRTCRtpSender(track.mediaStreamTrack);\n        return sender;\n      }\n      throw new UnexpectedConnectionState('Required webRTC APIs not supported on this device');\n    });\n  }\n  createSimulcastSender(track, simulcastTrack, opts, encodings) {\n    return __awaiter(this, void 0, void 0, function* () {\n      // store RTCRtpSender\n      if (supportsTransceiver()) {\n        return this.createSimulcastTransceiverSender(track, simulcastTrack, opts, encodings);\n      }\n      if (supportsAddTrack()) {\n        this.log.debug('using add-track fallback', this.logContext);\n        return this.createRTCRtpSender(track.mediaStreamTrack);\n      }\n      throw new UnexpectedConnectionState('Cannot stream on this device');\n    });\n  }\n  createTransceiverRTCRtpSender(track, opts, encodings) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.pcManager) {\n        throw new UnexpectedConnectionState('publisher is closed');\n      }\n      const streams = [];\n      if (track.mediaStream) {\n        streams.push(track.mediaStream);\n      }\n      if (isVideoTrack(track)) {\n        track.codec = opts.videoCodec;\n      }\n      const transceiverInit = {\n        direction: 'sendonly',\n        streams\n      };\n      if (encodings) {\n        transceiverInit.sendEncodings = encodings;\n      }\n      // addTransceiver for react-native is async. web is synchronous, but await won't effect it.\n      const transceiver = yield this.pcManager.addPublisherTransceiver(track.mediaStreamTrack, transceiverInit);\n      return transceiver.sender;\n    });\n  }\n  createSimulcastTransceiverSender(track, simulcastTrack, opts, encodings) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.pcManager) {\n        throw new UnexpectedConnectionState('publisher is closed');\n      }\n      const transceiverInit = {\n        direction: 'sendonly'\n      };\n      if (encodings) {\n        transceiverInit.sendEncodings = encodings;\n      }\n      // addTransceiver for react-native is async. web is synchronous, but await won't effect it.\n      const transceiver = yield this.pcManager.addPublisherTransceiver(simulcastTrack.mediaStreamTrack, transceiverInit);\n      if (!opts.videoCodec) {\n        return;\n      }\n      track.setSimulcastTrackSender(opts.videoCodec, transceiver.sender);\n      return transceiver.sender;\n    });\n  }\n  createRTCRtpSender(track) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.pcManager) {\n        throw new UnexpectedConnectionState('publisher is closed');\n      }\n      return this.pcManager.addPublisherTrack(track);\n    });\n  }\n  attemptReconnect(reason) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      if (this._isClosed) {\n        return;\n      }\n      // guard for attempting reconnection multiple times while one attempt is still not finished\n      if (this.attemptingReconnect) {\n        livekitLogger.warn('already attempting reconnect, returning early', this.logContext);\n        return;\n      }\n      if (((_a = this.clientConfiguration) === null || _a === void 0 ? void 0 : _a.resumeConnection) === ClientConfigSetting.DISABLED ||\n      // signaling state could change to closed due to hardware sleep\n      // those connections cannot be resumed\n      ((_c = (_b = this.pcManager) === null || _b === void 0 ? void 0 : _b.currentState) !== null && _c !== void 0 ? _c : PCTransportState.NEW) === PCTransportState.NEW) {\n        this.fullReconnectOnNext = true;\n      }\n      try {\n        this.attemptingReconnect = true;\n        if (this.fullReconnectOnNext) {\n          yield this.restartConnection();\n        } else {\n          yield this.resumeConnection(reason);\n        }\n        this.clearPendingReconnect();\n        this.fullReconnectOnNext = false;\n      } catch (e) {\n        this.reconnectAttempts += 1;\n        let recoverable = true;\n        if (e instanceof UnexpectedConnectionState) {\n          this.log.debug('received unrecoverable error', Object.assign(Object.assign({}, this.logContext), {\n            error: e\n          }));\n          // unrecoverable\n          recoverable = false;\n        } else if (!(e instanceof SignalReconnectError)) {\n          // cannot resume\n          this.fullReconnectOnNext = true;\n        }\n        if (recoverable) {\n          this.handleDisconnect('reconnect', ReconnectReason.RR_UNKNOWN);\n        } else {\n          this.log.info(\"could not recover connection after \".concat(this.reconnectAttempts, \" attempts, \").concat(Date.now() - this.reconnectStart, \"ms. giving up\"), this.logContext);\n          this.emit(EngineEvent.Disconnected);\n          yield this.close();\n        }\n      } finally {\n        this.attemptingReconnect = false;\n      }\n    });\n  }\n  getNextRetryDelay(context) {\n    try {\n      return this.reconnectPolicy.nextRetryDelayInMs(context);\n    } catch (e) {\n      this.log.warn('encountered error in reconnect policy', Object.assign(Object.assign({}, this.logContext), {\n        error: e\n      }));\n    }\n    // error in user code with provided reconnect policy, stop reconnecting\n    return null;\n  }\n  restartConnection(regionUrl) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      try {\n        if (!this.url || !this.token) {\n          // permanent failure, don't attempt reconnection\n          throw new UnexpectedConnectionState('could not reconnect, url or token not saved');\n        }\n        this.log.info(\"reconnecting, attempt: \".concat(this.reconnectAttempts), this.logContext);\n        this.emit(EngineEvent.Restarting);\n        if (!this.client.isDisconnected) {\n          yield this.client.sendLeave();\n        }\n        yield this.cleanupPeerConnections();\n        yield this.cleanupClient();\n        let joinResponse;\n        try {\n          if (!this.signalOpts) {\n            this.log.warn('attempted connection restart, without signal options present', this.logContext);\n            throw new SignalReconnectError();\n          }\n          // in case a regionUrl is passed, the region URL takes precedence\n          joinResponse = yield this.join(regionUrl !== null && regionUrl !== void 0 ? regionUrl : this.url, this.token, this.signalOpts);\n        } catch (e) {\n          if (e instanceof ConnectionError && e.reason === ConnectionErrorReason.NotAllowed) {\n            throw new UnexpectedConnectionState('could not reconnect, token might be expired');\n          }\n          throw new SignalReconnectError();\n        }\n        if (this.shouldFailNext) {\n          this.shouldFailNext = false;\n          throw new Error('simulated failure');\n        }\n        this.client.setReconnected();\n        this.emit(EngineEvent.SignalRestarted, joinResponse);\n        yield this.waitForPCReconnected();\n        // re-check signal connection state before setting engine as resumed\n        if (this.client.currentState !== SignalConnectionState.CONNECTED) {\n          throw new SignalReconnectError('Signal connection got severed during reconnect');\n        }\n        (_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.resetAttempts();\n        // reconnect success\n        this.emit(EngineEvent.Restarted);\n      } catch (error) {\n        const nextRegionUrl = yield (_b = this.regionUrlProvider) === null || _b === void 0 ? void 0 : _b.getNextBestRegionUrl();\n        if (nextRegionUrl) {\n          yield this.restartConnection(nextRegionUrl);\n          return;\n        } else {\n          // no more regions to try (or we're not on cloud)\n          (_c = this.regionUrlProvider) === null || _c === void 0 ? void 0 : _c.resetAttempts();\n          throw error;\n        }\n      }\n    });\n  }\n  resumeConnection(reason) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!this.url || !this.token) {\n        // permanent failure, don't attempt reconnection\n        throw new UnexpectedConnectionState('could not reconnect, url or token not saved');\n      }\n      // trigger publisher reconnect\n      if (!this.pcManager) {\n        throw new UnexpectedConnectionState('publisher and subscriber connections unset');\n      }\n      this.log.info(\"resuming signal connection, attempt \".concat(this.reconnectAttempts), this.logContext);\n      this.emit(EngineEvent.Resuming);\n      let res;\n      try {\n        this.setupSignalClientCallbacks();\n        res = yield this.client.reconnect(this.url, this.token, this.participantSid, reason);\n      } catch (error) {\n        let message = '';\n        if (error instanceof Error) {\n          message = error.message;\n          this.log.error(error.message, Object.assign(Object.assign({}, this.logContext), {\n            error\n          }));\n        }\n        if (error instanceof ConnectionError && error.reason === ConnectionErrorReason.NotAllowed) {\n          throw new UnexpectedConnectionState('could not reconnect, token might be expired');\n        }\n        if (error instanceof ConnectionError && error.reason === ConnectionErrorReason.LeaveRequest) {\n          throw error;\n        }\n        throw new SignalReconnectError(message);\n      }\n      this.emit(EngineEvent.SignalResumed);\n      if (res) {\n        const rtcConfig = this.makeRTCConfiguration(res);\n        this.pcManager.updateConfiguration(rtcConfig);\n        if (this.latestJoinResponse) {\n          this.latestJoinResponse.serverInfo = res.serverInfo;\n        }\n      } else {\n        this.log.warn('Did not receive reconnect response', this.logContext);\n      }\n      if (this.shouldFailNext) {\n        this.shouldFailNext = false;\n        throw new Error('simulated failure');\n      }\n      yield this.pcManager.triggerIceRestart();\n      yield this.waitForPCReconnected();\n      // re-check signal connection state before setting engine as resumed\n      if (this.client.currentState !== SignalConnectionState.CONNECTED) {\n        throw new SignalReconnectError('Signal connection got severed during reconnect');\n      }\n      this.client.setReconnected();\n      // recreate publish datachannel if it's id is null\n      // (for safari https://bugs.webkit.org/show_bug.cgi?id=184688)\n      if (((_a = this.reliableDC) === null || _a === void 0 ? void 0 : _a.readyState) === 'open' && this.reliableDC.id === null) {\n        this.createDataChannels();\n      }\n      if (res === null || res === void 0 ? void 0 : res.lastMessageSeq) {\n        this.resendReliableMessagesForResume(res.lastMessageSeq);\n      }\n      // resume success\n      this.emit(EngineEvent.Resumed);\n    });\n  }\n  waitForPCInitialConnection(timeout, abortController) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.pcManager) {\n        throw new UnexpectedConnectionState('PC manager is closed');\n      }\n      yield this.pcManager.ensurePCTransportConnection(abortController, timeout);\n    });\n  }\n  waitForPCReconnected() {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.pcState = PCState.Reconnecting;\n      this.log.debug('waiting for peer connection to reconnect', this.logContext);\n      try {\n        yield sleep(minReconnectWait); // FIXME setTimeout again not ideal for a connection critical path\n        if (!this.pcManager) {\n          throw new UnexpectedConnectionState('PC manager is closed');\n        }\n        yield this.pcManager.ensurePCTransportConnection(undefined, this.peerConnectionTimeout);\n        this.pcState = PCState.Connected;\n      } catch (e) {\n        // TODO do we need a `failed` state here for the PC?\n        this.pcState = PCState.Disconnected;\n        throw ConnectionError.internal(\"could not establish PC connection, \".concat(e.message));\n      }\n    });\n  }\n  /** @internal */\n  publishRpcResponse(destinationIdentity, requestId, payload, error) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const packet = new DataPacket({\n        destinationIdentities: [destinationIdentity],\n        kind: DataPacket_Kind.RELIABLE,\n        value: {\n          case: 'rpcResponse',\n          value: new RpcResponse({\n            requestId,\n            value: error ? {\n              case: 'error',\n              value: error.toProto()\n            } : {\n              case: 'payload',\n              value: payload !== null && payload !== void 0 ? payload : ''\n            }\n          })\n        }\n      });\n      yield this.sendDataPacket(packet, DataPacket_Kind.RELIABLE);\n    });\n  }\n  /** @internal */\n  publishRpcAck(destinationIdentity, requestId) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const packet = new DataPacket({\n        destinationIdentities: [destinationIdentity],\n        kind: DataPacket_Kind.RELIABLE,\n        value: {\n          case: 'rpcAck',\n          value: new RpcAck({\n            requestId\n          })\n        }\n      });\n      yield this.sendDataPacket(packet, DataPacket_Kind.RELIABLE);\n    });\n  }\n  /* @internal */\n  sendDataPacket(packet, kind) {\n    return __awaiter(this, void 0, void 0, function* () {\n      // make sure we do have a data connection\n      yield this.ensurePublisherConnected(kind);\n      if (this.e2eeManager && this.e2eeManager.isDataChannelEncryptionEnabled) {\n        const encryptablePacket = asEncryptablePacket(packet);\n        if (encryptablePacket) {\n          const encryptedData = yield this.e2eeManager.encryptData(encryptablePacket.toBinary());\n          packet.value = {\n            case: 'encryptedPacket',\n            value: new EncryptedPacket({\n              encryptedValue: encryptedData.payload,\n              iv: encryptedData.iv,\n              keyIndex: encryptedData.keyIndex\n            })\n          };\n        }\n      }\n      if (kind === DataPacket_Kind.RELIABLE) {\n        packet.sequence = this.reliableDataSequence;\n        this.reliableDataSequence += 1;\n      }\n      const msg = packet.toBinary();\n      const dc = this.dataChannelForKind(kind);\n      if (dc) {\n        if (kind === DataPacket_Kind.RELIABLE) {\n          yield this.waitForBufferStatusLow(kind);\n          this.reliableMessageBuffer.push({\n            data: msg,\n            sequence: packet.sequence\n          });\n        } else {\n          // lossy channel, drop messages to reduce latency\n          if (!this.isBufferStatusLow(kind)) {\n            this.lossyDataDropCount += 1;\n            if (this.lossyDataDropCount % 100 === 0) {\n              this.log.warn(\"dropping lossy data channel messages, total dropped: \".concat(this.lossyDataDropCount), this.logContext);\n            }\n            return;\n          }\n          this.lossyDataStatCurrentBytes += msg.byteLength;\n        }\n        if (this.attemptingReconnect) {\n          return;\n        }\n        dc.send(msg);\n      }\n      this.updateAndEmitDCBufferStatus(kind);\n    });\n  }\n  resendReliableMessagesForResume(lastMessageSeq) {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.ensurePublisherConnected(DataPacket_Kind.RELIABLE);\n      const dc = this.dataChannelForKind(DataPacket_Kind.RELIABLE);\n      if (dc) {\n        this.reliableMessageBuffer.popToSequence(lastMessageSeq);\n        this.reliableMessageBuffer.getAll().forEach(msg => {\n          dc.send(msg.data);\n        });\n      }\n      this.updateAndEmitDCBufferStatus(DataPacket_Kind.RELIABLE);\n    });\n  }\n  waitForBufferStatusLow(kind) {\n    return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n      if (this.isBufferStatusLow(kind)) {\n        resolve();\n      } else {\n        const onClosing = () => reject('Engine closed');\n        this.once(EngineEvent.Closing, onClosing);\n        while (!this.dcBufferStatus.get(kind)) {\n          yield sleep(10);\n        }\n        this.off(EngineEvent.Closing, onClosing);\n        resolve();\n      }\n    }));\n  }\n  /**\n   * @internal\n   */\n  ensureDataTransportConnected(kind_1) {\n    return __awaiter(this, arguments, void 0, function (kind) {\n      var _this2 = this;\n      let subscriber = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.subscriberPrimary;\n      return function* () {\n        var _a;\n        if (!_this2.pcManager) {\n          throw new UnexpectedConnectionState('PC manager is closed');\n        }\n        const transport = subscriber ? _this2.pcManager.subscriber : _this2.pcManager.publisher;\n        const transportName = subscriber ? 'Subscriber' : 'Publisher';\n        if (!transport) {\n          throw ConnectionError.internal(\"\".concat(transportName, \" connection not set\"));\n        }\n        let needNegotiation = false;\n        if (!subscriber && !_this2.dataChannelForKind(kind, subscriber)) {\n          _this2.createDataChannels();\n          needNegotiation = true;\n        }\n        if (!needNegotiation && !subscriber && !_this2.pcManager.publisher.isICEConnected && _this2.pcManager.publisher.getICEConnectionState() !== 'checking') {\n          needNegotiation = true;\n        }\n        if (needNegotiation) {\n          // start negotiation\n          _this2.negotiate().catch(err => {\n            livekitLogger.error(err, _this2.logContext);\n          });\n        }\n        const targetChannel = _this2.dataChannelForKind(kind, subscriber);\n        if ((targetChannel === null || targetChannel === void 0 ? void 0 : targetChannel.readyState) === 'open') {\n          return;\n        }\n        // wait until ICE connected\n        const endTime = new Date().getTime() + _this2.peerConnectionTimeout;\n        while (new Date().getTime() < endTime) {\n          if (transport.isICEConnected && ((_a = _this2.dataChannelForKind(kind, subscriber)) === null || _a === void 0 ? void 0 : _a.readyState) === 'open') {\n            return;\n          }\n          yield sleep(50);\n        }\n        throw ConnectionError.internal(\"could not establish \".concat(transportName, \" connection, state: \").concat(transport.getICEConnectionState()));\n      }();\n    });\n  }\n  ensurePublisherConnected(kind) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.publisherConnectionPromise) {\n        this.publisherConnectionPromise = this.ensureDataTransportConnected(kind, false);\n      }\n      yield this.publisherConnectionPromise;\n    });\n  }\n  /* @internal */\n  verifyTransport() {\n    if (!this.pcManager) {\n      return false;\n    }\n    // primary connection\n    if (this.pcManager.currentState !== PCTransportState.CONNECTED) {\n      return false;\n    }\n    // ensure signal is connected\n    if (!this.client.ws || this.client.ws.readyState === WebSocket.CLOSED) {\n      return false;\n    }\n    return true;\n  }\n  /** @internal */\n  negotiate() {\n    return __awaiter(this, void 0, void 0, function* () {\n      // observe signal state\n      return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n        if (!this.pcManager) {\n          reject(new NegotiationError('PC manager is closed'));\n          return;\n        }\n        this.pcManager.requirePublisher();\n        // don't negotiate without any transceivers or data channel, it will generate sdp without ice frag then negotiate failed\n        if (this.pcManager.publisher.getTransceivers().length == 0 && !this.lossyDC && !this.reliableDC) {\n          this.createDataChannels();\n        }\n        const abortController = new AbortController();\n        const handleClosed = () => {\n          abortController.abort();\n          this.log.debug('engine disconnected while negotiation was ongoing', this.logContext);\n          resolve();\n          return;\n        };\n        if (this.isClosed) {\n          reject('cannot negotiate on closed engine');\n        }\n        this.on(EngineEvent.Closing, handleClosed);\n        this.pcManager.publisher.once(PCEvents.RTPVideoPayloadTypes, rtpTypes => {\n          const rtpMap = new Map();\n          rtpTypes.forEach(rtp => {\n            const codec = rtp.codec.toLowerCase();\n            if (isVideoCodec(codec)) {\n              rtpMap.set(rtp.payload, codec);\n            }\n          });\n          this.emit(EngineEvent.RTPVideoMapUpdate, rtpMap);\n        });\n        try {\n          yield this.pcManager.negotiate(abortController);\n          resolve();\n        } catch (e) {\n          if (e instanceof NegotiationError) {\n            this.fullReconnectOnNext = true;\n          }\n          this.handleDisconnect('negotiation', ReconnectReason.RR_UNKNOWN);\n          reject(e);\n        } finally {\n          this.off(EngineEvent.Closing, handleClosed);\n        }\n      }));\n    });\n  }\n  dataChannelForKind(kind, sub) {\n    if (!sub) {\n      if (kind === DataPacket_Kind.LOSSY) {\n        return this.lossyDC;\n      }\n      if (kind === DataPacket_Kind.RELIABLE) {\n        return this.reliableDC;\n      }\n    } else {\n      if (kind === DataPacket_Kind.LOSSY) {\n        return this.lossyDCSub;\n      }\n      if (kind === DataPacket_Kind.RELIABLE) {\n        return this.reliableDCSub;\n      }\n    }\n  }\n  /** @internal */\n  sendSyncState(remoteTracks, localTracks) {\n    var _a, _b, _c, _d;\n    if (!this.pcManager) {\n      this.log.warn('sync state cannot be sent without peer connection setup', this.logContext);\n      return;\n    }\n    const previousPublisherOffer = this.pcManager.publisher.getLocalDescription();\n    const previousPublisherAnswer = this.pcManager.publisher.getRemoteDescription();\n    const previousSubscriberOffer = (_a = this.pcManager.subscriber) === null || _a === void 0 ? void 0 : _a.getRemoteDescription();\n    const previousSubscriberAnswer = (_b = this.pcManager.subscriber) === null || _b === void 0 ? void 0 : _b.getLocalDescription();\n    /* 1. autosubscribe on, so subscribed tracks = all tracks - unsub tracks,\n          in this case, we send unsub tracks, so server add all tracks to this\n          subscribe pc and unsub special tracks from it.\n       2. autosubscribe off, we send subscribed tracks.\n    */\n    const autoSubscribe = (_d = (_c = this.signalOpts) === null || _c === void 0 ? void 0 : _c.autoSubscribe) !== null && _d !== void 0 ? _d : true;\n    const trackSids = new Array();\n    const trackSidsDisabled = new Array();\n    remoteTracks.forEach(track => {\n      if (track.isDesired !== autoSubscribe) {\n        trackSids.push(track.trackSid);\n      }\n      if (!track.isEnabled) {\n        trackSidsDisabled.push(track.trackSid);\n      }\n    });\n    this.client.sendSyncState(new SyncState({\n      answer: this.options.singlePeerConnection ? previousPublisherAnswer ? toProtoSessionDescription({\n        sdp: previousPublisherAnswer.sdp,\n        type: previousPublisherAnswer.type\n      }) : undefined : previousSubscriberAnswer ? toProtoSessionDescription({\n        sdp: previousSubscriberAnswer.sdp,\n        type: previousSubscriberAnswer.type\n      }) : undefined,\n      offer: this.options.singlePeerConnection ? previousPublisherOffer ? toProtoSessionDescription({\n        sdp: previousPublisherOffer.sdp,\n        type: previousPublisherOffer.type\n      }) : undefined : previousSubscriberOffer ? toProtoSessionDescription({\n        sdp: previousSubscriberOffer.sdp,\n        type: previousSubscriberOffer.type\n      }) : undefined,\n      subscription: new UpdateSubscription({\n        trackSids,\n        subscribe: !autoSubscribe,\n        participantTracks: []\n      }),\n      publishTracks: getTrackPublicationInfo(localTracks),\n      dataChannels: this.dataChannelsInfo(),\n      trackSidsDisabled,\n      datachannelReceiveStates: this.reliableReceivedState.map((seq, sid) => {\n        return new DataChannelReceiveState({\n          publisherSid: sid,\n          lastSeq: seq\n        });\n      })\n    }));\n  }\n  /* @internal */\n  failNext() {\n    // debugging method to fail the next reconnect/resume attempt\n    this.shouldFailNext = true;\n  }\n  dataChannelsInfo() {\n    const infos = [];\n    const getInfo = (dc, target) => {\n      if ((dc === null || dc === void 0 ? void 0 : dc.id) !== undefined && dc.id !== null) {\n        infos.push(new DataChannelInfo({\n          label: dc.label,\n          id: dc.id,\n          target\n        }));\n      }\n    };\n    getInfo(this.dataChannelForKind(DataPacket_Kind.LOSSY), SignalTarget.PUBLISHER);\n    getInfo(this.dataChannelForKind(DataPacket_Kind.RELIABLE), SignalTarget.PUBLISHER);\n    getInfo(this.dataChannelForKind(DataPacket_Kind.LOSSY, true), SignalTarget.SUBSCRIBER);\n    getInfo(this.dataChannelForKind(DataPacket_Kind.RELIABLE, true), SignalTarget.SUBSCRIBER);\n    return infos;\n  }\n  clearReconnectTimeout() {\n    if (this.reconnectTimeout) {\n      CriticalTimers.clearTimeout(this.reconnectTimeout);\n    }\n  }\n  clearPendingReconnect() {\n    this.clearReconnectTimeout();\n    this.reconnectAttempts = 0;\n  }\n  registerOnLineListener() {\n    if (isWeb()) {\n      window.addEventListener('online', this.handleBrowserOnLine);\n      window.addEventListener('offline', this.handleBrowserOffline);\n    }\n  }\n  deregisterOnLineListener() {\n    if (isWeb()) {\n      window.removeEventListener('online', this.handleBrowserOnLine);\n      window.removeEventListener('offline', this.handleBrowserOffline);\n    }\n  }\n  getTrackIdForReceiver(receiver) {\n    var _a;\n    const mid = (_a = this.pcManager) === null || _a === void 0 ? void 0 : _a.getMidForReceiver(receiver);\n    if (mid) {\n      const match = Object.entries(this.midToTrackId).find(_ref2 => {\n        let [key] = _ref2;\n        return key === mid;\n      });\n      if (match) {\n        return match[1];\n      }\n    }\n  }\n}\nfunction supportOptionalDatachannel(protocol) {\n  return protocol !== undefined && protocol > 13;\n}\nfunction applyUserDataCompat(newObj, oldObj) {\n  const participantIdentity = newObj.participantIdentity ? newObj.participantIdentity : oldObj.participantIdentity;\n  newObj.participantIdentity = participantIdentity;\n  oldObj.participantIdentity = participantIdentity;\n  const destinationIdentities = newObj.destinationIdentities.length !== 0 ? newObj.destinationIdentities : oldObj.destinationIdentities;\n  newObj.destinationIdentities = destinationIdentities;\n  oldObj.destinationIdentities = destinationIdentities;\n}class BaseStreamReader {\n  get info() {\n    return this._info;\n  }\n  /** @internal */\n  validateBytesReceived() {\n    let doneReceiving = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n    if (typeof this.totalByteSize !== 'number' || this.totalByteSize === 0) {\n      return;\n    }\n    if (doneReceiving && this.bytesReceived < this.totalByteSize) {\n      throw new DataStreamError(\"Not enough chunk(s) received - expected \".concat(this.totalByteSize, \" bytes of data total, only received \").concat(this.bytesReceived, \" bytes\"), DataStreamErrorReason.Incomplete);\n    } else if (this.bytesReceived > this.totalByteSize) {\n      throw new DataStreamError(\"Extra chunk(s) received - expected \".concat(this.totalByteSize, \" bytes of data total, received \").concat(this.bytesReceived, \" bytes\"), DataStreamErrorReason.LengthExceeded);\n    }\n  }\n  constructor(info, stream, totalByteSize, outOfBandFailureRejectingFuture) {\n    this.reader = stream;\n    this.totalByteSize = totalByteSize;\n    this._info = info;\n    this.bytesReceived = 0;\n    this.outOfBandFailureRejectingFuture = outOfBandFailureRejectingFuture;\n  }\n}\nclass ByteStreamReader extends BaseStreamReader {\n  handleChunkReceived(chunk) {\n    var _a;\n    this.bytesReceived += chunk.content.byteLength;\n    this.validateBytesReceived();\n    const currentProgress = this.totalByteSize ? this.bytesReceived / this.totalByteSize : undefined;\n    (_a = this.onProgress) === null || _a === void 0 ? void 0 : _a.call(this, currentProgress);\n  }\n  [Symbol.asyncIterator]() {\n    const reader = this.reader.getReader();\n    let rejectingSignalFuture = new Future();\n    let activeSignal = null;\n    let onAbort = null;\n    if (this.signal) {\n      const signal = this.signal;\n      onAbort = () => {\n        var _a;\n        (_a = rejectingSignalFuture.reject) === null || _a === void 0 ? void 0 : _a.call(rejectingSignalFuture, signal.reason);\n      };\n      signal.addEventListener('abort', onAbort);\n      activeSignal = signal;\n    }\n    const cleanup = () => {\n      reader.releaseLock();\n      if (activeSignal && onAbort) {\n        activeSignal.removeEventListener('abort', onAbort);\n      }\n      this.signal = undefined;\n    };\n    return {\n      next: () => __awaiter(this, void 0, void 0, function* () {\n        var _a, _b;\n        try {\n          const {\n            done,\n            value\n          } = yield Promise.race([reader.read(),\n          // Rejects if this.signal is aborted\n          rejectingSignalFuture.promise,\n          // Rejects if something external says it should, like a participant disconnecting, etc\n          (_b = (_a = this.outOfBandFailureRejectingFuture) === null || _a === void 0 ? void 0 : _a.promise) !== null && _b !== void 0 ? _b : new Promise(() => {\n            /* never resolves */\n          })]);\n          if (done) {\n            this.validateBytesReceived(true);\n            return {\n              done: true,\n              value: undefined\n            };\n          } else {\n            this.handleChunkReceived(value);\n            return {\n              done: false,\n              value: value.content\n            };\n          }\n        } catch (err) {\n          cleanup();\n          throw err;\n        }\n      }),\n      // note: `return` runs only for premature exits, see:\n      // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#errors_during_iteration\n      return() {\n        return __awaiter(this, void 0, void 0, function* () {\n          cleanup();\n          return {\n            done: true,\n            value: undefined\n          };\n        });\n      }\n    };\n  }\n  /**\n   * Injects an AbortSignal, which if aborted, will terminate the currently active\n   * stream iteration operation.\n   *\n   * Note that when using AbortSignal.timeout(...), the timeout applies across\n   * the whole iteration operation, not just one individual chunk read.\n   */\n  withAbortSignal(signal) {\n    this.signal = signal;\n    return this;\n  }\n  readAll() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this = this;\n      let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return function* () {\n        var _a, e_1, _b, _c;\n        let chunks = new Set();\n        const iterator = opts.signal ? _this.withAbortSignal(opts.signal) : _this;\n        try {\n          for (var _d = true, iterator_1 = __asyncValues(iterator), iterator_1_1; iterator_1_1 = yield iterator_1.next(), _a = iterator_1_1.done, !_a; _d = true) {\n            _c = iterator_1_1.value;\n            _d = false;\n            const chunk = _c;\n            chunks.add(chunk);\n          }\n        } catch (e_1_1) {\n          e_1 = {\n            error: e_1_1\n          };\n        } finally {\n          try {\n            if (!_d && !_a && (_b = iterator_1.return)) yield _b.call(iterator_1);\n          } finally {\n            if (e_1) throw e_1.error;\n          }\n        }\n        return Array.from(chunks);\n      }();\n    });\n  }\n}\n/**\n * A class to read chunks from a ReadableStream and provide them in a structured format.\n */\nclass TextStreamReader extends BaseStreamReader {\n  /**\n   * A TextStreamReader instance can be used as an AsyncIterator that returns the entire string\n   * that has been received up to the current point in time.\n   */\n  constructor(info, stream, totalChunkCount, outOfBandFailureRejectingFuture) {\n    super(info, stream, totalChunkCount, outOfBandFailureRejectingFuture);\n    this.receivedChunks = new Map();\n  }\n  handleChunkReceived(chunk) {\n    var _a;\n    const index = bigIntToNumber(chunk.chunkIndex);\n    const previousChunkAtIndex = this.receivedChunks.get(index);\n    if (previousChunkAtIndex && previousChunkAtIndex.version > chunk.version) {\n      // we have a newer version already, dropping the old one\n      return;\n    }\n    this.receivedChunks.set(index, chunk);\n    this.bytesReceived += chunk.content.byteLength;\n    this.validateBytesReceived();\n    const currentProgress = this.totalByteSize ? this.bytesReceived / this.totalByteSize : undefined;\n    (_a = this.onProgress) === null || _a === void 0 ? void 0 : _a.call(this, currentProgress);\n  }\n  /**\n   * Async iterator implementation to allow usage of `for await...of` syntax.\n   * Yields structured chunks from the stream.\n   *\n   */\n  [Symbol.asyncIterator]() {\n    const reader = this.reader.getReader();\n    const decoder = new TextDecoder('utf-8', {\n      fatal: true\n    });\n    let rejectingSignalFuture = new Future();\n    let activeSignal = null;\n    let onAbort = null;\n    if (this.signal) {\n      const signal = this.signal;\n      onAbort = () => {\n        var _a;\n        (_a = rejectingSignalFuture.reject) === null || _a === void 0 ? void 0 : _a.call(rejectingSignalFuture, signal.reason);\n      };\n      signal.addEventListener('abort', onAbort);\n      activeSignal = signal;\n    }\n    const cleanup = () => {\n      reader.releaseLock();\n      if (activeSignal && onAbort) {\n        activeSignal.removeEventListener('abort', onAbort);\n      }\n      this.signal = undefined;\n    };\n    return {\n      next: () => __awaiter(this, void 0, void 0, function* () {\n        var _a, _b;\n        try {\n          const {\n            done,\n            value\n          } = yield Promise.race([reader.read(),\n          // Rejects if this.signal is aborted\n          rejectingSignalFuture.promise,\n          // Rejects if something external says it should, like a participant disconnecting, etc\n          (_b = (_a = this.outOfBandFailureRejectingFuture) === null || _a === void 0 ? void 0 : _a.promise) !== null && _b !== void 0 ? _b : new Promise(() => {\n            /* never resolves */\n          })]);\n          if (done) {\n            this.validateBytesReceived(true);\n            return {\n              done: true,\n              value: undefined\n            };\n          } else {\n            this.handleChunkReceived(value);\n            let decodedResult;\n            try {\n              decodedResult = decoder.decode(value.content);\n            } catch (err) {\n              throw new DataStreamError(\"Cannot decode datastream chunk \".concat(value.chunkIndex, \" as text: \").concat(err), DataStreamErrorReason.DecodeFailed);\n            }\n            return {\n              done: false,\n              value: decodedResult\n            };\n          }\n        } catch (err) {\n          cleanup();\n          throw err;\n        }\n      }),\n      // note: `return` runs only for premature exits, see:\n      // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#errors_during_iteration\n      return() {\n        return __awaiter(this, void 0, void 0, function* () {\n          cleanup();\n          return {\n            done: true,\n            value: undefined\n          };\n        });\n      }\n    };\n  }\n  /**\n   * Injects an AbortSignal, which if aborted, will terminate the currently active\n   * stream iteration operation.\n   *\n   * Note that when using AbortSignal.timeout(...), the timeout applies across\n   * the whole iteration operation, not just one individual chunk read.\n   */\n  withAbortSignal(signal) {\n    this.signal = signal;\n    return this;\n  }\n  readAll() {\n    return __awaiter(this, arguments, void 0, function () {\n      var _this2 = this;\n      let opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n      return function* () {\n        var _a, e_2, _b, _c;\n        let finalString = '';\n        const iterator = opts.signal ? _this2.withAbortSignal(opts.signal) : _this2;\n        try {\n          for (var _d = true, iterator_2 = __asyncValues(iterator), iterator_2_1; iterator_2_1 = yield iterator_2.next(), _a = iterator_2_1.done, !_a; _d = true) {\n            _c = iterator_2_1.value;\n            _d = false;\n            const chunk = _c;\n            finalString += chunk;\n          }\n        } catch (e_2_1) {\n          e_2 = {\n            error: e_2_1\n          };\n        } finally {\n          try {\n            if (!_d && !_a && (_b = iterator_2.return)) yield _b.call(iterator_2);\n          } finally {\n            if (e_2) throw e_2.error;\n          }\n        }\n        return finalString;\n      }();\n    });\n  }\n}class IncomingDataStreamManager {\n  constructor() {\n    this.log = livekitLogger;\n    this.byteStreamControllers = new Map();\n    this.textStreamControllers = new Map();\n    this.byteStreamHandlers = new Map();\n    this.textStreamHandlers = new Map();\n  }\n  registerTextStreamHandler(topic, callback) {\n    if (this.textStreamHandlers.has(topic)) {\n      throw new DataStreamError(\"A text stream handler for topic \\\"\".concat(topic, \"\\\" has already been set.\"), DataStreamErrorReason.HandlerAlreadyRegistered);\n    }\n    this.textStreamHandlers.set(topic, callback);\n  }\n  unregisterTextStreamHandler(topic) {\n    this.textStreamHandlers.delete(topic);\n  }\n  registerByteStreamHandler(topic, callback) {\n    if (this.byteStreamHandlers.has(topic)) {\n      throw new DataStreamError(\"A byte stream handler for topic \\\"\".concat(topic, \"\\\" has already been set.\"), DataStreamErrorReason.HandlerAlreadyRegistered);\n    }\n    this.byteStreamHandlers.set(topic, callback);\n  }\n  unregisterByteStreamHandler(topic) {\n    this.byteStreamHandlers.delete(topic);\n  }\n  clearControllers() {\n    this.byteStreamControllers.clear();\n    this.textStreamControllers.clear();\n  }\n  validateParticipantHasNoActiveDataStreams(participantIdentity) {\n    var _a, _b, _c, _d;\n    // Terminate any in flight data stream receives from the given participant\n    const textStreamsBeingSentByDisconnectingParticipant = Array.from(this.textStreamControllers.entries()).filter(entry => entry[1].sendingParticipantIdentity === participantIdentity);\n    const byteStreamsBeingSentByDisconnectingParticipant = Array.from(this.byteStreamControllers.entries()).filter(entry => entry[1].sendingParticipantIdentity === participantIdentity);\n    if (textStreamsBeingSentByDisconnectingParticipant.length > 0 || byteStreamsBeingSentByDisconnectingParticipant.length > 0) {\n      const abnormalEndError = new DataStreamError(\"Participant \".concat(participantIdentity, \" unexpectedly disconnected in the middle of sending data\"), DataStreamErrorReason.AbnormalEnd);\n      for (const [id, controller] of byteStreamsBeingSentByDisconnectingParticipant) {\n        (_b = (_a = controller.outOfBandFailureRejectingFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, abnormalEndError);\n        this.byteStreamControllers.delete(id);\n      }\n      for (const [id, controller] of textStreamsBeingSentByDisconnectingParticipant) {\n        (_d = (_c = controller.outOfBandFailureRejectingFuture).reject) === null || _d === void 0 ? void 0 : _d.call(_c, abnormalEndError);\n        this.textStreamControllers.delete(id);\n      }\n    }\n  }\n  handleDataStreamPacket(packet, encryptionType) {\n    return __awaiter(this, void 0, void 0, function* () {\n      switch (packet.value.case) {\n        case 'streamHeader':\n          return this.handleStreamHeader(packet.value.value, packet.participantIdentity, encryptionType);\n        case 'streamChunk':\n          return this.handleStreamChunk(packet.value.value, encryptionType);\n        case 'streamTrailer':\n          return this.handleStreamTrailer(packet.value.value, encryptionType);\n        default:\n          throw new Error(\"DataPacket of value \\\"\".concat(packet.value.case, \"\\\" is not data stream related!\"));\n      }\n    });\n  }\n  handleStreamHeader(streamHeader, participantIdentity, encryptionType) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (streamHeader.contentHeader.case === 'byteHeader') {\n        const streamHandlerCallback = this.byteStreamHandlers.get(streamHeader.topic);\n        if (!streamHandlerCallback) {\n          this.log.debug('ignoring incoming byte stream due to no handler for topic', streamHeader.topic);\n          return;\n        }\n        let streamController;\n        const outOfBandFailureRejectingFuture = new Future();\n        outOfBandFailureRejectingFuture.promise.catch(err => {\n          this.log.error(err);\n        });\n        const info = {\n          id: streamHeader.streamId,\n          name: (_a = streamHeader.contentHeader.value.name) !== null && _a !== void 0 ? _a : 'unknown',\n          mimeType: streamHeader.mimeType,\n          size: streamHeader.totalLength ? Number(streamHeader.totalLength) : undefined,\n          topic: streamHeader.topic,\n          timestamp: bigIntToNumber(streamHeader.timestamp),\n          attributes: streamHeader.attributes,\n          encryptionType\n        };\n        const stream = new ReadableStream({\n          start: controller => {\n            streamController = controller;\n            if (this.textStreamControllers.has(streamHeader.streamId)) {\n              throw new DataStreamError(\"A data stream read is already in progress for a stream with id \".concat(streamHeader.streamId, \".\"), DataStreamErrorReason.AlreadyOpened);\n            }\n            this.byteStreamControllers.set(streamHeader.streamId, {\n              info,\n              controller: streamController,\n              startTime: Date.now(),\n              sendingParticipantIdentity: participantIdentity,\n              outOfBandFailureRejectingFuture\n            });\n          }\n        });\n        streamHandlerCallback(new ByteStreamReader(info, stream, bigIntToNumber(streamHeader.totalLength), outOfBandFailureRejectingFuture), {\n          identity: participantIdentity\n        });\n      } else if (streamHeader.contentHeader.case === 'textHeader') {\n        const streamHandlerCallback = this.textStreamHandlers.get(streamHeader.topic);\n        if (!streamHandlerCallback) {\n          this.log.debug('ignoring incoming text stream due to no handler for topic', streamHeader.topic);\n          return;\n        }\n        let streamController;\n        const outOfBandFailureRejectingFuture = new Future();\n        outOfBandFailureRejectingFuture.promise.catch(err => {\n          this.log.error(err);\n        });\n        const info = {\n          id: streamHeader.streamId,\n          mimeType: streamHeader.mimeType,\n          size: streamHeader.totalLength ? Number(streamHeader.totalLength) : undefined,\n          topic: streamHeader.topic,\n          timestamp: Number(streamHeader.timestamp),\n          attributes: streamHeader.attributes,\n          encryptionType\n        };\n        const stream = new ReadableStream({\n          start: controller => {\n            streamController = controller;\n            if (this.textStreamControllers.has(streamHeader.streamId)) {\n              throw new DataStreamError(\"A data stream read is already in progress for a stream with id \".concat(streamHeader.streamId, \".\"), DataStreamErrorReason.AlreadyOpened);\n            }\n            this.textStreamControllers.set(streamHeader.streamId, {\n              info,\n              controller: streamController,\n              startTime: Date.now(),\n              sendingParticipantIdentity: participantIdentity,\n              outOfBandFailureRejectingFuture\n            });\n          }\n        });\n        streamHandlerCallback(new TextStreamReader(info, stream, bigIntToNumber(streamHeader.totalLength), outOfBandFailureRejectingFuture), {\n          identity: participantIdentity\n        });\n      }\n    });\n  }\n  handleStreamChunk(chunk, encryptionType) {\n    const fileBuffer = this.byteStreamControllers.get(chunk.streamId);\n    if (fileBuffer) {\n      if (fileBuffer.info.encryptionType !== encryptionType) {\n        fileBuffer.controller.error(new DataStreamError(\"Encryption type mismatch for stream \".concat(chunk.streamId, \". Expected \").concat(encryptionType, \", got \").concat(fileBuffer.info.encryptionType), DataStreamErrorReason.EncryptionTypeMismatch));\n        this.byteStreamControllers.delete(chunk.streamId);\n      } else if (chunk.content.length > 0) {\n        fileBuffer.controller.enqueue(chunk);\n      }\n    }\n    const textBuffer = this.textStreamControllers.get(chunk.streamId);\n    if (textBuffer) {\n      if (textBuffer.info.encryptionType !== encryptionType) {\n        textBuffer.controller.error(new DataStreamError(\"Encryption type mismatch for stream \".concat(chunk.streamId, \". Expected \").concat(encryptionType, \", got \").concat(textBuffer.info.encryptionType), DataStreamErrorReason.EncryptionTypeMismatch));\n        this.textStreamControllers.delete(chunk.streamId);\n      } else if (chunk.content.length > 0) {\n        textBuffer.controller.enqueue(chunk);\n      }\n    }\n  }\n  handleStreamTrailer(trailer, encryptionType) {\n    const textBuffer = this.textStreamControllers.get(trailer.streamId);\n    if (textBuffer) {\n      if (textBuffer.info.encryptionType !== encryptionType) {\n        textBuffer.controller.error(new DataStreamError(\"Encryption type mismatch for stream \".concat(trailer.streamId, \". Expected \").concat(encryptionType, \", got \").concat(textBuffer.info.encryptionType), DataStreamErrorReason.EncryptionTypeMismatch));\n      } else {\n        textBuffer.info.attributes = Object.assign(Object.assign({}, textBuffer.info.attributes), trailer.attributes);\n        textBuffer.controller.close();\n        this.textStreamControllers.delete(trailer.streamId);\n      }\n    }\n    const fileBuffer = this.byteStreamControllers.get(trailer.streamId);\n    if (fileBuffer) {\n      if (fileBuffer.info.encryptionType !== encryptionType) {\n        fileBuffer.controller.error(new DataStreamError(\"Encryption type mismatch for stream \".concat(trailer.streamId, \". Expected \").concat(encryptionType, \", got \").concat(fileBuffer.info.encryptionType), DataStreamErrorReason.EncryptionTypeMismatch));\n      } else {\n        fileBuffer.info.attributes = Object.assign(Object.assign({}, fileBuffer.info.attributes), trailer.attributes);\n        fileBuffer.controller.close();\n      }\n      this.byteStreamControllers.delete(trailer.streamId);\n    }\n  }\n}class BaseStreamWriter {\n  constructor(writableStream, info, onClose) {\n    this.writableStream = writableStream;\n    this.defaultWriter = writableStream.getWriter();\n    this.onClose = onClose;\n    this.info = info;\n  }\n  write(chunk) {\n    return this.defaultWriter.write(chunk);\n  }\n  close() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      yield this.defaultWriter.close();\n      this.defaultWriter.releaseLock();\n      (_a = this.onClose) === null || _a === void 0 ? void 0 : _a.call(this);\n    });\n  }\n}\nclass TextStreamWriter extends BaseStreamWriter {}\nclass ByteStreamWriter extends BaseStreamWriter {}const STREAM_CHUNK_SIZE = 15000;\n/**\n * Manages sending custom user data via data channels.\n * @internal\n */\nclass OutgoingDataStreamManager {\n  constructor(engine, log) {\n    this.engine = engine;\n    this.log = log;\n  }\n  setupEngine(engine) {\n    this.engine = engine;\n  }\n  /** {@inheritDoc LocalParticipant.sendText} */\n  sendText(text, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const streamId = crypto.randomUUID();\n      const textInBytes = new TextEncoder().encode(text);\n      const totalTextLength = textInBytes.byteLength;\n      const fileIds = (_a = options === null || options === void 0 ? void 0 : options.attachments) === null || _a === void 0 ? void 0 : _a.map(() => crypto.randomUUID());\n      const progresses = new Array(fileIds ? fileIds.length + 1 : 1).fill(0);\n      const handleProgress = (progress, idx) => {\n        var _a;\n        progresses[idx] = progress;\n        const totalProgress = progresses.reduce((acc, val) => acc + val, 0);\n        (_a = options === null || options === void 0 ? void 0 : options.onProgress) === null || _a === void 0 ? void 0 : _a.call(options, totalProgress);\n      };\n      const writer = yield this.streamText({\n        streamId,\n        totalSize: totalTextLength,\n        destinationIdentities: options === null || options === void 0 ? void 0 : options.destinationIdentities,\n        topic: options === null || options === void 0 ? void 0 : options.topic,\n        attachedStreamIds: fileIds,\n        attributes: options === null || options === void 0 ? void 0 : options.attributes\n      });\n      yield writer.write(text);\n      // set text part of progress to 1\n      handleProgress(1, 0);\n      yield writer.close();\n      if ((options === null || options === void 0 ? void 0 : options.attachments) && fileIds) {\n        yield Promise.all(options.attachments.map((file, idx) => __awaiter(this, void 0, void 0, function* () {\n          return this._sendFile(fileIds[idx], file, {\n            topic: options.topic,\n            mimeType: file.type,\n            onProgress: progress => {\n              handleProgress(progress, idx + 1);\n            }\n          });\n        })));\n      }\n      return writer.info;\n    });\n  }\n  /**\n   * @internal\n   */\n  streamText(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      const streamId = (_a = options === null || options === void 0 ? void 0 : options.streamId) !== null && _a !== void 0 ? _a : crypto.randomUUID();\n      const info = {\n        id: streamId,\n        mimeType: 'text/plain',\n        timestamp: Date.now(),\n        topic: (_b = options === null || options === void 0 ? void 0 : options.topic) !== null && _b !== void 0 ? _b : '',\n        size: options === null || options === void 0 ? void 0 : options.totalSize,\n        attributes: options === null || options === void 0 ? void 0 : options.attributes,\n        encryptionType: ((_c = this.engine.e2eeManager) === null || _c === void 0 ? void 0 : _c.isDataChannelEncryptionEnabled) ? Encryption_Type.GCM : Encryption_Type.NONE\n      };\n      const header = new DataStream_Header({\n        streamId,\n        mimeType: info.mimeType,\n        topic: info.topic,\n        timestamp: numberToBigInt(info.timestamp),\n        totalLength: numberToBigInt(options === null || options === void 0 ? void 0 : options.totalSize),\n        attributes: info.attributes,\n        contentHeader: {\n          case: 'textHeader',\n          value: new DataStream_TextHeader({\n            version: options === null || options === void 0 ? void 0 : options.version,\n            attachedStreamIds: options === null || options === void 0 ? void 0 : options.attachedStreamIds,\n            replyToStreamId: options === null || options === void 0 ? void 0 : options.replyToStreamId,\n            operationType: (options === null || options === void 0 ? void 0 : options.type) === 'update' ? DataStream_OperationType.UPDATE : DataStream_OperationType.CREATE\n          })\n        }\n      });\n      const destinationIdentities = options === null || options === void 0 ? void 0 : options.destinationIdentities;\n      const packet = new DataPacket({\n        destinationIdentities,\n        value: {\n          case: 'streamHeader',\n          value: header\n        }\n      });\n      yield this.engine.sendDataPacket(packet, DataPacket_Kind.RELIABLE);\n      let chunkId = 0;\n      const engine = this.engine;\n      const writableStream = new WritableStream({\n        // Implement the sink\n        write(text) {\n          return __awaiter(this, void 0, void 0, function* () {\n            for (const textByteChunk of splitUtf8(text, STREAM_CHUNK_SIZE)) {\n              const chunk = new DataStream_Chunk({\n                content: textByteChunk,\n                streamId,\n                chunkIndex: numberToBigInt(chunkId)\n              });\n              const chunkPacket = new DataPacket({\n                destinationIdentities,\n                value: {\n                  case: 'streamChunk',\n                  value: chunk\n                }\n              });\n              yield engine.sendDataPacket(chunkPacket, DataPacket_Kind.RELIABLE);\n              chunkId += 1;\n            }\n          });\n        },\n        close() {\n          return __awaiter(this, void 0, void 0, function* () {\n            const trailer = new DataStream_Trailer({\n              streamId\n            });\n            const trailerPacket = new DataPacket({\n              destinationIdentities,\n              value: {\n                case: 'streamTrailer',\n                value: trailer\n              }\n            });\n            yield engine.sendDataPacket(trailerPacket, DataPacket_Kind.RELIABLE);\n          });\n        },\n        abort(err) {\n          console.log('Sink error:', err);\n          // TODO handle aborts to signal something to receiver side\n        }\n      });\n      let onEngineClose = () => __awaiter(this, void 0, void 0, function* () {\n        yield writer.close();\n      });\n      engine.once(EngineEvent.Closing, onEngineClose);\n      const writer = new TextStreamWriter(writableStream, info, () => this.engine.off(EngineEvent.Closing, onEngineClose));\n      return writer;\n    });\n  }\n  sendFile(file, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const streamId = crypto.randomUUID();\n      yield this._sendFile(streamId, file, options);\n      return {\n        id: streamId\n      };\n    });\n  }\n  _sendFile(streamId, file, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const writer = yield this.streamBytes({\n        streamId,\n        totalSize: file.size,\n        name: file.name,\n        mimeType: (_a = options === null || options === void 0 ? void 0 : options.mimeType) !== null && _a !== void 0 ? _a : file.type,\n        topic: options === null || options === void 0 ? void 0 : options.topic,\n        destinationIdentities: options === null || options === void 0 ? void 0 : options.destinationIdentities\n      });\n      const reader = file.stream().getReader();\n      while (true) {\n        const {\n          done,\n          value\n        } = yield reader.read();\n        if (done) {\n          break;\n        }\n        yield writer.write(value);\n      }\n      yield writer.close();\n      return writer.info;\n    });\n  }\n  streamBytes(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c, _d, _e, _f;\n      const streamId = (_a = options === null || options === void 0 ? void 0 : options.streamId) !== null && _a !== void 0 ? _a : crypto.randomUUID();\n      const destinationIdentities = options === null || options === void 0 ? void 0 : options.destinationIdentities;\n      const info = {\n        id: streamId,\n        mimeType: (_b = options === null || options === void 0 ? void 0 : options.mimeType) !== null && _b !== void 0 ? _b : 'application/octet-stream',\n        topic: (_c = options === null || options === void 0 ? void 0 : options.topic) !== null && _c !== void 0 ? _c : '',\n        timestamp: Date.now(),\n        attributes: options === null || options === void 0 ? void 0 : options.attributes,\n        size: options === null || options === void 0 ? void 0 : options.totalSize,\n        name: (_d = options === null || options === void 0 ? void 0 : options.name) !== null && _d !== void 0 ? _d : 'unknown',\n        encryptionType: ((_e = this.engine.e2eeManager) === null || _e === void 0 ? void 0 : _e.isDataChannelEncryptionEnabled) ? Encryption_Type.GCM : Encryption_Type.NONE\n      };\n      const header = new DataStream_Header({\n        totalLength: numberToBigInt((_f = info.size) !== null && _f !== void 0 ? _f : 0),\n        mimeType: info.mimeType,\n        streamId,\n        topic: info.topic,\n        timestamp: numberToBigInt(Date.now()),\n        attributes: info.attributes,\n        contentHeader: {\n          case: 'byteHeader',\n          value: new DataStream_ByteHeader({\n            name: info.name\n          })\n        }\n      });\n      const packet = new DataPacket({\n        destinationIdentities,\n        value: {\n          case: 'streamHeader',\n          value: header\n        }\n      });\n      yield this.engine.sendDataPacket(packet, DataPacket_Kind.RELIABLE);\n      let chunkId = 0;\n      const writeMutex = new _();\n      const engine = this.engine;\n      const logLocal = this.log;\n      const writableStream = new WritableStream({\n        write(chunk) {\n          return __awaiter(this, void 0, void 0, function* () {\n            const unlock = yield writeMutex.lock();\n            let byteOffset = 0;\n            try {\n              while (byteOffset < chunk.byteLength) {\n                const subChunk = chunk.slice(byteOffset, byteOffset + STREAM_CHUNK_SIZE);\n                const chunkPacket = new DataPacket({\n                  destinationIdentities,\n                  value: {\n                    case: 'streamChunk',\n                    value: new DataStream_Chunk({\n                      content: subChunk,\n                      streamId,\n                      chunkIndex: numberToBigInt(chunkId)\n                    })\n                  }\n                });\n                yield engine.sendDataPacket(chunkPacket, DataPacket_Kind.RELIABLE);\n                chunkId += 1;\n                byteOffset += subChunk.byteLength;\n              }\n            } finally {\n              unlock();\n            }\n          });\n        },\n        close() {\n          return __awaiter(this, void 0, void 0, function* () {\n            const trailer = new DataStream_Trailer({\n              streamId\n            });\n            const trailerPacket = new DataPacket({\n              destinationIdentities,\n              value: {\n                case: 'streamTrailer',\n                value: trailer\n              }\n            });\n            yield engine.sendDataPacket(trailerPacket, DataPacket_Kind.RELIABLE);\n          });\n        },\n        abort(err) {\n          logLocal.error('Sink error:', err);\n        }\n      });\n      const byteWriter = new ByteStreamWriter(writableStream, info);\n      return byteWriter;\n    });\n  }\n}class RemoteTrack extends Track {\n  constructor(mediaTrack, sid, kind, receiver, loggerOptions) {\n    super(mediaTrack, kind, loggerOptions);\n    this.sid = sid;\n    this.receiver = receiver;\n  }\n  get isLocal() {\n    return false;\n  }\n  /** @internal */\n  setMuted(muted) {\n    if (this.isMuted !== muted) {\n      this.isMuted = muted;\n      this._mediaStreamTrack.enabled = !muted;\n      this.emit(muted ? TrackEvent.Muted : TrackEvent.Unmuted, this);\n    }\n  }\n  /** @internal */\n  setMediaStream(stream) {\n    // this is needed to determine when the track is finished\n    this.mediaStream = stream;\n    const onRemoveTrack = event => {\n      if (event.track === this._mediaStreamTrack) {\n        stream.removeEventListener('removetrack', onRemoveTrack);\n        if (this.receiver && 'playoutDelayHint' in this.receiver) {\n          this.receiver.playoutDelayHint = undefined;\n        }\n        this.receiver = undefined;\n        this._currentBitrate = 0;\n        this.emit(TrackEvent.Ended, this);\n      }\n    };\n    stream.addEventListener('removetrack', onRemoveTrack);\n  }\n  start() {\n    this.startMonitor();\n    // use `enabled` of track to enable re-use of transceiver\n    super.enable();\n  }\n  stop() {\n    this.stopMonitor();\n    // use `enabled` of track to enable re-use of transceiver\n    super.disable();\n  }\n  /**\n   * Gets the RTCStatsReport for the RemoteTrack's underlying RTCRtpReceiver\n   * See https://developer.mozilla.org/en-US/docs/Web/API/RTCStatsReport\n   *\n   * @returns Promise<RTCStatsReport> | undefined\n   */\n  getRTCStatsReport() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!((_a = this.receiver) === null || _a === void 0 ? void 0 : _a.getStats)) {\n        return;\n      }\n      const statsReport = yield this.receiver.getStats();\n      return statsReport;\n    });\n  }\n  /**\n   * Allows to set a playout delay (in seconds) for this track.\n   * A higher value allows for more buffering of the track in the browser\n   * and will result in a delay of media being played back of `delayInSeconds`\n   */\n  setPlayoutDelay(delayInSeconds) {\n    if (this.receiver) {\n      if ('playoutDelayHint' in this.receiver) {\n        this.receiver.playoutDelayHint = delayInSeconds;\n      } else {\n        this.log.warn('Playout delay not supported in this browser');\n      }\n    } else {\n      this.log.warn('Cannot set playout delay, track already ended');\n    }\n  }\n  /**\n   * Returns the current playout delay (in seconds) of this track.\n   */\n  getPlayoutDelay() {\n    if (this.receiver) {\n      if ('playoutDelayHint' in this.receiver) {\n        return this.receiver.playoutDelayHint;\n      } else {\n        this.log.warn('Playout delay not supported in this browser');\n      }\n    } else {\n      this.log.warn('Cannot get playout delay, track already ended');\n    }\n    return 0;\n  }\n  /* @internal */\n  startMonitor() {\n    if (!this.monitorInterval) {\n      this.monitorInterval = setInterval(() => this.monitorReceiver(), monitorFrequency);\n    }\n    if (supportsSynchronizationSources()) {\n      this.registerTimeSyncUpdate();\n    }\n  }\n  registerTimeSyncUpdate() {\n    const loop = () => {\n      var _a;\n      this.timeSyncHandle = requestAnimationFrame(() => loop());\n      const sources = (_a = this.receiver) === null || _a === void 0 ? void 0 : _a.getSynchronizationSources()[0];\n      if (sources) {\n        const {\n          timestamp,\n          rtpTimestamp\n        } = sources;\n        if (rtpTimestamp && this.rtpTimestamp !== rtpTimestamp) {\n          this.emit(TrackEvent.TimeSyncUpdate, {\n            timestamp,\n            rtpTimestamp\n          });\n          this.rtpTimestamp = rtpTimestamp;\n        }\n      }\n    };\n    loop();\n  }\n}class RemoteAudioTrack extends RemoteTrack {\n  constructor(mediaTrack, sid, receiver, audioContext, audioOutput, loggerOptions) {\n    super(mediaTrack, sid, Track.Kind.Audio, receiver, loggerOptions);\n    this.monitorReceiver = () => __awaiter(this, void 0, void 0, function* () {\n      if (!this.receiver) {\n        this._currentBitrate = 0;\n        return;\n      }\n      const stats = yield this.getReceiverStats();\n      if (stats && this.prevStats && this.receiver) {\n        this._currentBitrate = computeBitrate(stats, this.prevStats);\n      }\n      this.prevStats = stats;\n    });\n    this.audioContext = audioContext;\n    this.webAudioPluginNodes = [];\n    if (audioOutput) {\n      this.sinkId = audioOutput.deviceId;\n    }\n  }\n  /**\n   * sets the volume for all attached audio elements\n   */\n  setVolume(volume) {\n    var _a;\n    for (const el of this.attachedElements) {\n      if (this.audioContext) {\n        (_a = this.gainNode) === null || _a === void 0 ? void 0 : _a.gain.setTargetAtTime(volume, 0, 0.1);\n      } else {\n        el.volume = volume;\n      }\n    }\n    if (isReactNative()) {\n      // @ts-ignore\n      this._mediaStreamTrack._setVolume(volume);\n    }\n    this.elementVolume = volume;\n  }\n  /**\n   * gets the volume of attached audio elements (loudest)\n   */\n  getVolume() {\n    if (this.elementVolume) {\n      return this.elementVolume;\n    }\n    if (isReactNative()) {\n      // RN volume value defaults to 1.0 if hasn't been changed.\n      return 1.0;\n    }\n    let highestVolume = 0;\n    this.attachedElements.forEach(element => {\n      if (element.volume > highestVolume) {\n        highestVolume = element.volume;\n      }\n    });\n    return highestVolume;\n  }\n  /**\n   * calls setSinkId on all attached elements, if supported\n   * @param deviceId audio output device\n   */\n  setSinkId(deviceId) {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.sinkId = deviceId;\n      yield Promise.all(this.attachedElements.map(elm => {\n        if (!supportsSetSinkId(elm)) {\n          return;\n        }\n        /* @ts-ignore */\n        return elm.setSinkId(deviceId);\n      }));\n    });\n  }\n  attach(element) {\n    const needsNewWebAudioConnection = this.attachedElements.length === 0;\n    if (!element) {\n      element = super.attach();\n    } else {\n      super.attach(element);\n    }\n    if (this.sinkId && supportsSetSinkId(element)) {\n      element.setSinkId(this.sinkId).catch(e => {\n        this.log.error('Failed to set sink id on remote audio track', e, this.logContext);\n      });\n    }\n    if (this.audioContext && needsNewWebAudioConnection) {\n      this.log.debug('using audio context mapping', this.logContext);\n      this.connectWebAudio(this.audioContext, element);\n      element.volume = 0;\n      element.muted = true;\n    }\n    if (this.elementVolume) {\n      // make sure volume setting is being applied to the newly attached element\n      this.setVolume(this.elementVolume);\n    }\n    return element;\n  }\n  detach(element) {\n    let detached;\n    if (!element) {\n      detached = super.detach();\n      this.disconnectWebAudio();\n    } else {\n      detached = super.detach(element);\n      // if there are still any attached elements after detaching, connect webaudio to the first element that's left\n      // disconnect webaudio otherwise\n      if (this.audioContext) {\n        if (this.attachedElements.length > 0) {\n          this.connectWebAudio(this.audioContext, this.attachedElements[0]);\n        } else {\n          this.disconnectWebAudio();\n        }\n      }\n    }\n    return detached;\n  }\n  /**\n   * @internal\n   * @experimental\n   */\n  setAudioContext(audioContext) {\n    this.audioContext = audioContext;\n    if (audioContext && this.attachedElements.length > 0) {\n      this.connectWebAudio(audioContext, this.attachedElements[0]);\n    } else if (!audioContext) {\n      this.disconnectWebAudio();\n    }\n  }\n  /**\n   * @internal\n   * @experimental\n   * @param {AudioNode[]} nodes - An array of WebAudio nodes. These nodes should not be connected to each other when passed, as the sdk will take care of connecting them in the order of the array.\n   */\n  setWebAudioPlugins(nodes) {\n    this.webAudioPluginNodes = nodes;\n    if (this.attachedElements.length > 0 && this.audioContext) {\n      this.connectWebAudio(this.audioContext, this.attachedElements[0]);\n    }\n  }\n  connectWebAudio(context, element) {\n    this.disconnectWebAudio();\n    // @ts-ignore attached elements always have a srcObject set\n    this.sourceNode = context.createMediaStreamSource(element.srcObject);\n    let lastNode = this.sourceNode;\n    this.webAudioPluginNodes.forEach(node => {\n      lastNode.connect(node);\n      lastNode = node;\n    });\n    this.gainNode = context.createGain();\n    lastNode.connect(this.gainNode);\n    this.gainNode.connect(context.destination);\n    if (this.elementVolume) {\n      this.gainNode.gain.setTargetAtTime(this.elementVolume, 0, 0.1);\n    }\n    // try to resume the context if it isn't running already\n    if (context.state !== 'running') {\n      context.resume().then(() => {\n        if (context.state !== 'running') {\n          this.emit(TrackEvent.AudioPlaybackFailed, new Error(\"Audio Context couldn't be started automatically\"));\n        }\n      }).catch(e => {\n        this.emit(TrackEvent.AudioPlaybackFailed, e);\n      });\n    }\n  }\n  disconnectWebAudio() {\n    var _a, _b;\n    (_a = this.gainNode) === null || _a === void 0 ? void 0 : _a.disconnect();\n    (_b = this.sourceNode) === null || _b === void 0 ? void 0 : _b.disconnect();\n    this.gainNode = undefined;\n    this.sourceNode = undefined;\n  }\n  getReceiverStats() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.receiver || !this.receiver.getStats) {\n        return;\n      }\n      const stats = yield this.receiver.getStats();\n      let receiverStats;\n      stats.forEach(v => {\n        if (v.type === 'inbound-rtp') {\n          receiverStats = {\n            type: 'audio',\n            streamId: v.id,\n            timestamp: v.timestamp,\n            jitter: v.jitter,\n            bytesReceived: v.bytesReceived,\n            concealedSamples: v.concealedSamples,\n            concealmentEvents: v.concealmentEvents,\n            silentConcealedSamples: v.silentConcealedSamples,\n            silentConcealmentEvents: v.silentConcealmentEvents,\n            totalAudioEnergy: v.totalAudioEnergy,\n            totalSamplesDuration: v.totalSamplesDuration\n          };\n        }\n      });\n      return receiverStats;\n    });\n  }\n}const REACTION_DELAY = 100;\nclass RemoteVideoTrack extends RemoteTrack {\n  constructor(mediaTrack, sid, receiver, adaptiveStreamSettings, loggerOptions) {\n    super(mediaTrack, sid, Track.Kind.Video, receiver, loggerOptions);\n    this.elementInfos = [];\n    this.monitorReceiver = () => __awaiter(this, void 0, void 0, function* () {\n      if (!this.receiver) {\n        this._currentBitrate = 0;\n        return;\n      }\n      const stats = yield this.getReceiverStats();\n      if (stats && this.prevStats && this.receiver) {\n        this._currentBitrate = computeBitrate(stats, this.prevStats);\n      }\n      this.prevStats = stats;\n    });\n    this.debouncedHandleResize = r(() => {\n      this.updateDimensions();\n    }, REACTION_DELAY);\n    this.adaptiveStreamSettings = adaptiveStreamSettings;\n  }\n  get isAdaptiveStream() {\n    return this.adaptiveStreamSettings !== undefined;\n  }\n  setStreamState(value) {\n    super.setStreamState(value);\n    this.log.debug('setStreamState', value);\n    if (this.isAdaptiveStream && value === Track.StreamState.Active) {\n      // update visibility for adaptive stream tracks when stream state received from server is active\n      // this is needed to ensure the track is stopped when there's no element attached to it at all\n      this.updateVisibility();\n    }\n  }\n  /**\n   * Note: When using adaptiveStream, you need to use remoteVideoTrack.attach() to add the track to a HTMLVideoElement, otherwise your video tracks might never start\n   */\n  get mediaStreamTrack() {\n    return this._mediaStreamTrack;\n  }\n  /** @internal */\n  setMuted(muted) {\n    super.setMuted(muted);\n    this.attachedElements.forEach(element => {\n      // detach or attach\n      if (muted) {\n        detachTrack(this._mediaStreamTrack, element);\n      } else {\n        attachToElement(this._mediaStreamTrack, element);\n      }\n    });\n  }\n  attach(element) {\n    if (!element) {\n      element = super.attach();\n    } else {\n      super.attach(element);\n    }\n    // It's possible attach is called multiple times on an element. When that's\n    // the case, we'd want to avoid adding duplicate elementInfos\n    if (this.adaptiveStreamSettings && this.elementInfos.find(info => info.element === element) === undefined) {\n      const elementInfo = new HTMLElementInfo(element);\n      this.observeElementInfo(elementInfo);\n    }\n    return element;\n  }\n  /**\n   * Observe an ElementInfo for changes when adaptive streaming.\n   * @param elementInfo\n   * @internal\n   */\n  observeElementInfo(elementInfo) {\n    if (this.adaptiveStreamSettings && this.elementInfos.find(info => info === elementInfo) === undefined) {\n      elementInfo.handleResize = () => {\n        this.debouncedHandleResize();\n      };\n      elementInfo.handleVisibilityChanged = () => {\n        this.updateVisibility();\n      };\n      this.elementInfos.push(elementInfo);\n      elementInfo.observe();\n      // trigger the first resize update cycle\n      // if the tab is backgrounded, the initial resize event does not fire until\n      // the tab comes into focus for the first time.\n      this.debouncedHandleResize();\n      this.updateVisibility();\n    } else {\n      this.log.warn('visibility resize observer not triggered', this.logContext);\n    }\n  }\n  /**\n   * Stop observing an ElementInfo for changes.\n   * @param elementInfo\n   * @internal\n   */\n  stopObservingElementInfo(elementInfo) {\n    if (!this.isAdaptiveStream) {\n      this.log.warn('stopObservingElementInfo ignored', this.logContext);\n      return;\n    }\n    const stopElementInfos = this.elementInfos.filter(info => info === elementInfo);\n    for (const info of stopElementInfos) {\n      info.stopObserving();\n    }\n    this.elementInfos = this.elementInfos.filter(info => info !== elementInfo);\n    this.updateVisibility();\n    this.debouncedHandleResize();\n  }\n  detach(element) {\n    let detachedElements = [];\n    if (element) {\n      this.stopObservingElement(element);\n      return super.detach(element);\n    }\n    detachedElements = super.detach();\n    for (const e of detachedElements) {\n      this.stopObservingElement(e);\n    }\n    return detachedElements;\n  }\n  /** @internal */\n  getDecoderImplementation() {\n    var _a;\n    return (_a = this.prevStats) === null || _a === void 0 ? void 0 : _a.decoderImplementation;\n  }\n  getReceiverStats() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (!this.receiver || !this.receiver.getStats) {\n        return;\n      }\n      const stats = yield this.receiver.getStats();\n      let receiverStats;\n      let codecID = '';\n      let codecs = new Map();\n      stats.forEach(v => {\n        if (v.type === 'inbound-rtp') {\n          codecID = v.codecId;\n          receiverStats = {\n            type: 'video',\n            streamId: v.id,\n            framesDecoded: v.framesDecoded,\n            framesDropped: v.framesDropped,\n            framesReceived: v.framesReceived,\n            packetsReceived: v.packetsReceived,\n            packetsLost: v.packetsLost,\n            frameWidth: v.frameWidth,\n            frameHeight: v.frameHeight,\n            pliCount: v.pliCount,\n            firCount: v.firCount,\n            nackCount: v.nackCount,\n            jitter: v.jitter,\n            timestamp: v.timestamp,\n            bytesReceived: v.bytesReceived,\n            decoderImplementation: v.decoderImplementation\n          };\n        } else if (v.type === 'codec') {\n          codecs.set(v.id, v);\n        }\n      });\n      if (receiverStats && codecID !== '' && codecs.get(codecID)) {\n        receiverStats.mimeType = codecs.get(codecID).mimeType;\n      }\n      return receiverStats;\n    });\n  }\n  stopObservingElement(element) {\n    const stopElementInfos = this.elementInfos.filter(info => info.element === element);\n    for (const info of stopElementInfos) {\n      this.stopObservingElementInfo(info);\n    }\n  }\n  handleAppVisibilityChanged() {\n    const _super = Object.create(null, {\n      handleAppVisibilityChanged: {\n        get: () => super.handleAppVisibilityChanged\n      }\n    });\n    return __awaiter(this, void 0, void 0, function* () {\n      yield _super.handleAppVisibilityChanged.call(this);\n      if (!this.isAdaptiveStream) return;\n      this.updateVisibility();\n    });\n  }\n  updateVisibility(forceEmit) {\n    var _a, _b;\n    const lastVisibilityChange = this.elementInfos.reduce((prev, info) => Math.max(prev, info.visibilityChangedAt || 0), 0);\n    const backgroundPause = ((_b = (_a = this.adaptiveStreamSettings) === null || _a === void 0 ? void 0 : _a.pauseVideoInBackground) !== null && _b !== void 0 ? _b : true // default to true\n    ) ? this.isInBackground : false;\n    const isPiPMode = this.elementInfos.some(info => info.pictureInPicture);\n    const isVisible = this.elementInfos.some(info => info.visible) && !backgroundPause || isPiPMode;\n    if (this.lastVisible === isVisible && !forceEmit) {\n      return;\n    }\n    if (!isVisible && Date.now() - lastVisibilityChange < REACTION_DELAY) {\n      // delay hidden events\n      CriticalTimers.setTimeout(() => {\n        this.updateVisibility();\n      }, REACTION_DELAY);\n      return;\n    }\n    this.lastVisible = isVisible;\n    this.emit(TrackEvent.VisibilityChanged, isVisible, this);\n  }\n  updateDimensions() {\n    var _a, _b;\n    let maxWidth = 0;\n    let maxHeight = 0;\n    const pixelDensity = this.getPixelDensity();\n    for (const info of this.elementInfos) {\n      const currentElementWidth = info.width() * pixelDensity;\n      const currentElementHeight = info.height() * pixelDensity;\n      if (currentElementWidth + currentElementHeight > maxWidth + maxHeight) {\n        maxWidth = currentElementWidth;\n        maxHeight = currentElementHeight;\n      }\n    }\n    if (((_a = this.lastDimensions) === null || _a === void 0 ? void 0 : _a.width) === maxWidth && ((_b = this.lastDimensions) === null || _b === void 0 ? void 0 : _b.height) === maxHeight) {\n      return;\n    }\n    this.lastDimensions = {\n      width: maxWidth,\n      height: maxHeight\n    };\n    this.emit(TrackEvent.VideoDimensionsChanged, this.lastDimensions, this);\n  }\n  getPixelDensity() {\n    var _a;\n    const pixelDensity = (_a = this.adaptiveStreamSettings) === null || _a === void 0 ? void 0 : _a.pixelDensity;\n    if (pixelDensity === 'screen') {\n      return getDevicePixelRatio();\n    } else if (!pixelDensity) {\n      // when unset, we'll pick a sane default here.\n      // for higher pixel density devices (mobile phones, etc), we'll use 2\n      // otherwise it defaults to 1\n      const devicePixelRatio = getDevicePixelRatio();\n      if (devicePixelRatio > 2) {\n        return 2;\n      } else {\n        return 1;\n      }\n    }\n    return pixelDensity;\n  }\n}\nclass HTMLElementInfo {\n  get visible() {\n    return this.isPiP || this.isIntersecting;\n  }\n  get pictureInPicture() {\n    return this.isPiP;\n  }\n  constructor(element, visible) {\n    this.onVisibilityChanged = entry => {\n      var _a;\n      const {\n        target,\n        isIntersecting\n      } = entry;\n      if (target === this.element) {\n        this.isIntersecting = isIntersecting;\n        this.isPiP = isElementInPiP(this.element);\n        this.visibilityChangedAt = Date.now();\n        (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);\n      }\n    };\n    this.onEnterPiP = () => {\n      var _a, _b, _c;\n      (_b = (_a = window.documentPictureInPicture) === null || _a === void 0 ? void 0 : _a.window) === null || _b === void 0 ? void 0 : _b.addEventListener('pagehide', this.onLeavePiP);\n      this.isPiP = isElementInPiP(this.element);\n      (_c = this.handleVisibilityChanged) === null || _c === void 0 ? void 0 : _c.call(this);\n    };\n    this.onLeavePiP = () => {\n      var _a;\n      this.isPiP = isElementInPiP(this.element);\n      (_a = this.handleVisibilityChanged) === null || _a === void 0 ? void 0 : _a.call(this);\n    };\n    this.element = element;\n    this.isIntersecting = visible !== null && visible !== void 0 ? visible : isElementInViewport(element);\n    this.isPiP = isWeb() && isElementInPiP(element);\n    this.visibilityChangedAt = 0;\n  }\n  width() {\n    return this.element.clientWidth;\n  }\n  height() {\n    return this.element.clientHeight;\n  }\n  observe() {\n    var _a, _b, _c;\n    // make sure we update the current visible state once we start to observe\n    this.isIntersecting = isElementInViewport(this.element);\n    this.isPiP = isElementInPiP(this.element);\n    this.element.handleResize = () => {\n      var _a;\n      (_a = this.handleResize) === null || _a === void 0 ? void 0 : _a.call(this);\n    };\n    this.element.handleVisibilityChanged = this.onVisibilityChanged;\n    getIntersectionObserver().observe(this.element);\n    getResizeObserver().observe(this.element);\n    this.element.addEventListener('enterpictureinpicture', this.onEnterPiP);\n    this.element.addEventListener('leavepictureinpicture', this.onLeavePiP);\n    (_a = window.documentPictureInPicture) === null || _a === void 0 ? void 0 : _a.addEventListener('enter', this.onEnterPiP);\n    (_c = (_b = window.documentPictureInPicture) === null || _b === void 0 ? void 0 : _b.window) === null || _c === void 0 ? void 0 : _c.addEventListener('pagehide', this.onLeavePiP);\n  }\n  stopObserving() {\n    var _a, _b, _c, _d, _e;\n    (_a = getIntersectionObserver()) === null || _a === void 0 ? void 0 : _a.unobserve(this.element);\n    (_b = getResizeObserver()) === null || _b === void 0 ? void 0 : _b.unobserve(this.element);\n    this.element.removeEventListener('enterpictureinpicture', this.onEnterPiP);\n    this.element.removeEventListener('leavepictureinpicture', this.onLeavePiP);\n    (_c = window.documentPictureInPicture) === null || _c === void 0 ? void 0 : _c.removeEventListener('enter', this.onEnterPiP);\n    (_e = (_d = window.documentPictureInPicture) === null || _d === void 0 ? void 0 : _d.window) === null || _e === void 0 ? void 0 : _e.removeEventListener('pagehide', this.onLeavePiP);\n  }\n}\nfunction isElementInPiP(el) {\n  var _a, _b;\n  // Simple video PiP\n  if (document.pictureInPictureElement === el) return true;\n  // Document PiP\n  if ((_a = window.documentPictureInPicture) === null || _a === void 0 ? void 0 : _a.window) return isElementInViewport(el, (_b = window.documentPictureInPicture) === null || _b === void 0 ? void 0 : _b.window);\n  return false;\n}\n// does not account for occlusion by other elements or opacity property\nfunction isElementInViewport(el, win) {\n  const viewportWindow = win || window;\n  let top = el.offsetTop;\n  let left = el.offsetLeft;\n  const width = el.offsetWidth;\n  const height = el.offsetHeight;\n  const {\n    hidden\n  } = el;\n  const {\n    display\n  } = getComputedStyle(el);\n  while (el.offsetParent) {\n    el = el.offsetParent;\n    top += el.offsetTop;\n    left += el.offsetLeft;\n  }\n  return top < viewportWindow.pageYOffset + viewportWindow.innerHeight && left < viewportWindow.pageXOffset + viewportWindow.innerWidth && top + height > viewportWindow.pageYOffset && left + width > viewportWindow.pageXOffset && !hidden && display !== 'none';\n}class TrackPublication extends eventsExports.EventEmitter {\n  constructor(kind, id, name, loggerOptions) {\n    var _a;\n    super();\n    this.metadataMuted = false;\n    this.encryption = Encryption_Type.NONE;\n    this.log = livekitLogger;\n    this.handleMuted = () => {\n      this.emit(TrackEvent.Muted);\n    };\n    this.handleUnmuted = () => {\n      this.emit(TrackEvent.Unmuted);\n    };\n    this.log = getLogger((_a = loggerOptions === null || loggerOptions === void 0 ? void 0 : loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Publication);\n    this.loggerContextCb = this.loggerContextCb;\n    this.setMaxListeners(100);\n    this.kind = kind;\n    this.trackSid = id;\n    this.trackName = name;\n    this.source = Track.Source.Unknown;\n  }\n  /** @internal */\n  setTrack(track) {\n    if (this.track) {\n      this.track.off(TrackEvent.Muted, this.handleMuted);\n      this.track.off(TrackEvent.Unmuted, this.handleUnmuted);\n    }\n    this.track = track;\n    if (track) {\n      // forward events\n      track.on(TrackEvent.Muted, this.handleMuted);\n      track.on(TrackEvent.Unmuted, this.handleUnmuted);\n    }\n  }\n  get logContext() {\n    var _a;\n    return Object.assign(Object.assign({}, (_a = this.loggerContextCb) === null || _a === void 0 ? void 0 : _a.call(this)), getLogContextFromTrack(this));\n  }\n  get isMuted() {\n    return this.metadataMuted;\n  }\n  get isEnabled() {\n    return true;\n  }\n  get isSubscribed() {\n    return this.track !== undefined;\n  }\n  get isEncrypted() {\n    return this.encryption !== Encryption_Type.NONE;\n  }\n  /**\n   * an [AudioTrack] if this publication holds an audio track\n   */\n  get audioTrack() {\n    if (isAudioTrack(this.track)) {\n      return this.track;\n    }\n  }\n  /**\n   * an [VideoTrack] if this publication holds a video track\n   */\n  get videoTrack() {\n    if (isVideoTrack(this.track)) {\n      return this.track;\n    }\n  }\n  /** @internal */\n  updateInfo(info) {\n    this.trackSid = info.sid;\n    this.trackName = info.name;\n    this.source = Track.sourceFromProto(info.source);\n    this.mimeType = info.mimeType;\n    if (this.kind === Track.Kind.Video && info.width > 0) {\n      this.dimensions = {\n        width: info.width,\n        height: info.height\n      };\n      this.simulcasted = info.simulcast;\n    }\n    this.encryption = info.encryption;\n    this.trackInfo = info;\n    this.log.debug('update publication info', Object.assign(Object.assign({}, this.logContext), {\n      info\n    }));\n  }\n}\n(function (TrackPublication) {\n  (function (SubscriptionStatus) {\n    SubscriptionStatus[\"Desired\"] = \"desired\";\n    SubscriptionStatus[\"Subscribed\"] = \"subscribed\";\n    SubscriptionStatus[\"Unsubscribed\"] = \"unsubscribed\";\n  })(TrackPublication.SubscriptionStatus || (TrackPublication.SubscriptionStatus = {}));\n  (function (PermissionStatus) {\n    PermissionStatus[\"Allowed\"] = \"allowed\";\n    PermissionStatus[\"NotAllowed\"] = \"not_allowed\";\n  })(TrackPublication.PermissionStatus || (TrackPublication.PermissionStatus = {}));\n})(TrackPublication || (TrackPublication = {}));class LocalTrackPublication extends TrackPublication {\n  get isUpstreamPaused() {\n    var _a;\n    return (_a = this.track) === null || _a === void 0 ? void 0 : _a.isUpstreamPaused;\n  }\n  constructor(kind, ti, track, loggerOptions) {\n    super(kind, ti.sid, ti.name, loggerOptions);\n    this.track = undefined;\n    this.handleTrackEnded = () => {\n      this.emit(TrackEvent.Ended);\n    };\n    this.handleCpuConstrained = () => {\n      if (this.track && isVideoTrack(this.track)) {\n        this.emit(TrackEvent.CpuConstrained, this.track);\n      }\n    };\n    this.updateInfo(ti);\n    this.setTrack(track);\n  }\n  setTrack(track) {\n    if (this.track) {\n      this.track.off(TrackEvent.Ended, this.handleTrackEnded);\n      this.track.off(TrackEvent.CpuConstrained, this.handleCpuConstrained);\n    }\n    super.setTrack(track);\n    if (track) {\n      track.on(TrackEvent.Ended, this.handleTrackEnded);\n      track.on(TrackEvent.CpuConstrained, this.handleCpuConstrained);\n    }\n  }\n  get isMuted() {\n    if (this.track) {\n      return this.track.isMuted;\n    }\n    return super.isMuted;\n  }\n  get audioTrack() {\n    return super.audioTrack;\n  }\n  get videoTrack() {\n    return super.videoTrack;\n  }\n  get isLocal() {\n    return true;\n  }\n  /**\n   * Mute the track associated with this publication\n   */\n  mute() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      return (_a = this.track) === null || _a === void 0 ? void 0 : _a.mute();\n    });\n  }\n  /**\n   * Unmute track associated with this publication\n   */\n  unmute() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      return (_a = this.track) === null || _a === void 0 ? void 0 : _a.unmute();\n    });\n  }\n  /**\n   * Pauses the media stream track associated with this publication from being sent to the server\n   * and signals \"muted\" event to other participants\n   * Useful if you want to pause the stream without pausing the local media stream track\n   */\n  pauseUpstream() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      yield (_a = this.track) === null || _a === void 0 ? void 0 : _a.pauseUpstream();\n    });\n  }\n  /**\n   * Resumes sending the media stream track associated with this publication to the server after a call to [[pauseUpstream()]]\n   * and signals \"unmuted\" event to other participants (unless the track is explicitly muted)\n   */\n  resumeUpstream() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      yield (_a = this.track) === null || _a === void 0 ? void 0 : _a.resumeUpstream();\n    });\n  }\n  getTrackFeatures() {\n    var _a;\n    if (isAudioTrack(this.track)) {\n      const settings = this.track.getSourceTrackSettings();\n      const features = new Set();\n      if (settings.autoGainControl) {\n        features.add(AudioTrackFeature.TF_AUTO_GAIN_CONTROL);\n      }\n      if (settings.echoCancellation) {\n        features.add(AudioTrackFeature.TF_ECHO_CANCELLATION);\n      }\n      if (settings.noiseSuppression) {\n        features.add(AudioTrackFeature.TF_NOISE_SUPPRESSION);\n      }\n      if (settings.channelCount && settings.channelCount > 1) {\n        features.add(AudioTrackFeature.TF_STEREO);\n      }\n      if (!((_a = this.options) === null || _a === void 0 ? void 0 : _a.dtx)) {\n        features.add(AudioTrackFeature.TF_NO_DTX);\n      }\n      if (this.track.enhancedNoiseCancellation) {\n        features.add(AudioTrackFeature.TF_ENHANCED_NOISE_CANCELLATION);\n      }\n      return Array.from(features.values());\n    } else return [];\n  }\n}/**\n * Creates a local video and audio track at the same time. When acquiring both\n * audio and video tracks together, it'll display a single permission prompt to\n * the user instead of two separate ones.\n * @param options\n */\nfunction createLocalTracks(options, loggerOptions) {\n  return __awaiter(this, void 0, void 0, function* () {\n    options !== null && options !== void 0 ? options : options = {};\n    let attemptExactMatch = false;\n    const {\n      audioProcessor,\n      videoProcessor,\n      optionsWithoutProcessor: internalOptions\n    } = extractProcessorsFromOptions(options);\n    let retryAudioOptions = internalOptions.audio;\n    let retryVideoOptions = internalOptions.video;\n    if (audioProcessor && typeof internalOptions.audio === 'object') {\n      internalOptions.audio.processor = audioProcessor;\n    }\n    if (videoProcessor && typeof internalOptions.video === 'object') {\n      internalOptions.video.processor = videoProcessor;\n    }\n    // if the user passes a device id as a string, we default to exact match\n    if (options.audio && typeof internalOptions.audio === 'object' && typeof internalOptions.audio.deviceId === 'string') {\n      const deviceId = internalOptions.audio.deviceId;\n      internalOptions.audio.deviceId = {\n        exact: deviceId\n      };\n      attemptExactMatch = true;\n      retryAudioOptions = Object.assign(Object.assign({}, internalOptions.audio), {\n        deviceId: {\n          ideal: deviceId\n        }\n      });\n    }\n    if (internalOptions.video && typeof internalOptions.video === 'object' && typeof internalOptions.video.deviceId === 'string') {\n      const deviceId = internalOptions.video.deviceId;\n      internalOptions.video.deviceId = {\n        exact: deviceId\n      };\n      attemptExactMatch = true;\n      retryVideoOptions = Object.assign(Object.assign({}, internalOptions.video), {\n        deviceId: {\n          ideal: deviceId\n        }\n      });\n    }\n    if (internalOptions.audio === true) {\n      internalOptions.audio = {\n        deviceId: 'default'\n      };\n    } else if (typeof internalOptions.audio === 'object' && internalOptions.audio !== null) {\n      internalOptions.audio = Object.assign(Object.assign({}, internalOptions.audio), {\n        deviceId: internalOptions.audio.deviceId || 'default'\n      });\n    }\n    if (internalOptions.video === true) {\n      internalOptions.video = {\n        deviceId: 'default'\n      };\n    } else if (typeof internalOptions.video === 'object' && !internalOptions.video.deviceId) {\n      internalOptions.video.deviceId = 'default';\n    }\n    const opts = mergeDefaultOptions(internalOptions, audioDefaults, videoDefaults);\n    const constraints = constraintsForOptions(opts);\n    // Keep a reference to the promise on DeviceManager and await it in getLocalDevices()\n    // works around iOS Safari Bug https://bugs.webkit.org/show_bug.cgi?id=179363\n    const mediaPromise = navigator.mediaDevices.getUserMedia(constraints);\n    if (internalOptions.audio) {\n      DeviceManager.userMediaPromiseMap.set('audioinput', mediaPromise);\n      mediaPromise.catch(() => DeviceManager.userMediaPromiseMap.delete('audioinput'));\n    }\n    if (internalOptions.video) {\n      DeviceManager.userMediaPromiseMap.set('videoinput', mediaPromise);\n      mediaPromise.catch(() => DeviceManager.userMediaPromiseMap.delete('videoinput'));\n    }\n    try {\n      const stream = yield mediaPromise;\n      return yield Promise.all(stream.getTracks().map(mediaStreamTrack => __awaiter(this, void 0, void 0, function* () {\n        const isAudio = mediaStreamTrack.kind === 'audio';\n        let trackOptions = isAudio ? opts.audio : opts.video;\n        if (typeof trackOptions === 'boolean' || !trackOptions) {\n          trackOptions = {};\n        }\n        let trackConstraints;\n        const conOrBool = isAudio ? constraints.audio : constraints.video;\n        if (typeof conOrBool !== 'boolean') {\n          trackConstraints = conOrBool;\n        }\n        // update the constraints with the device id the user gave permissions to in the permission prompt\n        // otherwise each track restart (e.g. mute - unmute) will try to initialize the device again -> causing additional permission prompts\n        const newDeviceId = mediaStreamTrack.getSettings().deviceId;\n        if ((trackConstraints === null || trackConstraints === void 0 ? void 0 : trackConstraints.deviceId) && unwrapConstraint(trackConstraints.deviceId) !== newDeviceId) {\n          trackConstraints.deviceId = newDeviceId;\n        } else if (!trackConstraints) {\n          trackConstraints = {\n            deviceId: newDeviceId\n          };\n        }\n        const track = mediaTrackToLocalTrack(mediaStreamTrack, trackConstraints, loggerOptions);\n        if (track.kind === Track.Kind.Video) {\n          track.source = Track.Source.Camera;\n        } else if (track.kind === Track.Kind.Audio) {\n          track.source = Track.Source.Microphone;\n        }\n        track.mediaStream = stream;\n        if (isAudioTrack(track) && audioProcessor) {\n          yield track.setProcessor(audioProcessor);\n        } else if (isVideoTrack(track) && videoProcessor) {\n          yield track.setProcessor(videoProcessor);\n        }\n        return track;\n      })));\n    } catch (e) {\n      if (!attemptExactMatch) {\n        throw e;\n      }\n      return createLocalTracks(Object.assign(Object.assign({}, options), {\n        audio: retryAudioOptions,\n        video: retryVideoOptions\n      }), loggerOptions);\n    }\n  });\n}\n/**\n * Creates a [[LocalVideoTrack]] with getUserMedia()\n * @param options\n */\nfunction createLocalVideoTrack(options) {\n  return __awaiter(this, void 0, void 0, function* () {\n    const tracks = yield createLocalTracks({\n      audio: false,\n      video: options !== null && options !== void 0 ? options : true\n    });\n    return tracks[0];\n  });\n}\nfunction createLocalAudioTrack(options) {\n  return __awaiter(this, void 0, void 0, function* () {\n    const tracks = yield createLocalTracks({\n      audio: options !== null && options !== void 0 ? options : true,\n      video: false\n    });\n    return tracks[0];\n  });\n}\n/**\n * Creates a screen capture tracks with getDisplayMedia().\n * A LocalVideoTrack is always created and returned.\n * If { audio: true }, and the browser supports audio capture, a LocalAudioTrack is also created.\n */\nfunction createLocalScreenTracks(options) {\n  return __awaiter(this, void 0, void 0, function* () {\n    if (options === undefined) {\n      options = {};\n    }\n    if (options.resolution === undefined && !isSafari17Based()) {\n      options.resolution = ScreenSharePresets.h1080fps30.resolution;\n    }\n    if (navigator.mediaDevices.getDisplayMedia === undefined) {\n      throw new DeviceUnsupportedError('getDisplayMedia not supported');\n    }\n    const constraints = screenCaptureToDisplayMediaStreamOptions(options);\n    const stream = yield navigator.mediaDevices.getDisplayMedia(constraints);\n    const tracks = stream.getVideoTracks();\n    if (tracks.length === 0) {\n      throw new TrackInvalidError('no video track found');\n    }\n    const screenVideo = new LocalVideoTrack(tracks[0], undefined, false);\n    screenVideo.source = Track.Source.ScreenShare;\n    const localTracks = [screenVideo];\n    if (stream.getAudioTracks().length > 0) {\n      const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0], undefined, false);\n      screenAudio.source = Track.Source.ScreenShareAudio;\n      localTracks.push(screenAudio);\n    }\n    return localTracks;\n  });\n}var ConnectionQuality;\n(function (ConnectionQuality) {\n  ConnectionQuality[\"Excellent\"] = \"excellent\";\n  ConnectionQuality[\"Good\"] = \"good\";\n  ConnectionQuality[\"Poor\"] = \"poor\";\n  /**\n   * Indicates that a participant has temporarily (or permanently) lost connection to LiveKit.\n   * For permanent disconnection a `ParticipantDisconnected` event will be emitted after a timeout\n   */\n  ConnectionQuality[\"Lost\"] = \"lost\";\n  ConnectionQuality[\"Unknown\"] = \"unknown\";\n})(ConnectionQuality || (ConnectionQuality = {}));\nfunction qualityFromProto(q) {\n  switch (q) {\n    case ConnectionQuality$1.EXCELLENT:\n      return ConnectionQuality.Excellent;\n    case ConnectionQuality$1.GOOD:\n      return ConnectionQuality.Good;\n    case ConnectionQuality$1.POOR:\n      return ConnectionQuality.Poor;\n    case ConnectionQuality$1.LOST:\n      return ConnectionQuality.Lost;\n    default:\n      return ConnectionQuality.Unknown;\n  }\n}\nclass Participant extends eventsExports.EventEmitter {\n  get logContext() {\n    var _a, _b;\n    return Object.assign({}, (_b = (_a = this.loggerOptions) === null || _a === void 0 ? void 0 : _a.loggerContextCb) === null || _b === void 0 ? void 0 : _b.call(_a));\n  }\n  get isEncrypted() {\n    return this.trackPublications.size > 0 && Array.from(this.trackPublications.values()).every(tr => tr.isEncrypted);\n  }\n  get isAgent() {\n    var _a;\n    return ((_a = this.permissions) === null || _a === void 0 ? void 0 : _a.agent) || this.kind === ParticipantInfo_Kind.AGENT;\n  }\n  get isActive() {\n    var _a;\n    return ((_a = this.participantInfo) === null || _a === void 0 ? void 0 : _a.state) === ParticipantInfo_State.ACTIVE;\n  }\n  get kind() {\n    return this._kind;\n  }\n  /** participant attributes, similar to metadata, but as a key/value map */\n  get attributes() {\n    return Object.freeze(Object.assign({}, this._attributes));\n  }\n  /** @internal */\n  constructor(sid, identity, name, metadata, attributes, loggerOptions) {\n    let kind = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : ParticipantInfo_Kind.STANDARD;\n    var _a;\n    super();\n    /** audio level between 0-1.0, 1 being loudest, 0 being softest */\n    this.audioLevel = 0;\n    /** if participant is currently speaking */\n    this.isSpeaking = false;\n    this._connectionQuality = ConnectionQuality.Unknown;\n    this.log = livekitLogger;\n    this.log = getLogger((_a = loggerOptions === null || loggerOptions === void 0 ? void 0 : loggerOptions.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Participant);\n    this.loggerOptions = loggerOptions;\n    this.setMaxListeners(100);\n    this.sid = sid;\n    this.identity = identity;\n    this.name = name;\n    this.metadata = metadata;\n    this.audioTrackPublications = new Map();\n    this.videoTrackPublications = new Map();\n    this.trackPublications = new Map();\n    this._kind = kind;\n    this._attributes = attributes !== null && attributes !== void 0 ? attributes : {};\n  }\n  getTrackPublications() {\n    return Array.from(this.trackPublications.values());\n  }\n  /**\n   * Finds the first track that matches the source filter, for example, getting\n   * the user's camera track with getTrackBySource(Track.Source.Camera).\n   */\n  getTrackPublication(source) {\n    for (const [, pub] of this.trackPublications) {\n      if (pub.source === source) {\n        return pub;\n      }\n    }\n  }\n  /**\n   * Finds the first track that matches the track's name.\n   */\n  getTrackPublicationByName(name) {\n    for (const [, pub] of this.trackPublications) {\n      if (pub.trackName === name) {\n        return pub;\n      }\n    }\n  }\n  /**\n   * Waits until the participant is active and ready to receive data messages\n   * @returns a promise that resolves when the participant is active\n   */\n  waitUntilActive() {\n    if (this.isActive) {\n      return Promise.resolve();\n    }\n    if (this.activeFuture) {\n      return this.activeFuture.promise;\n    }\n    this.activeFuture = new Future();\n    this.once(ParticipantEvent.Active, () => {\n      var _a, _b;\n      (_b = (_a = this.activeFuture) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n      this.activeFuture = undefined;\n    });\n    return this.activeFuture.promise;\n  }\n  get connectionQuality() {\n    return this._connectionQuality;\n  }\n  get isCameraEnabled() {\n    var _a;\n    const track = this.getTrackPublication(Track.Source.Camera);\n    return !((_a = track === null || track === void 0 ? void 0 : track.isMuted) !== null && _a !== void 0 ? _a : true);\n  }\n  get isMicrophoneEnabled() {\n    var _a;\n    const track = this.getTrackPublication(Track.Source.Microphone);\n    return !((_a = track === null || track === void 0 ? void 0 : track.isMuted) !== null && _a !== void 0 ? _a : true);\n  }\n  get isScreenShareEnabled() {\n    const track = this.getTrackPublication(Track.Source.ScreenShare);\n    return !!track;\n  }\n  get isLocal() {\n    return false;\n  }\n  /** when participant joined the room */\n  get joinedAt() {\n    if (this.participantInfo) {\n      return new Date(Number.parseInt(this.participantInfo.joinedAt.toString()) * 1000);\n    }\n    return new Date();\n  }\n  /** @internal */\n  updateInfo(info) {\n    var _a;\n    // it's possible the update could be applied out of order due to await\n    // during reconnect sequences. when that happens, it's possible for server\n    // to have sent more recent version of participant info while JS is waiting\n    // to process the existing payload.\n    // when the participant sid remains the same, and we already have a later version\n    // of the payload, they can be safely skipped\n    if (this.participantInfo && this.participantInfo.sid === info.sid && this.participantInfo.version > info.version) {\n      return false;\n    }\n    this.identity = info.identity;\n    this.sid = info.sid;\n    this._setName(info.name);\n    this._setMetadata(info.metadata);\n    this._setAttributes(info.attributes);\n    if (info.state === ParticipantInfo_State.ACTIVE && ((_a = this.participantInfo) === null || _a === void 0 ? void 0 : _a.state) !== ParticipantInfo_State.ACTIVE) {\n      this.emit(ParticipantEvent.Active);\n    }\n    if (info.permission) {\n      this.setPermissions(info.permission);\n    }\n    // set this last so setMetadata can detect changes\n    this.participantInfo = info;\n    return true;\n  }\n  /**\n   * Updates metadata from server\n   **/\n  _setMetadata(md) {\n    const changed = this.metadata !== md;\n    const prevMetadata = this.metadata;\n    this.metadata = md;\n    if (changed) {\n      this.emit(ParticipantEvent.ParticipantMetadataChanged, prevMetadata);\n    }\n  }\n  _setName(name) {\n    const changed = this.name !== name;\n    this.name = name;\n    if (changed) {\n      this.emit(ParticipantEvent.ParticipantNameChanged, name);\n    }\n  }\n  /**\n   * Updates metadata from server\n   **/\n  _setAttributes(attributes) {\n    const diff = diffAttributes(this.attributes, attributes);\n    this._attributes = attributes;\n    if (Object.keys(diff).length > 0) {\n      this.emit(ParticipantEvent.AttributesChanged, diff);\n    }\n  }\n  /** @internal */\n  setPermissions(permissions) {\n    var _a, _b, _c, _d, _e, _f;\n    const prevPermissions = this.permissions;\n    const changed = permissions.canPublish !== ((_a = this.permissions) === null || _a === void 0 ? void 0 : _a.canPublish) || permissions.canSubscribe !== ((_b = this.permissions) === null || _b === void 0 ? void 0 : _b.canSubscribe) || permissions.canPublishData !== ((_c = this.permissions) === null || _c === void 0 ? void 0 : _c.canPublishData) || permissions.hidden !== ((_d = this.permissions) === null || _d === void 0 ? void 0 : _d.hidden) || permissions.recorder !== ((_e = this.permissions) === null || _e === void 0 ? void 0 : _e.recorder) || permissions.canPublishSources.length !== this.permissions.canPublishSources.length || permissions.canPublishSources.some((value, index) => {\n      var _a;\n      return value !== ((_a = this.permissions) === null || _a === void 0 ? void 0 : _a.canPublishSources[index]);\n    }) || permissions.canSubscribeMetrics !== ((_f = this.permissions) === null || _f === void 0 ? void 0 : _f.canSubscribeMetrics);\n    this.permissions = permissions;\n    if (changed) {\n      this.emit(ParticipantEvent.ParticipantPermissionsChanged, prevPermissions);\n    }\n    return changed;\n  }\n  /** @internal */\n  setIsSpeaking(speaking) {\n    if (speaking === this.isSpeaking) {\n      return;\n    }\n    this.isSpeaking = speaking;\n    if (speaking) {\n      this.lastSpokeAt = new Date();\n    }\n    this.emit(ParticipantEvent.IsSpeakingChanged, speaking);\n  }\n  /** @internal */\n  setConnectionQuality(q) {\n    const prevQuality = this._connectionQuality;\n    this._connectionQuality = qualityFromProto(q);\n    if (prevQuality !== this._connectionQuality) {\n      this.emit(ParticipantEvent.ConnectionQualityChanged, this._connectionQuality);\n    }\n  }\n  /**\n   * @internal\n   */\n  setDisconnected() {\n    var _a, _b;\n    if (this.activeFuture) {\n      (_b = (_a = this.activeFuture).reject) === null || _b === void 0 ? void 0 : _b.call(_a, new Error('Participant disconnected'));\n      this.activeFuture = undefined;\n    }\n  }\n  /**\n   * @internal\n   */\n  setAudioContext(ctx) {\n    this.audioContext = ctx;\n    this.audioTrackPublications.forEach(track => isAudioTrack(track.track) && track.track.setAudioContext(ctx));\n  }\n  addTrackPublication(publication) {\n    // forward publication driven events\n    publication.on(TrackEvent.Muted, () => {\n      this.emit(ParticipantEvent.TrackMuted, publication);\n    });\n    publication.on(TrackEvent.Unmuted, () => {\n      this.emit(ParticipantEvent.TrackUnmuted, publication);\n    });\n    const pub = publication;\n    if (pub.track) {\n      pub.track.sid = publication.trackSid;\n    }\n    this.trackPublications.set(publication.trackSid, publication);\n    switch (publication.kind) {\n      case Track.Kind.Audio:\n        this.audioTrackPublications.set(publication.trackSid, publication);\n        break;\n      case Track.Kind.Video:\n        this.videoTrackPublications.set(publication.trackSid, publication);\n        break;\n    }\n  }\n}function trackPermissionToProto(perms) {\n  var _a, _b, _c;\n  if (!perms.participantSid && !perms.participantIdentity) {\n    throw new Error('Invalid track permission, must provide at least one of participantIdentity and participantSid');\n  }\n  return new TrackPermission({\n    participantIdentity: (_a = perms.participantIdentity) !== null && _a !== void 0 ? _a : '',\n    participantSid: (_b = perms.participantSid) !== null && _b !== void 0 ? _b : '',\n    allTracks: (_c = perms.allowAll) !== null && _c !== void 0 ? _c : false,\n    trackSids: perms.allowedTrackSids || []\n  });\n}class LocalParticipant extends Participant {\n  /** @internal */\n  constructor(sid, identity, engine, options, roomRpcHandlers, roomOutgoingDataStreamManager) {\n    super(sid, identity, undefined, undefined, undefined, {\n      loggerName: options.loggerName,\n      loggerContextCb: () => this.engine.logContext\n    });\n    this.pendingPublishing = new Set();\n    this.pendingPublishPromises = new Map();\n    this.participantTrackPermissions = [];\n    this.allParticipantsAllowedToSubscribe = true;\n    this.encryptionType = Encryption_Type.NONE;\n    this.enabledPublishVideoCodecs = [];\n    this.pendingAcks = new Map();\n    this.pendingResponses = new Map();\n    this.handleReconnecting = () => {\n      if (!this.reconnectFuture) {\n        this.reconnectFuture = new Future();\n      }\n    };\n    this.handleReconnected = () => {\n      var _a, _b;\n      (_b = (_a = this.reconnectFuture) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n      this.reconnectFuture = undefined;\n      this.updateTrackSubscriptionPermissions();\n    };\n    this.handleClosing = () => {\n      var _a, _b, _c, _d, _e, _f;\n      if (this.reconnectFuture) {\n        this.reconnectFuture.promise.catch(e => this.log.warn(e.message, this.logContext));\n        (_b = (_a = this.reconnectFuture) === null || _a === void 0 ? void 0 : _a.reject) === null || _b === void 0 ? void 0 : _b.call(_a, new Error('Got disconnected during reconnection attempt'));\n        this.reconnectFuture = undefined;\n      }\n      if (this.signalConnectedFuture) {\n        (_d = (_c = this.signalConnectedFuture).reject) === null || _d === void 0 ? void 0 : _d.call(_c, new Error('Got disconnected without signal connected'));\n        this.signalConnectedFuture = undefined;\n      }\n      (_f = (_e = this.activeAgentFuture) === null || _e === void 0 ? void 0 : _e.reject) === null || _f === void 0 ? void 0 : _f.call(_e, new Error('Got disconnected without active agent present'));\n      this.activeAgentFuture = undefined;\n      this.firstActiveAgent = undefined;\n    };\n    this.handleSignalConnected = joinResponse => {\n      var _a, _b;\n      if (joinResponse.participant) {\n        this.updateInfo(joinResponse.participant);\n      }\n      if (!this.signalConnectedFuture) {\n        this.signalConnectedFuture = new Future();\n      }\n      (_b = (_a = this.signalConnectedFuture).resolve) === null || _b === void 0 ? void 0 : _b.call(_a);\n    };\n    this.handleSignalRequestResponse = response => {\n      const {\n        requestId,\n        reason,\n        message\n      } = response;\n      const targetRequest = this.pendingSignalRequests.get(requestId);\n      if (targetRequest) {\n        if (reason !== RequestResponse_Reason.OK) {\n          targetRequest.reject(new SignalRequestError(message, reason));\n        }\n        this.pendingSignalRequests.delete(requestId);\n      }\n    };\n    this.handleDataPacket = packet => {\n      switch (packet.value.case) {\n        case 'rpcResponse':\n          let rpcResponse = packet.value.value;\n          let payload = null;\n          let error = null;\n          if (rpcResponse.value.case === 'payload') {\n            payload = rpcResponse.value.value;\n          } else if (rpcResponse.value.case === 'error') {\n            error = RpcError.fromProto(rpcResponse.value.value);\n          }\n          this.handleIncomingRpcResponse(rpcResponse.requestId, payload, error);\n          break;\n        case 'rpcAck':\n          let rpcAck = packet.value.value;\n          this.handleIncomingRpcAck(rpcAck.requestId);\n          break;\n      }\n    };\n    this.updateTrackSubscriptionPermissions = () => {\n      this.log.debug('updating track subscription permissions', Object.assign(Object.assign({}, this.logContext), {\n        allParticipantsAllowed: this.allParticipantsAllowedToSubscribe,\n        participantTrackPermissions: this.participantTrackPermissions\n      }));\n      this.engine.client.sendUpdateSubscriptionPermissions(this.allParticipantsAllowedToSubscribe, this.participantTrackPermissions.map(p => trackPermissionToProto(p)));\n    };\n    /** @internal */\n    this.onTrackUnmuted = track => {\n      this.onTrackMuted(track, track.isUpstreamPaused);\n    };\n    // when the local track changes in mute status, we'll notify server as such\n    /** @internal */\n    this.onTrackMuted = (track, muted) => {\n      if (muted === undefined) {\n        muted = true;\n      }\n      if (!track.sid) {\n        this.log.error('could not update mute status for unpublished track', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n        return;\n      }\n      this.engine.updateMuteStatus(track.sid, muted);\n    };\n    this.onTrackUpstreamPaused = track => {\n      this.log.debug('upstream paused', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n      this.onTrackMuted(track, true);\n    };\n    this.onTrackUpstreamResumed = track => {\n      this.log.debug('upstream resumed', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n      this.onTrackMuted(track, track.isMuted);\n    };\n    this.onTrackFeatureUpdate = track => {\n      const pub = this.audioTrackPublications.get(track.sid);\n      if (!pub) {\n        this.log.warn(\"Could not update local audio track settings, missing publication for track \".concat(track.sid), this.logContext);\n        return;\n      }\n      this.engine.client.sendUpdateLocalAudioTrack(pub.trackSid, pub.getTrackFeatures());\n    };\n    this.onTrackCpuConstrained = (track, publication) => {\n      this.log.debug('track cpu constrained', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(publication)));\n      this.emit(ParticipantEvent.LocalTrackCpuConstrained, track, publication);\n    };\n    this.handleSubscribedQualityUpdate = update => __awaiter(this, void 0, void 0, function* () {\n      var _a, e_1, _b, _c;\n      var _d;\n      if (!((_d = this.roomOptions) === null || _d === void 0 ? void 0 : _d.dynacast)) {\n        return;\n      }\n      const pub = this.videoTrackPublications.get(update.trackSid);\n      if (!pub) {\n        this.log.warn('received subscribed quality update for unknown track', Object.assign(Object.assign({}, this.logContext), {\n          trackSid: update.trackSid\n        }));\n        return;\n      }\n      if (!pub.videoTrack) {\n        return;\n      }\n      const newCodecs = yield pub.videoTrack.setPublishingCodecs(update.subscribedCodecs);\n      try {\n        for (var _e = true, newCodecs_1 = __asyncValues(newCodecs), newCodecs_1_1; newCodecs_1_1 = yield newCodecs_1.next(), _a = newCodecs_1_1.done, !_a; _e = true) {\n          _c = newCodecs_1_1.value;\n          _e = false;\n          const codec = _c;\n          if (isBackupCodec(codec)) {\n            this.log.debug(\"publish \".concat(codec, \" for \").concat(pub.videoTrack.sid), Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(pub)));\n            yield this.publishAdditionalCodecForTrack(pub.videoTrack, codec, pub.options);\n          }\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (!_e && !_a && (_b = newCodecs_1.return)) yield _b.call(newCodecs_1);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n    });\n    this.handleLocalTrackUnpublished = unpublished => {\n      const track = this.trackPublications.get(unpublished.trackSid);\n      if (!track) {\n        this.log.warn('received unpublished event for unknown track', Object.assign(Object.assign({}, this.logContext), {\n          trackSid: unpublished.trackSid\n        }));\n        return;\n      }\n      this.unpublishTrack(track.track);\n    };\n    this.handleTrackEnded = track => __awaiter(this, void 0, void 0, function* () {\n      if (track.source === Track.Source.ScreenShare || track.source === Track.Source.ScreenShareAudio) {\n        this.log.debug('unpublishing local track due to TrackEnded', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n        this.unpublishTrack(track);\n      } else if (track.isUserProvided) {\n        yield track.mute();\n      } else if (isLocalAudioTrack(track) || isLocalVideoTrack(track)) {\n        try {\n          if (isWeb()) {\n            try {\n              const currentPermissions = yield navigator === null || navigator === void 0 ? void 0 : navigator.permissions.query({\n                // the permission query for camera and microphone currently not supported in Safari and Firefox\n                // @ts-ignore\n                name: track.source === Track.Source.Camera ? 'camera' : 'microphone'\n              });\n              if (currentPermissions && currentPermissions.state === 'denied') {\n                this.log.warn(\"user has revoked access to \".concat(track.source), Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n                // detect granted change after permissions were denied to try and resume then\n                currentPermissions.onchange = () => {\n                  if (currentPermissions.state !== 'denied') {\n                    if (!track.isMuted) {\n                      track.restartTrack();\n                    }\n                    currentPermissions.onchange = null;\n                  }\n                };\n                throw new Error('GetUserMedia Permission denied');\n              }\n            } catch (e) {\n              // permissions query fails for firefox, we continue and try to restart the track\n            }\n          }\n          if (!track.isMuted) {\n            this.log.debug('track ended, attempting to use a different device', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n            if (isLocalAudioTrack(track)) {\n              // fall back to default device if available\n              yield track.restartTrack({\n                deviceId: 'default'\n              });\n            } else {\n              yield track.restartTrack();\n            }\n          }\n        } catch (e) {\n          this.log.warn(\"could not restart track, muting instead\", Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n          yield track.mute();\n        }\n      }\n    });\n    this.audioTrackPublications = new Map();\n    this.videoTrackPublications = new Map();\n    this.trackPublications = new Map();\n    this.engine = engine;\n    this.roomOptions = options;\n    this.setupEngine(engine);\n    this.activeDeviceMap = new Map([['audioinput', 'default'], ['videoinput', 'default'], ['audiooutput', 'default']]);\n    this.pendingSignalRequests = new Map();\n    this.rpcHandlers = roomRpcHandlers;\n    this.roomOutgoingDataStreamManager = roomOutgoingDataStreamManager;\n  }\n  get lastCameraError() {\n    return this.cameraError;\n  }\n  get lastMicrophoneError() {\n    return this.microphoneError;\n  }\n  get isE2EEEnabled() {\n    return this.encryptionType !== Encryption_Type.NONE;\n  }\n  getTrackPublication(source) {\n    const track = super.getTrackPublication(source);\n    if (track) {\n      return track;\n    }\n  }\n  getTrackPublicationByName(name) {\n    const track = super.getTrackPublicationByName(name);\n    if (track) {\n      return track;\n    }\n  }\n  /**\n   * @internal\n   */\n  setupEngine(engine) {\n    var _a;\n    this.engine = engine;\n    this.engine.on(EngineEvent.RemoteMute, (trackSid, muted) => {\n      const pub = this.trackPublications.get(trackSid);\n      if (!pub || !pub.track) {\n        return;\n      }\n      if (muted) {\n        pub.mute();\n      } else {\n        pub.unmute();\n      }\n    });\n    if ((_a = this.signalConnectedFuture) === null || _a === void 0 ? void 0 : _a.isResolved) {\n      this.signalConnectedFuture = undefined;\n    }\n    this.engine.on(EngineEvent.Connected, this.handleReconnected).on(EngineEvent.SignalConnected, this.handleSignalConnected).on(EngineEvent.SignalRestarted, this.handleReconnected).on(EngineEvent.SignalResumed, this.handleReconnected).on(EngineEvent.Restarting, this.handleReconnecting).on(EngineEvent.Resuming, this.handleReconnecting).on(EngineEvent.LocalTrackUnpublished, this.handleLocalTrackUnpublished).on(EngineEvent.SubscribedQualityUpdate, this.handleSubscribedQualityUpdate).on(EngineEvent.Closing, this.handleClosing).on(EngineEvent.SignalRequestResponse, this.handleSignalRequestResponse).on(EngineEvent.DataPacketReceived, this.handleDataPacket);\n  }\n  /**\n   * Sets and updates the metadata of the local participant.\n   * Note: this requires `canUpdateOwnMetadata` permission.\n   * method will throw if the user doesn't have the required permissions\n   * @param metadata\n   */\n  setMetadata(metadata) {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.requestMetadataUpdate({\n        metadata\n      });\n    });\n  }\n  /**\n   * Sets and updates the name of the local participant.\n   * Note: this requires `canUpdateOwnMetadata` permission.\n   * method will throw if the user doesn't have the required permissions\n   * @param metadata\n   */\n  setName(name) {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.requestMetadataUpdate({\n        name\n      });\n    });\n  }\n  /**\n   * Set or update participant attributes. It will make updates only to keys that\n   * are present in `attributes`, and will not override others.\n   * Note: this requires `canUpdateOwnMetadata` permission.\n   * @param attributes attributes to update\n   */\n  setAttributes(attributes) {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.requestMetadataUpdate({\n        attributes\n      });\n    });\n  }\n  requestMetadataUpdate(_a) {\n    return __awaiter(this, arguments, void 0, function (_ref) {\n      var _this = this;\n      let {\n        metadata,\n        name,\n        attributes\n      } = _ref;\n      return function* () {\n        return new Promise((resolve, reject) => __awaiter(_this, void 0, void 0, function* () {\n          var _a, _b;\n          try {\n            let isRejected = false;\n            const requestId = yield this.engine.client.sendUpdateLocalMetadata((_a = metadata !== null && metadata !== void 0 ? metadata : this.metadata) !== null && _a !== void 0 ? _a : '', (_b = name !== null && name !== void 0 ? name : this.name) !== null && _b !== void 0 ? _b : '', attributes);\n            const startTime = performance.now();\n            this.pendingSignalRequests.set(requestId, {\n              resolve,\n              reject: error => {\n                reject(error);\n                isRejected = true;\n              },\n              values: {\n                name,\n                metadata,\n                attributes\n              }\n            });\n            while (performance.now() - startTime < 5000 && !isRejected) {\n              if ((!name || this.name === name) && (!metadata || this.metadata === metadata) && (!attributes || Object.entries(attributes).every(_ref2 => {\n                let [key, value] = _ref2;\n                return this.attributes[key] === value || value === '' && !this.attributes[key];\n              }))) {\n                this.pendingSignalRequests.delete(requestId);\n                resolve();\n                return;\n              }\n              yield sleep(50);\n            }\n            reject(new SignalRequestError('Request to update local metadata timed out', 'TimeoutError'));\n          } catch (e) {\n            if (e instanceof Error) reject(e);\n          }\n        }));\n      }();\n    });\n  }\n  /**\n   * Enable or disable a participant's camera track.\n   *\n   * If a track has already published, it'll mute or unmute the track.\n   * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise\n   */\n  setCameraEnabled(enabled, options, publishOptions) {\n    return this.setTrackEnabled(Track.Source.Camera, enabled, options, publishOptions);\n  }\n  /**\n   * Enable or disable a participant's microphone track.\n   *\n   * If a track has already published, it'll mute or unmute the track.\n   * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise\n   */\n  setMicrophoneEnabled(enabled, options, publishOptions) {\n    return this.setTrackEnabled(Track.Source.Microphone, enabled, options, publishOptions);\n  }\n  /**\n   * Start or stop sharing a participant's screen\n   * Resolves with a `LocalTrackPublication` instance if successful and `undefined` otherwise\n   */\n  setScreenShareEnabled(enabled, options, publishOptions) {\n    return this.setTrackEnabled(Track.Source.ScreenShare, enabled, options, publishOptions);\n  }\n  /** @internal */\n  setE2EEEnabled(enabled) {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.encryptionType = enabled ? Encryption_Type.GCM : Encryption_Type.NONE;\n      yield this.republishAllTracks(undefined, false);\n    });\n  }\n  setTrackEnabled(source, enabled, options, publishOptions) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      this.log.debug('setTrackEnabled', Object.assign(Object.assign({}, this.logContext), {\n        source,\n        enabled\n      }));\n      if (this.republishPromise) {\n        yield this.republishPromise;\n      }\n      let track = this.getTrackPublication(source);\n      if (enabled) {\n        if (track) {\n          yield track.unmute();\n        } else {\n          let localTracks;\n          if (this.pendingPublishing.has(source)) {\n            const pendingTrack = yield this.waitForPendingPublicationOfSource(source);\n            if (!pendingTrack) {\n              this.log.info('waiting for pending publication promise timed out', Object.assign(Object.assign({}, this.logContext), {\n                source\n              }));\n            }\n            yield pendingTrack === null || pendingTrack === void 0 ? void 0 : pendingTrack.unmute();\n            return pendingTrack;\n          }\n          this.pendingPublishing.add(source);\n          try {\n            switch (source) {\n              case Track.Source.Camera:\n                localTracks = yield this.createTracks({\n                  video: (_a = options) !== null && _a !== void 0 ? _a : true\n                });\n                break;\n              case Track.Source.Microphone:\n                localTracks = yield this.createTracks({\n                  audio: (_b = options) !== null && _b !== void 0 ? _b : true\n                });\n                break;\n              case Track.Source.ScreenShare:\n                localTracks = yield this.createScreenTracks(Object.assign({}, options));\n                break;\n              default:\n                throw new TrackInvalidError(source);\n            }\n          } catch (e) {\n            localTracks === null || localTracks === void 0 ? void 0 : localTracks.forEach(tr => {\n              tr.stop();\n            });\n            if (e instanceof Error) {\n              this.emit(ParticipantEvent.MediaDevicesError, e, sourceToKind(source));\n            }\n            this.pendingPublishing.delete(source);\n            throw e;\n          }\n          for (const localTrack of localTracks) {\n            const opts = Object.assign(Object.assign({}, this.roomOptions.publishDefaults), options);\n            if (source === Track.Source.Microphone && isAudioTrack(localTrack) && opts.preConnectBuffer) {\n              this.log.info('starting preconnect buffer for microphone', Object.assign({}, this.logContext));\n              localTrack.startPreConnectBuffer();\n            }\n          }\n          try {\n            const publishPromises = [];\n            for (const localTrack of localTracks) {\n              this.log.info('publishing track', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(localTrack)));\n              publishPromises.push(this.publishTrack(localTrack, publishOptions));\n            }\n            const publishedTracks = yield Promise.all(publishPromises);\n            // for screen share publications including audio, this will only return the screen share publication, not the screen share audio one\n            // revisit if we want to return an array of tracks instead for v2\n            [track] = publishedTracks;\n          } catch (e) {\n            localTracks === null || localTracks === void 0 ? void 0 : localTracks.forEach(tr => {\n              tr.stop();\n            });\n            throw e;\n          } finally {\n            this.pendingPublishing.delete(source);\n          }\n        }\n      } else {\n        if (!(track === null || track === void 0 ? void 0 : track.track) && this.pendingPublishing.has(source)) {\n          // if there's no track available yet first wait for pending publishing promises of that source to see if it becomes available\n          track = yield this.waitForPendingPublicationOfSource(source);\n          if (!track) {\n            this.log.info('waiting for pending publication promise timed out', Object.assign(Object.assign({}, this.logContext), {\n              source\n            }));\n          }\n        }\n        if (track && track.track) {\n          // screenshare cannot be muted, unpublish instead\n          if (source === Track.Source.ScreenShare) {\n            track = yield this.unpublishTrack(track.track);\n            const screenAudioTrack = this.getTrackPublication(Track.Source.ScreenShareAudio);\n            if (screenAudioTrack && screenAudioTrack.track) {\n              this.unpublishTrack(screenAudioTrack.track);\n            }\n          } else {\n            yield track.mute();\n          }\n        }\n      }\n      return track;\n    });\n  }\n  /**\n   * Publish both camera and microphone at the same time. This is useful for\n   * displaying a single Permission Dialog box to the end user.\n   */\n  enableCameraAndMicrophone() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.pendingPublishing.has(Track.Source.Camera) || this.pendingPublishing.has(Track.Source.Microphone)) {\n        // no-op it's already been requested\n        return;\n      }\n      this.pendingPublishing.add(Track.Source.Camera);\n      this.pendingPublishing.add(Track.Source.Microphone);\n      try {\n        const tracks = yield this.createTracks({\n          audio: true,\n          video: true\n        });\n        yield Promise.all(tracks.map(track => this.publishTrack(track)));\n      } finally {\n        this.pendingPublishing.delete(Track.Source.Camera);\n        this.pendingPublishing.delete(Track.Source.Microphone);\n      }\n    });\n  }\n  /**\n   * Create local camera and/or microphone tracks\n   * @param options\n   * @returns\n   */\n  createTracks(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      options !== null && options !== void 0 ? options : options = {};\n      const mergedOptionsWithProcessors = mergeDefaultOptions(options, (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.audioCaptureDefaults, (_b = this.roomOptions) === null || _b === void 0 ? void 0 : _b.videoCaptureDefaults);\n      try {\n        const tracks = yield createLocalTracks(mergedOptionsWithProcessors, {\n          loggerName: this.roomOptions.loggerName,\n          loggerContextCb: () => this.logContext\n        });\n        const localTracks = tracks.map(track => {\n          if (isAudioTrack(track)) {\n            this.microphoneError = undefined;\n            track.setAudioContext(this.audioContext);\n            track.source = Track.Source.Microphone;\n            this.emit(ParticipantEvent.AudioStreamAcquired);\n          }\n          if (isVideoTrack(track)) {\n            this.cameraError = undefined;\n            track.source = Track.Source.Camera;\n          }\n          return track;\n        });\n        return localTracks;\n      } catch (err) {\n        if (err instanceof Error) {\n          if (options.audio) {\n            this.microphoneError = err;\n          }\n          if (options.video) {\n            this.cameraError = err;\n          }\n        }\n        throw err;\n      }\n    });\n  }\n  /**\n   * Creates a screen capture tracks with getDisplayMedia().\n   * A LocalVideoTrack is always created and returned.\n   * If { audio: true }, and the browser supports audio capture, a LocalAudioTrack is also created.\n   */\n  createScreenTracks(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (options === undefined) {\n        options = {};\n      }\n      if (navigator.mediaDevices.getDisplayMedia === undefined) {\n        throw new DeviceUnsupportedError('getDisplayMedia not supported');\n      }\n      if (options.resolution === undefined && !isSafari17Based()) {\n        // we need to constrain the dimensions, otherwise it could lead to low bitrate\n        // due to encoding a huge video. Encoding such large surfaces is really expensive\n        // unfortunately Safari 17 has a but and cannot be constrained by default\n        options.resolution = ScreenSharePresets.h1080fps30.resolution;\n      }\n      const constraints = screenCaptureToDisplayMediaStreamOptions(options);\n      const stream = yield navigator.mediaDevices.getDisplayMedia(constraints);\n      const tracks = stream.getVideoTracks();\n      if (tracks.length === 0) {\n        throw new TrackInvalidError('no video track found');\n      }\n      const screenVideo = new LocalVideoTrack(tracks[0], undefined, false, {\n        loggerName: this.roomOptions.loggerName,\n        loggerContextCb: () => this.logContext\n      });\n      screenVideo.source = Track.Source.ScreenShare;\n      if (options.contentHint) {\n        screenVideo.mediaStreamTrack.contentHint = options.contentHint;\n      }\n      const localTracks = [screenVideo];\n      if (stream.getAudioTracks().length > 0) {\n        this.emit(ParticipantEvent.AudioStreamAcquired);\n        const screenAudio = new LocalAudioTrack(stream.getAudioTracks()[0], undefined, false, this.audioContext, {\n          loggerName: this.roomOptions.loggerName,\n          loggerContextCb: () => this.logContext\n        });\n        screenAudio.source = Track.Source.ScreenShareAudio;\n        localTracks.push(screenAudio);\n      }\n      return localTracks;\n    });\n  }\n  /**\n   * Publish a new track to the room\n   * @param track\n   * @param options\n   */\n  publishTrack(track, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.publishOrRepublishTrack(track, options);\n    });\n  }\n  publishOrRepublishTrack(track_1, options_1) {\n    return __awaiter(this, arguments, void 0, function (track, options) {\n      var _this2 = this;\n      let isRepublish = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n      return function* () {\n        var _a, _b, _c, _d;\n        if (isLocalAudioTrack(track)) {\n          track.setAudioContext(_this2.audioContext);\n        }\n        yield (_a = _this2.reconnectFuture) === null || _a === void 0 ? void 0 : _a.promise;\n        if (_this2.republishPromise && !isRepublish) {\n          yield _this2.republishPromise;\n        }\n        if (isLocalTrack(track) && _this2.pendingPublishPromises.has(track)) {\n          yield _this2.pendingPublishPromises.get(track);\n        }\n        let defaultConstraints;\n        if (track instanceof MediaStreamTrack) {\n          defaultConstraints = track.getConstraints();\n        } else {\n          // we want to access constraints directly as `track.mediaStreamTrack`\n          // might be pointing to a non-device track (e.g. processed track) already\n          defaultConstraints = track.constraints;\n          let deviceKind = undefined;\n          switch (track.source) {\n            case Track.Source.Microphone:\n              deviceKind = 'audioinput';\n              break;\n            case Track.Source.Camera:\n              deviceKind = 'videoinput';\n          }\n          if (deviceKind && _this2.activeDeviceMap.has(deviceKind)) {\n            defaultConstraints = Object.assign(Object.assign({}, defaultConstraints), {\n              deviceId: _this2.activeDeviceMap.get(deviceKind)\n            });\n          }\n        }\n        // convert raw media track into audio or video track\n        if (track instanceof MediaStreamTrack) {\n          switch (track.kind) {\n            case 'audio':\n              track = new LocalAudioTrack(track, defaultConstraints, true, _this2.audioContext, {\n                loggerName: _this2.roomOptions.loggerName,\n                loggerContextCb: () => _this2.logContext\n              });\n              break;\n            case 'video':\n              track = new LocalVideoTrack(track, defaultConstraints, true, {\n                loggerName: _this2.roomOptions.loggerName,\n                loggerContextCb: () => _this2.logContext\n              });\n              break;\n            default:\n              throw new TrackInvalidError(\"unsupported MediaStreamTrack kind \".concat(track.kind));\n          }\n        } else {\n          track.updateLoggerOptions({\n            loggerName: _this2.roomOptions.loggerName,\n            loggerContextCb: () => _this2.logContext\n          });\n        }\n        // is it already published? if so skip\n        let existingPublication;\n        _this2.trackPublications.forEach(publication => {\n          if (!publication.track) {\n            return;\n          }\n          if (publication.track === track) {\n            existingPublication = publication;\n          }\n        });\n        if (existingPublication) {\n          _this2.log.warn('track has already been published, skipping', Object.assign(Object.assign({}, _this2.logContext), getLogContextFromTrack(existingPublication)));\n          return existingPublication;\n        }\n        const opts = Object.assign(Object.assign({}, _this2.roomOptions.publishDefaults), options);\n        const isStereoInput = 'channelCount' in track.mediaStreamTrack.getSettings() &&\n        // @ts-ignore `channelCount` on getSettings() is currently only available for Safari, but is generally the best way to determine a stereo track https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSettings/channelCount\n        track.mediaStreamTrack.getSettings().channelCount === 2 || track.mediaStreamTrack.getConstraints().channelCount === 2;\n        const isStereo = (_b = opts.forceStereo) !== null && _b !== void 0 ? _b : isStereoInput;\n        // disable dtx for stereo track if not enabled explicitly\n        if (isStereo) {\n          if (opts.dtx === undefined) {\n            _this2.log.info(\"Opus DTX will be disabled for stereo tracks by default. Enable them explicitly to make it work.\", Object.assign(Object.assign({}, _this2.logContext), getLogContextFromTrack(track)));\n          }\n          if (opts.red === undefined) {\n            _this2.log.info(\"Opus RED will be disabled for stereo tracks by default. Enable them explicitly to make it work.\");\n          }\n          (_c = opts.dtx) !== null && _c !== void 0 ? _c : opts.dtx = false;\n          (_d = opts.red) !== null && _d !== void 0 ? _d : opts.red = false;\n        }\n        if (!isE2EESimulcastSupported() && _this2.roomOptions.e2ee) {\n          _this2.log.info(\"End-to-end encryption is set up, simulcast publishing will be disabled on Safari versions and iOS browsers running iOS < v17.2\", Object.assign({}, _this2.logContext));\n          opts.simulcast = false;\n        }\n        if (opts.source) {\n          track.source = opts.source;\n        }\n        const publishPromise = new Promise((resolve, reject) => __awaiter(_this2, void 0, void 0, function* () {\n          try {\n            if (this.engine.client.currentState !== SignalConnectionState.CONNECTED) {\n              this.log.debug('deferring track publication until signal is connected', Object.assign(Object.assign({}, this.logContext), {\n                track: getLogContextFromTrack(track)\n              }));\n              let publicationTimedOut = false;\n              const timeout = setTimeout(() => {\n                publicationTimedOut = true;\n                track.stop();\n                reject(new PublishTrackError('publishing rejected as engine not connected within timeout', 408));\n              }, 15000);\n              yield this.waitUntilEngineConnected();\n              clearTimeout(timeout);\n              if (publicationTimedOut) {\n                return;\n              }\n              const publication = yield this.publish(track, opts, isStereo);\n              resolve(publication);\n            } else {\n              try {\n                const publication = yield this.publish(track, opts, isStereo);\n                resolve(publication);\n              } catch (e) {\n                reject(e);\n              }\n            }\n          } catch (e) {\n            reject(e);\n          }\n        }));\n        _this2.pendingPublishPromises.set(track, publishPromise);\n        try {\n          const publication = yield publishPromise;\n          return publication;\n        } catch (e) {\n          throw e;\n        } finally {\n          _this2.pendingPublishPromises.delete(track);\n        }\n      }();\n    });\n  }\n  waitUntilEngineConnected() {\n    if (!this.signalConnectedFuture) {\n      this.signalConnectedFuture = new Future();\n    }\n    return this.signalConnectedFuture.promise;\n  }\n  hasPermissionsToPublish(track) {\n    if (!this.permissions) {\n      this.log.warn('no permissions present for publishing track', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n      return false;\n    }\n    const {\n      canPublish,\n      canPublishSources\n    } = this.permissions;\n    if (canPublish && (canPublishSources.length === 0 || canPublishSources.map(source => getTrackSourceFromProto(source)).includes(track.source))) {\n      return true;\n    }\n    this.log.warn('insufficient permissions to publish', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n    return false;\n  }\n  publish(track, opts, isStereo) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n      if (!this.hasPermissionsToPublish(track)) {\n        throw new PublishTrackError('failed to publish track, insufficient permissions', 403);\n      }\n      const existingTrackOfSource = Array.from(this.trackPublications.values()).find(publishedTrack => isLocalTrack(track) && publishedTrack.source === track.source);\n      if (existingTrackOfSource && track.source !== Track.Source.Unknown) {\n        this.log.info(\"publishing a second track with the same source: \".concat(track.source), Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n      }\n      if (opts.stopMicTrackOnMute && isAudioTrack(track)) {\n        track.stopOnMute = true;\n      }\n      if (track.source === Track.Source.ScreenShare && isFireFox()) {\n        // Firefox does not work well with simulcasted screen share\n        // we frequently get no data on layer 0 when enabled\n        opts.simulcast = false;\n      }\n      // require full AV1/VP9 SVC support prior to using it\n      if (opts.videoCodec === 'av1' && !supportsAV1()) {\n        opts.videoCodec = undefined;\n      }\n      if (opts.videoCodec === 'vp9' && !supportsVP9()) {\n        opts.videoCodec = undefined;\n      }\n      if (opts.videoCodec === undefined) {\n        opts.videoCodec = defaultVideoCodec;\n      }\n      if (this.enabledPublishVideoCodecs.length > 0) {\n        // fallback to a supported codec if it is not supported\n        if (!this.enabledPublishVideoCodecs.some(c => opts.videoCodec === mimeTypeToVideoCodecString(c.mime))) {\n          opts.videoCodec = mimeTypeToVideoCodecString(this.enabledPublishVideoCodecs[0].mime);\n        }\n      }\n      const videoCodec = opts.videoCodec;\n      // handle track actions\n      track.on(TrackEvent.Muted, this.onTrackMuted);\n      track.on(TrackEvent.Unmuted, this.onTrackUnmuted);\n      track.on(TrackEvent.Ended, this.handleTrackEnded);\n      track.on(TrackEvent.UpstreamPaused, this.onTrackUpstreamPaused);\n      track.on(TrackEvent.UpstreamResumed, this.onTrackUpstreamResumed);\n      track.on(TrackEvent.AudioTrackFeatureUpdate, this.onTrackFeatureUpdate);\n      const audioFeatures = [];\n      const disableDtx = !((_a = opts.dtx) !== null && _a !== void 0 ? _a : true);\n      const settings = track.getSourceTrackSettings();\n      if (settings.autoGainControl) {\n        audioFeatures.push(AudioTrackFeature.TF_AUTO_GAIN_CONTROL);\n      }\n      if (settings.echoCancellation) {\n        audioFeatures.push(AudioTrackFeature.TF_ECHO_CANCELLATION);\n      }\n      if (settings.noiseSuppression) {\n        audioFeatures.push(AudioTrackFeature.TF_NOISE_SUPPRESSION);\n      }\n      if (settings.channelCount && settings.channelCount > 1) {\n        audioFeatures.push(AudioTrackFeature.TF_STEREO);\n      }\n      if (disableDtx) {\n        audioFeatures.push(AudioTrackFeature.TF_NO_DTX);\n      }\n      if (isLocalAudioTrack(track) && track.hasPreConnectBuffer) {\n        audioFeatures.push(AudioTrackFeature.TF_PRECONNECT_BUFFER);\n      }\n      // create track publication from track\n      const req = new AddTrackRequest({\n        // get local track id for use during publishing\n        cid: track.mediaStreamTrack.id,\n        name: opts.name,\n        type: Track.kindToProto(track.kind),\n        muted: track.isMuted,\n        source: Track.sourceToProto(track.source),\n        disableDtx,\n        encryption: this.encryptionType,\n        stereo: isStereo,\n        disableRed: this.isE2EEEnabled || !((_b = opts.red) !== null && _b !== void 0 ? _b : true),\n        stream: opts === null || opts === void 0 ? void 0 : opts.stream,\n        backupCodecPolicy: opts === null || opts === void 0 ? void 0 : opts.backupCodecPolicy,\n        audioFeatures\n      });\n      // compute encodings and layers for video\n      let encodings;\n      if (track.kind === Track.Kind.Video) {\n        let dims = {\n          width: 0,\n          height: 0\n        };\n        try {\n          dims = yield track.waitForDimensions();\n        } catch (e) {\n          // use defaults, it's quite painful for congestion control without simulcast\n          // so using default dims according to publish settings\n          const defaultRes = (_d = (_c = this.roomOptions.videoCaptureDefaults) === null || _c === void 0 ? void 0 : _c.resolution) !== null && _d !== void 0 ? _d : VideoPresets.h720.resolution;\n          dims = {\n            width: defaultRes.width,\n            height: defaultRes.height\n          };\n          // log failure\n          this.log.error('could not determine track dimensions, using defaults', Object.assign(Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)), {\n            dims\n          }));\n        }\n        // width and height should be defined for video\n        req.width = dims.width;\n        req.height = dims.height;\n        // for svc codecs, disable simulcast and use vp8 for backup codec\n        if (isLocalVideoTrack(track)) {\n          if (isSVCCodec(videoCodec)) {\n            if (track.source === Track.Source.ScreenShare) {\n              // vp9 svc with screenshare cannot encode multiple spatial layers\n              // doing so reduces publish resolution to minimal resolution\n              opts.scalabilityMode = 'L1T3';\n              // Chrome does not allow more than 5 fps with L1T3, and it has encoding bugs with L3T3\n              // It has a different path for screenshare handling and it seems to be untested/buggy\n              // As a workaround, we are setting contentHint to force it to go through the same\n              // path as regular camera video. While this is not optimal, it delivers the performance\n              // that we need\n              if ('contentHint' in track.mediaStreamTrack) {\n                track.mediaStreamTrack.contentHint = 'motion';\n                this.log.info('forcing contentHint to motion for screenshare with SVC codecs', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n              }\n            }\n            // set scalabilityMode to 'L3T3_KEY' by default\n            opts.scalabilityMode = (_e = opts.scalabilityMode) !== null && _e !== void 0 ? _e : 'L3T3_KEY';\n          }\n          req.simulcastCodecs = [new SimulcastCodec({\n            codec: videoCodec,\n            cid: track.mediaStreamTrack.id\n          })];\n          // set up backup\n          if (opts.backupCodec === true) {\n            opts.backupCodec = {\n              codec: defaultVideoCodec\n            };\n          }\n          if (opts.backupCodec && videoCodec !== opts.backupCodec.codec &&\n          // TODO remove this once e2ee is supported for backup codecs\n          req.encryption === Encryption_Type.NONE) {\n            // multi-codec simulcast requires dynacast\n            if (!this.roomOptions.dynacast) {\n              this.roomOptions.dynacast = true;\n            }\n            req.simulcastCodecs.push(new SimulcastCodec({\n              codec: opts.backupCodec.codec,\n              cid: ''\n            }));\n          }\n        }\n        encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, req.width, req.height, opts);\n        req.layers = videoLayersFromEncodings(req.width, req.height, encodings, isSVCCodec(opts.videoCodec));\n      } else if (track.kind === Track.Kind.Audio) {\n        encodings = [{\n          maxBitrate: (_f = opts.audioPreset) === null || _f === void 0 ? void 0 : _f.maxBitrate,\n          priority: (_h = (_g = opts.audioPreset) === null || _g === void 0 ? void 0 : _g.priority) !== null && _h !== void 0 ? _h : 'high',\n          networkPriority: (_k = (_j = opts.audioPreset) === null || _j === void 0 ? void 0 : _j.priority) !== null && _k !== void 0 ? _k : 'high'\n        }];\n      }\n      if (!this.engine || this.engine.isClosed) {\n        throw new UnexpectedConnectionState('cannot publish track when not connected');\n      }\n      const negotiate = () => __awaiter(this, void 0, void 0, function* () {\n        var _a, _b, _c;\n        if (!this.engine.pcManager) {\n          throw new UnexpectedConnectionState('pcManager is not ready');\n        }\n        track.sender = yield this.engine.createSender(track, opts, encodings);\n        this.emit(ParticipantEvent.LocalSenderCreated, track.sender, track);\n        if (isLocalVideoTrack(track)) {\n          (_a = opts.degradationPreference) !== null && _a !== void 0 ? _a : opts.degradationPreference = getDefaultDegradationPreference(track);\n          track.setDegradationPreference(opts.degradationPreference);\n        }\n        if (encodings) {\n          if (isFireFox() && track.kind === Track.Kind.Audio) {\n            /* Refer to RFC https://datatracker.ietf.org/doc/html/rfc7587#section-6.1,\n               livekit-server uses maxaveragebitrate=510000 in the answer sdp to permit client to\n               publish high quality audio track. But firefox always uses this value as the actual\n               bitrates, causing the audio bitrates to rise to 510Kbps in any stereo case unexpectedly.\n               So the client need to modify maxaverragebitrates in answer sdp to user provided value to\n               fix the issue.\n             */\n            let trackTransceiver = undefined;\n            for (const transceiver of this.engine.pcManager.publisher.getTransceivers()) {\n              if (transceiver.sender === track.sender) {\n                trackTransceiver = transceiver;\n                break;\n              }\n            }\n            if (trackTransceiver) {\n              this.engine.pcManager.publisher.setTrackCodecBitrate({\n                transceiver: trackTransceiver,\n                codec: 'opus',\n                maxbr: ((_b = encodings[0]) === null || _b === void 0 ? void 0 : _b.maxBitrate) ? encodings[0].maxBitrate / 1000 : 0\n              });\n            }\n          } else if (track.codec && isSVCCodec(track.codec) && ((_c = encodings[0]) === null || _c === void 0 ? void 0 : _c.maxBitrate)) {\n            this.engine.pcManager.publisher.setTrackCodecBitrate({\n              cid: req.cid,\n              codec: track.codec,\n              maxbr: encodings[0].maxBitrate / 1000\n            });\n          }\n        }\n        yield this.engine.negotiate();\n      });\n      let ti;\n      const addTrackPromise = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n        var _a;\n        try {\n          ti = yield this.engine.addTrack(req);\n          resolve(ti);\n        } catch (err) {\n          if (track.sender && ((_a = this.engine.pcManager) === null || _a === void 0 ? void 0 : _a.publisher)) {\n            this.engine.pcManager.publisher.removeTrack(track.sender);\n            yield this.engine.negotiate().catch(negotiateErr => {\n              this.log.error('failed to negotiate after removing track due to failed add track request', Object.assign(Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)), {\n                error: negotiateErr\n              }));\n            });\n          }\n          reject(err);\n        }\n      }));\n      if (this.enabledPublishVideoCodecs.length > 0) {\n        const rets = yield Promise.all([addTrackPromise, negotiate()]);\n        ti = rets[0];\n      } else {\n        ti = yield addTrackPromise;\n        // server might not support the codec the client has requested, in that case, fallback\n        // to a supported codec\n        let primaryCodecMime;\n        ti.codecs.forEach(codec => {\n          if (primaryCodecMime === undefined) {\n            primaryCodecMime = codec.mimeType;\n          }\n        });\n        if (primaryCodecMime && track.kind === Track.Kind.Video) {\n          const updatedCodec = mimeTypeToVideoCodecString(primaryCodecMime);\n          if (updatedCodec !== videoCodec) {\n            this.log.debug('falling back to server selected codec', Object.assign(Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)), {\n              codec: updatedCodec\n            }));\n            opts.videoCodec = updatedCodec;\n            // recompute encodings since bitrates/etc could have changed\n            encodings = computeVideoEncodings(track.source === Track.Source.ScreenShare, req.width, req.height, opts);\n          }\n        }\n        yield negotiate();\n      }\n      const publication = new LocalTrackPublication(track.kind, ti, track, {\n        loggerName: this.roomOptions.loggerName,\n        loggerContextCb: () => this.logContext\n      });\n      publication.on(TrackEvent.CpuConstrained, constrainedTrack => this.onTrackCpuConstrained(constrainedTrack, publication));\n      // save options for when it needs to be republished again\n      publication.options = opts;\n      track.sid = ti.sid;\n      this.log.debug(\"publishing \".concat(track.kind, \" with encodings\"), Object.assign(Object.assign({}, this.logContext), {\n        encodings,\n        trackInfo: ti\n      }));\n      if (isLocalVideoTrack(track)) {\n        track.startMonitor(this.engine.client);\n      } else if (isLocalAudioTrack(track)) {\n        track.startMonitor();\n      }\n      this.addTrackPublication(publication);\n      // send event for publication\n      this.emit(ParticipantEvent.LocalTrackPublished, publication);\n      if (isLocalAudioTrack(track) && ti.audioFeatures.includes(AudioTrackFeature.TF_PRECONNECT_BUFFER)) {\n        const stream = track.getPreConnectBuffer();\n        const mimeType = track.getPreConnectBufferMimeType();\n        // TODO: we're registering the listener after negotiation, so there might be a race\n        this.on(ParticipantEvent.LocalTrackSubscribed, pub => {\n          if (pub.trackSid === ti.sid) {\n            if (!track.hasPreConnectBuffer) {\n              this.log.warn('subscribe event came to late, buffer already closed', this.logContext);\n              return;\n            }\n            this.log.debug('finished recording preconnect buffer', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n            track.stopPreConnectBuffer();\n          }\n        });\n        if (stream) {\n          const bufferStreamPromise = new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n            var _a, e_2, _b, _c;\n            var _d, _e;\n            try {\n              this.log.debug('waiting for agent', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n              const agentActiveTimeout = setTimeout(() => {\n                reject(new Error('agent not active within 10 seconds'));\n              }, 10000);\n              const agent = yield this.waitUntilActiveAgentPresent();\n              clearTimeout(agentActiveTimeout);\n              this.log.debug('sending preconnect buffer', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n              const writer = yield this.streamBytes({\n                name: 'preconnect-buffer',\n                mimeType,\n                topic: 'lk.agent.pre-connect-audio-buffer',\n                destinationIdentities: [agent.identity],\n                attributes: {\n                  trackId: publication.trackSid,\n                  sampleRate: String((_d = settings.sampleRate) !== null && _d !== void 0 ? _d : '48000'),\n                  channels: String((_e = settings.channelCount) !== null && _e !== void 0 ? _e : '1')\n                }\n              });\n              try {\n                for (var _f = true, stream_1 = __asyncValues(stream), stream_1_1; stream_1_1 = yield stream_1.next(), _a = stream_1_1.done, !_a; _f = true) {\n                  _c = stream_1_1.value;\n                  _f = false;\n                  const chunk = _c;\n                  yield writer.write(chunk);\n                }\n              } catch (e_2_1) {\n                e_2 = {\n                  error: e_2_1\n                };\n              } finally {\n                try {\n                  if (!_f && !_a && (_b = stream_1.return)) yield _b.call(stream_1);\n                } finally {\n                  if (e_2) throw e_2.error;\n                }\n              }\n              yield writer.close();\n              resolve();\n            } catch (e) {\n              reject(e);\n            }\n          }));\n          bufferStreamPromise.then(() => {\n            this.log.debug('preconnect buffer sent successfully', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n          }).catch(e => {\n            this.log.error('error sending preconnect buffer', Object.assign(Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)), {\n              error: e\n            }));\n          });\n        }\n      }\n      return publication;\n    });\n  }\n  get isLocal() {\n    return true;\n  }\n  /** @internal\n   * publish additional codec to existing track\n   */\n  publishAdditionalCodecForTrack(track, videoCodec, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      // TODO remove once e2ee is supported for backup tracks\n      if (this.encryptionType !== Encryption_Type.NONE) {\n        return;\n      }\n      // is it not published? if so skip\n      let existingPublication;\n      this.trackPublications.forEach(publication => {\n        if (!publication.track) {\n          return;\n        }\n        if (publication.track === track) {\n          existingPublication = publication;\n        }\n      });\n      if (!existingPublication) {\n        throw new TrackInvalidError('track is not published');\n      }\n      if (!isLocalVideoTrack(track)) {\n        throw new TrackInvalidError('track is not a video track');\n      }\n      const opts = Object.assign(Object.assign({}, (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.publishDefaults), options);\n      const encodings = computeTrackBackupEncodings(track, videoCodec, opts);\n      if (!encodings) {\n        this.log.info(\"backup codec has been disabled, ignoring request to add additional codec for track\", Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n        return;\n      }\n      const simulcastTrack = track.addSimulcastTrack(videoCodec, encodings);\n      if (!simulcastTrack) {\n        return;\n      }\n      const req = new AddTrackRequest({\n        cid: simulcastTrack.mediaStreamTrack.id,\n        type: Track.kindToProto(track.kind),\n        muted: track.isMuted,\n        source: Track.sourceToProto(track.source),\n        sid: track.sid,\n        simulcastCodecs: [{\n          codec: opts.videoCodec,\n          cid: simulcastTrack.mediaStreamTrack.id\n        }]\n      });\n      req.layers = videoLayersFromEncodings(req.width, req.height, encodings);\n      if (!this.engine || this.engine.isClosed) {\n        throw new UnexpectedConnectionState('cannot publish track when not connected');\n      }\n      const negotiate = () => __awaiter(this, void 0, void 0, function* () {\n        yield this.engine.createSimulcastSender(track, simulcastTrack, opts, encodings);\n        yield this.engine.negotiate();\n      });\n      const rets = yield Promise.all([this.engine.addTrack(req), negotiate()]);\n      const ti = rets[0];\n      this.log.debug(\"published \".concat(videoCodec, \" for track \").concat(track.sid), Object.assign(Object.assign({}, this.logContext), {\n        encodings,\n        trackInfo: ti\n      }));\n    });\n  }\n  unpublishTrack(track, stopOnUnpublish) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      if (isLocalTrack(track)) {\n        const publishPromise = this.pendingPublishPromises.get(track);\n        if (publishPromise) {\n          this.log.info('awaiting publish promise before attempting to unpublish', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(track)));\n          yield publishPromise;\n        }\n      }\n      // look through all published tracks to find the right ones\n      const publication = this.getPublicationForTrack(track);\n      const pubLogContext = publication ? getLogContextFromTrack(publication) : undefined;\n      this.log.debug('unpublishing track', Object.assign(Object.assign({}, this.logContext), pubLogContext));\n      if (!publication || !publication.track) {\n        this.log.warn('track was not unpublished because no publication was found', Object.assign(Object.assign({}, this.logContext), pubLogContext));\n        return undefined;\n      }\n      track = publication.track;\n      track.off(TrackEvent.Muted, this.onTrackMuted);\n      track.off(TrackEvent.Unmuted, this.onTrackUnmuted);\n      track.off(TrackEvent.Ended, this.handleTrackEnded);\n      track.off(TrackEvent.UpstreamPaused, this.onTrackUpstreamPaused);\n      track.off(TrackEvent.UpstreamResumed, this.onTrackUpstreamResumed);\n      track.off(TrackEvent.AudioTrackFeatureUpdate, this.onTrackFeatureUpdate);\n      if (stopOnUnpublish === undefined) {\n        stopOnUnpublish = (_b = (_a = this.roomOptions) === null || _a === void 0 ? void 0 : _a.stopLocalTrackOnUnpublish) !== null && _b !== void 0 ? _b : true;\n      }\n      if (stopOnUnpublish) {\n        track.stop();\n      } else {\n        track.stopMonitor();\n      }\n      let negotiationNeeded = false;\n      const trackSender = track.sender;\n      track.sender = undefined;\n      if (this.engine.pcManager && this.engine.pcManager.currentState < PCTransportState.FAILED && trackSender) {\n        try {\n          for (const transceiver of this.engine.pcManager.publisher.getTransceivers()) {\n            // if sender is not currently sending (after replaceTrack(null))\n            // removeTrack would have no effect.\n            // to ensure we end up successfully removing the track, manually set\n            // the transceiver to inactive\n            if (transceiver.sender === trackSender) {\n              transceiver.direction = 'inactive';\n              negotiationNeeded = true;\n            }\n          }\n          if (this.engine.removeTrack(trackSender)) {\n            negotiationNeeded = true;\n          }\n          if (isLocalVideoTrack(track)) {\n            for (const [, trackInfo] of track.simulcastCodecs) {\n              if (trackInfo.sender) {\n                if (this.engine.removeTrack(trackInfo.sender)) {\n                  negotiationNeeded = true;\n                }\n                trackInfo.sender = undefined;\n              }\n            }\n            track.simulcastCodecs.clear();\n          }\n        } catch (e) {\n          this.log.warn('failed to unpublish track', Object.assign(Object.assign(Object.assign({}, this.logContext), pubLogContext), {\n            error: e\n          }));\n        }\n      }\n      // remove from our maps\n      this.trackPublications.delete(publication.trackSid);\n      switch (publication.kind) {\n        case Track.Kind.Audio:\n          this.audioTrackPublications.delete(publication.trackSid);\n          break;\n        case Track.Kind.Video:\n          this.videoTrackPublications.delete(publication.trackSid);\n          break;\n      }\n      this.emit(ParticipantEvent.LocalTrackUnpublished, publication);\n      publication.setTrack(undefined);\n      if (negotiationNeeded) {\n        yield this.engine.negotiate();\n      }\n      return publication;\n    });\n  }\n  unpublishTracks(tracks) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const results = yield Promise.all(tracks.map(track => this.unpublishTrack(track)));\n      return results.filter(track => !!track);\n    });\n  }\n  republishAllTracks(options_1) {\n    return __awaiter(this, arguments, void 0, function (options) {\n      var _this3 = this;\n      let restartTracks = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n      return function* () {\n        if (_this3.republishPromise) {\n          yield _this3.republishPromise;\n        }\n        _this3.republishPromise = new Promise((resolve, reject) => __awaiter(_this3, void 0, void 0, function* () {\n          try {\n            const localPubs = [];\n            this.trackPublications.forEach(pub => {\n              if (pub.track) {\n                if (options) {\n                  pub.options = Object.assign(Object.assign({}, pub.options), options);\n                }\n                localPubs.push(pub);\n              }\n            });\n            yield Promise.all(localPubs.map(pub => __awaiter(this, void 0, void 0, function* () {\n              const track = pub.track;\n              yield this.unpublishTrack(track, false);\n              if (restartTracks && !track.isMuted && track.source !== Track.Source.ScreenShare && track.source !== Track.Source.ScreenShareAudio && (isLocalAudioTrack(track) || isLocalVideoTrack(track)) && !track.isUserProvided) {\n                // generally we need to restart the track before publishing, often a full reconnect\n                // is necessary because computer had gone to sleep.\n                this.log.debug('restarting existing track', Object.assign(Object.assign({}, this.logContext), {\n                  track: pub.trackSid\n                }));\n                yield track.restartTrack();\n              }\n              yield this.publishOrRepublishTrack(track, pub.options, true);\n            })));\n            resolve();\n          } catch (error) {\n            reject(error);\n          } finally {\n            this.republishPromise = undefined;\n          }\n        }));\n        yield _this3.republishPromise;\n      }();\n    });\n  }\n  /**\n   * Publish a new data payload to the room. Data will be forwarded to each\n   * participant in the room if the destination field in publishOptions is empty\n   *\n   * @param data Uint8Array of the payload. To send string data, use TextEncoder.encode\n   * @param options optionally specify a `reliable`, `topic` and `destination`\n   */\n  publishData(data_1) {\n    return __awaiter(this, arguments, void 0, function (data) {\n      var _this4 = this;\n      let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n      return function* () {\n        const kind = options.reliable ? DataPacket_Kind.RELIABLE : DataPacket_Kind.LOSSY;\n        const destinationIdentities = options.destinationIdentities;\n        const topic = options.topic;\n        let userPacket = new UserPacket({\n          participantIdentity: _this4.identity,\n          payload: data,\n          destinationIdentities,\n          topic\n        });\n        const packet = new DataPacket({\n          kind: kind,\n          value: {\n            case: 'user',\n            value: userPacket\n          }\n        });\n        yield _this4.engine.sendDataPacket(packet, kind);\n      }();\n    });\n  }\n  /**\n   * Publish SIP DTMF message to the room.\n   *\n   * @param code DTMF code\n   * @param digit DTMF digit\n   */\n  publishDtmf(code, digit) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const packet = new DataPacket({\n        kind: DataPacket_Kind.RELIABLE,\n        value: {\n          case: 'sipDtmf',\n          value: new SipDTMF({\n            code: code,\n            digit: digit\n          })\n        }\n      });\n      yield this.engine.sendDataPacket(packet, DataPacket_Kind.RELIABLE);\n    });\n  }\n  /** @deprecated Consider migrating to {@link sendText} */\n  sendChatMessage(text, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const msg = {\n        id: crypto.randomUUID(),\n        message: text,\n        timestamp: Date.now(),\n        attachedFiles: options === null || options === void 0 ? void 0 : options.attachments\n      };\n      const packet = new DataPacket({\n        value: {\n          case: 'chatMessage',\n          value: new ChatMessage(Object.assign(Object.assign({}, msg), {\n            timestamp: protoInt64.parse(msg.timestamp)\n          }))\n        }\n      });\n      yield this.engine.sendDataPacket(packet, DataPacket_Kind.RELIABLE);\n      this.emit(ParticipantEvent.ChatMessage, msg);\n      return msg;\n    });\n  }\n  /** @deprecated Consider migrating to {@link sendText} */\n  editChatMessage(editText, originalMessage) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const msg = Object.assign(Object.assign({}, originalMessage), {\n        message: editText,\n        editTimestamp: Date.now()\n      });\n      const packet = new DataPacket({\n        value: {\n          case: 'chatMessage',\n          value: new ChatMessage(Object.assign(Object.assign({}, msg), {\n            timestamp: protoInt64.parse(msg.timestamp),\n            editTimestamp: protoInt64.parse(msg.editTimestamp)\n          }))\n        }\n      });\n      yield this.engine.sendDataPacket(packet, DataPacket_Kind.RELIABLE);\n      this.emit(ParticipantEvent.ChatMessage, msg);\n      return msg;\n    });\n  }\n  /**\n   * Sends the given string to participants in the room via the data channel.\n   * For longer messages, consider using {@link streamText} instead.\n   *\n   * @param text The text payload\n   * @param options.topic Topic identifier used to route the stream to appropriate handlers.\n   */\n  sendText(text, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.roomOutgoingDataStreamManager.sendText(text, options);\n    });\n  }\n  /**\n   * Creates a new TextStreamWriter which can be used to stream text incrementally\n   * to participants in the room via the data channel.\n   *\n   * @param options.topic Topic identifier used to route the stream to appropriate handlers.\n   *\n   * @internal\n   * @experimental CAUTION, might get removed in a minor release\n   */\n  streamText(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.roomOutgoingDataStreamManager.streamText(options);\n    });\n  }\n  /** Send a File to all participants in the room via the data channel.\n   * @param file The File object payload\n   * @param options.topic Topic identifier used to route the stream to appropriate handlers.\n   * @param options.onProgress A callback function used to monitor the upload progress percentage.\n   */\n  sendFile(file, options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.roomOutgoingDataStreamManager.sendFile(file, options);\n    });\n  }\n  /**\n   * Stream bytes incrementally to participants in the room via the data channel.\n   * For sending files, consider using {@link sendFile} instead.\n   *\n   * @param options.topic Topic identifier used to route the stream to appropriate handlers.\n   */\n  streamBytes(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.roomOutgoingDataStreamManager.streamBytes(options);\n    });\n  }\n  /**\n   * Initiate an RPC call to a remote participant\n   * @param params - Parameters for initiating the RPC call, see {@link PerformRpcParams}\n   * @returns A promise that resolves with the response payload or rejects with an error.\n   * @throws Error on failure. Details in `message`.\n   */\n  performRpc(_a) {\n    return __awaiter(this, arguments, void 0, function (_ref3) {\n      var _this5 = this;\n      let {\n        destinationIdentity,\n        method,\n        payload,\n        responseTimeout = 15000\n      } = _ref3;\n      return function* () {\n        const maxRoundTripLatency = 7000;\n        const minEffectiveTimeout = maxRoundTripLatency + 1000;\n        return new Promise((resolve, reject) => __awaiter(_this5, void 0, void 0, function* () {\n          var _a, _b, _c, _d;\n          if (byteLength(payload) > MAX_PAYLOAD_BYTES) {\n            reject(RpcError.builtIn('REQUEST_PAYLOAD_TOO_LARGE'));\n            return;\n          }\n          if (((_b = (_a = this.engine.latestJoinResponse) === null || _a === void 0 ? void 0 : _a.serverInfo) === null || _b === void 0 ? void 0 : _b.version) && compareVersions((_d = (_c = this.engine.latestJoinResponse) === null || _c === void 0 ? void 0 : _c.serverInfo) === null || _d === void 0 ? void 0 : _d.version, '1.8.0') < 0) {\n            reject(RpcError.builtIn('UNSUPPORTED_SERVER'));\n            return;\n          }\n          const effectiveTimeout = Math.max(responseTimeout, minEffectiveTimeout);\n          const id = crypto.randomUUID();\n          yield this.publishRpcRequest(destinationIdentity, id, method, payload, effectiveTimeout);\n          const ackTimeoutId = setTimeout(() => {\n            this.pendingAcks.delete(id);\n            reject(RpcError.builtIn('CONNECTION_TIMEOUT'));\n            this.pendingResponses.delete(id);\n            clearTimeout(responseTimeoutId);\n          }, maxRoundTripLatency);\n          this.pendingAcks.set(id, {\n            resolve: () => {\n              clearTimeout(ackTimeoutId);\n            },\n            participantIdentity: destinationIdentity\n          });\n          const responseTimeoutId = setTimeout(() => {\n            this.pendingResponses.delete(id);\n            reject(RpcError.builtIn('RESPONSE_TIMEOUT'));\n          }, responseTimeout);\n          this.pendingResponses.set(id, {\n            resolve: (responsePayload, responseError) => {\n              clearTimeout(responseTimeoutId);\n              if (this.pendingAcks.has(id)) {\n                this.log.warn('RPC response received before ack', id);\n                this.pendingAcks.delete(id);\n                clearTimeout(ackTimeoutId);\n              }\n              if (responseError) {\n                reject(responseError);\n              } else {\n                resolve(responsePayload !== null && responsePayload !== void 0 ? responsePayload : '');\n              }\n            },\n            participantIdentity: destinationIdentity\n          });\n        }));\n      }();\n    });\n  }\n  /**\n   * @deprecated use `room.registerRpcMethod` instead\n   */\n  registerRpcMethod(method, handler) {\n    if (this.rpcHandlers.has(method)) {\n      this.log.warn(\"you're overriding the RPC handler for method \".concat(method, \", in the future this will throw an error\"));\n    }\n    this.rpcHandlers.set(method, handler);\n  }\n  /**\n   * @deprecated use `room.unregisterRpcMethod` instead\n   */\n  unregisterRpcMethod(method) {\n    this.rpcHandlers.delete(method);\n  }\n  /**\n   * Control who can subscribe to LocalParticipant's published tracks.\n   *\n   * By default, all participants can subscribe. This allows fine-grained control over\n   * who is able to subscribe at a participant and track level.\n   *\n   * Note: if access is given at a track-level (i.e. both [allParticipantsAllowed] and\n   * [ParticipantTrackPermission.allTracksAllowed] are false), any newer published tracks\n   * will not grant permissions to any participants and will require a subsequent\n   * permissions update to allow subscription.\n   *\n   * @param allParticipantsAllowed Allows all participants to subscribe all tracks.\n   *  Takes precedence over [[participantTrackPermissions]] if set to true.\n   *  By default this is set to true.\n   * @param participantTrackPermissions Full list of individual permissions per\n   *  participant/track. Any omitted participants will not receive any permissions.\n   */\n  setTrackSubscriptionPermissions(allParticipantsAllowed) {\n    let participantTrackPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];\n    this.participantTrackPermissions = participantTrackPermissions;\n    this.allParticipantsAllowedToSubscribe = allParticipantsAllowed;\n    if (!this.engine.client.isDisconnected) {\n      this.updateTrackSubscriptionPermissions();\n    }\n  }\n  handleIncomingRpcAck(requestId) {\n    const handler = this.pendingAcks.get(requestId);\n    if (handler) {\n      handler.resolve();\n      this.pendingAcks.delete(requestId);\n    } else {\n      console.error('Ack received for unexpected RPC request', requestId);\n    }\n  }\n  handleIncomingRpcResponse(requestId, payload, error) {\n    const handler = this.pendingResponses.get(requestId);\n    if (handler) {\n      handler.resolve(payload, error);\n      this.pendingResponses.delete(requestId);\n    } else {\n      console.error('Response received for unexpected RPC request', requestId);\n    }\n  }\n  /** @internal */\n  publishRpcRequest(destinationIdentity, requestId, method, payload, responseTimeout) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const packet = new DataPacket({\n        destinationIdentities: [destinationIdentity],\n        kind: DataPacket_Kind.RELIABLE,\n        value: {\n          case: 'rpcRequest',\n          value: new RpcRequest({\n            id: requestId,\n            method,\n            payload,\n            responseTimeoutMs: responseTimeout,\n            version: 1\n          })\n        }\n      });\n      yield this.engine.sendDataPacket(packet, DataPacket_Kind.RELIABLE);\n    });\n  }\n  /** @internal */\n  handleParticipantDisconnected(participantIdentity) {\n    for (const [id, {\n      participantIdentity: pendingIdentity\n    }] of this.pendingAcks) {\n      if (pendingIdentity === participantIdentity) {\n        this.pendingAcks.delete(id);\n      }\n    }\n    for (const [id, {\n      participantIdentity: pendingIdentity,\n      resolve\n    }] of this.pendingResponses) {\n      if (pendingIdentity === participantIdentity) {\n        resolve(null, RpcError.builtIn('RECIPIENT_DISCONNECTED'));\n        this.pendingResponses.delete(id);\n      }\n    }\n  }\n  /** @internal */\n  setEnabledPublishCodecs(codecs) {\n    this.enabledPublishVideoCodecs = codecs.filter(c => c.mime.split('/')[0].toLowerCase() === 'video');\n  }\n  /** @internal */\n  updateInfo(info) {\n    if (!super.updateInfo(info)) {\n      return false;\n    }\n    // reconcile track mute status.\n    // if server's track mute status doesn't match actual, we'll have to update\n    // the server's copy\n    info.tracks.forEach(ti => {\n      var _a, _b;\n      const pub = this.trackPublications.get(ti.sid);\n      if (pub) {\n        const mutedOnServer = pub.isMuted || ((_b = (_a = pub.track) === null || _a === void 0 ? void 0 : _a.isUpstreamPaused) !== null && _b !== void 0 ? _b : false);\n        if (mutedOnServer !== ti.muted) {\n          this.log.debug('updating server mute state after reconcile', Object.assign(Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(pub)), {\n            mutedOnServer\n          }));\n          this.engine.client.sendMuteTrack(ti.sid, mutedOnServer);\n        }\n      }\n    });\n    return true;\n  }\n  /** @internal */\n  setActiveAgent(agent) {\n    var _a, _b, _c, _d;\n    this.firstActiveAgent = agent;\n    if (agent && !this.firstActiveAgent) {\n      this.firstActiveAgent = agent;\n    }\n    if (agent) {\n      (_b = (_a = this.activeAgentFuture) === null || _a === void 0 ? void 0 : _a.resolve) === null || _b === void 0 ? void 0 : _b.call(_a, agent);\n    } else {\n      (_d = (_c = this.activeAgentFuture) === null || _c === void 0 ? void 0 : _c.reject) === null || _d === void 0 ? void 0 : _d.call(_c, new Error('Agent disconnected'));\n    }\n    this.activeAgentFuture = undefined;\n  }\n  waitUntilActiveAgentPresent() {\n    if (this.firstActiveAgent) {\n      return Promise.resolve(this.firstActiveAgent);\n    }\n    if (!this.activeAgentFuture) {\n      this.activeAgentFuture = new Future();\n    }\n    return this.activeAgentFuture.promise;\n  }\n  getPublicationForTrack(track) {\n    let publication;\n    this.trackPublications.forEach(pub => {\n      const localTrack = pub.track;\n      if (!localTrack) {\n        return;\n      }\n      // this looks overly complicated due to this object tree\n      if (track instanceof MediaStreamTrack) {\n        if (isLocalAudioTrack(localTrack) || isLocalVideoTrack(localTrack)) {\n          if (localTrack.mediaStreamTrack === track) {\n            publication = pub;\n          }\n        }\n      } else if (track === localTrack) {\n        publication = pub;\n      }\n    });\n    return publication;\n  }\n  waitForPendingPublicationOfSource(source) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const waitForPendingTimeout = 10000;\n      const startTime = Date.now();\n      while (Date.now() < startTime + waitForPendingTimeout) {\n        const publishPromiseEntry = Array.from(this.pendingPublishPromises.entries()).find(_ref4 => {\n          let [pendingTrack] = _ref4;\n          return pendingTrack.source === source;\n        });\n        if (publishPromiseEntry) {\n          return publishPromiseEntry[1];\n        }\n        yield sleep(20);\n      }\n    });\n  }\n}class RemoteTrackPublication extends TrackPublication {\n  constructor(kind, ti, autoSubscribe, loggerOptions) {\n    super(kind, ti.sid, ti.name, loggerOptions);\n    this.track = undefined;\n    /** @internal */\n    this.allowed = true;\n    this.requestedDisabled = undefined;\n    this.visible = true;\n    this.handleEnded = track => {\n      this.setTrack(undefined);\n      this.emit(TrackEvent.Ended, track);\n    };\n    this.handleVisibilityChange = visible => {\n      this.log.debug(\"adaptivestream video visibility \".concat(this.trackSid, \", visible=\").concat(visible), this.logContext);\n      this.visible = visible;\n      this.emitTrackUpdate();\n    };\n    this.handleVideoDimensionsChange = dimensions => {\n      this.log.debug(\"adaptivestream video dimensions \".concat(dimensions.width, \"x\").concat(dimensions.height), this.logContext);\n      this.videoDimensionsAdaptiveStream = dimensions;\n      this.emitTrackUpdate();\n    };\n    this.subscribed = autoSubscribe;\n    this.updateInfo(ti);\n  }\n  /**\n   * Subscribe or unsubscribe to this remote track\n   * @param subscribed true to subscribe to a track, false to unsubscribe\n   */\n  setSubscribed(subscribed) {\n    const prevStatus = this.subscriptionStatus;\n    const prevPermission = this.permissionStatus;\n    this.subscribed = subscribed;\n    // reset allowed status when desired subscription state changes\n    // server will notify client via signal message if it's not allowed\n    if (subscribed) {\n      this.allowed = true;\n    }\n    const sub = new UpdateSubscription({\n      trackSids: [this.trackSid],\n      subscribe: this.subscribed,\n      participantTracks: [new ParticipantTracks({\n        // sending an empty participant id since TrackPublication doesn't keep it\n        // this is filled in by the participant that receives this message\n        participantSid: '',\n        trackSids: [this.trackSid]\n      })]\n    });\n    this.emit(TrackEvent.UpdateSubscription, sub);\n    this.emitSubscriptionUpdateIfChanged(prevStatus);\n    this.emitPermissionUpdateIfChanged(prevPermission);\n  }\n  get subscriptionStatus() {\n    if (this.subscribed === false) {\n      return TrackPublication.SubscriptionStatus.Unsubscribed;\n    }\n    if (!super.isSubscribed) {\n      return TrackPublication.SubscriptionStatus.Desired;\n    }\n    return TrackPublication.SubscriptionStatus.Subscribed;\n  }\n  get permissionStatus() {\n    return this.allowed ? TrackPublication.PermissionStatus.Allowed : TrackPublication.PermissionStatus.NotAllowed;\n  }\n  /**\n   * Returns true if track is subscribed, and ready for playback\n   */\n  get isSubscribed() {\n    if (this.subscribed === false) {\n      return false;\n    }\n    return super.isSubscribed;\n  }\n  // returns client's desire to subscribe to a track, also true if autoSubscribe is enabled\n  get isDesired() {\n    return this.subscribed !== false;\n  }\n  get isEnabled() {\n    return this.requestedDisabled !== undefined ? !this.requestedDisabled : this.isAdaptiveStream ? this.visible : true;\n  }\n  get isLocal() {\n    return false;\n  }\n  /**\n   * disable server from sending down data for this track. this is useful when\n   * the participant is off screen, you may disable streaming down their video\n   * to reduce bandwidth requirements\n   * @param enabled\n   */\n  setEnabled(enabled) {\n    if (!this.isManualOperationAllowed() || this.requestedDisabled === !enabled) {\n      return;\n    }\n    this.requestedDisabled = !enabled;\n    this.emitTrackUpdate();\n  }\n  /**\n   * for tracks that support simulcasting, adjust subscribed quality\n   *\n   * This indicates the highest quality the client can accept. if network\n   * bandwidth does not allow, server will automatically reduce quality to\n   * optimize for uninterrupted video\n   */\n  setVideoQuality(quality) {\n    if (!this.isManualOperationAllowed() || this.requestedMaxQuality === quality) {\n      return;\n    }\n    this.requestedMaxQuality = quality;\n    this.requestedVideoDimensions = undefined;\n    this.emitTrackUpdate();\n  }\n  /**\n   * Explicitly set the video dimensions for this track.\n   *\n   * This will take precedence over adaptive stream dimensions.\n   *\n   * @param dimensions The video dimensions to set.\n   */\n  setVideoDimensions(dimensions) {\n    var _a, _b;\n    if (!this.isManualOperationAllowed()) {\n      return;\n    }\n    if (((_a = this.requestedVideoDimensions) === null || _a === void 0 ? void 0 : _a.width) === dimensions.width && ((_b = this.requestedVideoDimensions) === null || _b === void 0 ? void 0 : _b.height) === dimensions.height) {\n      return;\n    }\n    if (isRemoteVideoTrack(this.track)) {\n      this.requestedVideoDimensions = dimensions;\n    }\n    this.requestedMaxQuality = undefined;\n    this.emitTrackUpdate();\n  }\n  setVideoFPS(fps) {\n    if (!this.isManualOperationAllowed()) {\n      return;\n    }\n    if (!isRemoteVideoTrack(this.track)) {\n      return;\n    }\n    if (this.fps === fps) {\n      return;\n    }\n    this.fps = fps;\n    this.emitTrackUpdate();\n  }\n  get videoQuality() {\n    var _a;\n    return (_a = this.requestedMaxQuality) !== null && _a !== void 0 ? _a : VideoQuality.HIGH;\n  }\n  /** @internal */\n  setTrack(track) {\n    const prevStatus = this.subscriptionStatus;\n    const prevPermission = this.permissionStatus;\n    const prevTrack = this.track;\n    if (prevTrack === track) {\n      return;\n    }\n    if (prevTrack) {\n      // unregister listener\n      prevTrack.off(TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);\n      prevTrack.off(TrackEvent.VisibilityChanged, this.handleVisibilityChange);\n      prevTrack.off(TrackEvent.Ended, this.handleEnded);\n      prevTrack.detach();\n      prevTrack.stopMonitor();\n      this.emit(TrackEvent.Unsubscribed, prevTrack);\n    }\n    super.setTrack(track);\n    if (track) {\n      track.sid = this.trackSid;\n      track.on(TrackEvent.VideoDimensionsChanged, this.handleVideoDimensionsChange);\n      track.on(TrackEvent.VisibilityChanged, this.handleVisibilityChange);\n      track.on(TrackEvent.Ended, this.handleEnded);\n      this.emit(TrackEvent.Subscribed, track);\n    }\n    this.emitPermissionUpdateIfChanged(prevPermission);\n    this.emitSubscriptionUpdateIfChanged(prevStatus);\n  }\n  /** @internal */\n  setAllowed(allowed) {\n    const prevStatus = this.subscriptionStatus;\n    const prevPermission = this.permissionStatus;\n    this.allowed = allowed;\n    this.emitPermissionUpdateIfChanged(prevPermission);\n    this.emitSubscriptionUpdateIfChanged(prevStatus);\n  }\n  /** @internal */\n  setSubscriptionError(error) {\n    this.emit(TrackEvent.SubscriptionFailed, error);\n  }\n  /** @internal */\n  updateInfo(info) {\n    super.updateInfo(info);\n    const prevMetadataMuted = this.metadataMuted;\n    this.metadataMuted = info.muted;\n    if (this.track) {\n      this.track.setMuted(info.muted);\n    } else if (prevMetadataMuted !== info.muted) {\n      this.emit(info.muted ? TrackEvent.Muted : TrackEvent.Unmuted);\n    }\n  }\n  emitSubscriptionUpdateIfChanged(previousStatus) {\n    const currentStatus = this.subscriptionStatus;\n    if (previousStatus === currentStatus) {\n      return;\n    }\n    this.emit(TrackEvent.SubscriptionStatusChanged, currentStatus, previousStatus);\n  }\n  emitPermissionUpdateIfChanged(previousPermissionStatus) {\n    const currentPermissionStatus = this.permissionStatus;\n    if (currentPermissionStatus !== previousPermissionStatus) {\n      this.emit(TrackEvent.SubscriptionPermissionChanged, this.permissionStatus, previousPermissionStatus);\n    }\n  }\n  isManualOperationAllowed() {\n    if (!this.isDesired) {\n      this.log.warn('cannot update track settings when not subscribed', this.logContext);\n      return false;\n    }\n    return true;\n  }\n  get isAdaptiveStream() {\n    return isRemoteVideoTrack(this.track) && this.track.isAdaptiveStream;\n  }\n  /* @internal */\n  emitTrackUpdate() {\n    const settings = new UpdateTrackSettings({\n      trackSids: [this.trackSid],\n      disabled: !this.isEnabled,\n      fps: this.fps\n    });\n    if (this.kind === Track.Kind.Video) {\n      let minDimensions = this.requestedVideoDimensions;\n      if (this.videoDimensionsAdaptiveStream !== undefined) {\n        if (minDimensions) {\n          // check whether the adaptive stream dimensions are smaller than the requested dimensions and use smaller one\n          const smallerAdaptive = areDimensionsSmaller(this.videoDimensionsAdaptiveStream, minDimensions);\n          if (smallerAdaptive) {\n            this.log.debug('using adaptive stream dimensions instead of requested', Object.assign(Object.assign({}, this.logContext), this.videoDimensionsAdaptiveStream));\n            minDimensions = this.videoDimensionsAdaptiveStream;\n          }\n        } else if (this.requestedMaxQuality !== undefined && this.trackInfo) {\n          // check whether adaptive stream dimensions are smaller than the max quality layer and use smaller one\n          const maxQualityLayer = layerDimensionsFor(this.trackInfo, this.requestedMaxQuality);\n          if (maxQualityLayer && areDimensionsSmaller(this.videoDimensionsAdaptiveStream, maxQualityLayer)) {\n            this.log.debug('using adaptive stream dimensions instead of max quality layer', Object.assign(Object.assign({}, this.logContext), this.videoDimensionsAdaptiveStream));\n            minDimensions = this.videoDimensionsAdaptiveStream;\n          }\n        } else {\n          this.log.debug('using adaptive stream dimensions', Object.assign(Object.assign({}, this.logContext), this.videoDimensionsAdaptiveStream));\n          minDimensions = this.videoDimensionsAdaptiveStream;\n        }\n      }\n      if (minDimensions) {\n        settings.width = Math.ceil(minDimensions.width);\n        settings.height = Math.ceil(minDimensions.height);\n      } else if (this.requestedMaxQuality !== undefined) {\n        this.log.debug('using requested max quality', Object.assign(Object.assign({}, this.logContext), {\n          quality: this.requestedMaxQuality\n        }));\n        settings.quality = this.requestedMaxQuality;\n      } else {\n        this.log.debug('using default quality', Object.assign(Object.assign({}, this.logContext), {\n          quality: VideoQuality.HIGH\n        }));\n        // defaults to high quality\n        settings.quality = VideoQuality.HIGH;\n      }\n    }\n    this.emit(TrackEvent.UpdateSettings, settings);\n  }\n}class RemoteParticipant extends Participant {\n  /** @internal */\n  static fromParticipantInfo(signalClient, pi, loggerOptions) {\n    return new RemoteParticipant(signalClient, pi.sid, pi.identity, pi.name, pi.metadata, pi.attributes, loggerOptions, pi.kind);\n  }\n  get logContext() {\n    return Object.assign(Object.assign({}, super.logContext), {\n      rpID: this.sid,\n      remoteParticipant: this.identity\n    });\n  }\n  /** @internal */\n  constructor(signalClient, sid, identity, name, metadata, attributes, loggerOptions) {\n    let kind = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : ParticipantInfo_Kind.STANDARD;\n    super(sid, identity || '', name, metadata, attributes, loggerOptions, kind);\n    this.signalClient = signalClient;\n    this.trackPublications = new Map();\n    this.audioTrackPublications = new Map();\n    this.videoTrackPublications = new Map();\n    this.volumeMap = new Map();\n  }\n  addTrackPublication(publication) {\n    super.addTrackPublication(publication);\n    // register action events\n    publication.on(TrackEvent.UpdateSettings, settings => {\n      this.log.debug('send update settings', Object.assign(Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(publication)), {\n        settings\n      }));\n      this.signalClient.sendUpdateTrackSettings(settings);\n    });\n    publication.on(TrackEvent.UpdateSubscription, sub => {\n      sub.participantTracks.forEach(pt => {\n        pt.participantSid = this.sid;\n      });\n      this.signalClient.sendUpdateSubscription(sub);\n    });\n    publication.on(TrackEvent.SubscriptionPermissionChanged, status => {\n      this.emit(ParticipantEvent.TrackSubscriptionPermissionChanged, publication, status);\n    });\n    publication.on(TrackEvent.SubscriptionStatusChanged, status => {\n      this.emit(ParticipantEvent.TrackSubscriptionStatusChanged, publication, status);\n    });\n    publication.on(TrackEvent.Subscribed, track => {\n      this.emit(ParticipantEvent.TrackSubscribed, track, publication);\n    });\n    publication.on(TrackEvent.Unsubscribed, previousTrack => {\n      this.emit(ParticipantEvent.TrackUnsubscribed, previousTrack, publication);\n    });\n    publication.on(TrackEvent.SubscriptionFailed, error => {\n      this.emit(ParticipantEvent.TrackSubscriptionFailed, publication.trackSid, error);\n    });\n  }\n  getTrackPublication(source) {\n    const track = super.getTrackPublication(source);\n    if (track) {\n      return track;\n    }\n  }\n  getTrackPublicationByName(name) {\n    const track = super.getTrackPublicationByName(name);\n    if (track) {\n      return track;\n    }\n  }\n  /**\n   * sets the volume on the participant's audio track\n   * by default, this affects the microphone publication\n   * a different source can be passed in as a second argument\n   * if no track exists the volume will be applied when the microphone track is added\n   */\n  setVolume(volume) {\n    let source = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Track.Source.Microphone;\n    this.volumeMap.set(source, volume);\n    const audioPublication = this.getTrackPublication(source);\n    if (audioPublication && audioPublication.track) {\n      audioPublication.track.setVolume(volume);\n    }\n  }\n  /**\n   * gets the volume on the participant's microphone track\n   */\n  getVolume() {\n    let source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : Track.Source.Microphone;\n    const audioPublication = this.getTrackPublication(source);\n    if (audioPublication && audioPublication.track) {\n      return audioPublication.track.getVolume();\n    }\n    return this.volumeMap.get(source);\n  }\n  /** @internal */\n  addSubscribedMediaTrack(mediaTrack, sid, mediaStream, receiver, adaptiveStreamSettings, triesLeft) {\n    // find the track publication\n    // it's possible for the media track to arrive before participant info\n    let publication = this.getTrackPublicationBySid(sid);\n    // it's also possible that the browser didn't honor our original track id\n    // FireFox would use its own local uuid instead of server track id\n    if (!publication) {\n      if (!sid.startsWith('TR')) {\n        // find the first track that matches type\n        this.trackPublications.forEach(p => {\n          if (!publication && mediaTrack.kind === p.kind.toString()) {\n            publication = p;\n          }\n        });\n      }\n    }\n    // when we couldn't locate the track, it's possible that the metadata hasn't\n    // yet arrived. Wait a bit longer for it to arrive, or fire an error\n    if (!publication) {\n      if (triesLeft === 0) {\n        this.log.error('could not find published track', Object.assign(Object.assign({}, this.logContext), {\n          trackSid: sid\n        }));\n        this.emit(ParticipantEvent.TrackSubscriptionFailed, sid);\n        return;\n      }\n      if (triesLeft === undefined) triesLeft = 20;\n      setTimeout(() => {\n        this.addSubscribedMediaTrack(mediaTrack, sid, mediaStream, receiver, adaptiveStreamSettings, triesLeft - 1);\n      }, 150);\n      return;\n    }\n    if (mediaTrack.readyState === 'ended') {\n      this.log.error('unable to subscribe because MediaStreamTrack is ended. Do not call MediaStreamTrack.stop()', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(publication)));\n      this.emit(ParticipantEvent.TrackSubscriptionFailed, sid);\n      return;\n    }\n    const isVideo = mediaTrack.kind === 'video';\n    let track;\n    if (isVideo) {\n      track = new RemoteVideoTrack(mediaTrack, sid, receiver, adaptiveStreamSettings);\n    } else {\n      track = new RemoteAudioTrack(mediaTrack, sid, receiver, this.audioContext, this.audioOutput);\n    }\n    // set track info\n    track.source = publication.source;\n    // keep publication's muted status\n    track.isMuted = publication.isMuted;\n    track.setMediaStream(mediaStream);\n    track.start();\n    publication.setTrack(track);\n    // set participant volumes on new audio tracks\n    if (this.volumeMap.has(publication.source) && isRemoteTrack(track) && isAudioTrack(track)) {\n      track.setVolume(this.volumeMap.get(publication.source));\n    }\n    return publication;\n  }\n  /** @internal */\n  get hasMetadata() {\n    return !!this.participantInfo;\n  }\n  /**\n   * @internal\n   */\n  getTrackPublicationBySid(sid) {\n    return this.trackPublications.get(sid);\n  }\n  /** @internal */\n  updateInfo(info) {\n    if (!super.updateInfo(info)) {\n      return false;\n    }\n    // we are getting a list of all available tracks, reconcile in here\n    // and send out events for changes\n    // reconcile track publications, publish events only if metadata is already there\n    // i.e. changes since the local participant has joined\n    const validTracks = new Map();\n    const newTracks = new Map();\n    info.tracks.forEach(ti => {\n      var _a, _b;\n      let publication = this.getTrackPublicationBySid(ti.sid);\n      if (!publication) {\n        // new publication\n        const kind = Track.kindFromProto(ti.type);\n        if (!kind) {\n          return;\n        }\n        publication = new RemoteTrackPublication(kind, ti, (_a = this.signalClient.connectOptions) === null || _a === void 0 ? void 0 : _a.autoSubscribe, {\n          loggerContextCb: () => this.logContext,\n          loggerName: (_b = this.loggerOptions) === null || _b === void 0 ? void 0 : _b.loggerName\n        });\n        publication.updateInfo(ti);\n        newTracks.set(ti.sid, publication);\n        const existingTrackOfSource = Array.from(this.trackPublications.values()).find(publishedTrack => publishedTrack.source === (publication === null || publication === void 0 ? void 0 : publication.source));\n        if (existingTrackOfSource && publication.source !== Track.Source.Unknown) {\n          this.log.debug(\"received a second track publication for \".concat(this.identity, \" with the same source: \").concat(publication.source), Object.assign(Object.assign({}, this.logContext), {\n            oldTrack: getLogContextFromTrack(existingTrackOfSource),\n            newTrack: getLogContextFromTrack(publication)\n          }));\n        }\n        this.addTrackPublication(publication);\n      } else {\n        publication.updateInfo(ti);\n      }\n      validTracks.set(ti.sid, publication);\n    });\n    // detect removed tracks\n    this.trackPublications.forEach(publication => {\n      if (!validTracks.has(publication.trackSid)) {\n        this.log.trace('detected removed track on remote participant, unpublishing', Object.assign(Object.assign({}, this.logContext), getLogContextFromTrack(publication)));\n        this.unpublishTrack(publication.trackSid, true);\n      }\n    });\n    // always emit events for new publications, Room will not forward them unless it's ready\n    newTracks.forEach(publication => {\n      this.emit(ParticipantEvent.TrackPublished, publication);\n    });\n    return true;\n  }\n  /** @internal */\n  unpublishTrack(sid, sendUnpublish) {\n    const publication = this.trackPublications.get(sid);\n    if (!publication) {\n      return;\n    }\n    // also send unsubscribe, if track is actively subscribed\n    const {\n      track\n    } = publication;\n    if (track) {\n      track.stop();\n      publication.setTrack(undefined);\n    }\n    // remove track from maps only after unsubscribed has been fired\n    this.trackPublications.delete(sid);\n    // remove from the right type map\n    switch (publication.kind) {\n      case Track.Kind.Audio:\n        this.audioTrackPublications.delete(sid);\n        break;\n      case Track.Kind.Video:\n        this.videoTrackPublications.delete(sid);\n        break;\n    }\n    if (sendUnpublish) {\n      this.emit(ParticipantEvent.TrackUnpublished, publication);\n    }\n  }\n  /**\n   * @internal\n   */\n  setAudioOutput(output) {\n    return __awaiter(this, void 0, void 0, function* () {\n      this.audioOutput = output;\n      const promises = [];\n      this.audioTrackPublications.forEach(pub => {\n        var _a;\n        if (isAudioTrack(pub.track) && isRemoteTrack(pub.track)) {\n          promises.push(pub.track.setSinkId((_a = output.deviceId) !== null && _a !== void 0 ? _a : 'default'));\n        }\n      });\n      yield Promise.all(promises);\n    });\n  }\n  /** @internal */\n  emit(event) {\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n    this.log.trace('participant event', Object.assign(Object.assign({}, this.logContext), {\n      event,\n      args\n    }));\n    return super.emit(event, ...args);\n  }\n}var ConnectionState;\n(function (ConnectionState) {\n  ConnectionState[\"Disconnected\"] = \"disconnected\";\n  ConnectionState[\"Connecting\"] = \"connecting\";\n  ConnectionState[\"Connected\"] = \"connected\";\n  ConnectionState[\"Reconnecting\"] = \"reconnecting\";\n  ConnectionState[\"SignalReconnecting\"] = \"signalReconnecting\";\n})(ConnectionState || (ConnectionState = {}));\nconst CONNECTION_RECONCILE_FREQUENCY_MS = 4 * 1000;\n/**\n * In LiveKit, a room is the logical grouping for a list of participants.\n * Participants in a room can publish tracks, and subscribe to others' tracks.\n *\n * a Room fires [[RoomEvent | RoomEvents]].\n *\n * @noInheritDoc\n */\nclass Room extends eventsExports.EventEmitter {\n  get hasE2EESetup() {\n    return this.e2eeManager !== undefined;\n  }\n  /**\n   * Creates a new Room, the primary construct for a LiveKit session.\n   * @param options\n   */\n  constructor(options) {\n    var _this;\n    var _a, _b, _c;\n    super();\n    _this = this;\n    this.state = ConnectionState.Disconnected;\n    /**\n     * list of participants that are actively speaking. when this changes\n     * a [[RoomEvent.ActiveSpeakersChanged]] event is fired\n     */\n    this.activeSpeakers = [];\n    /** reflects the sender encryption status of the local participant */\n    this.isE2EEEnabled = false;\n    this.audioEnabled = true;\n    this.isVideoPlaybackBlocked = false;\n    this.log = livekitLogger;\n    this.bufferedEvents = [];\n    this.isResuming = false;\n    this.rpcHandlers = new Map();\n    this.connect = (url, token, opts) => __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (!isBrowserSupported()) {\n        if (isReactNative()) {\n          throw Error(\"WebRTC isn't detected, have you called registerGlobals?\");\n        } else {\n          throw Error(\"LiveKit doesn't seem to be supported on this browser. Try to update your browser and make sure no browser extensions are disabling webRTC.\");\n        }\n      }\n      // In case a disconnect called happened right before the connect call, make sure the disconnect is completed first by awaiting its lock\n      const unlockDisconnect = yield this.disconnectLock.lock();\n      if (this.state === ConnectionState.Connected) {\n        // when the state is reconnecting or connected, this function returns immediately\n        this.log.info(\"already connected to room \".concat(this.name), this.logContext);\n        unlockDisconnect();\n        return Promise.resolve();\n      }\n      if (this.connectFuture) {\n        unlockDisconnect();\n        return this.connectFuture.promise;\n      }\n      this.setAndEmitConnectionState(ConnectionState.Connecting);\n      if (((_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.getServerUrl().toString()) !== ensureTrailingSlash(url)) {\n        this.regionUrl = undefined;\n        this.regionUrlProvider = undefined;\n      }\n      if (isCloud(new URL(url))) {\n        if (this.regionUrlProvider === undefined) {\n          this.regionUrlProvider = new RegionUrlProvider(url, token);\n        } else {\n          this.regionUrlProvider.updateToken(token);\n        }\n        // trigger the first fetch without waiting for a response\n        // if initial connection fails, this will speed up picking regional url\n        // on subsequent runs\n        this.regionUrlProvider.fetchRegionSettings().then(settings => {\n          var _a;\n          (_a = this.regionUrlProvider) === null || _a === void 0 ? void 0 : _a.setServerReportedRegions(settings);\n        }).catch(e => {\n          this.log.warn('could not fetch region settings', Object.assign(Object.assign({}, this.logContext), {\n            error: e\n          }));\n        });\n      }\n      const connectFn = (resolve, reject, regionUrl) => __awaiter(this, void 0, void 0, function* () {\n        var _a, _b;\n        if (this.abortController) {\n          this.abortController.abort();\n        }\n        // explicit creation as local var needed to satisfy TS compiler when passing it to `attemptConnection` further down\n        const abortController = new AbortController();\n        this.abortController = abortController;\n        // at this point the intention to connect has been signalled so we can allow cancelling of the connection via disconnect() again\n        unlockDisconnect === null || unlockDisconnect === void 0 ? void 0 : unlockDisconnect();\n        try {\n          yield BackOffStrategy.getInstance().getBackOffPromise(url);\n          if (abortController.signal.aborted) {\n            throw ConnectionError.cancelled('Connection attempt aborted');\n          }\n          yield this.attemptConnection(regionUrl !== null && regionUrl !== void 0 ? regionUrl : url, token, opts, abortController);\n          this.abortController = undefined;\n          resolve();\n        } catch (error) {\n          if (this.regionUrlProvider && error instanceof ConnectionError && error.reason !== ConnectionErrorReason.Cancelled && error.reason !== ConnectionErrorReason.NotAllowed) {\n            let nextUrl = null;\n            try {\n              this.log.debug('Fetching next region');\n              nextUrl = yield this.regionUrlProvider.getNextBestRegionUrl((_a = this.abortController) === null || _a === void 0 ? void 0 : _a.signal);\n            } catch (regionFetchError) {\n              if (regionFetchError instanceof ConnectionError && (regionFetchError.status === 401 || regionFetchError.reason === ConnectionErrorReason.Cancelled)) {\n                this.handleDisconnect(this.options.stopLocalTrackOnUnpublish);\n                reject(regionFetchError);\n                return;\n              }\n            }\n            if (\n            // making sure we only register failed attempts on things we actually care about\n            [ConnectionErrorReason.InternalError, ConnectionErrorReason.ServerUnreachable, ConnectionErrorReason.Timeout].includes(error.reason)) {\n              this.log.debug('Adding failed connection attempt to back off');\n              BackOffStrategy.getInstance().addFailedConnectionAttempt(url);\n            }\n            if (nextUrl && !((_b = this.abortController) === null || _b === void 0 ? void 0 : _b.signal.aborted)) {\n              this.log.info(\"Initial connection failed with ConnectionError: \".concat(error.message, \". Retrying with another region: \").concat(nextUrl), this.logContext);\n              this.recreateEngine();\n              yield connectFn(resolve, reject, nextUrl);\n            } else {\n              this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, getDisconnectReasonFromConnectionError(error));\n              reject(error);\n            }\n          } else {\n            let disconnectReason = DisconnectReason.UNKNOWN_REASON;\n            if (error instanceof ConnectionError) {\n              disconnectReason = getDisconnectReasonFromConnectionError(error);\n            }\n            this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, disconnectReason);\n            reject(error);\n          }\n        }\n      });\n      const regionUrl = this.regionUrl;\n      this.regionUrl = undefined;\n      this.connectFuture = new Future((resolve, reject) => {\n        connectFn(resolve, reject, regionUrl);\n      }, () => {\n        this.clearConnectionFutures();\n      });\n      return this.connectFuture.promise;\n    });\n    this.connectSignal = (url, token, engine, connectOptions, roomOptions, abortController) => __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      const joinResponse = yield engine.join(url, token, {\n        autoSubscribe: connectOptions.autoSubscribe,\n        adaptiveStream: typeof roomOptions.adaptiveStream === 'object' ? true : roomOptions.adaptiveStream,\n        maxRetries: connectOptions.maxRetries,\n        e2eeEnabled: !!this.e2eeManager,\n        websocketTimeout: connectOptions.websocketTimeout,\n        singlePeerConnection: roomOptions.singlePeerConnection\n      }, abortController.signal);\n      let serverInfo = joinResponse.serverInfo;\n      if (!serverInfo) {\n        serverInfo = {\n          version: joinResponse.serverVersion,\n          region: joinResponse.serverRegion\n        };\n      }\n      this.serverInfo = serverInfo;\n      this.log.debug(\"connected to Livekit Server \".concat(Object.entries(serverInfo).map(_ref => {\n        let [key, value] = _ref;\n        return \"\".concat(key, \": \").concat(value);\n      }).join(', ')), {\n        room: (_a = joinResponse.room) === null || _a === void 0 ? void 0 : _a.name,\n        roomSid: (_b = joinResponse.room) === null || _b === void 0 ? void 0 : _b.sid,\n        identity: (_c = joinResponse.participant) === null || _c === void 0 ? void 0 : _c.identity\n      });\n      if (!serverInfo.version) {\n        throw new UnsupportedServer('unknown server version');\n      }\n      if (serverInfo.version === '0.15.1' && this.options.dynacast) {\n        this.log.debug('disabling dynacast due to server version', this.logContext);\n        // dynacast has a bug in 0.15.1, so we cannot use it then\n        roomOptions.dynacast = false;\n      }\n      return joinResponse;\n    });\n    this.applyJoinResponse = joinResponse => {\n      const pi = joinResponse.participant;\n      this.localParticipant.sid = pi.sid;\n      this.localParticipant.identity = pi.identity;\n      this.localParticipant.setEnabledPublishCodecs(joinResponse.enabledPublishCodecs);\n      if (this.e2eeManager) {\n        try {\n          this.e2eeManager.setSifTrailer(joinResponse.sifTrailer);\n        } catch (e) {\n          this.log.error(e instanceof Error ? e.message : 'Could not set SifTrailer', Object.assign(Object.assign({}, this.logContext), {\n            error: e\n          }));\n        }\n      }\n      // populate remote participants, these should not trigger new events\n      this.handleParticipantUpdates([pi, ...joinResponse.otherParticipants]);\n      if (joinResponse.room) {\n        this.handleRoomUpdate(joinResponse.room);\n      }\n    };\n    this.attemptConnection = (url, token, opts, abortController) => __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      if (this.state === ConnectionState.Reconnecting || this.isResuming || ((_a = this.engine) === null || _a === void 0 ? void 0 : _a.pendingReconnect)) {\n        this.log.info('Reconnection attempt replaced by new connection attempt', this.logContext);\n        // make sure we close and recreate the existing engine in order to get rid of any potentially ongoing reconnection attempts\n        this.recreateEngine();\n      } else {\n        // create engine if previously disconnected\n        this.maybeCreateEngine();\n      }\n      if ((_b = this.regionUrlProvider) === null || _b === void 0 ? void 0 : _b.isCloud()) {\n        this.engine.setRegionUrlProvider(this.regionUrlProvider);\n      }\n      this.acquireAudioContext();\n      this.connOptions = Object.assign(Object.assign({}, roomConnectOptionDefaults), opts);\n      if (this.connOptions.rtcConfig) {\n        this.engine.rtcConfig = this.connOptions.rtcConfig;\n      }\n      if (this.connOptions.peerConnectionTimeout) {\n        this.engine.peerConnectionTimeout = this.connOptions.peerConnectionTimeout;\n      }\n      try {\n        const joinResponse = yield this.connectSignal(url, token, this.engine, this.connOptions, this.options, abortController);\n        this.applyJoinResponse(joinResponse);\n        // forward metadata changed for the local participant\n        this.setupLocalParticipantEvents();\n        this.emit(RoomEvent.SignalConnected);\n      } catch (err) {\n        yield this.engine.close();\n        this.recreateEngine();\n        const resultingError = abortController.signal.aborted ? ConnectionError.cancelled('Signal connection aborted') : ConnectionError.serverUnreachable('could not establish signal connection');\n        if (err instanceof Error) {\n          resultingError.message = \"\".concat(resultingError.message, \": \").concat(err.message);\n        }\n        if (err instanceof ConnectionError) {\n          resultingError.reason = err.reason;\n          resultingError.status = err.status;\n        }\n        this.log.debug(\"error trying to establish signal connection\", Object.assign(Object.assign({}, this.logContext), {\n          error: err\n        }));\n        throw resultingError;\n      }\n      if (abortController.signal.aborted) {\n        yield this.engine.close();\n        this.recreateEngine();\n        throw ConnectionError.cancelled(\"Connection attempt aborted\");\n      }\n      try {\n        yield this.engine.waitForPCInitialConnection(this.connOptions.peerConnectionTimeout, abortController);\n      } catch (e) {\n        yield this.engine.close();\n        this.recreateEngine();\n        throw e;\n      }\n      // also hook unload event\n      if (isWeb() && this.options.disconnectOnPageLeave) {\n        // capturing both 'pagehide' and 'beforeunload' to capture broadest set of browser behaviors\n        window.addEventListener('pagehide', this.onPageLeave);\n        window.addEventListener('beforeunload', this.onPageLeave);\n      }\n      if (isWeb()) {\n        window.addEventListener('freeze', this.onPageLeave);\n      }\n      this.setAndEmitConnectionState(ConnectionState.Connected);\n      this.emit(RoomEvent.Connected);\n      BackOffStrategy.getInstance().resetFailedConnectionAttempts(url);\n      this.registerConnectionReconcile();\n      // Notify region provider about successful connection\n      if (this.regionUrlProvider) {\n        this.regionUrlProvider.notifyConnected();\n      }\n    });\n    /**\n     * disconnects the room, emits [[RoomEvent.Disconnected]]\n     */\n    this.disconnect = function () {\n      for (var _len = arguments.length, args_1 = new Array(_len), _key = 0; _key < _len; _key++) {\n        args_1[_key] = arguments[_key];\n      }\n      return __awaiter(_this, [...args_1], void 0, function () {\n        var _this2 = this;\n        let stopTracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n        return function* () {\n          var _a, _b, _c;\n          const unlock = yield _this2.disconnectLock.lock();\n          try {\n            if (_this2.state === ConnectionState.Disconnected) {\n              _this2.log.debug('already disconnected', _this2.logContext);\n              return;\n            }\n            _this2.log.info('disconnect from room', Object.assign({}, _this2.logContext));\n            if (_this2.state === ConnectionState.Connecting || _this2.state === ConnectionState.Reconnecting || _this2.isResuming) {\n              // try aborting pending connection attempt\n              const msg = 'Abort connection attempt due to user initiated disconnect';\n              _this2.log.warn(msg, _this2.logContext);\n              (_a = _this2.abortController) === null || _a === void 0 ? void 0 : _a.abort(msg);\n              // in case the abort controller didn't manage to cancel the connection attempt, reject the connect promise explicitly\n              (_c = (_b = _this2.connectFuture) === null || _b === void 0 ? void 0 : _b.reject) === null || _c === void 0 ? void 0 : _c.call(_b, ConnectionError.cancelled('Client initiated disconnect'));\n              _this2.connectFuture = undefined;\n            }\n            // close engine (also closes client)\n            if (_this2.engine) {\n              // send leave\n              if (!_this2.engine.client.isDisconnected) {\n                yield _this2.engine.client.sendLeave();\n              }\n              yield _this2.engine.close();\n            }\n            _this2.handleDisconnect(stopTracks, DisconnectReason.CLIENT_INITIATED);\n            /* @ts-ignore */\n            _this2.engine = undefined;\n          } finally {\n            unlock();\n          }\n        }();\n      });\n    };\n    this.onPageLeave = () => __awaiter(this, void 0, void 0, function* () {\n      this.log.info('Page leave detected, disconnecting', this.logContext);\n      yield this.disconnect();\n    });\n    /**\n     * Browsers have different policies regarding audio playback. Most requiring\n     * some form of user interaction (click/tap/etc).\n     * In those cases, audio will be silent until a click/tap triggering one of the following\n     * - `startAudio`\n     * - `getUserMedia`\n     */\n    this.startAudio = () => __awaiter(this, void 0, void 0, function* () {\n      const elements = [];\n      const browser = getBrowser();\n      if (browser && browser.os === 'iOS') {\n        /**\n         * iOS blocks audio element playback if\n         * - user is not publishing audio themselves and\n         * - no other audio source is playing\n         *\n         * as a workaround, we create an audio element with an empty track, so that\n         * silent audio is always playing\n         */\n        const audioId = 'livekit-dummy-audio-el';\n        let dummyAudioEl = document.getElementById(audioId);\n        if (!dummyAudioEl) {\n          dummyAudioEl = document.createElement('audio');\n          dummyAudioEl.id = audioId;\n          dummyAudioEl.autoplay = true;\n          dummyAudioEl.hidden = true;\n          const track = getEmptyAudioStreamTrack();\n          track.enabled = true;\n          const stream = new MediaStream([track]);\n          dummyAudioEl.srcObject = stream;\n          document.addEventListener('visibilitychange', () => {\n            if (!dummyAudioEl) {\n              return;\n            }\n            // set the srcObject to null on page hide in order to prevent lock screen controls to show up for it\n            dummyAudioEl.srcObject = document.hidden ? null : stream;\n            if (!document.hidden) {\n              this.log.debug('page visible again, triggering startAudio to resume playback and update playback status', this.logContext);\n              this.startAudio();\n            }\n          });\n          document.body.append(dummyAudioEl);\n          this.once(RoomEvent.Disconnected, () => {\n            dummyAudioEl === null || dummyAudioEl === void 0 ? void 0 : dummyAudioEl.remove();\n            dummyAudioEl = null;\n          });\n        }\n        elements.push(dummyAudioEl);\n      }\n      this.remoteParticipants.forEach(p => {\n        p.audioTrackPublications.forEach(t => {\n          if (t.track) {\n            t.track.attachedElements.forEach(e => {\n              elements.push(e);\n            });\n          }\n        });\n      });\n      try {\n        yield Promise.all([this.acquireAudioContext(), ...elements.map(e => {\n          e.muted = false;\n          return e.play();\n        })]);\n        this.handleAudioPlaybackStarted();\n      } catch (err) {\n        this.handleAudioPlaybackFailed(err);\n        throw err;\n      }\n    });\n    this.startVideo = () => __awaiter(this, void 0, void 0, function* () {\n      const elements = [];\n      for (const p of this.remoteParticipants.values()) {\n        p.videoTrackPublications.forEach(tr => {\n          var _a;\n          (_a = tr.track) === null || _a === void 0 ? void 0 : _a.attachedElements.forEach(el => {\n            if (!elements.includes(el)) {\n              elements.push(el);\n            }\n          });\n        });\n      }\n      yield Promise.all(elements.map(el => el.play())).then(() => {\n        this.handleVideoPlaybackStarted();\n      }).catch(e => {\n        if (e.name === 'NotAllowedError') {\n          this.handleVideoPlaybackFailed();\n        } else {\n          this.log.warn('Resuming video playback failed, make sure you call `startVideo` directly in a user gesture handler', this.logContext);\n        }\n      });\n    });\n    this.handleRestarting = () => {\n      this.clearConnectionReconcile();\n      // in case we went from resuming to full-reconnect, make sure to reflect it on the isResuming flag\n      this.isResuming = false;\n      // also unwind existing participants & existing subscriptions\n      for (const p of this.remoteParticipants.values()) {\n        this.handleParticipantDisconnected(p.identity, p);\n      }\n      if (this.setAndEmitConnectionState(ConnectionState.Reconnecting)) {\n        this.emit(RoomEvent.Reconnecting);\n      }\n    };\n    this.handleSignalRestarted = joinResponse => __awaiter(this, void 0, void 0, function* () {\n      this.log.debug(\"signal reconnected to server, region \".concat(joinResponse.serverRegion), Object.assign(Object.assign({}, this.logContext), {\n        region: joinResponse.serverRegion\n      }));\n      this.bufferedEvents = [];\n      this.applyJoinResponse(joinResponse);\n      try {\n        // unpublish & republish tracks\n        yield this.localParticipant.republishAllTracks(undefined, true);\n      } catch (error) {\n        this.log.error('error trying to re-publish tracks after reconnection', Object.assign(Object.assign({}, this.logContext), {\n          error\n        }));\n      }\n      try {\n        yield this.engine.waitForRestarted();\n        this.log.debug(\"fully reconnected to server\", Object.assign(Object.assign({}, this.logContext), {\n          region: joinResponse.serverRegion\n        }));\n      } catch (_a) {\n        // reconnection failed, handleDisconnect is being invoked already, just return here\n        return;\n      }\n      this.setAndEmitConnectionState(ConnectionState.Connected);\n      this.emit(RoomEvent.Reconnected);\n      this.registerConnectionReconcile();\n      this.emitBufferedEvents();\n    });\n    this.handleParticipantUpdates = participantInfos => {\n      // handle changes to participant state, and send events\n      participantInfos.forEach(info => {\n        var _a;\n        if (info.identity === this.localParticipant.identity) {\n          this.localParticipant.updateInfo(info);\n          return;\n        }\n        // LiveKit server doesn't send identity info prior to version 1.5.2 in disconnect updates\n        // so we try to map an empty identity to an already known sID manually\n        if (info.identity === '') {\n          info.identity = (_a = this.sidToIdentity.get(info.sid)) !== null && _a !== void 0 ? _a : '';\n        }\n        let remoteParticipant = this.remoteParticipants.get(info.identity);\n        // when it's disconnected, send updates\n        if (info.state === ParticipantInfo_State.DISCONNECTED) {\n          this.handleParticipantDisconnected(info.identity, remoteParticipant);\n        } else {\n          // create participant if doesn't exist\n          remoteParticipant = this.getOrCreateParticipant(info.identity, info);\n        }\n      });\n    };\n    // updates are sent only when there's a change to speaker ordering\n    this.handleActiveSpeakersUpdate = speakers => {\n      const activeSpeakers = [];\n      const seenSids = {};\n      speakers.forEach(speaker => {\n        seenSids[speaker.sid] = true;\n        if (speaker.sid === this.localParticipant.sid) {\n          this.localParticipant.audioLevel = speaker.level;\n          this.localParticipant.setIsSpeaking(true);\n          activeSpeakers.push(this.localParticipant);\n        } else {\n          const p = this.getRemoteParticipantBySid(speaker.sid);\n          if (p) {\n            p.audioLevel = speaker.level;\n            p.setIsSpeaking(true);\n            activeSpeakers.push(p);\n          }\n        }\n      });\n      if (!seenSids[this.localParticipant.sid]) {\n        this.localParticipant.audioLevel = 0;\n        this.localParticipant.setIsSpeaking(false);\n      }\n      this.remoteParticipants.forEach(p => {\n        if (!seenSids[p.sid]) {\n          p.audioLevel = 0;\n          p.setIsSpeaking(false);\n        }\n      });\n      this.activeSpeakers = activeSpeakers;\n      this.emitWhenConnected(RoomEvent.ActiveSpeakersChanged, activeSpeakers);\n    };\n    // process list of changed speakers\n    this.handleSpeakersChanged = speakerUpdates => {\n      const lastSpeakers = new Map();\n      this.activeSpeakers.forEach(p => {\n        const remoteParticipant = this.remoteParticipants.get(p.identity);\n        if (remoteParticipant && remoteParticipant.sid !== p.sid) {\n          return;\n        }\n        lastSpeakers.set(p.sid, p);\n      });\n      speakerUpdates.forEach(speaker => {\n        let p = this.getRemoteParticipantBySid(speaker.sid);\n        if (speaker.sid === this.localParticipant.sid) {\n          p = this.localParticipant;\n        }\n        if (!p) {\n          return;\n        }\n        p.audioLevel = speaker.level;\n        p.setIsSpeaking(speaker.active);\n        if (speaker.active) {\n          lastSpeakers.set(speaker.sid, p);\n        } else {\n          lastSpeakers.delete(speaker.sid);\n        }\n      });\n      const activeSpeakers = Array.from(lastSpeakers.values());\n      activeSpeakers.sort((a, b) => b.audioLevel - a.audioLevel);\n      this.activeSpeakers = activeSpeakers;\n      this.emitWhenConnected(RoomEvent.ActiveSpeakersChanged, activeSpeakers);\n    };\n    this.handleStreamStateUpdate = streamStateUpdate => {\n      streamStateUpdate.streamStates.forEach(streamState => {\n        const participant = this.getRemoteParticipantBySid(streamState.participantSid);\n        if (!participant) {\n          return;\n        }\n        const pub = participant.getTrackPublicationBySid(streamState.trackSid);\n        if (!pub || !pub.track) {\n          return;\n        }\n        const newStreamState = Track.streamStateFromProto(streamState.state);\n        pub.track.setStreamState(newStreamState);\n        if (newStreamState !== pub.track.streamState) {\n          participant.emit(ParticipantEvent.TrackStreamStateChanged, pub, pub.track.streamState);\n          this.emitWhenConnected(RoomEvent.TrackStreamStateChanged, pub, pub.track.streamState, participant);\n        }\n      });\n    };\n    this.handleSubscriptionPermissionUpdate = update => {\n      const participant = this.getRemoteParticipantBySid(update.participantSid);\n      if (!participant) {\n        return;\n      }\n      const pub = participant.getTrackPublicationBySid(update.trackSid);\n      if (!pub) {\n        return;\n      }\n      pub.setAllowed(update.allowed);\n    };\n    this.handleSubscriptionError = update => {\n      const participant = Array.from(this.remoteParticipants.values()).find(p => p.trackPublications.has(update.trackSid));\n      if (!participant) {\n        return;\n      }\n      const pub = participant.getTrackPublicationBySid(update.trackSid);\n      if (!pub) {\n        return;\n      }\n      pub.setSubscriptionError(update.err);\n    };\n    this.handleDataPacket = (packet, encryptionType) => {\n      // find the participant\n      const participant = this.remoteParticipants.get(packet.participantIdentity);\n      if (packet.value.case === 'user') {\n        this.handleUserPacket(participant, packet.value.value, packet.kind, encryptionType);\n      } else if (packet.value.case === 'transcription') {\n        this.handleTranscription(participant, packet.value.value);\n      } else if (packet.value.case === 'sipDtmf') {\n        this.handleSipDtmf(participant, packet.value.value);\n      } else if (packet.value.case === 'chatMessage') {\n        this.handleChatMessage(participant, packet.value.value);\n      } else if (packet.value.case === 'metrics') {\n        this.handleMetrics(packet.value.value, participant);\n      } else if (packet.value.case === 'streamHeader' || packet.value.case === 'streamChunk' || packet.value.case === 'streamTrailer') {\n        this.handleDataStream(packet, encryptionType);\n      } else if (packet.value.case === 'rpcRequest') {\n        const rpc = packet.value.value;\n        this.handleIncomingRpcRequest(packet.participantIdentity, rpc.id, rpc.method, rpc.payload, rpc.responseTimeoutMs, rpc.version);\n      }\n    };\n    this.handleUserPacket = (participant, userPacket, kind, encryptionType) => {\n      this.emit(RoomEvent.DataReceived, userPacket.payload, participant, kind, userPacket.topic, encryptionType);\n      // also emit on the participant\n      participant === null || participant === void 0 ? void 0 : participant.emit(ParticipantEvent.DataReceived, userPacket.payload, kind, encryptionType);\n    };\n    this.handleSipDtmf = (participant, dtmf) => {\n      this.emit(RoomEvent.SipDTMFReceived, dtmf, participant);\n      // also emit on the participant\n      participant === null || participant === void 0 ? void 0 : participant.emit(ParticipantEvent.SipDTMFReceived, dtmf);\n    };\n    this.handleTranscription = (_remoteParticipant, transcription) => {\n      // find the participant\n      const participant = transcription.transcribedParticipantIdentity === this.localParticipant.identity ? this.localParticipant : this.getParticipantByIdentity(transcription.transcribedParticipantIdentity);\n      const publication = participant === null || participant === void 0 ? void 0 : participant.trackPublications.get(transcription.trackId);\n      const segments = extractTranscriptionSegments(transcription, this.transcriptionReceivedTimes);\n      publication === null || publication === void 0 ? void 0 : publication.emit(TrackEvent.TranscriptionReceived, segments);\n      participant === null || participant === void 0 ? void 0 : participant.emit(ParticipantEvent.TranscriptionReceived, segments, publication);\n      this.emit(RoomEvent.TranscriptionReceived, segments, participant, publication);\n    };\n    this.handleChatMessage = (participant, chatMessage) => {\n      const msg = extractChatMessage(chatMessage);\n      this.emit(RoomEvent.ChatMessage, msg, participant);\n    };\n    this.handleMetrics = (metrics, participant) => {\n      this.emit(RoomEvent.MetricsReceived, metrics, participant);\n    };\n    this.handleDataStream = (packet, encryptionType) => {\n      this.incomingDataStreamManager.handleDataStreamPacket(packet, encryptionType);\n    };\n    this.bufferedSegments = new Map();\n    this.handleAudioPlaybackStarted = () => {\n      if (this.canPlaybackAudio) {\n        return;\n      }\n      this.audioEnabled = true;\n      this.emit(RoomEvent.AudioPlaybackStatusChanged, true);\n    };\n    this.handleAudioPlaybackFailed = e => {\n      this.log.warn('could not playback audio', Object.assign(Object.assign({}, this.logContext), {\n        error: e\n      }));\n      if (!this.canPlaybackAudio) {\n        return;\n      }\n      this.audioEnabled = false;\n      this.emit(RoomEvent.AudioPlaybackStatusChanged, false);\n    };\n    this.handleVideoPlaybackStarted = () => {\n      if (this.isVideoPlaybackBlocked) {\n        this.isVideoPlaybackBlocked = false;\n        this.emit(RoomEvent.VideoPlaybackStatusChanged, true);\n      }\n    };\n    this.handleVideoPlaybackFailed = () => {\n      if (!this.isVideoPlaybackBlocked) {\n        this.isVideoPlaybackBlocked = true;\n        this.emit(RoomEvent.VideoPlaybackStatusChanged, false);\n      }\n    };\n    this.handleDeviceChange = () => __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      if (((_a = getBrowser()) === null || _a === void 0 ? void 0 : _a.os) !== 'iOS') {\n        // default devices are non deterministic on iOS, so we don't attempt to select them here\n        yield this.selectDefaultDevices();\n      }\n      this.emit(RoomEvent.MediaDevicesChanged);\n    });\n    this.handleRoomUpdate = room => {\n      const oldRoom = this.roomInfo;\n      this.roomInfo = room;\n      if (oldRoom && oldRoom.metadata !== room.metadata) {\n        this.emitWhenConnected(RoomEvent.RoomMetadataChanged, room.metadata);\n      }\n      if ((oldRoom === null || oldRoom === void 0 ? void 0 : oldRoom.activeRecording) !== room.activeRecording) {\n        this.emitWhenConnected(RoomEvent.RecordingStatusChanged, room.activeRecording);\n      }\n    };\n    this.handleConnectionQualityUpdate = update => {\n      update.updates.forEach(info => {\n        if (info.participantSid === this.localParticipant.sid) {\n          this.localParticipant.setConnectionQuality(info.quality);\n          return;\n        }\n        const participant = this.getRemoteParticipantBySid(info.participantSid);\n        if (participant) {\n          participant.setConnectionQuality(info.quality);\n        }\n      });\n    };\n    this.onLocalParticipantMetadataChanged = metadata => {\n      this.emit(RoomEvent.ParticipantMetadataChanged, metadata, this.localParticipant);\n    };\n    this.onLocalParticipantNameChanged = name => {\n      this.emit(RoomEvent.ParticipantNameChanged, name, this.localParticipant);\n    };\n    this.onLocalAttributesChanged = changedAttributes => {\n      this.emit(RoomEvent.ParticipantAttributesChanged, changedAttributes, this.localParticipant);\n    };\n    this.onLocalTrackMuted = pub => {\n      this.emit(RoomEvent.TrackMuted, pub, this.localParticipant);\n    };\n    this.onLocalTrackUnmuted = pub => {\n      this.emit(RoomEvent.TrackUnmuted, pub, this.localParticipant);\n    };\n    this.onTrackProcessorUpdate = processor => {\n      var _a;\n      (_a = processor === null || processor === void 0 ? void 0 : processor.onPublish) === null || _a === void 0 ? void 0 : _a.call(processor, this);\n    };\n    this.onLocalTrackPublished = pub => __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c, _d, _e, _f;\n      (_a = pub.track) === null || _a === void 0 ? void 0 : _a.on(TrackEvent.TrackProcessorUpdate, this.onTrackProcessorUpdate);\n      (_b = pub.track) === null || _b === void 0 ? void 0 : _b.on(TrackEvent.Restarted, this.onLocalTrackRestarted);\n      (_e = (_d = (_c = pub.track) === null || _c === void 0 ? void 0 : _c.getProcessor()) === null || _d === void 0 ? void 0 : _d.onPublish) === null || _e === void 0 ? void 0 : _e.call(_d, this);\n      this.emit(RoomEvent.LocalTrackPublished, pub, this.localParticipant);\n      if (isLocalAudioTrack(pub.track)) {\n        const trackIsSilent = yield pub.track.checkForSilence();\n        if (trackIsSilent) {\n          this.emit(RoomEvent.LocalAudioSilenceDetected, pub);\n        }\n      }\n      const deviceId = yield (_f = pub.track) === null || _f === void 0 ? void 0 : _f.getDeviceId(false);\n      const deviceKind = sourceToKind(pub.source);\n      if (deviceKind && deviceId && deviceId !== this.localParticipant.activeDeviceMap.get(deviceKind)) {\n        this.localParticipant.activeDeviceMap.set(deviceKind, deviceId);\n        this.emit(RoomEvent.ActiveDeviceChanged, deviceKind, deviceId);\n      }\n    });\n    this.onLocalTrackUnpublished = pub => {\n      var _a, _b;\n      (_a = pub.track) === null || _a === void 0 ? void 0 : _a.off(TrackEvent.TrackProcessorUpdate, this.onTrackProcessorUpdate);\n      (_b = pub.track) === null || _b === void 0 ? void 0 : _b.off(TrackEvent.Restarted, this.onLocalTrackRestarted);\n      this.emit(RoomEvent.LocalTrackUnpublished, pub, this.localParticipant);\n    };\n    this.onLocalTrackRestarted = track => __awaiter(this, void 0, void 0, function* () {\n      const deviceId = yield track.getDeviceId(false);\n      const deviceKind = sourceToKind(track.source);\n      if (deviceKind && deviceId && deviceId !== this.localParticipant.activeDeviceMap.get(deviceKind)) {\n        this.log.debug(\"local track restarted, setting \".concat(deviceKind, \" \").concat(deviceId, \" active\"), this.logContext);\n        this.localParticipant.activeDeviceMap.set(deviceKind, deviceId);\n        this.emit(RoomEvent.ActiveDeviceChanged, deviceKind, deviceId);\n      }\n    });\n    this.onLocalConnectionQualityChanged = quality => {\n      this.emit(RoomEvent.ConnectionQualityChanged, quality, this.localParticipant);\n    };\n    this.onMediaDevicesError = (e, kind) => {\n      this.emit(RoomEvent.MediaDevicesError, e, kind);\n    };\n    this.onLocalParticipantPermissionsChanged = prevPermissions => {\n      this.emit(RoomEvent.ParticipantPermissionsChanged, prevPermissions, this.localParticipant);\n    };\n    this.onLocalChatMessageSent = msg => {\n      this.emit(RoomEvent.ChatMessage, msg, this.localParticipant);\n    };\n    this.setMaxListeners(100);\n    this.remoteParticipants = new Map();\n    this.sidToIdentity = new Map();\n    this.options = Object.assign(Object.assign({}, roomOptionDefaults), options);\n    this.log = getLogger((_a = this.options.loggerName) !== null && _a !== void 0 ? _a : LoggerNames.Room);\n    this.transcriptionReceivedTimes = new Map();\n    this.options.audioCaptureDefaults = Object.assign(Object.assign({}, audioDefaults), options === null || options === void 0 ? void 0 : options.audioCaptureDefaults);\n    this.options.videoCaptureDefaults = Object.assign(Object.assign({}, videoDefaults), options === null || options === void 0 ? void 0 : options.videoCaptureDefaults);\n    this.options.publishDefaults = Object.assign(Object.assign({}, publishDefaults), options === null || options === void 0 ? void 0 : options.publishDefaults);\n    this.maybeCreateEngine();\n    this.incomingDataStreamManager = new IncomingDataStreamManager();\n    this.outgoingDataStreamManager = new OutgoingDataStreamManager(this.engine, this.log);\n    this.disconnectLock = new _();\n    this.localParticipant = new LocalParticipant('', '', this.engine, this.options, this.rpcHandlers, this.outgoingDataStreamManager);\n    if (this.options.e2ee || this.options.encryption) {\n      this.setupE2EE();\n    }\n    this.engine.e2eeManager = this.e2eeManager;\n    if (this.options.videoCaptureDefaults.deviceId) {\n      this.localParticipant.activeDeviceMap.set('videoinput', unwrapConstraint(this.options.videoCaptureDefaults.deviceId));\n    }\n    if (this.options.audioCaptureDefaults.deviceId) {\n      this.localParticipant.activeDeviceMap.set('audioinput', unwrapConstraint(this.options.audioCaptureDefaults.deviceId));\n    }\n    if ((_b = this.options.audioOutput) === null || _b === void 0 ? void 0 : _b.deviceId) {\n      this.switchActiveDevice('audiooutput', unwrapConstraint(this.options.audioOutput.deviceId)).catch(e => this.log.warn(\"Could not set audio output: \".concat(e.message), this.logContext));\n    }\n    if (isWeb()) {\n      const abortController = new AbortController();\n      // in order to catch device changes prior to room connection we need to register the event in the constructor\n      (_c = navigator.mediaDevices) === null || _c === void 0 ? void 0 : _c.addEventListener('devicechange', this.handleDeviceChange, {\n        signal: abortController.signal\n      });\n      if (Room.cleanupRegistry) {\n        Room.cleanupRegistry.register(this, () => {\n          abortController.abort();\n        });\n      }\n    }\n  }\n  registerTextStreamHandler(topic, callback) {\n    return this.incomingDataStreamManager.registerTextStreamHandler(topic, callback);\n  }\n  unregisterTextStreamHandler(topic) {\n    return this.incomingDataStreamManager.unregisterTextStreamHandler(topic);\n  }\n  registerByteStreamHandler(topic, callback) {\n    return this.incomingDataStreamManager.registerByteStreamHandler(topic, callback);\n  }\n  unregisterByteStreamHandler(topic) {\n    return this.incomingDataStreamManager.unregisterByteStreamHandler(topic);\n  }\n  /**\n   * Establishes the participant as a receiver for calls of the specified RPC method.\n   *\n   * @param method - The name of the indicated RPC method\n   * @param handler - Will be invoked when an RPC request for this method is received\n   * @returns A promise that resolves when the method is successfully registered\n   * @throws {Error} If a handler for this method is already registered (must call unregisterRpcMethod first)\n   *\n   * @example\n   * ```typescript\n   * room.localParticipant?.registerRpcMethod(\n   *   'greet',\n   *   async (data: RpcInvocationData) => {\n   *     console.log(`Received greeting from ${data.callerIdentity}: ${data.payload}`);\n   *     return `Hello, ${data.callerIdentity}!`;\n   *   }\n   * );\n   * ```\n   *\n   * The handler should return a Promise that resolves to a string.\n   * If unable to respond within `responseTimeout`, the request will result in an error on the caller's side.\n   *\n   * You may throw errors of type `RpcError` with a string `message` in the handler,\n   * and they will be received on the caller's side with the message intact.\n   * Other errors thrown in your handler will not be transmitted as-is, and will instead arrive to the caller as `1500` (\"Application Error\").\n   */\n  registerRpcMethod(method, handler) {\n    if (this.rpcHandlers.has(method)) {\n      throw Error(\"RPC handler already registered for method \".concat(method, \", unregisterRpcMethod before trying to register again\"));\n    }\n    this.rpcHandlers.set(method, handler);\n  }\n  /**\n   * Unregisters a previously registered RPC method.\n   *\n   * @param method - The name of the RPC method to unregister\n   */\n  unregisterRpcMethod(method) {\n    this.rpcHandlers.delete(method);\n  }\n  /**\n   * @experimental\n   */\n  setE2EEEnabled(enabled) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.e2eeManager) {\n        yield Promise.all([this.localParticipant.setE2EEEnabled(enabled)]);\n        if (this.localParticipant.identity !== '') {\n          this.e2eeManager.setParticipantCryptorEnabled(enabled, this.localParticipant.identity);\n        }\n      } else {\n        throw Error('e2ee not configured, please set e2ee settings within the room options');\n      }\n    });\n  }\n  setupE2EE() {\n    // when encryption is enabled via `options.encryption`, we enable data channel encryption\n    var _a;\n    const dcEncryptionEnabled = !!this.options.encryption;\n    const e2eeOptions = this.options.encryption || this.options.e2ee;\n    if (e2eeOptions) {\n      if ('e2eeManager' in e2eeOptions) {\n        this.e2eeManager = e2eeOptions.e2eeManager;\n        this.e2eeManager.isDataChannelEncryptionEnabled = dcEncryptionEnabled;\n      } else {\n        this.e2eeManager = new E2EEManager(e2eeOptions, dcEncryptionEnabled);\n      }\n      this.e2eeManager.on(EncryptionEvent.ParticipantEncryptionStatusChanged, (enabled, participant) => {\n        if (isLocalParticipant(participant)) {\n          this.isE2EEEnabled = enabled;\n        }\n        this.emit(RoomEvent.ParticipantEncryptionStatusChanged, enabled, participant);\n      });\n      this.e2eeManager.on(EncryptionEvent.EncryptionError, (error, participantIdentity) => {\n        const participant = participantIdentity ? this.getParticipantByIdentity(participantIdentity) : undefined;\n        this.emit(RoomEvent.EncryptionError, error, participant);\n      });\n      (_a = this.e2eeManager) === null || _a === void 0 ? void 0 : _a.setup(this);\n    }\n  }\n  get logContext() {\n    var _a;\n    return {\n      room: this.name,\n      roomID: (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.sid,\n      participant: this.localParticipant.identity,\n      pID: this.localParticipant.sid\n    };\n  }\n  /**\n   * if the current room has a participant with `recorder: true` in its JWT grant\n   **/\n  get isRecording() {\n    var _a, _b;\n    return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.activeRecording) !== null && _b !== void 0 ? _b : false;\n  }\n  /**\n   * server assigned unique room id.\n   * returns once a sid has been issued by the server.\n   */\n  getSid() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.state === ConnectionState.Disconnected) {\n        return '';\n      }\n      if (this.roomInfo && this.roomInfo.sid !== '') {\n        return this.roomInfo.sid;\n      }\n      return new Promise((resolve, reject) => {\n        const handleRoomUpdate = roomInfo => {\n          if (roomInfo.sid !== '') {\n            this.engine.off(EngineEvent.RoomUpdate, handleRoomUpdate);\n            resolve(roomInfo.sid);\n          }\n        };\n        this.engine.on(EngineEvent.RoomUpdate, handleRoomUpdate);\n        this.once(RoomEvent.Disconnected, () => {\n          this.engine.off(EngineEvent.RoomUpdate, handleRoomUpdate);\n          reject('Room disconnected before room server id was available');\n        });\n      });\n    });\n  }\n  /** user assigned name, derived from JWT token */\n  get name() {\n    var _a, _b;\n    return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '';\n  }\n  /** room metadata */\n  get metadata() {\n    var _a;\n    return (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.metadata;\n  }\n  get numParticipants() {\n    var _a, _b;\n    return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.numParticipants) !== null && _b !== void 0 ? _b : 0;\n  }\n  get numPublishers() {\n    var _a, _b;\n    return (_b = (_a = this.roomInfo) === null || _a === void 0 ? void 0 : _a.numPublishers) !== null && _b !== void 0 ? _b : 0;\n  }\n  maybeCreateEngine() {\n    if (this.engine && !this.engine.isClosed) {\n      return;\n    }\n    this.engine = new RTCEngine(this.options);\n    this.engine.e2eeManager = this.e2eeManager;\n    this.engine.on(EngineEvent.ParticipantUpdate, this.handleParticipantUpdates).on(EngineEvent.RoomUpdate, this.handleRoomUpdate).on(EngineEvent.SpeakersChanged, this.handleSpeakersChanged).on(EngineEvent.StreamStateChanged, this.handleStreamStateUpdate).on(EngineEvent.ConnectionQualityUpdate, this.handleConnectionQualityUpdate).on(EngineEvent.SubscriptionError, this.handleSubscriptionError).on(EngineEvent.SubscriptionPermissionUpdate, this.handleSubscriptionPermissionUpdate).on(EngineEvent.MediaTrackAdded, (mediaTrack, stream, receiver) => {\n      this.onTrackAdded(mediaTrack, stream, receiver);\n    }).on(EngineEvent.Disconnected, reason => {\n      this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, reason);\n    }).on(EngineEvent.ActiveSpeakersUpdate, this.handleActiveSpeakersUpdate).on(EngineEvent.DataPacketReceived, this.handleDataPacket).on(EngineEvent.Resuming, () => {\n      this.clearConnectionReconcile();\n      this.isResuming = true;\n      this.log.info('Resuming signal connection', this.logContext);\n      if (this.setAndEmitConnectionState(ConnectionState.SignalReconnecting)) {\n        this.emit(RoomEvent.SignalReconnecting);\n      }\n    }).on(EngineEvent.Resumed, () => {\n      this.registerConnectionReconcile();\n      this.isResuming = false;\n      this.log.info('Resumed signal connection', this.logContext);\n      this.updateSubscriptions();\n      this.emitBufferedEvents();\n      if (this.setAndEmitConnectionState(ConnectionState.Connected)) {\n        this.emit(RoomEvent.Reconnected);\n      }\n    }).on(EngineEvent.SignalResumed, () => {\n      this.bufferedEvents = [];\n      if (this.state === ConnectionState.Reconnecting || this.isResuming) {\n        this.sendSyncState();\n      }\n    }).on(EngineEvent.Restarting, this.handleRestarting).on(EngineEvent.SignalRestarted, this.handleSignalRestarted).on(EngineEvent.Offline, () => {\n      if (this.setAndEmitConnectionState(ConnectionState.Reconnecting)) {\n        this.emit(RoomEvent.Reconnecting);\n      }\n    }).on(EngineEvent.DCBufferStatusChanged, (status, kind) => {\n      this.emit(RoomEvent.DCBufferStatusChanged, status, kind);\n    }).on(EngineEvent.LocalTrackSubscribed, subscribedSid => {\n      const trackPublication = this.localParticipant.getTrackPublications().find(_ref2 => {\n        let {\n          trackSid\n        } = _ref2;\n        return trackSid === subscribedSid;\n      });\n      if (!trackPublication) {\n        this.log.warn('could not find local track subscription for subscribed event', this.logContext);\n        return;\n      }\n      this.localParticipant.emit(ParticipantEvent.LocalTrackSubscribed, trackPublication);\n      this.emitWhenConnected(RoomEvent.LocalTrackSubscribed, trackPublication, this.localParticipant);\n    }).on(EngineEvent.RoomMoved, roomMoved => {\n      this.log.debug('room moved', roomMoved);\n      if (roomMoved.room) {\n        this.handleRoomUpdate(roomMoved.room);\n      }\n      this.remoteParticipants.forEach((participant, identity) => {\n        this.handleParticipantDisconnected(identity, participant);\n      });\n      this.emit(RoomEvent.Moved, roomMoved.room.name);\n      if (roomMoved.participant) {\n        this.handleParticipantUpdates([roomMoved.participant, ...roomMoved.otherParticipants]);\n      } else {\n        this.handleParticipantUpdates(roomMoved.otherParticipants);\n      }\n    });\n    if (this.localParticipant) {\n      this.localParticipant.setupEngine(this.engine);\n    }\n    if (this.e2eeManager) {\n      this.e2eeManager.setupEngine(this.engine);\n    }\n    if (this.outgoingDataStreamManager) {\n      this.outgoingDataStreamManager.setupEngine(this.engine);\n    }\n  }\n  /**\n   * getLocalDevices abstracts navigator.mediaDevices.enumerateDevices.\n   * In particular, it requests device permissions by default if needed\n   * and makes sure the returned device does not consist of dummy devices\n   * @param kind\n   * @returns a list of available local devices\n   */\n  static getLocalDevices(kind) {\n    let requestPermissions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;\n    return DeviceManager.getInstance().getDevices(kind, requestPermissions);\n  }\n  /**\n   * prepareConnection should be called as soon as the page is loaded, in order\n   * to speed up the connection attempt. This function will\n   * - perform DNS resolution and pre-warm the DNS cache\n   * - establish TLS connection and cache TLS keys\n   *\n   * With LiveKit Cloud, it will also determine the best edge data center for\n   * the current client to connect to if a token is provided.\n   */\n  prepareConnection(url, token) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.state !== ConnectionState.Disconnected) {\n        return;\n      }\n      this.log.debug(\"prepareConnection to \".concat(url), this.logContext);\n      try {\n        if (isCloud(new URL(url)) && token) {\n          this.regionUrlProvider = new RegionUrlProvider(url, token);\n          const regionUrl = yield this.regionUrlProvider.getNextBestRegionUrl();\n          // we will not replace the regionUrl if an attempt had already started\n          // to avoid overriding regionUrl after a new connection attempt had started\n          if (regionUrl && this.state === ConnectionState.Disconnected) {\n            this.regionUrl = regionUrl;\n            yield fetch(toHttpUrl(regionUrl), {\n              method: 'HEAD'\n            });\n            this.log.debug(\"prepared connection to \".concat(regionUrl), this.logContext);\n          }\n        } else {\n          yield fetch(toHttpUrl(url), {\n            method: 'HEAD'\n          });\n        }\n      } catch (e) {\n        this.log.warn('could not prepare connection', Object.assign(Object.assign({}, this.logContext), {\n          error: e\n        }));\n      }\n    });\n  }\n  /**\n   * retrieves a participant by identity\n   * @param identity\n   * @returns\n   */\n  getParticipantByIdentity(identity) {\n    if (this.localParticipant.identity === identity) {\n      return this.localParticipant;\n    }\n    return this.remoteParticipants.get(identity);\n  }\n  clearConnectionFutures() {\n    this.connectFuture = undefined;\n  }\n  /**\n   * @internal for testing\n   */\n  simulateScenario(scenario, arg) {\n    return __awaiter(this, void 0, void 0, function* () {\n      let postAction = () => __awaiter(this, void 0, void 0, function* () {});\n      let req;\n      switch (scenario) {\n        case 'signal-reconnect':\n          // @ts-expect-error function is private\n          yield this.engine.client.handleOnClose('simulate disconnect');\n          break;\n        case 'speaker':\n          req = new SimulateScenario({\n            scenario: {\n              case: 'speakerUpdate',\n              value: 3\n            }\n          });\n          break;\n        case 'node-failure':\n          req = new SimulateScenario({\n            scenario: {\n              case: 'nodeFailure',\n              value: true\n            }\n          });\n          break;\n        case 'server-leave':\n          req = new SimulateScenario({\n            scenario: {\n              case: 'serverLeave',\n              value: true\n            }\n          });\n          break;\n        case 'migration':\n          req = new SimulateScenario({\n            scenario: {\n              case: 'migration',\n              value: true\n            }\n          });\n          break;\n        case 'resume-reconnect':\n          this.engine.failNext();\n          // @ts-expect-error function is private\n          yield this.engine.client.handleOnClose('simulate resume-disconnect');\n          break;\n        case 'disconnect-signal-on-resume':\n          postAction = () => __awaiter(this, void 0, void 0, function* () {\n            // @ts-expect-error function is private\n            yield this.engine.client.handleOnClose('simulate resume-disconnect');\n          });\n          req = new SimulateScenario({\n            scenario: {\n              case: 'disconnectSignalOnResume',\n              value: true\n            }\n          });\n          break;\n        case 'disconnect-signal-on-resume-no-messages':\n          postAction = () => __awaiter(this, void 0, void 0, function* () {\n            // @ts-expect-error function is private\n            yield this.engine.client.handleOnClose('simulate resume-disconnect');\n          });\n          req = new SimulateScenario({\n            scenario: {\n              case: 'disconnectSignalOnResumeNoMessages',\n              value: true\n            }\n          });\n          break;\n        case 'full-reconnect':\n          this.engine.fullReconnectOnNext = true;\n          // @ts-expect-error function is private\n          yield this.engine.client.handleOnClose('simulate full-reconnect');\n          break;\n        case 'force-tcp':\n        case 'force-tls':\n          req = new SimulateScenario({\n            scenario: {\n              case: 'switchCandidateProtocol',\n              value: scenario === 'force-tls' ? 2 : 1\n            }\n          });\n          postAction = () => __awaiter(this, void 0, void 0, function* () {\n            const onLeave = this.engine.client.onLeave;\n            if (onLeave) {\n              onLeave(new LeaveRequest({\n                reason: DisconnectReason.CLIENT_INITIATED,\n                action: LeaveRequest_Action.RECONNECT\n              }));\n            }\n          });\n          break;\n        case 'subscriber-bandwidth':\n          if (arg === undefined || typeof arg !== 'number') {\n            throw new Error('subscriber-bandwidth requires a number as argument');\n          }\n          req = new SimulateScenario({\n            scenario: {\n              case: 'subscriberBandwidth',\n              value: numberToBigInt(arg)\n            }\n          });\n          break;\n        case 'leave-full-reconnect':\n          req = new SimulateScenario({\n            scenario: {\n              case: 'leaveRequestFullReconnect',\n              value: true\n            }\n          });\n      }\n      if (req) {\n        yield this.engine.client.sendSimulateScenario(req);\n        yield postAction();\n      }\n    });\n  }\n  /**\n   * Returns true if audio playback is enabled\n   */\n  get canPlaybackAudio() {\n    return this.audioEnabled;\n  }\n  /**\n   * Returns true if video playback is enabled\n   */\n  get canPlaybackVideo() {\n    return !this.isVideoPlaybackBlocked;\n  }\n  getActiveDevice(kind) {\n    return this.localParticipant.activeDeviceMap.get(kind);\n  }\n  /**\n   * Switches all active devices used in this room to the given device.\n   *\n   * Note: setting AudioOutput is not supported on some browsers. See [setSinkId](https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/setSinkId#browser_compatibility)\n   *\n   * @param kind use `videoinput` for camera track,\n   *  `audioinput` for microphone track,\n   *  `audiooutput` to set speaker for all incoming audio tracks\n   * @param deviceId\n   */\n  switchActiveDevice(kind_1, deviceId_1) {\n    return __awaiter(this, arguments, void 0, function (kind, deviceId) {\n      var _this3 = this;\n      let exact = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;\n      return function* () {\n        var _a, _b, _c, _d, _e, _f;\n        var _g;\n        let success = true;\n        let shouldTriggerImmediateDeviceChange = false;\n        const deviceConstraint = exact ? {\n          exact: deviceId\n        } : deviceId;\n        if (kind === 'audioinput') {\n          shouldTriggerImmediateDeviceChange = _this3.localParticipant.audioTrackPublications.size === 0;\n          const prevDeviceId = (_a = _this3.getActiveDevice(kind)) !== null && _a !== void 0 ? _a : _this3.options.audioCaptureDefaults.deviceId;\n          _this3.options.audioCaptureDefaults.deviceId = deviceConstraint;\n          const tracks = Array.from(_this3.localParticipant.audioTrackPublications.values()).filter(track => track.source === Track.Source.Microphone);\n          try {\n            success = (yield Promise.all(tracks.map(t => {\n              var _a;\n              return (_a = t.audioTrack) === null || _a === void 0 ? void 0 : _a.setDeviceId(deviceConstraint);\n            }))).every(val => val === true);\n          } catch (e) {\n            _this3.options.audioCaptureDefaults.deviceId = prevDeviceId;\n            throw e;\n          }\n          const isMuted = tracks.some(t => {\n            var _a, _b;\n            return (_b = (_a = t.track) === null || _a === void 0 ? void 0 : _a.isMuted) !== null && _b !== void 0 ? _b : false;\n          });\n          if (success && isMuted) shouldTriggerImmediateDeviceChange = true;\n        } else if (kind === 'videoinput') {\n          shouldTriggerImmediateDeviceChange = _this3.localParticipant.videoTrackPublications.size === 0;\n          const prevDeviceId = (_b = _this3.getActiveDevice(kind)) !== null && _b !== void 0 ? _b : _this3.options.videoCaptureDefaults.deviceId;\n          _this3.options.videoCaptureDefaults.deviceId = deviceConstraint;\n          const tracks = Array.from(_this3.localParticipant.videoTrackPublications.values()).filter(track => track.source === Track.Source.Camera);\n          try {\n            success = (yield Promise.all(tracks.map(t => {\n              var _a;\n              return (_a = t.videoTrack) === null || _a === void 0 ? void 0 : _a.setDeviceId(deviceConstraint);\n            }))).every(val => val === true);\n          } catch (e) {\n            _this3.options.videoCaptureDefaults.deviceId = prevDeviceId;\n            throw e;\n          }\n          const isMuted = tracks.some(t => {\n            var _a, _b;\n            return (_b = (_a = t.track) === null || _a === void 0 ? void 0 : _a.isMuted) !== null && _b !== void 0 ? _b : false;\n          });\n          if (success && isMuted) shouldTriggerImmediateDeviceChange = true;\n        } else if (kind === 'audiooutput') {\n          shouldTriggerImmediateDeviceChange = true;\n          if (!supportsSetSinkId() && !_this3.options.webAudioMix || _this3.options.webAudioMix && _this3.audioContext && !('setSinkId' in _this3.audioContext)) {\n            throw new Error('cannot switch audio output, the current browser does not support it');\n          }\n          if (_this3.options.webAudioMix) {\n            // setting `default` for web audio output doesn't work, so we need to normalize the id before\n            deviceId = (_c = yield DeviceManager.getInstance().normalizeDeviceId('audiooutput', deviceId)) !== null && _c !== void 0 ? _c : '';\n          }\n          (_d = (_g = _this3.options).audioOutput) !== null && _d !== void 0 ? _d : _g.audioOutput = {};\n          const prevDeviceId = (_e = _this3.getActiveDevice(kind)) !== null && _e !== void 0 ? _e : _this3.options.audioOutput.deviceId;\n          _this3.options.audioOutput.deviceId = deviceId;\n          try {\n            if (_this3.options.webAudioMix) {\n              // @ts-expect-error setSinkId is not yet in the typescript type of AudioContext\n              (_f = _this3.audioContext) === null || _f === void 0 ? void 0 : _f.setSinkId(deviceId);\n            }\n            // also set audio output on all audio elements, even if webAudioMix is enabled in order to workaround echo cancellation not working on chrome with non-default output devices\n            // see https://issues.chromium.org/issues/40252911#comment7\n            yield Promise.all(Array.from(_this3.remoteParticipants.values()).map(p => p.setAudioOutput({\n              deviceId\n            })));\n          } catch (e) {\n            _this3.options.audioOutput.deviceId = prevDeviceId;\n            throw e;\n          }\n        }\n        if (shouldTriggerImmediateDeviceChange) {\n          _this3.localParticipant.activeDeviceMap.set(kind, deviceId);\n          _this3.emit(RoomEvent.ActiveDeviceChanged, kind, deviceId);\n        }\n        return success;\n      }();\n    });\n  }\n  setupLocalParticipantEvents() {\n    this.localParticipant.on(ParticipantEvent.ParticipantMetadataChanged, this.onLocalParticipantMetadataChanged).on(ParticipantEvent.ParticipantNameChanged, this.onLocalParticipantNameChanged).on(ParticipantEvent.AttributesChanged, this.onLocalAttributesChanged).on(ParticipantEvent.TrackMuted, this.onLocalTrackMuted).on(ParticipantEvent.TrackUnmuted, this.onLocalTrackUnmuted).on(ParticipantEvent.LocalTrackPublished, this.onLocalTrackPublished).on(ParticipantEvent.LocalTrackUnpublished, this.onLocalTrackUnpublished).on(ParticipantEvent.ConnectionQualityChanged, this.onLocalConnectionQualityChanged).on(ParticipantEvent.MediaDevicesError, this.onMediaDevicesError).on(ParticipantEvent.AudioStreamAcquired, this.startAudio).on(ParticipantEvent.ChatMessage, this.onLocalChatMessageSent).on(ParticipantEvent.ParticipantPermissionsChanged, this.onLocalParticipantPermissionsChanged);\n  }\n  recreateEngine() {\n    var _a;\n    (_a = this.engine) === null || _a === void 0 ? void 0 : _a.close();\n    /* @ts-ignore */\n    this.engine = undefined;\n    this.isResuming = false;\n    // clear out existing remote participants, since they may have attached\n    // the old engine\n    this.remoteParticipants.clear();\n    this.sidToIdentity.clear();\n    this.bufferedEvents = [];\n    this.maybeCreateEngine();\n  }\n  onTrackAdded(mediaTrack, stream, receiver) {\n    // don't fire onSubscribed when connecting\n    // WebRTC fires onTrack as soon as setRemoteDescription is called on the offer\n    // at that time, ICE connectivity has not been established so the track is not\n    // technically subscribed.\n    // We'll defer these events until when the room is connected or eventually disconnected.\n    if (this.state === ConnectionState.Connecting || this.state === ConnectionState.Reconnecting) {\n      const reconnectedHandler = () => {\n        this.log.debug('deferring on track for later', {\n          mediaTrackId: mediaTrack.id,\n          mediaStreamId: stream.id,\n          tracksInStream: stream.getTracks().map(track => track.id)\n        });\n        this.onTrackAdded(mediaTrack, stream, receiver);\n        cleanup();\n      };\n      const cleanup = () => {\n        this.off(RoomEvent.Reconnected, reconnectedHandler);\n        this.off(RoomEvent.Connected, reconnectedHandler);\n        this.off(RoomEvent.Disconnected, cleanup);\n      };\n      this.once(RoomEvent.Reconnected, reconnectedHandler);\n      this.once(RoomEvent.Connected, reconnectedHandler);\n      this.once(RoomEvent.Disconnected, cleanup);\n      return;\n    }\n    if (this.state === ConnectionState.Disconnected) {\n      this.log.warn('skipping incoming track after Room disconnected', this.logContext);\n      return;\n    }\n    if (mediaTrack.readyState === 'ended') {\n      this.log.info('skipping incoming track as it already ended', this.logContext);\n      return;\n    }\n    const parts = unpackStreamId(stream.id);\n    const participantSid = parts[0];\n    let streamId = parts[1];\n    let trackId = mediaTrack.id;\n    // firefox will get streamId (pID|trackId) instead of (pID|streamId) as it doesn't support sync tracks by stream\n    // and generates its own track id instead of infer from sdp track id.\n    if (streamId && streamId.startsWith('TR')) trackId = streamId;\n    if (participantSid === this.localParticipant.sid) {\n      this.log.warn('tried to create RemoteParticipant for local participant', this.logContext);\n      return;\n    }\n    const participant = Array.from(this.remoteParticipants.values()).find(p => p.sid === participantSid);\n    if (!participant) {\n      this.log.error(\"Tried to add a track for a participant, that's not present. Sid: \".concat(participantSid), this.logContext);\n      return;\n    }\n    // in single peer connection case, the trackID is locally generated,\n    // not the TR_ prefixed one generated by the server,\n    // use `mid` to find the appropriate track.\n    if (!trackId.startsWith('TR')) {\n      const id = this.engine.getTrackIdForReceiver(receiver);\n      if (!id) {\n        this.log.error(\"Tried to add a track whose 'sid' could not be found for a participant, that's not present. Sid: \".concat(participantSid), this.logContext);\n        return;\n      }\n      trackId = id;\n    }\n    if (!trackId.startsWith('TR')) {\n      this.log.warn(\"Tried to add a track whose 'sid' could not be determined for a participant, that's not present. Sid: \".concat(participantSid, \", streamId: \").concat(streamId, \", trackId: \").concat(trackId), Object.assign(Object.assign({}, this.logContext), {\n        rpID: participantSid,\n        streamId,\n        trackId\n      }));\n    }\n    let adaptiveStreamSettings;\n    if (this.options.adaptiveStream) {\n      if (typeof this.options.adaptiveStream === 'object') {\n        adaptiveStreamSettings = this.options.adaptiveStream;\n      } else {\n        adaptiveStreamSettings = {};\n      }\n    }\n    const publication = participant.addSubscribedMediaTrack(mediaTrack, trackId, stream, receiver, adaptiveStreamSettings);\n    if ((publication === null || publication === void 0 ? void 0 : publication.isEncrypted) && !this.e2eeManager) {\n      this.emit(RoomEvent.EncryptionError, new Error(\"Encrypted \".concat(publication.source, \" track received from participant \").concat(participant.sid, \", but room does not have encryption enabled!\")));\n    }\n  }\n  handleDisconnect() {\n    let shouldStopTracks = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;\n    let reason = arguments.length > 1 ? arguments[1] : undefined;\n    var _a;\n    this.clearConnectionReconcile();\n    this.isResuming = false;\n    this.bufferedEvents = [];\n    this.transcriptionReceivedTimes.clear();\n    this.incomingDataStreamManager.clearControllers();\n    if (this.state === ConnectionState.Disconnected) {\n      return;\n    }\n    this.regionUrl = undefined;\n    // Notify region provider about disconnect to potentially stop auto-refetch\n    if (this.regionUrlProvider) {\n      this.regionUrlProvider.notifyDisconnected();\n    }\n    try {\n      this.remoteParticipants.forEach(p => {\n        p.trackPublications.forEach(pub => {\n          p.unpublishTrack(pub.trackSid);\n        });\n      });\n      this.localParticipant.trackPublications.forEach(pub => {\n        var _a, _b, _c;\n        if (pub.track) {\n          this.localParticipant.unpublishTrack(pub.track, shouldStopTracks);\n        }\n        if (shouldStopTracks) {\n          (_a = pub.track) === null || _a === void 0 ? void 0 : _a.detach();\n          (_b = pub.track) === null || _b === void 0 ? void 0 : _b.stop();\n        } else {\n          (_c = pub.track) === null || _c === void 0 ? void 0 : _c.stopMonitor();\n        }\n      });\n      this.localParticipant.off(ParticipantEvent.ParticipantMetadataChanged, this.onLocalParticipantMetadataChanged).off(ParticipantEvent.ParticipantNameChanged, this.onLocalParticipantNameChanged).off(ParticipantEvent.AttributesChanged, this.onLocalAttributesChanged).off(ParticipantEvent.TrackMuted, this.onLocalTrackMuted).off(ParticipantEvent.TrackUnmuted, this.onLocalTrackUnmuted).off(ParticipantEvent.LocalTrackPublished, this.onLocalTrackPublished).off(ParticipantEvent.LocalTrackUnpublished, this.onLocalTrackUnpublished).off(ParticipantEvent.ConnectionQualityChanged, this.onLocalConnectionQualityChanged).off(ParticipantEvent.MediaDevicesError, this.onMediaDevicesError).off(ParticipantEvent.AudioStreamAcquired, this.startAudio).off(ParticipantEvent.ChatMessage, this.onLocalChatMessageSent).off(ParticipantEvent.ParticipantPermissionsChanged, this.onLocalParticipantPermissionsChanged);\n      this.localParticipant.trackPublications.clear();\n      this.localParticipant.videoTrackPublications.clear();\n      this.localParticipant.audioTrackPublications.clear();\n      this.remoteParticipants.clear();\n      this.sidToIdentity.clear();\n      this.activeSpeakers = [];\n      if (this.audioContext && typeof this.options.webAudioMix === 'boolean') {\n        this.audioContext.close();\n        this.audioContext = undefined;\n      }\n      if (isWeb()) {\n        window.removeEventListener('beforeunload', this.onPageLeave);\n        window.removeEventListener('pagehide', this.onPageLeave);\n        window.removeEventListener('freeze', this.onPageLeave);\n        (_a = navigator.mediaDevices) === null || _a === void 0 ? void 0 : _a.removeEventListener('devicechange', this.handleDeviceChange);\n      }\n    } finally {\n      this.setAndEmitConnectionState(ConnectionState.Disconnected);\n      this.emit(RoomEvent.Disconnected, reason);\n    }\n  }\n  handleParticipantDisconnected(identity, participant) {\n    var _a;\n    // remove and send event\n    this.remoteParticipants.delete(identity);\n    if (!participant) {\n      return;\n    }\n    this.incomingDataStreamManager.validateParticipantHasNoActiveDataStreams(identity);\n    participant.trackPublications.forEach(publication => {\n      participant.unpublishTrack(publication.trackSid, true);\n    });\n    this.emit(RoomEvent.ParticipantDisconnected, participant);\n    participant.setDisconnected();\n    (_a = this.localParticipant) === null || _a === void 0 ? void 0 : _a.handleParticipantDisconnected(participant.identity);\n  }\n  handleIncomingRpcRequest(callerIdentity, requestId, method, payload, responseTimeout, version) {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.engine.publishRpcAck(callerIdentity, requestId);\n      if (version !== 1) {\n        yield this.engine.publishRpcResponse(callerIdentity, requestId, null, RpcError.builtIn('UNSUPPORTED_VERSION'));\n        return;\n      }\n      const handler = this.rpcHandlers.get(method);\n      if (!handler) {\n        yield this.engine.publishRpcResponse(callerIdentity, requestId, null, RpcError.builtIn('UNSUPPORTED_METHOD'));\n        return;\n      }\n      let responseError = null;\n      let responsePayload = null;\n      try {\n        const response = yield handler({\n          requestId,\n          callerIdentity,\n          payload,\n          responseTimeout\n        });\n        if (byteLength(response) > MAX_PAYLOAD_BYTES) {\n          responseError = RpcError.builtIn('RESPONSE_PAYLOAD_TOO_LARGE');\n          this.log.warn(\"RPC Response payload too large for \".concat(method));\n        } else {\n          responsePayload = response;\n        }\n      } catch (error) {\n        if (error instanceof RpcError) {\n          responseError = error;\n        } else {\n          this.log.warn(\"Uncaught error returned by RPC handler for \".concat(method, \". Returning APPLICATION_ERROR instead.\"), error);\n          responseError = RpcError.builtIn('APPLICATION_ERROR');\n        }\n      }\n      yield this.engine.publishRpcResponse(callerIdentity, requestId, responsePayload, responseError);\n    });\n  }\n  /**\n   * attempt to select the default devices if the previously selected devices are no longer available after a device change event\n   */\n  selectDefaultDevices() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      const previousDevices = DeviceManager.getInstance().previousDevices;\n      // check for available devices, but don't request permissions in order to avoid prompts for kinds that haven't been used before\n      const availableDevices = yield DeviceManager.getInstance().getDevices(undefined, false);\n      const browser = getBrowser();\n      if ((browser === null || browser === void 0 ? void 0 : browser.name) === 'Chrome' && browser.os !== 'iOS') {\n        for (let availableDevice of availableDevices) {\n          const previousDevice = previousDevices.find(info => info.deviceId === availableDevice.deviceId);\n          if (previousDevice && previousDevice.label !== '' && previousDevice.kind === availableDevice.kind && previousDevice.label !== availableDevice.label) {\n            // label has changed on device the same deviceId, indicating that the default device has changed on the OS level\n            if (this.getActiveDevice(availableDevice.kind) === 'default') {\n              // emit an active device change event only if the selected output device is actually on `default`\n              this.emit(RoomEvent.ActiveDeviceChanged, availableDevice.kind, availableDevice.deviceId);\n            }\n          }\n        }\n      }\n      const kinds = ['audiooutput', 'audioinput', 'videoinput'];\n      for (let kind of kinds) {\n        const targetSource = kindToSource(kind);\n        const targetPublication = this.localParticipant.getTrackPublication(targetSource);\n        if (targetPublication && ((_a = targetPublication.track) === null || _a === void 0 ? void 0 : _a.isUserProvided)) {\n          // if the track is user provided, we don't want to switch devices on behalf of the user\n          continue;\n        }\n        const devicesOfKind = availableDevices.filter(d => d.kind === kind);\n        const activeDevice = this.getActiveDevice(kind);\n        if (activeDevice === ((_b = previousDevices.filter(info => info.kind === kind)[0]) === null || _b === void 0 ? void 0 : _b.deviceId)) {\n          // in  Safari the first device is always the default, so we assume a user on the default device would like to switch to the default once it changes\n          // FF doesn't emit an event when the default device changes, so we perform the same best effort and switch to the new device once connected and if it's the first in the array\n          if (devicesOfKind.length > 0 && ((_c = devicesOfKind[0]) === null || _c === void 0 ? void 0 : _c.deviceId) !== activeDevice) {\n            yield this.switchActiveDevice(kind, devicesOfKind[0].deviceId);\n            continue;\n          }\n        }\n        if (kind === 'audioinput' && !isSafariBased() || kind === 'videoinput') {\n          // airpods on Safari need special handling for audioinput as the track doesn't end as soon as you take them out\n          continue;\n        }\n        // switch to first available device if previously active device is not available any more\n        if (devicesOfKind.length > 0 && !devicesOfKind.find(deviceInfo => deviceInfo.deviceId === this.getActiveDevice(kind)) && (\n        // avoid switching audio output on safari without explicit user action as it leads to slowed down audio playback\n        kind !== 'audiooutput' || !isSafariBased())) {\n          yield this.switchActiveDevice(kind, devicesOfKind[0].deviceId);\n        }\n      }\n    });\n  }\n  acquireAudioContext() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      if (typeof this.options.webAudioMix !== 'boolean' && this.options.webAudioMix.audioContext) {\n        // override audio context with custom audio context if supplied by user\n        this.audioContext = this.options.webAudioMix.audioContext;\n      } else if (!this.audioContext || this.audioContext.state === 'closed') {\n        // by using an AudioContext, it reduces lag on audio elements\n        // https://stackoverflow.com/questions/9811429/html5-audio-tag-on-safari-has-a-delay/54119854#54119854\n        this.audioContext = (_a = getNewAudioContext()) !== null && _a !== void 0 ? _a : undefined;\n      }\n      if (this.options.webAudioMix) {\n        this.remoteParticipants.forEach(participant => participant.setAudioContext(this.audioContext));\n      }\n      this.localParticipant.setAudioContext(this.audioContext);\n      if (this.audioContext && this.audioContext.state === 'suspended') {\n        // for iOS a newly created AudioContext is always in `suspended` state.\n        // we try our best to resume the context here, if that doesn't work, we just continue with regular processing\n        try {\n          yield Promise.race([this.audioContext.resume(), sleep(200)]);\n        } catch (e) {\n          this.log.warn('Could not resume audio context', Object.assign(Object.assign({}, this.logContext), {\n            error: e\n          }));\n        }\n      }\n      const newContextIsRunning = ((_b = this.audioContext) === null || _b === void 0 ? void 0 : _b.state) === 'running';\n      if (newContextIsRunning !== this.canPlaybackAudio) {\n        this.audioEnabled = newContextIsRunning;\n        this.emit(RoomEvent.AudioPlaybackStatusChanged, newContextIsRunning);\n      }\n    });\n  }\n  createParticipant(identity, info) {\n    var _a;\n    let participant;\n    if (info) {\n      participant = RemoteParticipant.fromParticipantInfo(this.engine.client, info, {\n        loggerContextCb: () => this.logContext,\n        loggerName: this.options.loggerName\n      });\n    } else {\n      participant = new RemoteParticipant(this.engine.client, '', identity, undefined, undefined, undefined, {\n        loggerContextCb: () => this.logContext,\n        loggerName: this.options.loggerName\n      });\n    }\n    if (this.options.webAudioMix) {\n      participant.setAudioContext(this.audioContext);\n    }\n    if ((_a = this.options.audioOutput) === null || _a === void 0 ? void 0 : _a.deviceId) {\n      participant.setAudioOutput(this.options.audioOutput).catch(e => this.log.warn(\"Could not set audio output: \".concat(e.message), this.logContext));\n    }\n    return participant;\n  }\n  getOrCreateParticipant(identity, info) {\n    if (this.remoteParticipants.has(identity)) {\n      const existingParticipant = this.remoteParticipants.get(identity);\n      if (info) {\n        const wasUpdated = existingParticipant.updateInfo(info);\n        if (wasUpdated) {\n          this.sidToIdentity.set(info.sid, info.identity);\n        }\n      }\n      return existingParticipant;\n    }\n    const participant = this.createParticipant(identity, info);\n    this.remoteParticipants.set(identity, participant);\n    this.sidToIdentity.set(info.sid, info.identity);\n    // if we have valid info and the participant wasn't in the map before, we can assume the participant is new\n    // firing here to make sure that `ParticipantConnected` fires before the initial track events\n    this.emitWhenConnected(RoomEvent.ParticipantConnected, participant);\n    // also forward events\n    // trackPublished is only fired for tracks added after both local participant\n    // and remote participant joined the room\n    participant.on(ParticipantEvent.TrackPublished, trackPublication => {\n      this.emitWhenConnected(RoomEvent.TrackPublished, trackPublication, participant);\n    }).on(ParticipantEvent.TrackSubscribed, (track, publication) => {\n      // monitor playback status\n      if (track.kind === Track.Kind.Audio) {\n        track.on(TrackEvent.AudioPlaybackStarted, this.handleAudioPlaybackStarted);\n        track.on(TrackEvent.AudioPlaybackFailed, this.handleAudioPlaybackFailed);\n      } else if (track.kind === Track.Kind.Video) {\n        track.on(TrackEvent.VideoPlaybackFailed, this.handleVideoPlaybackFailed);\n        track.on(TrackEvent.VideoPlaybackStarted, this.handleVideoPlaybackStarted);\n      }\n      this.emit(RoomEvent.TrackSubscribed, track, publication, participant);\n    }).on(ParticipantEvent.TrackUnpublished, publication => {\n      this.emit(RoomEvent.TrackUnpublished, publication, participant);\n    }).on(ParticipantEvent.TrackUnsubscribed, (track, publication) => {\n      this.emit(RoomEvent.TrackUnsubscribed, track, publication, participant);\n    }).on(ParticipantEvent.TrackMuted, pub => {\n      this.emitWhenConnected(RoomEvent.TrackMuted, pub, participant);\n    }).on(ParticipantEvent.TrackUnmuted, pub => {\n      this.emitWhenConnected(RoomEvent.TrackUnmuted, pub, participant);\n    }).on(ParticipantEvent.ParticipantMetadataChanged, metadata => {\n      this.emitWhenConnected(RoomEvent.ParticipantMetadataChanged, metadata, participant);\n    }).on(ParticipantEvent.ParticipantNameChanged, name => {\n      this.emitWhenConnected(RoomEvent.ParticipantNameChanged, name, participant);\n    }).on(ParticipantEvent.AttributesChanged, changedAttributes => {\n      this.emitWhenConnected(RoomEvent.ParticipantAttributesChanged, changedAttributes, participant);\n    }).on(ParticipantEvent.ConnectionQualityChanged, quality => {\n      this.emitWhenConnected(RoomEvent.ConnectionQualityChanged, quality, participant);\n    }).on(ParticipantEvent.ParticipantPermissionsChanged, prevPermissions => {\n      this.emitWhenConnected(RoomEvent.ParticipantPermissionsChanged, prevPermissions, participant);\n    }).on(ParticipantEvent.TrackSubscriptionStatusChanged, (pub, status) => {\n      this.emitWhenConnected(RoomEvent.TrackSubscriptionStatusChanged, pub, status, participant);\n    }).on(ParticipantEvent.TrackSubscriptionFailed, (trackSid, error) => {\n      this.emit(RoomEvent.TrackSubscriptionFailed, trackSid, participant, error);\n    }).on(ParticipantEvent.TrackSubscriptionPermissionChanged, (pub, status) => {\n      this.emitWhenConnected(RoomEvent.TrackSubscriptionPermissionChanged, pub, status, participant);\n    }).on(ParticipantEvent.Active, () => {\n      this.emitWhenConnected(RoomEvent.ParticipantActive, participant);\n      if (participant.kind === ParticipantInfo_Kind.AGENT) {\n        this.localParticipant.setActiveAgent(participant);\n      }\n    });\n    // update info at the end after callbacks have been set up\n    if (info) {\n      participant.updateInfo(info);\n    }\n    return participant;\n  }\n  sendSyncState() {\n    const remoteTracks = Array.from(this.remoteParticipants.values()).reduce((acc, participant) => {\n      acc.push(...participant.getTrackPublications()); // FIXME would be nice to have this return RemoteTrackPublications directly instead of the type cast\n      return acc;\n    }, []);\n    const localTracks = this.localParticipant.getTrackPublications(); // FIXME would be nice to have this return LocalTrackPublications directly instead of the type cast\n    this.engine.sendSyncState(remoteTracks, localTracks);\n  }\n  /**\n   * After resuming, we'll need to notify the server of the current\n   * subscription settings.\n   */\n  updateSubscriptions() {\n    for (const p of this.remoteParticipants.values()) {\n      for (const pub of p.videoTrackPublications.values()) {\n        if (pub.isSubscribed && isRemotePub(pub)) {\n          pub.emitTrackUpdate();\n        }\n      }\n    }\n  }\n  getRemoteParticipantBySid(sid) {\n    const identity = this.sidToIdentity.get(sid);\n    if (identity) {\n      return this.remoteParticipants.get(identity);\n    }\n  }\n  registerConnectionReconcile() {\n    this.clearConnectionReconcile();\n    let consecutiveFailures = 0;\n    this.connectionReconcileInterval = CriticalTimers.setInterval(() => {\n      if (\n      // ensure we didn't tear it down\n      !this.engine ||\n      // engine detected close, but Room missed it\n      this.engine.isClosed ||\n      // transports failed without notifying engine\n      !this.engine.verifyTransport()) {\n        consecutiveFailures++;\n        this.log.warn('detected connection state mismatch', Object.assign(Object.assign({}, this.logContext), {\n          numFailures: consecutiveFailures,\n          engine: this.engine ? {\n            closed: this.engine.isClosed,\n            transportsConnected: this.engine.verifyTransport()\n          } : undefined\n        }));\n        if (consecutiveFailures >= 3) {\n          this.recreateEngine();\n          this.handleDisconnect(this.options.stopLocalTrackOnUnpublish, DisconnectReason.STATE_MISMATCH);\n        }\n      } else {\n        consecutiveFailures = 0;\n      }\n    }, CONNECTION_RECONCILE_FREQUENCY_MS);\n  }\n  clearConnectionReconcile() {\n    if (this.connectionReconcileInterval) {\n      CriticalTimers.clearInterval(this.connectionReconcileInterval);\n    }\n  }\n  setAndEmitConnectionState(state) {\n    if (state === this.state) {\n      // unchanged\n      return false;\n    }\n    this.state = state;\n    this.emit(RoomEvent.ConnectionStateChanged, this.state);\n    return true;\n  }\n  emitBufferedEvents() {\n    this.bufferedEvents.forEach(_ref3 => {\n      let [ev, args] = _ref3;\n      this.emit(ev, ...args);\n    });\n    this.bufferedEvents = [];\n  }\n  emitWhenConnected(event) {\n    for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n      args[_key2 - 1] = arguments[_key2];\n    }\n    if (this.state === ConnectionState.Reconnecting || this.isResuming || !this.engine || this.engine.pendingReconnect) {\n      // in case the room is reconnecting, buffer the events by firing them later after emitting RoomEvent.Reconnected\n      this.bufferedEvents.push([event, args]);\n    } else if (this.state === ConnectionState.Connected) {\n      return this.emit(event, ...args);\n    }\n    return false;\n  }\n  /**\n   * Allows to populate a room with simulated participants.\n   * No actual connection to a server will be established, all state is\n   * @experimental\n   */\n  simulateParticipants(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      const publishOptions = Object.assign({\n        audio: true,\n        video: true,\n        useRealTracks: false\n      }, options.publish);\n      const participantOptions = Object.assign({\n        count: 9,\n        audio: false,\n        video: true,\n        aspectRatios: [1.66, 1.7, 1.3]\n      }, options.participants);\n      this.handleDisconnect();\n      this.roomInfo = new Room$1({\n        sid: 'RM_SIMULATED',\n        name: 'simulated-room',\n        emptyTimeout: 0,\n        maxParticipants: 0,\n        creationTime: protoInt64.parse(new Date().getTime()),\n        metadata: '',\n        numParticipants: 1,\n        numPublishers: 1,\n        turnPassword: '',\n        enabledCodecs: [],\n        activeRecording: false\n      });\n      this.localParticipant.updateInfo(new ParticipantInfo({\n        identity: 'simulated-local',\n        name: 'local-name'\n      }));\n      this.setupLocalParticipantEvents();\n      this.emit(RoomEvent.SignalConnected);\n      this.emit(RoomEvent.Connected);\n      this.setAndEmitConnectionState(ConnectionState.Connected);\n      if (publishOptions.video) {\n        const camPub = new LocalTrackPublication(Track.Kind.Video, new TrackInfo({\n          source: TrackSource.CAMERA,\n          sid: Math.floor(Math.random() * 10000).toString(),\n          type: TrackType.AUDIO,\n          name: 'video-dummy'\n        }), new LocalVideoTrack(publishOptions.useRealTracks ? (yield window.navigator.mediaDevices.getUserMedia({\n          video: true\n        })).getVideoTracks()[0] : createDummyVideoStreamTrack(160 * ((_a = participantOptions.aspectRatios[0]) !== null && _a !== void 0 ? _a : 1), 160, true, true), undefined, false, {\n          loggerName: this.options.loggerName,\n          loggerContextCb: () => this.logContext\n        }), {\n          loggerName: this.options.loggerName,\n          loggerContextCb: () => this.logContext\n        });\n        // @ts-ignore\n        this.localParticipant.addTrackPublication(camPub);\n        this.localParticipant.emit(ParticipantEvent.LocalTrackPublished, camPub);\n      }\n      if (publishOptions.audio) {\n        const audioPub = new LocalTrackPublication(Track.Kind.Audio, new TrackInfo({\n          source: TrackSource.MICROPHONE,\n          sid: Math.floor(Math.random() * 10000).toString(),\n          type: TrackType.AUDIO\n        }), new LocalAudioTrack(publishOptions.useRealTracks ? (yield navigator.mediaDevices.getUserMedia({\n          audio: true\n        })).getAudioTracks()[0] : getEmptyAudioStreamTrack(), undefined, false, this.audioContext, {\n          loggerName: this.options.loggerName,\n          loggerContextCb: () => this.logContext\n        }), {\n          loggerName: this.options.loggerName,\n          loggerContextCb: () => this.logContext\n        });\n        // @ts-ignore\n        this.localParticipant.addTrackPublication(audioPub);\n        this.localParticipant.emit(ParticipantEvent.LocalTrackPublished, audioPub);\n      }\n      for (let i = 0; i < participantOptions.count - 1; i += 1) {\n        let info = new ParticipantInfo({\n          sid: Math.floor(Math.random() * 10000).toString(),\n          identity: \"simulated-\".concat(i),\n          state: ParticipantInfo_State.ACTIVE,\n          tracks: [],\n          joinedAt: protoInt64.parse(Date.now())\n        });\n        const p = this.getOrCreateParticipant(info.identity, info);\n        if (participantOptions.video) {\n          const dummyVideo = createDummyVideoStreamTrack(160 * ((_b = participantOptions.aspectRatios[i % participantOptions.aspectRatios.length]) !== null && _b !== void 0 ? _b : 1), 160, false, true);\n          const videoTrack = new TrackInfo({\n            source: TrackSource.CAMERA,\n            sid: Math.floor(Math.random() * 10000).toString(),\n            type: TrackType.AUDIO\n          });\n          p.addSubscribedMediaTrack(dummyVideo, videoTrack.sid, new MediaStream([dummyVideo]), new RTCRtpReceiver());\n          info.tracks = [...info.tracks, videoTrack];\n        }\n        if (participantOptions.audio) {\n          const dummyTrack = getEmptyAudioStreamTrack();\n          const audioTrack = new TrackInfo({\n            source: TrackSource.MICROPHONE,\n            sid: Math.floor(Math.random() * 10000).toString(),\n            type: TrackType.AUDIO\n          });\n          p.addSubscribedMediaTrack(dummyTrack, audioTrack.sid, new MediaStream([dummyTrack]), new RTCRtpReceiver());\n          info.tracks = [...info.tracks, audioTrack];\n        }\n        p.updateInfo(info);\n      }\n    });\n  }\n  // /** @internal */\n  emit(event) {\n    for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n      args[_key3 - 1] = arguments[_key3];\n    }\n    // active speaker updates are too spammy\n    if (event !== RoomEvent.ActiveSpeakersChanged && event !== RoomEvent.TranscriptionReceived) {\n      // only extract logContext from arguments in order to avoid logging the whole object tree\n      const minimizedArgs = mapArgs(args).filter(arg => arg !== undefined);\n      if (event === RoomEvent.TrackSubscribed || event === RoomEvent.TrackUnsubscribed) {\n        this.log.trace(\"subscribe trace: \".concat(event), Object.assign(Object.assign({}, this.logContext), {\n          event,\n          args: minimizedArgs\n        }));\n      }\n      this.log.debug(\"room event \".concat(event), Object.assign(Object.assign({}, this.logContext), {\n        event,\n        args: minimizedArgs\n      }));\n    }\n    return super.emit(event, ...args);\n  }\n}\nRoom.cleanupRegistry = typeof FinalizationRegistry !== 'undefined' && new FinalizationRegistry(cleanup => {\n  cleanup();\n});\nfunction mapArgs(args) {\n  return args.map(arg => {\n    if (!arg) {\n      return;\n    }\n    if (Array.isArray(arg)) {\n      return mapArgs(arg);\n    }\n    if (typeof arg === 'object') {\n      return 'logContext' in arg ? arg.logContext : undefined;\n    }\n    return arg;\n  });\n}// This file was generated from JSON Schema using quicktype, do not modify it directly.\n// The code generation lives at https://github.com/livekit/attribute-definitions\n//\n// To parse this data:\n//\n//   import { Convert, AgentAttributes, TranscriptionAttributes } from \"./file\";\n//\n//   const agentAttributes = Convert.toAgentAttributes(json);\n//   const transcriptionAttributes = Convert.toTranscriptionAttributes(json);\n// Converts JSON strings to/from your types\nclass Convert {\n  static toAgentAttributes(json) {\n    return JSON.parse(json);\n  }\n  static agentAttributesToJson(value) {\n    return JSON.stringify(value);\n  }\n  static toTranscriptionAttributes(json) {\n    return JSON.parse(json);\n  }\n  static transcriptionAttributesToJson(value) {\n    return JSON.stringify(value);\n  }\n}var attributeTypings=/*#__PURE__*/Object.freeze({__proto__:null,Convert:Convert});var CheckStatus;\n(function (CheckStatus) {\n  CheckStatus[CheckStatus[\"IDLE\"] = 0] = \"IDLE\";\n  CheckStatus[CheckStatus[\"RUNNING\"] = 1] = \"RUNNING\";\n  CheckStatus[CheckStatus[\"SKIPPED\"] = 2] = \"SKIPPED\";\n  CheckStatus[CheckStatus[\"SUCCESS\"] = 3] = \"SUCCESS\";\n  CheckStatus[CheckStatus[\"FAILED\"] = 4] = \"FAILED\";\n})(CheckStatus || (CheckStatus = {}));\nclass Checker extends eventsExports.EventEmitter {\n  constructor(url, token) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    super();\n    this.status = CheckStatus.IDLE;\n    this.logs = [];\n    this.options = {};\n    this.url = url;\n    this.token = token;\n    this.name = this.constructor.name;\n    this.room = new Room(options.roomOptions);\n    this.connectOptions = options.connectOptions;\n    this.options = options;\n  }\n  run(onComplete) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.status !== CheckStatus.IDLE) {\n        throw Error('check is running already');\n      }\n      this.setStatus(CheckStatus.RUNNING);\n      try {\n        yield this.perform();\n      } catch (err) {\n        if (err instanceof Error) {\n          if (this.options.errorsAsWarnings) {\n            this.appendWarning(err.message);\n          } else {\n            this.appendError(err.message);\n          }\n        }\n      }\n      yield this.disconnect();\n      // sleep for a bit to ensure disconnect\n      yield new Promise(resolve => setTimeout(resolve, 500));\n      // @ts-ignore\n      if (this.status !== CheckStatus.SKIPPED) {\n        this.setStatus(this.isSuccess() ? CheckStatus.SUCCESS : CheckStatus.FAILED);\n      }\n      if (onComplete) {\n        onComplete();\n      }\n      return this.getInfo();\n    });\n  }\n  isSuccess() {\n    return !this.logs.some(l => l.level === 'error');\n  }\n  connect(url) {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.room.state === ConnectionState.Connected) {\n        return this.room;\n      }\n      if (!url) {\n        url = this.url;\n      }\n      yield this.room.connect(url, this.token, this.connectOptions);\n      return this.room;\n    });\n  }\n  disconnect() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (this.room && this.room.state !== ConnectionState.Disconnected) {\n        yield this.room.disconnect();\n        // wait for it to go through\n        yield new Promise(resolve => setTimeout(resolve, 500));\n      }\n    });\n  }\n  skip() {\n    this.setStatus(CheckStatus.SKIPPED);\n  }\n  switchProtocol(protocol) {\n    return __awaiter(this, void 0, void 0, function* () {\n      let hasReconnecting = false;\n      let hasReconnected = false;\n      this.room.on(RoomEvent.Reconnecting, () => {\n        hasReconnecting = true;\n      });\n      this.room.once(RoomEvent.Reconnected, () => {\n        hasReconnected = true;\n      });\n      this.room.simulateScenario(\"force-\".concat(protocol));\n      yield new Promise(resolve => setTimeout(resolve, 1000));\n      if (!hasReconnecting) {\n        // no need to wait for reconnection\n        return;\n      }\n      // wait for 10 seconds for reconnection\n      const timeout = Date.now() + 10000;\n      while (Date.now() < timeout) {\n        if (hasReconnected) {\n          return;\n        }\n        yield sleep(100);\n      }\n      throw new Error(\"Could not reconnect using \".concat(protocol, \" protocol after 10 seconds\"));\n    });\n  }\n  appendMessage(message) {\n    this.logs.push({\n      level: 'info',\n      message\n    });\n    this.emit('update', this.getInfo());\n  }\n  appendWarning(message) {\n    this.logs.push({\n      level: 'warning',\n      message\n    });\n    this.emit('update', this.getInfo());\n  }\n  appendError(message) {\n    this.logs.push({\n      level: 'error',\n      message\n    });\n    this.emit('update', this.getInfo());\n  }\n  setStatus(status) {\n    this.status = status;\n    this.emit('update', this.getInfo());\n  }\n  get engine() {\n    var _a;\n    return (_a = this.room) === null || _a === void 0 ? void 0 : _a.engine;\n  }\n  getInfo() {\n    return {\n      logs: this.logs,\n      name: this.name,\n      status: this.status,\n      description: this.description\n    };\n  }\n}/**\n * Checks for connections quality to closests Cloud regions and determining the best quality\n */\nclass CloudRegionCheck extends Checker {\n  get description() {\n    return 'Cloud regions';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      const regionProvider = new RegionUrlProvider(this.url, this.token);\n      if (!regionProvider.isCloud()) {\n        this.skip();\n        return;\n      }\n      const regionStats = [];\n      const seenUrls = new Set();\n      for (let i = 0; i < 3; i++) {\n        const regionUrl = yield regionProvider.getNextBestRegionUrl();\n        if (!regionUrl) {\n          break;\n        }\n        if (seenUrls.has(regionUrl)) {\n          continue;\n        }\n        seenUrls.add(regionUrl);\n        const stats = yield this.checkCloudRegion(regionUrl);\n        this.appendMessage(\"\".concat(stats.region, \" RTT: \").concat(stats.rtt, \"ms, duration: \").concat(stats.duration, \"ms\"));\n        regionStats.push(stats);\n      }\n      regionStats.sort((a, b) => {\n        return (a.duration - b.duration) * 0.5 + (a.rtt - b.rtt) * 0.5;\n      });\n      const bestRegion = regionStats[0];\n      this.bestStats = bestRegion;\n      this.appendMessage(\"best Cloud region: \".concat(bestRegion.region));\n    });\n  }\n  getInfo() {\n    const info = super.getInfo();\n    info.data = this.bestStats;\n    return info;\n  }\n  checkCloudRegion(url) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b;\n      yield this.connect(url);\n      if (this.options.protocol === 'tcp') {\n        yield this.switchProtocol('tcp');\n      }\n      const region = (_a = this.room.serverInfo) === null || _a === void 0 ? void 0 : _a.region;\n      if (!region) {\n        throw new Error('Region not found');\n      }\n      const writer = yield this.room.localParticipant.streamText({\n        topic: 'test'\n      });\n      const chunkSize = 1000; // each chunk is about 1000 bytes\n      const totalSize = 1000000; // approximately 1MB of data\n      const numChunks = totalSize / chunkSize; // will yield 1000 chunks\n      const chunkData = 'A'.repeat(chunkSize); // create a string of 1000 'A' characters\n      const startTime = Date.now();\n      for (let i = 0; i < numChunks; i++) {\n        yield writer.write(chunkData);\n      }\n      yield writer.close();\n      const endTime = Date.now();\n      const stats = yield (_b = this.room.engine.pcManager) === null || _b === void 0 ? void 0 : _b.publisher.getStats();\n      const regionStats = {\n        region: region,\n        rtt: 10000,\n        duration: endTime - startTime\n      };\n      stats === null || stats === void 0 ? void 0 : stats.forEach(stat => {\n        if (stat.type === 'candidate-pair' && stat.nominated) {\n          regionStats.rtt = stat.currentRoundTripTime * 1000;\n        }\n      });\n      yield this.disconnect();\n      return regionStats;\n    });\n  }\n}const TEST_DURATION = 10000;\nclass ConnectionProtocolCheck extends Checker {\n  get description() {\n    return 'Connection via UDP vs TCP';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      const udpStats = yield this.checkConnectionProtocol('udp');\n      const tcpStats = yield this.checkConnectionProtocol('tcp');\n      this.bestStats = udpStats;\n      // udp should is the better protocol typically. however, we'd prefer TCP when either of these conditions are true:\n      // 1. the bandwidth limitation is worse on UDP by 500ms\n      // 2. the packet loss is higher on UDP by 1%\n      if (udpStats.qualityLimitationDurations.bandwidth - tcpStats.qualityLimitationDurations.bandwidth > 0.5 || (udpStats.packetsLost - tcpStats.packetsLost) / udpStats.packetsSent > 0.01) {\n        this.appendMessage('best connection quality via tcp');\n        this.bestStats = tcpStats;\n      } else {\n        this.appendMessage('best connection quality via udp');\n      }\n      const stats = this.bestStats;\n      this.appendMessage(\"upstream bitrate: \".concat((stats.bitrateTotal / stats.count / 1000 / 1000).toFixed(2), \" mbps\"));\n      this.appendMessage(\"RTT: \".concat((stats.rttTotal / stats.count * 1000).toFixed(2), \" ms\"));\n      this.appendMessage(\"jitter: \".concat((stats.jitterTotal / stats.count * 1000).toFixed(2), \" ms\"));\n      if (stats.packetsLost > 0) {\n        this.appendWarning(\"packets lost: \".concat((stats.packetsLost / stats.packetsSent * 100).toFixed(2), \"%\"));\n      }\n      if (stats.qualityLimitationDurations.bandwidth > 1) {\n        this.appendWarning(\"bandwidth limited \".concat((stats.qualityLimitationDurations.bandwidth / (TEST_DURATION / 1000) * 100).toFixed(2), \"%\"));\n      }\n      if (stats.qualityLimitationDurations.cpu > 0) {\n        this.appendWarning(\"cpu limited \".concat((stats.qualityLimitationDurations.cpu / (TEST_DURATION / 1000) * 100).toFixed(2), \"%\"));\n      }\n    });\n  }\n  getInfo() {\n    const info = super.getInfo();\n    info.data = this.bestStats;\n    return info;\n  }\n  checkConnectionProtocol(protocol) {\n    return __awaiter(this, void 0, void 0, function* () {\n      yield this.connect();\n      if (protocol === 'tcp') {\n        yield this.switchProtocol('tcp');\n      } else {\n        yield this.switchProtocol('udp');\n      }\n      // create a canvas with animated content\n      const canvas = document.createElement('canvas');\n      canvas.width = 1280;\n      canvas.height = 720;\n      const ctx = canvas.getContext('2d');\n      if (!ctx) {\n        throw new Error('Could not get canvas context');\n      }\n      let hue = 0;\n      const animate = () => {\n        hue = (hue + 1) % 360;\n        ctx.fillStyle = \"hsl(\".concat(hue, \", 100%, 50%)\");\n        ctx.fillRect(0, 0, canvas.width, canvas.height);\n        requestAnimationFrame(animate);\n      };\n      animate();\n      // create video track from canvas\n      const stream = canvas.captureStream(30); // 30fps\n      const videoTrack = stream.getVideoTracks()[0];\n      // publish to room\n      const pub = yield this.room.localParticipant.publishTrack(videoTrack, {\n        simulcast: false,\n        degradationPreference: 'maintain-resolution',\n        videoEncoding: {\n          maxBitrate: 2000000\n        }\n      });\n      const track = pub.track;\n      const protocolStats = {\n        protocol,\n        packetsLost: 0,\n        packetsSent: 0,\n        qualityLimitationDurations: {},\n        rttTotal: 0,\n        jitterTotal: 0,\n        bitrateTotal: 0,\n        count: 0\n      };\n      // gather stats once a second\n      const interval = setInterval(() => __awaiter(this, void 0, void 0, function* () {\n        const stats = yield track.getRTCStatsReport();\n        stats === null || stats === void 0 ? void 0 : stats.forEach(stat => {\n          if (stat.type === 'outbound-rtp') {\n            protocolStats.packetsSent = stat.packetsSent;\n            protocolStats.qualityLimitationDurations = stat.qualityLimitationDurations;\n            protocolStats.bitrateTotal += stat.targetBitrate;\n            protocolStats.count++;\n          } else if (stat.type === 'remote-inbound-rtp') {\n            protocolStats.packetsLost = stat.packetsLost;\n            protocolStats.rttTotal += stat.roundTripTime;\n            protocolStats.jitterTotal += stat.jitter;\n          }\n        });\n      }), 1000);\n      // wait a bit to gather stats\n      yield new Promise(resolve => setTimeout(resolve, TEST_DURATION));\n      clearInterval(interval);\n      videoTrack.stop();\n      canvas.remove();\n      yield this.disconnect();\n      return protocolStats;\n    });\n  }\n}class PublishAudioCheck extends Checker {\n  get description() {\n    return 'Can publish audio';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const room = yield this.connect();\n      const track = yield createLocalAudioTrack();\n      const trackIsSilent = yield detectSilence(track, 1000);\n      if (trackIsSilent) {\n        throw new Error('unable to detect audio from microphone');\n      }\n      this.appendMessage('detected audio from microphone');\n      room.localParticipant.publishTrack(track);\n      // wait for a few seconds to publish\n      yield new Promise(resolve => setTimeout(resolve, 3000));\n      // verify RTC stats that it's publishing\n      const stats = yield (_a = track.sender) === null || _a === void 0 ? void 0 : _a.getStats();\n      if (!stats) {\n        throw new Error('Could not get RTCStats');\n      }\n      let numPackets = 0;\n      stats.forEach(stat => {\n        if (stat.type === 'outbound-rtp' && (stat.kind === 'audio' || !stat.kind && stat.mediaType === 'audio')) {\n          numPackets = stat.packetsSent;\n        }\n      });\n      if (numPackets === 0) {\n        throw new Error('Could not determine packets are sent');\n      }\n      this.appendMessage(\"published \".concat(numPackets, \" audio packets\"));\n    });\n  }\n}class PublishVideoCheck extends Checker {\n  get description() {\n    return 'Can publish video';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const room = yield this.connect();\n      const track = yield createLocalVideoTrack();\n      // check if we have video from camera\n      yield this.checkForVideo(track.mediaStreamTrack);\n      room.localParticipant.publishTrack(track);\n      // wait for a few seconds to publish\n      yield new Promise(resolve => setTimeout(resolve, 5000));\n      // verify RTC stats that it's publishing\n      const stats = yield (_a = track.sender) === null || _a === void 0 ? void 0 : _a.getStats();\n      if (!stats) {\n        throw new Error('Could not get RTCStats');\n      }\n      let numPackets = 0;\n      stats.forEach(stat => {\n        if (stat.type === 'outbound-rtp' && (stat.kind === 'video' || !stat.kind && stat.mediaType === 'video')) {\n          numPackets += stat.packetsSent;\n        }\n      });\n      if (numPackets === 0) {\n        throw new Error('Could not determine packets are sent');\n      }\n      this.appendMessage(\"published \".concat(numPackets, \" video packets\"));\n    });\n  }\n  checkForVideo(track) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const stream = new MediaStream();\n      stream.addTrack(track.clone());\n      // Create video element to check frames\n      const video = document.createElement('video');\n      video.srcObject = stream;\n      video.muted = true;\n      video.autoplay = true;\n      video.playsInline = true;\n      // For iOS Safari\n      video.setAttribute('playsinline', 'true');\n      document.body.appendChild(video);\n      yield new Promise(resolve => {\n        video.onplay = () => {\n          setTimeout(() => {\n            var _a, _b, _c, _d;\n            const canvas = document.createElement('canvas');\n            const settings = track.getSettings();\n            const width = (_b = (_a = settings.width) !== null && _a !== void 0 ? _a : video.videoWidth) !== null && _b !== void 0 ? _b : 1280;\n            const height = (_d = (_c = settings.height) !== null && _c !== void 0 ? _c : video.videoHeight) !== null && _d !== void 0 ? _d : 720;\n            canvas.width = width;\n            canvas.height = height;\n            const ctx = canvas.getContext('2d');\n            // Draw video frame to canvas\n            ctx.drawImage(video, 0, 0);\n            // Get image data and check if all pixels are black\n            const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);\n            const data = imageData.data;\n            let isAllBlack = true;\n            for (let i = 0; i < data.length; i += 4) {\n              if (data[i] !== 0 || data[i + 1] !== 0 || data[i + 2] !== 0) {\n                isAllBlack = false;\n                break;\n              }\n            }\n            if (isAllBlack) {\n              this.appendError('camera appears to be producing only black frames');\n            } else {\n              this.appendMessage('received video frames');\n            }\n            resolve();\n          }, 1000);\n        };\n        video.play();\n      });\n      stream.getTracks().forEach(t => t.stop());\n      video.remove();\n    });\n  }\n}class ReconnectCheck extends Checker {\n  get description() {\n    return 'Resuming connection after interruption';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const room = yield this.connect();\n      let reconnectingTriggered = false;\n      let reconnected = false;\n      let reconnectResolver;\n      const reconnectTimeout = new Promise(resolve => {\n        setTimeout(resolve, 5000);\n        reconnectResolver = resolve;\n      });\n      const handleReconnecting = () => {\n        reconnectingTriggered = true;\n      };\n      room.on(RoomEvent.SignalReconnecting, handleReconnecting).on(RoomEvent.Reconnecting, handleReconnecting).on(RoomEvent.Reconnected, () => {\n        reconnected = true;\n        reconnectResolver(true);\n      });\n      (_a = room.engine.client.ws) === null || _a === void 0 ? void 0 : _a.close();\n      const onClose = room.engine.client.onClose;\n      if (onClose) {\n        onClose('');\n      }\n      yield reconnectTimeout;\n      if (!reconnectingTriggered) {\n        throw new Error('Did not attempt to reconnect');\n      } else if (!reconnected || room.state !== ConnectionState.Connected) {\n        this.appendWarning('reconnection is only possible in Redis-based configurations');\n        throw new Error('Not able to reconnect');\n      }\n    });\n  }\n}class TURNCheck extends Checker {\n  get description() {\n    return 'Can connect via TURN';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      if (isCloud(new URL(this.url))) {\n        this.appendMessage('Using region specific url');\n        this.url = (_a = yield new RegionUrlProvider(this.url, this.token).getNextBestRegionUrl()) !== null && _a !== void 0 ? _a : this.url;\n      }\n      const signalClient = new SignalClient();\n      const joinRes = yield signalClient.join(this.url, this.token, {\n        autoSubscribe: true,\n        maxRetries: 0,\n        e2eeEnabled: false,\n        websocketTimeout: 15000,\n        singlePeerConnection: false\n      });\n      let hasTLS = false;\n      let hasTURN = false;\n      let hasSTUN = false;\n      for (let iceServer of joinRes.iceServers) {\n        for (let url of iceServer.urls) {\n          if (url.startsWith('turn:')) {\n            hasTURN = true;\n            hasSTUN = true;\n          } else if (url.startsWith('turns:')) {\n            hasTURN = true;\n            hasSTUN = true;\n            hasTLS = true;\n          }\n          if (url.startsWith('stun:')) {\n            hasSTUN = true;\n          }\n        }\n      }\n      if (!hasSTUN) {\n        this.appendWarning('No STUN servers configured on server side.');\n      } else if (hasTURN && !hasTLS) {\n        this.appendWarning('TURN is configured server side, but TURN/TLS is unavailable.');\n      }\n      yield signalClient.close();\n      if (((_c = (_b = this.connectOptions) === null || _b === void 0 ? void 0 : _b.rtcConfig) === null || _c === void 0 ? void 0 : _c.iceServers) || hasTURN) {\n        yield this.room.connect(this.url, this.token, {\n          rtcConfig: {\n            iceTransportPolicy: 'relay'\n          }\n        });\n      } else {\n        this.appendWarning('No TURN servers configured.');\n        this.skip();\n        yield new Promise(resolve => setTimeout(resolve, 0));\n      }\n    });\n  }\n}class WebRTCCheck extends Checker {\n  get description() {\n    return 'Establishing WebRTC connection';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      let hasTcp = false;\n      let hasIpv4Udp = false;\n      this.room.on(RoomEvent.SignalConnected, () => {\n        var _a;\n        const prevTrickle = this.room.engine.client.onTrickle;\n        this.room.engine.client.onTrickle = (sd, target) => {\n          if (sd.candidate) {\n            const candidate = new RTCIceCandidate(sd);\n            let str = \"\".concat(candidate.protocol, \" \").concat(candidate.address, \":\").concat(candidate.port, \" \").concat(candidate.type);\n            if (candidate.address) {\n              if (isIPPrivate(candidate.address)) {\n                str += ' (private)';\n              } else {\n                if (candidate.protocol === 'tcp' && candidate.tcpType === 'passive') {\n                  hasTcp = true;\n                  str += ' (passive)';\n                } else if (candidate.protocol === 'udp') {\n                  hasIpv4Udp = true;\n                }\n              }\n            }\n            this.appendMessage(str);\n          }\n          if (prevTrickle) {\n            prevTrickle(sd, target);\n          }\n        };\n        if ((_a = this.room.engine.pcManager) === null || _a === void 0 ? void 0 : _a.subscriber) {\n          this.room.engine.pcManager.subscriber.onIceCandidateError = ev => {\n            if (ev instanceof RTCPeerConnectionIceErrorEvent) {\n              this.appendWarning(\"error with ICE candidate: \".concat(ev.errorCode, \" \").concat(ev.errorText, \" \").concat(ev.url));\n            }\n          };\n        }\n      });\n      try {\n        yield this.connect();\n        livekitLogger.info('now the room is connected');\n      } catch (err) {\n        this.appendWarning('ports need to be open on firewall in order to connect.');\n        throw err;\n      }\n      if (!hasTcp) {\n        this.appendWarning('Server is not configured for ICE/TCP');\n      }\n      if (!hasIpv4Udp) {\n        this.appendWarning('No public IPv4 UDP candidates were found. Your server is likely not configured correctly');\n      }\n    });\n  }\n}\nfunction isIPPrivate(address) {\n  const parts = address.split('.');\n  if (parts.length === 4) {\n    if (parts[0] === '10') {\n      return true;\n    } else if (parts[0] === '192' && parts[1] === '168') {\n      return true;\n    } else if (parts[0] === '172') {\n      const second = parseInt(parts[1], 10);\n      if (second >= 16 && second <= 31) {\n        return true;\n      }\n    }\n  }\n  return false;\n}class WebSocketCheck extends Checker {\n  get description() {\n    return 'Connecting to signal connection via WebSocket';\n  }\n  perform() {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a, _b, _c;\n      if (this.url.startsWith('ws:') || this.url.startsWith('http:')) {\n        this.appendWarning('Server is insecure, clients may block connections to it');\n      }\n      let signalClient = new SignalClient();\n      let joinRes;\n      try {\n        joinRes = yield signalClient.join(this.url, this.token, {\n          autoSubscribe: true,\n          maxRetries: 0,\n          e2eeEnabled: false,\n          websocketTimeout: 15000,\n          singlePeerConnection: false\n        });\n      } catch (e) {\n        if (isCloud(new URL(this.url))) {\n          this.appendMessage(\"Initial connection failed with error \".concat(e.message, \". Retrying with region fallback\"));\n          const regionProvider = new RegionUrlProvider(this.url, this.token);\n          const regionUrl = yield regionProvider.getNextBestRegionUrl();\n          if (regionUrl) {\n            joinRes = yield signalClient.join(regionUrl, this.token, {\n              autoSubscribe: true,\n              maxRetries: 0,\n              e2eeEnabled: false,\n              websocketTimeout: 15000,\n              singlePeerConnection: false\n            });\n            this.appendMessage(\"Fallback to region worked. To avoid initial connections failing, ensure you're calling room.prepareConnection() ahead of time\");\n          }\n        }\n      }\n      if (joinRes) {\n        this.appendMessage(\"Connected to server, version \".concat(joinRes.serverVersion, \".\"));\n        if (((_a = joinRes.serverInfo) === null || _a === void 0 ? void 0 : _a.edition) === ServerInfo_Edition.Cloud && ((_b = joinRes.serverInfo) === null || _b === void 0 ? void 0 : _b.region)) {\n          this.appendMessage(\"LiveKit Cloud: \".concat((_c = joinRes.serverInfo) === null || _c === void 0 ? void 0 : _c.region));\n        }\n      } else {\n        this.appendError(\"Websocket connection could not be established\");\n      }\n      yield signalClient.close();\n    });\n  }\n}class ConnectionCheck extends eventsExports.EventEmitter {\n  constructor(url, token) {\n    let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    super();\n    this.options = {};\n    this.checkResults = new Map();\n    this.url = url;\n    this.token = token;\n    this.options = options;\n  }\n  getNextCheckId() {\n    const nextId = this.checkResults.size;\n    this.checkResults.set(nextId, {\n      logs: [],\n      status: CheckStatus.IDLE,\n      name: '',\n      description: ''\n    });\n    return nextId;\n  }\n  updateCheck(checkId, info) {\n    this.checkResults.set(checkId, info);\n    this.emit('checkUpdate', checkId, info);\n  }\n  isSuccess() {\n    return Array.from(this.checkResults.values()).every(r => r.status !== CheckStatus.FAILED);\n  }\n  getResults() {\n    return Array.from(this.checkResults.values());\n  }\n  createAndRunCheck(check) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const checkId = this.getNextCheckId();\n      const test = new check(this.url, this.token, this.options);\n      const handleUpdate = info => {\n        this.updateCheck(checkId, info);\n      };\n      test.on('update', handleUpdate);\n      const result = yield test.run();\n      test.off('update', handleUpdate);\n      return result;\n    });\n  }\n  checkWebsocket() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(WebSocketCheck);\n    });\n  }\n  checkWebRTC() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(WebRTCCheck);\n    });\n  }\n  checkTURN() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(TURNCheck);\n    });\n  }\n  checkReconnect() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(ReconnectCheck);\n    });\n  }\n  checkPublishAudio() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(PublishAudioCheck);\n    });\n  }\n  checkPublishVideo() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(PublishVideoCheck);\n    });\n  }\n  checkConnectionProtocol() {\n    return __awaiter(this, void 0, void 0, function* () {\n      const info = yield this.createAndRunCheck(ConnectionProtocolCheck);\n      if (info.data && 'protocol' in info.data) {\n        const stats = info.data;\n        this.options.protocol = stats.protocol;\n      }\n      return info;\n    });\n  }\n  checkCloudRegion() {\n    return __awaiter(this, void 0, void 0, function* () {\n      return this.createAndRunCheck(CloudRegionCheck);\n    });\n  }\n}/** A Fixed TokenSource is a token source that takes no parameters and returns a completely\n * independently derived value on each fetch() call.\n *\n * The most common downstream implementer is {@link TokenSourceLiteral}.\n */\nclass TokenSourceFixed {}\n/** A Configurable TokenSource is a token source that takes a\n * {@link TokenSourceFetchOptions} object as input and returns a deterministic\n * {@link TokenSourceResponseObject} output based on the options specified.\n *\n * For example, if options.participantName is set, it should be expected that\n * all tokens that are generated will have participant name field set to the\n * provided value.\n *\n * A few common downstream implementers are {@link TokenSourceEndpoint}\n * and {@link TokenSourceCustom}.\n */\nclass TokenSourceConfigurable {}function _defineProperty(e, r, t) {\n  return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n    value: t,\n    enumerable: true,\n    configurable: true,\n    writable: true\n  }) : e[r] = t, e;\n}\nfunction _toPrimitive(t, r) {\n  if (\"object\" != typeof t || !t) return t;\n  var e = t[Symbol.toPrimitive];\n  if (void 0 !== e) {\n    var i = e.call(t, r);\n    if (\"object\" != typeof i) return i;\n    throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n  }\n  return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n  var i = _toPrimitive(t, \"string\");\n  return \"symbol\" == typeof i ? i : i + \"\";\n}new TextEncoder();\nconst decoder = new TextDecoder();function decodeBase64(encoded) {\n  if (Uint8Array.fromBase64) {\n    return Uint8Array.fromBase64(encoded);\n  }\n  const binary = atob(encoded);\n  const bytes = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++) {\n    bytes[i] = binary.charCodeAt(i);\n  }\n  return bytes;\n}function decode(input) {\n  if (Uint8Array.fromBase64) {\n    return Uint8Array.fromBase64(typeof input === 'string' ? input : decoder.decode(input), {\n      alphabet: 'base64url'\n    });\n  }\n  let encoded = input;\n  if (encoded instanceof Uint8Array) {\n    encoded = decoder.decode(encoded);\n  }\n  encoded = encoded.replace(/-/g, '+').replace(/_/g, '/');\n  try {\n    return decodeBase64(encoded);\n  } catch (_unused) {\n    throw new TypeError('The input to be decoded is not correctly encoded.');\n  }\n}class JOSEError extends Error {\n  constructor(message, options) {\n    var _Error$captureStackTr;\n    super(message, options);\n    _defineProperty(this, \"code\", 'ERR_JOSE_GENERIC');\n    this.name = this.constructor.name;\n    (_Error$captureStackTr = Error.captureStackTrace) === null || _Error$captureStackTr === void 0 || _Error$captureStackTr.call(Error, this, this.constructor);\n  }\n}\n_defineProperty(JOSEError, \"code\", 'ERR_JOSE_GENERIC');\nclass JWTClaimValidationFailed extends JOSEError {\n  constructor(message, payload) {\n    let claim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'unspecified';\n    let reason = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'unspecified';\n    super(message, {\n      cause: {\n        claim,\n        reason,\n        payload\n      }\n    });\n    _defineProperty(this, \"code\", 'ERR_JWT_CLAIM_VALIDATION_FAILED');\n    _defineProperty(this, \"claim\", void 0);\n    _defineProperty(this, \"reason\", void 0);\n    _defineProperty(this, \"payload\", void 0);\n    this.claim = claim;\n    this.reason = reason;\n    this.payload = payload;\n  }\n}\n_defineProperty(JWTClaimValidationFailed, \"code\", 'ERR_JWT_CLAIM_VALIDATION_FAILED');\nclass JWTExpired extends JOSEError {\n  constructor(message, payload) {\n    let claim = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'unspecified';\n    let reason = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 'unspecified';\n    super(message, {\n      cause: {\n        claim,\n        reason,\n        payload\n      }\n    });\n    _defineProperty(this, \"code\", 'ERR_JWT_EXPIRED');\n    _defineProperty(this, \"claim\", void 0);\n    _defineProperty(this, \"reason\", void 0);\n    _defineProperty(this, \"payload\", void 0);\n    this.claim = claim;\n    this.reason = reason;\n    this.payload = payload;\n  }\n}\n_defineProperty(JWTExpired, \"code\", 'ERR_JWT_EXPIRED');\nclass JOSEAlgNotAllowed extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JOSE_ALG_NOT_ALLOWED');\n  }\n}\n_defineProperty(JOSEAlgNotAllowed, \"code\", 'ERR_JOSE_ALG_NOT_ALLOWED');\nclass JOSENotSupported extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JOSE_NOT_SUPPORTED');\n  }\n}\n_defineProperty(JOSENotSupported, \"code\", 'ERR_JOSE_NOT_SUPPORTED');\nclass JWEDecryptionFailed extends JOSEError {\n  constructor() {\n    let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'decryption operation failed';\n    let options = arguments.length > 1 ? arguments[1] : undefined;\n    super(message, options);\n    _defineProperty(this, \"code\", 'ERR_JWE_DECRYPTION_FAILED');\n  }\n}\n_defineProperty(JWEDecryptionFailed, \"code\", 'ERR_JWE_DECRYPTION_FAILED');\nclass JWEInvalid extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JWE_INVALID');\n  }\n}\n_defineProperty(JWEInvalid, \"code\", 'ERR_JWE_INVALID');\nclass JWSInvalid extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JWS_INVALID');\n  }\n}\n_defineProperty(JWSInvalid, \"code\", 'ERR_JWS_INVALID');\nclass JWTInvalid extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JWT_INVALID');\n  }\n}\n_defineProperty(JWTInvalid, \"code\", 'ERR_JWT_INVALID');\nclass JWKInvalid extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JWK_INVALID');\n  }\n}\n_defineProperty(JWKInvalid, \"code\", 'ERR_JWK_INVALID');\nclass JWKSInvalid extends JOSEError {\n  constructor() {\n    super(...arguments);\n    _defineProperty(this, \"code\", 'ERR_JWKS_INVALID');\n  }\n}\n_defineProperty(JWKSInvalid, \"code\", 'ERR_JWKS_INVALID');\nclass JWKSNoMatchingKey extends JOSEError {\n  constructor() {\n    let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'no applicable key found in the JSON Web Key Set';\n    let options = arguments.length > 1 ? arguments[1] : undefined;\n    super(message, options);\n    _defineProperty(this, \"code\", 'ERR_JWKS_NO_MATCHING_KEY');\n  }\n}\n_defineProperty(JWKSNoMatchingKey, \"code\", 'ERR_JWKS_NO_MATCHING_KEY');\nclass JWKSMultipleMatchingKeys extends JOSEError {\n  constructor() {\n    let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'multiple matching keys found in the JSON Web Key Set';\n    let options = arguments.length > 1 ? arguments[1] : undefined;\n    super(message, options);\n    _defineProperty(this, Symbol.asyncIterator, void 0);\n    _defineProperty(this, \"code\", 'ERR_JWKS_MULTIPLE_MATCHING_KEYS');\n  }\n}\n_defineProperty(JWKSMultipleMatchingKeys, \"code\", 'ERR_JWKS_MULTIPLE_MATCHING_KEYS');\nclass JWKSTimeout extends JOSEError {\n  constructor() {\n    let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'request timed out';\n    let options = arguments.length > 1 ? arguments[1] : undefined;\n    super(message, options);\n    _defineProperty(this, \"code\", 'ERR_JWKS_TIMEOUT');\n  }\n}\n_defineProperty(JWKSTimeout, \"code\", 'ERR_JWKS_TIMEOUT');\nclass JWSSignatureVerificationFailed extends JOSEError {\n  constructor() {\n    let message = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'signature verification failed';\n    let options = arguments.length > 1 ? arguments[1] : undefined;\n    super(message, options);\n    _defineProperty(this, \"code\", 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED');\n  }\n}\n_defineProperty(JWSSignatureVerificationFailed, \"code\", 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED');const isObjectLike = value => typeof value === 'object' && value !== null;\nfunction isObject(input) {\n  if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n    return false;\n  }\n  if (Object.getPrototypeOf(input) === null) {\n    return true;\n  }\n  let proto = input;\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n  return Object.getPrototypeOf(input) === proto;\n}function decodeJwt(jwt) {\n  if (typeof jwt !== 'string') throw new JWTInvalid('JWTs must use Compact JWS serialization, JWT must be a string');\n  const {\n    1: payload,\n    length\n  } = jwt.split('.');\n  if (length === 5) throw new JWTInvalid('Only JWTs using Compact JWS serialization can be decoded');\n  if (length !== 3) throw new JWTInvalid('Invalid JWT');\n  if (!payload) throw new JWTInvalid('JWTs must contain a payload');\n  let decoded;\n  try {\n    decoded = decode(payload);\n  } catch (_unused) {\n    throw new JWTInvalid('Failed to base64url decode the payload');\n  }\n  let result;\n  try {\n    result = JSON.parse(decoder.decode(decoded));\n  } catch (_unused2) {\n    throw new JWTInvalid('Failed to parse the decoded payload as JSON');\n  }\n  if (!isObject(result)) throw new JWTInvalid('Invalid JWT Claims Set');\n  return result;\n}const ONE_SECOND_IN_MILLISECONDS = 1000;\nconst ONE_MINUTE_IN_MILLISECONDS = 60 * ONE_SECOND_IN_MILLISECONDS;\nfunction isResponseTokenValid(response) {\n  const jwtPayload = decodeTokenPayload(response.participantToken);\n  if (!(jwtPayload === null || jwtPayload === void 0 ? void 0 : jwtPayload.nbf) || !(jwtPayload === null || jwtPayload === void 0 ? void 0 : jwtPayload.exp)) {\n    return true;\n  }\n  const now = new Date();\n  const nbfInMilliseconds = jwtPayload.nbf * ONE_SECOND_IN_MILLISECONDS;\n  const nbfDate = new Date(nbfInMilliseconds);\n  const expInMilliseconds = jwtPayload.exp * ONE_SECOND_IN_MILLISECONDS;\n  const expDate = new Date(expInMilliseconds - ONE_MINUTE_IN_MILLISECONDS);\n  return nbfDate <= now && expDate > now;\n}\n/** Given a LiveKit generated participant token, decodes and returns the associated {@link TokenPayload} data. */\nfunction decodeTokenPayload(token) {\n  const payload = decodeJwt(token);\n  const {\n      roomConfig\n    } = payload,\n    rest = __rest(payload, [\"roomConfig\"]);\n  const mappedPayload = Object.assign(Object.assign({}, rest), {\n    roomConfig: payload.roomConfig ? RoomConfiguration.fromJson(payload.roomConfig) : undefined\n  });\n  return mappedPayload;\n}\n/** Given two TokenSourceFetchOptions values, check to see if they are deep equal. */\nfunction areTokenSourceFetchOptionsEqual(a, b) {\n  const allKeysSet = new Set([...Object.keys(a), ...Object.keys(b)]);\n  for (const key of allKeysSet) {\n    switch (key) {\n      case 'roomName':\n      case 'participantName':\n      case 'participantIdentity':\n      case 'participantMetadata':\n      case 'participantAttributes':\n      case 'agentName':\n      case 'agentMetadata':\n        if (a[key] !== b[key]) {\n          return false;\n        }\n        break;\n      default:\n        // ref: https://stackoverflow.com/a/58009992\n        const exhaustiveCheckedKey = key;\n        throw new Error(\"Options key \".concat(exhaustiveCheckedKey, \" not being checked for equality!\"));\n    }\n  }\n  return true;\n}/** A TokenSourceCached is a TokenSource which caches the last {@link TokenSourceResponseObject} value and returns it\n * until a) it expires or b) the {@link TokenSourceFetchOptions} provided to .fetch(...) change. */\nclass TokenSourceCached extends TokenSourceConfigurable {\n  constructor() {\n    super(...arguments);\n    this.cachedFetchOptions = null;\n    this.cachedResponse = null;\n    this.fetchMutex = new _();\n  }\n  isSameAsCachedFetchOptions(options) {\n    if (!this.cachedFetchOptions) {\n      return false;\n    }\n    for (const key of Object.keys(this.cachedFetchOptions)) {\n      switch (key) {\n        case 'roomName':\n        case 'participantName':\n        case 'participantIdentity':\n        case 'participantMetadata':\n        case 'participantAttributes':\n        case 'agentName':\n        case 'agentMetadata':\n          if (this.cachedFetchOptions[key] !== options[key]) {\n            return false;\n          }\n          break;\n        default:\n          // ref: https://stackoverflow.com/a/58009992\n          const exhaustiveCheckedKey = key;\n          throw new Error(\"Options key \".concat(exhaustiveCheckedKey, \" not being checked for equality!\"));\n      }\n    }\n    return true;\n  }\n  shouldReturnCachedValueFromFetch(fetchOptions) {\n    if (!this.cachedResponse) {\n      return false;\n    }\n    if (!isResponseTokenValid(this.cachedResponse)) {\n      return false;\n    }\n    if (this.isSameAsCachedFetchOptions(fetchOptions)) {\n      return false;\n    }\n    return true;\n  }\n  getCachedResponseJwtPayload() {\n    if (!this.cachedResponse) {\n      return null;\n    }\n    return decodeTokenPayload(this.cachedResponse.participantToken);\n  }\n  fetch(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const unlock = yield this.fetchMutex.lock();\n      try {\n        if (this.shouldReturnCachedValueFromFetch(options)) {\n          return this.cachedResponse.toJson();\n        }\n        this.cachedFetchOptions = options;\n        const tokenResponse = yield this.update(options);\n        this.cachedResponse = tokenResponse;\n        return tokenResponse.toJson();\n      } finally {\n        unlock();\n      }\n    });\n  }\n}\nclass TokenSourceLiteral extends TokenSourceFixed {\n  constructor(literalOrFn) {\n    super();\n    this.literalOrFn = literalOrFn;\n  }\n  fetch() {\n    return __awaiter(this, void 0, void 0, function* () {\n      if (typeof this.literalOrFn === 'function') {\n        return this.literalOrFn();\n      } else {\n        return this.literalOrFn;\n      }\n    });\n  }\n}\nclass TokenSourceCustom extends TokenSourceCached {\n  constructor(customFn) {\n    super();\n    this.customFn = customFn;\n  }\n  update(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      const resultMaybePromise = this.customFn(options);\n      let result;\n      if (resultMaybePromise instanceof Promise) {\n        result = yield resultMaybePromise;\n      } else {\n        result = resultMaybePromise;\n      }\n      return TokenSourceResponse.fromJson(result, {\n        // NOTE: it could be possible that the response body could contain more fields than just\n        // what's in TokenSourceResponse depending on the implementation\n        ignoreUnknownFields: true\n      });\n    });\n  }\n}\nclass TokenSourceEndpoint extends TokenSourceCached {\n  constructor(url) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    super();\n    this.url = url;\n    this.endpointOptions = options;\n  }\n  createRequestFromOptions(options) {\n    var _a, _b, _c;\n    const request = new TokenSourceRequest();\n    for (const key of Object.keys(options)) {\n      switch (key) {\n        case 'roomName':\n        case 'participantName':\n        case 'participantIdentity':\n        case 'participantMetadata':\n          request[key] = options[key];\n          break;\n        case 'participantAttributes':\n          request.participantAttributes = (_a = options.participantAttributes) !== null && _a !== void 0 ? _a : {};\n          break;\n        case 'agentName':\n          request.roomConfig = (_b = request.roomConfig) !== null && _b !== void 0 ? _b : new RoomConfiguration();\n          if (request.roomConfig.agents.length === 0) {\n            request.roomConfig.agents.push(new RoomAgentDispatch());\n          }\n          request.roomConfig.agents[0].agentName = options.agentName;\n          break;\n        case 'agentMetadata':\n          request.roomConfig = (_c = request.roomConfig) !== null && _c !== void 0 ? _c : new RoomConfiguration();\n          if (request.roomConfig.agents.length === 0) {\n            request.roomConfig.agents.push(new RoomAgentDispatch());\n          }\n          request.roomConfig.agents[0].metadata = options.agentMetadata;\n          break;\n        default:\n          // ref: https://stackoverflow.com/a/58009992\n          const exhaustiveCheckedKey = key;\n          throw new Error(\"Options key \".concat(exhaustiveCheckedKey, \" not being included in forming request!\"));\n      }\n    }\n    return request;\n  }\n  update(options) {\n    return __awaiter(this, void 0, void 0, function* () {\n      var _a;\n      const request = this.createRequestFromOptions(options);\n      const response = yield fetch(this.url, Object.assign(Object.assign({}, this.endpointOptions), {\n        method: (_a = this.endpointOptions.method) !== null && _a !== void 0 ? _a : 'POST',\n        headers: Object.assign({\n          'Content-Type': 'application/json'\n        }, this.endpointOptions.headers),\n        body: request.toJsonString({\n          useProtoFieldName: true\n        })\n      }));\n      if (!response.ok) {\n        throw new Error(\"Error generating token from endpoint \".concat(this.url, \": received \").concat(response.status, \" / \").concat(yield response.text()));\n      }\n      const body = yield response.json();\n      return TokenSourceResponse.fromJson(body, {\n        // NOTE: it could be possible that the response body could contain more fields than just\n        // what's in TokenSourceResponse depending on the implementation (ie, SandboxTokenServer)\n        ignoreUnknownFields: true\n      });\n    });\n  }\n}\nclass TokenSourceSandboxTokenServer extends TokenSourceEndpoint {\n  constructor(sandboxId, options) {\n    const {\n        baseUrl = 'https://cloud-api.livekit.io'\n      } = options,\n      rest = __rest(options, [\"baseUrl\"]);\n    super(\"\".concat(baseUrl, \"/api/v2/sandbox/connection-details\"), Object.assign(Object.assign({}, rest), {\n      headers: {\n        'X-Sandbox-ID': sandboxId\n      }\n    }));\n  }\n}\nconst TokenSource = {\n  /** TokenSource.literal contains a single, literal set of {@link TokenSourceResponseObject}\n   * credentials, either provided directly or returned from a provided function. */\n  literal(literalOrFn) {\n    return new TokenSourceLiteral(literalOrFn);\n  },\n  /**\n   * TokenSource.custom allows a user to define a manual function which generates new\n   * {@link TokenSourceResponseObject} values on demand.\n   *\n   * Use this to get credentials from custom backends / etc.\n   */\n  custom(customFn) {\n    return new TokenSourceCustom(customFn);\n  },\n  /**\n   * TokenSource.endpoint creates a token source that fetches credentials from a given URL using\n   * the standard endpoint format:\n   * @see https://cloud.livekit.io/projects/p_/sandbox/templates/token-server\n   */\n  endpoint(url) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    return new TokenSourceEndpoint(url, options);\n  },\n  /**\n   * TokenSource.sandboxTokenServer queries a sandbox token server for credentials,\n   * which supports quick prototyping / getting started types of use cases.\n   *\n   * This token provider is INSECURE and should NOT be used in production.\n   *\n   * For more info:\n   * @see https://cloud.livekit.io/projects/p_/sandbox/templates/token-server\n   */\n  sandboxTokenServer(sandboxId) {\n    let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n    return new TokenSourceSandboxTokenServer(sandboxId, options);\n  }\n};/**\n * Try to analyze the local track to determine the facing mode of a track.\n *\n * @remarks\n * There is no property supported by all browsers to detect whether a video track originated from a user- or environment-facing camera device.\n * For this reason, we use the `facingMode` property when available, but will fall back on a string-based analysis of the device label to determine the facing mode.\n * If both methods fail, the default facing mode will be used.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints/facingMode | MDN docs on facingMode}\n * @experimental\n */\nfunction facingModeFromLocalTrack(localTrack) {\n  let options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  var _a;\n  const track = isLocalTrack(localTrack) ? localTrack.mediaStreamTrack : localTrack;\n  const trackSettings = track.getSettings();\n  let result = {\n    facingMode: (_a = options.defaultFacingMode) !== null && _a !== void 0 ? _a : 'user',\n    confidence: 'low'\n  };\n  // 1. Try to get facingMode from track settings.\n  if ('facingMode' in trackSettings) {\n    const rawFacingMode = trackSettings.facingMode;\n    livekitLogger.trace('rawFacingMode', {\n      rawFacingMode\n    });\n    if (rawFacingMode && typeof rawFacingMode === 'string' && isFacingModeValue(rawFacingMode)) {\n      result = {\n        facingMode: rawFacingMode,\n        confidence: 'high'\n      };\n    }\n  }\n  // 2. If we don't have a high confidence we try to get the facing mode from the device label.\n  if (['low', 'medium'].includes(result.confidence)) {\n    livekitLogger.trace(\"Try to get facing mode from device label: (\".concat(track.label, \")\"));\n    const labelAnalysisResult = facingModeFromDeviceLabel(track.label);\n    if (labelAnalysisResult !== undefined) {\n      result = labelAnalysisResult;\n    }\n  }\n  return result;\n}\nconst knownDeviceLabels = new Map([['obs virtual camera', {\n  facingMode: 'environment',\n  confidence: 'medium'\n}]]);\nconst knownDeviceLabelSections = new Map([['iphone', {\n  facingMode: 'environment',\n  confidence: 'medium'\n}], ['ipad', {\n  facingMode: 'environment',\n  confidence: 'medium'\n}]]);\n/**\n * Attempt to analyze the device label to determine the facing mode.\n *\n * @experimental\n */\nfunction facingModeFromDeviceLabel(deviceLabel) {\n  var _a;\n  const label = deviceLabel.trim().toLowerCase();\n  // Empty string is a valid device label but we can't infer anything from it.\n  if (label === '') {\n    return undefined;\n  }\n  // Can we match against widely known device labels.\n  if (knownDeviceLabels.has(label)) {\n    return knownDeviceLabels.get(label);\n  }\n  // Can we match against sections of the device label.\n  return (_a = Array.from(knownDeviceLabelSections.entries()).find(_ref => {\n    let [section] = _ref;\n    return label.includes(section);\n  })) === null || _a === void 0 ? void 0 : _a[1];\n}\nfunction isFacingModeValue(item) {\n  const allowedValues = ['user', 'environment', 'left', 'right'];\n  return item === undefined || allowedValues.includes(item);\n}export{AudioPresets,BackupCodecPolicy,BaseKeyProvider,CheckStatus,Checker,ConnectionCheck,ConnectionError,ConnectionErrorReason,ConnectionQuality,ConnectionState,CriticalTimers,CryptorError,CryptorErrorReason,CryptorEvent,DataPacket_Kind,DataStreamError,DataStreamErrorReason,DefaultReconnectPolicy,DeviceUnsupportedError,DisconnectReason,EncryptionEvent,Encryption_Type,EngineEvent,ExternalE2EEKeyProvider,KeyHandlerEvent,KeyProviderEvent,LivekitError,LocalAudioTrack,LocalParticipant,LocalTrack,LocalTrackPublication,LocalTrackRecorder,LocalVideoTrack,LogLevel,LoggerNames,MediaDeviceFailure,_ as Mutex,NegotiationError,Participant,ParticipantEvent,ParticipantInfo_Kind as ParticipantKind,PublishDataError,PublishTrackError,RemoteAudioTrack,RemoteParticipant,RemoteTrack,RemoteTrackPublication,RemoteVideoTrack,Room,RoomEvent,RpcError,ScreenSharePresets,SignalReconnectError,SignalRequestError,SimulatedError,SubscriptionError,TokenSource,TokenSourceConfigurable,TokenSourceFixed,Track,TrackEvent,TrackInvalidError,TrackPublication,TrackType,UnexpectedConnectionState,UnsupportedServer,VideoPreset,VideoPresets,VideoPresets43,VideoQuality,areTokenSourceFetchOptionsEqual,asEncryptablePacket,attachToElement,attributeTypings as attributes,audioCodecs,compareVersions,createAudioAnalyser,createE2EEKey,createKeyMaterialFromBuffer,createKeyMaterialFromString,createLocalAudioTrack,createLocalScreenTracks,createLocalTracks,createLocalVideoTrack,decodeTokenPayload,deriveKeys,detachTrack,facingModeFromDeviceLabel,facingModeFromLocalTrack,getBrowser,getEmptyAudioStreamTrack,getEmptyVideoStreamTrack,getLogger,importKey,isAudioCodec,isAudioTrack,isBackupCodec,isBackupVideoCodec,isBrowserSupported,isE2EESupported,isInsertableStreamSupported,isLocalParticipant,isLocalTrack,isRemoteParticipant,isRemoteTrack,isScriptTransformSupported,isVideoCodec,isVideoFrame,isVideoTrack,needsRbspUnescaping,parseRbsp,protocolVersion,ratchet,setLogExtension,setLogLevel,supportsAV1,supportsAdaptiveStream,supportsAudioOutputSelection,supportsDynacast,supportsVP9,version,videoCodecs,writeRbsp};//# sourceMappingURL=livekit-client.esm.mjs.map\n","import { sourceInfo } from \"../sourceInfo.js\";\nexport const CONVERSATION_INITIATION_CLIENT_DATA_TYPE = \"conversation_initiation_client_data\";\nexport function constructOverrides(config) {\n    const overridesEvent = {\n        type: CONVERSATION_INITIATION_CLIENT_DATA_TYPE,\n    };\n    if (config.overrides) {\n        overridesEvent.conversation_config_override = {\n            agent: {\n                prompt: config.overrides.agent?.prompt,\n                first_message: config.overrides.agent?.firstMessage,\n                language: config.overrides.agent?.language,\n            },\n            tts: {\n                voice_id: config.overrides.tts?.voiceId,\n                speed: config.overrides.tts?.speed,\n                stability: config.overrides.tts?.stability,\n                similarity_boost: config.overrides.tts?.similarityBoost,\n            },\n            ...(config.overrides.asr?.keywords !== undefined\n                ? { asr: { keywords: config.overrides.asr.keywords } }\n                : {}),\n            conversation: {\n                text_only: config.overrides.conversation?.textOnly,\n            },\n        };\n    }\n    if (config.customLlmExtraBody) {\n        overridesEvent.custom_llm_extra_body = config.customLlmExtraBody;\n    }\n    if (config.dynamicVariables) {\n        overridesEvent.dynamic_variables = config.dynamicVariables;\n    }\n    if (config.userId) {\n        overridesEvent.user_id = config.userId;\n    }\n    overridesEvent.source_info = {\n        source: sourceInfo.name,\n        version: sourceInfo.version,\n    };\n    if (config.toolMockConfig) {\n        overridesEvent.tool_mock_config = {\n            mocking_strategy: config.toolMockConfig.mockingStrategy,\n            mocked_tool_names: config.toolMockConfig.mockedToolNames,\n            fallback_strategy: config.toolMockConfig.fallbackStrategy,\n        };\n    }\n    return overridesEvent;\n}\n//# sourceMappingURL=overrides.js.map","export function arrayBufferToBase64(b) {\n    const buffer = new Uint8Array(b);\n    const base64Data = btoa(String.fromCharCode(...buffer));\n    return base64Data;\n}\nexport function base64ToArrayBuffer(base64) {\n    const binaryString = atob(base64);\n    const len = binaryString.length;\n    const bytes = new Uint8Array(len);\n    for (let i = 0; i < len; i++) {\n        bytes[i] = binaryString.charCodeAt(i);\n    }\n    return bytes.buffer;\n}\n//# sourceMappingURL=audio.js.map","export const NO_VOLUME = {\n    getVolume: () => 0,\n    getByteFrequencyData: () => { },\n};\n// Voice-relevant frequency range, matching the React Native multiband\n// processor config so both platforms return comparable data.\nexport const MIN_VOICE_FREQUENCY = 100;\nexport const MAX_VOICE_FREQUENCY = 8000;\n/**\n * Resamples the voice-relevant portion of raw frequency data into an output\n * buffer using linear interpolation. This ensures both web and React Native\n * return comparable frequency data focused on the human voice range.\n */\nexport function resampleVoiceRange(raw, buffer, sampleRate) {\n    const binCount = raw.length;\n    const hzPerBin = sampleRate / 2 / binCount;\n    const minBin = Math.floor(MIN_VOICE_FREQUENCY / hzPerBin);\n    const maxBin = Math.min(Math.ceil(MAX_VOICE_FREQUENCY / hzPerBin), binCount);\n    const voiceBinCount = maxBin - minBin;\n    const outLen = buffer.length;\n    for (let i = 0; i < outLen; i++) {\n        const pos = (i / outLen) * voiceBinCount;\n        const lo = minBin + Math.floor(pos);\n        const hi = Math.min(lo + 1, maxBin - 1);\n        const t = pos - Math.floor(pos);\n        buffer[i] = Math.round(raw[lo] * (1 - t) + raw[hi] * t);\n    }\n}\n//# sourceMappingURL=volumeProvider.js.map","// ---------------------------------------------------------------------------\n// Module-level factory for platform injection\n// ---------------------------------------------------------------------------\nlet audioAdapterFactory;\n/**\n * Register a factory that creates a {@link WebRTCAudioAdapter} for each\n * new WebRTC connection. Called by platform-specific entrypoints\n * (e.g. `platform/web/index.ts`).\n */\nexport function setWebRTCAudioAdapterFactory(factory) {\n    audioAdapterFactory = factory;\n}\n/** @internal Create an adapter using the registered factory, or null. */\nexport function createAudioAdapter() {\n    return audioAdapterFactory?.() ?? null;\n}\n//# sourceMappingURL=WebRTCAudioAdapter.js.map","import { BaseConnection, parseFormat, } from \"./BaseConnection.js\";\nimport { isJsonObject } from \"./assert.js\";\nimport { extractApiErrorMessage } from \"./errors.js\";\nimport { sourceInfo } from \"../sourceInfo.js\";\nimport { isValidSocketEvent } from \"./events.js\";\nimport { Room, RoomEvent, Track, ConnectionState, createLocalAudioTrack, } from \"livekit-client\";\nimport { constructOverrides, CONVERSATION_INITIATION_CLIENT_DATA_TYPE, } from \"./overrides.js\";\nimport { arrayBufferToBase64 } from \"./audio.js\";\nimport { NO_VOLUME } from \"./volumeProvider.js\";\nimport { createAudioAdapter, } from \"../WebRTCAudioAdapter.js\";\nconst DEFAULT_LIVEKIT_WS_URL = \"wss://livekit.rtc.elevenlabs.io\";\nconst HTTPS_API_ORIGIN = \"https://api.elevenlabs.io\";\nconst AUDIO_VOLUME_THRESHOLD = 0.01;\n// Convert WSS origin to HTTPS for API calls\nfunction convertWssToHttps(origin) {\n    return origin.replace(/^wss:\\/\\//, \"https://\");\n}\nexport class WebRTCConnection extends BaseConnection {\n    conversationId;\n    inputFormat;\n    outputFormat;\n    room;\n    isConnected = false;\n    audioEventId = 1;\n    outputDeviceId = null;\n    audioAdapter;\n    inputAnalyser = undefined;\n    inputVolumeProvider = NO_VOLUME;\n    outputAnalyser = undefined;\n    outputVolumeProvider = NO_VOLUME;\n    // InputController state\n    _isMuted = false;\n    // InputController interface exposed as a property\n    input = {\n        close: async () => {\n            // Close only microphone tracks, not the entire connection\n            if (this.isConnected) {\n                try {\n                    this.room.localParticipant.audioTrackPublications.forEach(publication => {\n                        if (publication.track) {\n                            publication.track.stop();\n                        }\n                    });\n                }\n                catch (error) {\n                    console.warn(\"Error stopping local tracks:\", error);\n                }\n            }\n        },\n        setDevice: async (config) => {\n            // WebRTC only supports changing inputDeviceId\n            // sampleRate, format, and preferHeadphonesForIosDevices are not supported\n            if (config?.sampleRate !== undefined ||\n                config?.format !== undefined ||\n                config?.preferHeadphonesForIosDevices !== undefined) {\n                throw new Error(\"WebRTC input device does not support sampleRate, format, or preferHeadphonesForIosDevices options\");\n            }\n            const inputDeviceId = config?.inputDeviceId;\n            if (!inputDeviceId) {\n                // No device ID specified - this is a no-op for WebRTC\n                // The default device is already being used\n                return;\n            }\n            await this.setAudioInputDevice(inputDeviceId);\n        },\n        setMuted: async (isMuted) => {\n            if (!this.isConnected || !this.room.localParticipant) {\n                console.warn(\"Cannot set microphone muted: room not connected or no local participant\");\n                return;\n            }\n            // Set immediately so volume/frequency indicators reflect the muted\n            // state even if the underlying track operation fails (e.g. on RN).\n            this._isMuted = isMuted;\n            // Get the microphone track publication\n            const micTrackPublication = this.room.localParticipant.getTrackPublication(Track.Source.Microphone);\n            if (micTrackPublication?.track) {\n                try {\n                    // Use LiveKit's built-in track muting\n                    if (isMuted) {\n                        await micTrackPublication.track.mute();\n                    }\n                    else {\n                        await micTrackPublication.track.unmute();\n                    }\n                }\n                catch (_error) {\n                    // If track muting fails, fall back to participant-level control\n                    await this.room.localParticipant.setMicrophoneEnabled(!isMuted);\n                }\n            }\n            else {\n                // No track found, use participant-level control directly\n                await this.room.localParticipant.setMicrophoneEnabled(!isMuted);\n            }\n            // After unmuting, reconnect the input analyser because LiveKit may\n            // have replaced the underlying MediaStreamTrack during mute/unmute.\n            if (!isMuted) {\n                const track = this.room.localParticipant.getTrackPublication(Track.Source.Microphone)?.track;\n                if (track) {\n                    this.setupInputAnalyser(track.mediaStreamTrack);\n                }\n            }\n        },\n        isMuted: () => this._isMuted,\n        getAnalyser: () => this.inputAnalyser,\n        getVolume: () => {\n            if (this._isMuted)\n                return 0;\n            return this.inputVolumeProvider.getVolume();\n        },\n        getByteFrequencyData: (buffer) => {\n            if (this._isMuted) {\n                buffer.fill(0);\n                return;\n            }\n            this.inputVolumeProvider.getByteFrequencyData(buffer);\n        },\n    };\n    // OutputController interface exposed as a property\n    output = {\n        close: async () => {\n            // No-op for WebRTC - LiveKit handles cleanup\n            // Audio elements are cleaned up when the connection closes\n        },\n        setDevice: async (config) => {\n            // WebRTC only supports changing outputDeviceId\n            // sampleRate and format are not supported\n            if (config?.sampleRate !== undefined || config?.format !== undefined) {\n                throw new Error(\"WebRTC output device does not support sampleRate or format options\");\n            }\n            const outputDeviceId = config?.outputDeviceId;\n            if (!outputDeviceId) {\n                // No device ID specified - this is a no-op for WebRTC\n                // The default device is already being used\n                return;\n            }\n            await this.setAudioOutputDevice(outputDeviceId);\n        },\n        setVolume: (volume) => {\n            this.setAudioVolume(volume);\n        },\n        interrupt: (_resetDuration) => {\n            // No-op for WebRTC - LiveKit handles audio playback and interruption\n            // Audio interruption is managed by the server/agent\n        },\n        getAnalyser: () => this.outputAnalyser,\n        getVolume: () => this.outputVolumeProvider.getVolume(),\n        getByteFrequencyData: (buffer) => {\n            this.outputVolumeProvider.getByteFrequencyData(buffer);\n        },\n    };\n    constructor(room, conversationId, inputFormat, outputFormat, config = {}) {\n        super(config);\n        this.room = room;\n        this.conversationId = conversationId;\n        this.inputFormat = inputFormat;\n        this.outputFormat = outputFormat;\n        this.audioAdapter = createAudioAdapter();\n        this.setupRoomEventListeners();\n    }\n    static async create(config) {\n        let conversationToken;\n        // Handle different authentication scenarios\n        if (\"conversationToken\" in config && config.conversationToken) {\n            // Direct token provided\n            conversationToken = config.conversationToken;\n        }\n        else if (\"agentId\" in config && config.agentId) {\n            // Agent ID provided - fetch token from API\n            try {\n                const { name: source, version } = sourceInfo;\n                const configOrigin = config.origin ?? HTTPS_API_ORIGIN;\n                const origin = convertWssToHttps(configOrigin); //origin is wss, not https\n                let url = `${origin}/v1/convai/conversation/token?agent_id=${config.agentId}&source=${source}&version=${version}`;\n                if (config.environment) {\n                    url += `&environment=${encodeURIComponent(config.environment)}`;\n                }\n                const response = await fetch(url);\n                if (!response.ok) {\n                    const message = await extractApiErrorMessage(response);\n                    throw new Error(`ElevenLabs API returned ${response.status} ${message}`);\n                }\n                const data = await response.json();\n                if (!isJsonObject(data) || typeof data.token !== \"string\") {\n                    throw new Error(\"No conversation token received from API\");\n                }\n                conversationToken = data.token;\n                if (!conversationToken) {\n                    throw new Error(\"No conversation token received from API\");\n                }\n            }\n            catch (error) {\n                let msg = error instanceof Error ? error.message : String(error);\n                if (error instanceof Error && error.message.includes(\"401\")) {\n                    msg =\n                        \"Your agent has authentication enabled, but no signed URL or conversation token was provided.\";\n                }\n                throw new Error(`Failed to fetch conversation token for agent ${config.agentId}: ${msg}`);\n            }\n        }\n        else {\n            throw new Error(\"Either conversationToken or agentId is required for WebRTC connection\");\n        }\n        const room = new Room({\n            // Force dual peer connection (v0) path to maintain compatibility\n            // with LiveKit servers that don't support the v1 join protocol\n            // (publisher offer bundled in JoinRequest). See #781.\n            singlePeerConnection: false,\n        });\n        try {\n            // Create connection instance first to set up event listeners\n            const conversationId = `room_${Date.now()}`;\n            const inputFormat = parseFormat(\"pcm_48000\");\n            const outputFormat = parseFormat(\"pcm_48000\");\n            const connection = new WebRTCConnection(room, conversationId, inputFormat, outputFormat, config);\n            // Use configurable LiveKit URL or default if not provided\n            const livekitUrl = config.livekitUrl || DEFAULT_LIVEKIT_WS_URL;\n            // Enable microphone on SignalConnected (before room.connect resolves).\n            // The server may wait for the client to publish audio before fully\n            // establishing the subscriber peer connection, matching the behaviour\n            // of @livekit/components-react's useLiveKitRoom hook.\n            const micEnabled = config.textOnly\n                ? Promise.resolve()\n                : new Promise((resolve, reject) => {\n                    room.once(RoomEvent.SignalConnected, () => {\n                        room.localParticipant\n                            .setMicrophoneEnabled(true)\n                            .then(() => resolve())\n                            .catch(reject);\n                    });\n                });\n            // Connect to the LiveKit room\n            await room.connect(livekitUrl, conversationToken);\n            // Wait for the Connected event to ensure isConnected is true\n            await new Promise(resolve => {\n                if (connection.isConnected) {\n                    resolve();\n                }\n                else {\n                    const onConnected = () => {\n                        room.off(RoomEvent.Connected, onConnected);\n                        resolve();\n                    };\n                    room.on(RoomEvent.Connected, onConnected);\n                }\n            });\n            // Ensure the microphone was successfully enabled\n            await micEnabled;\n            // Set up input analyser from the local mic track for volume metering\n            const micTrack = room.localParticipant.getTrackPublication(Track.Source.Microphone)?.track;\n            if (micTrack) {\n                connection.setupInputAnalyser(micTrack.mediaStreamTrack);\n            }\n            if (room.name) {\n                connection.conversationId =\n                    room.name.match(/(conv_[a-zA-Z0-9]+)/)?.[0] || room.name;\n            }\n            const overridesEvent = constructOverrides(config);\n            connection.debug({\n                type: CONVERSATION_INITIATION_CLIENT_DATA_TYPE,\n                message: overridesEvent,\n            });\n            await connection.sendMessage(overridesEvent);\n            return connection;\n        }\n        catch (error) {\n            await room.disconnect();\n            throw error;\n        }\n    }\n    setupRoomEventListeners() {\n        this.room.on(RoomEvent.Connected, () => {\n            this.isConnected = true;\n        });\n        this.room.on(RoomEvent.Disconnected, reason => {\n            this.isConnected = false;\n            this.disconnect({\n                reason: \"agent\",\n                context: { type: \"close\", reason: reason?.toString() },\n            });\n        });\n        this.room.on(RoomEvent.ConnectionStateChanged, state => {\n            if (state === ConnectionState.Disconnected) {\n                this.isConnected = false;\n                this.disconnect({\n                    reason: \"error\",\n                    message: `LiveKit connection state changed to ${state}`,\n                    context: { type: \"connection_state_changed\" },\n                });\n            }\n        });\n        // Handle incoming data messages\n        this.room.on(RoomEvent.DataReceived, (payload, _participant) => {\n            try {\n                const message = JSON.parse(new TextDecoder().decode(payload));\n                // Audio bytes flow over LiveKit audio tracks, NOT the data channel —\n                // but the same JSON message carries the alignment metadata\n                // (chars + char_start_times_ms + char_durations_ms). Dropping\n                // the whole message drops alignment along with it, which\n                // prevents onAudioAlignment from firing on the WebRTC transport\n                // even though the WebSocket transport surfaces it correctly.\n                // Route audio messages through handleMessage so\n                // VoiceConversation.handleAudio can fire onAudioAlignment, then\n                // return without re-playing audio_base_64 (LiveKit already\n                // plays it via the audio track).\n                if (message.type === \"audio\") {\n                    if (isValidSocketEvent(message)) {\n                        this.handleMessage(message);\n                    }\n                    return;\n                }\n                if (isValidSocketEvent(message)) {\n                    this.handleMessage(message);\n                }\n                else {\n                    console.warn(\"Invalid socket event received:\", message);\n                }\n            }\n            catch (error) {\n                console.warn(\"Failed to parse incoming data message:\", error);\n                console.warn(\"Raw payload:\", new TextDecoder().decode(payload));\n            }\n        });\n        this.room.on(RoomEvent.TrackSubscribed, async (track, _publication, participant) => {\n            if (track.kind === Track.Kind.Audio &&\n                participant.identity.includes(\"agent\")) {\n                const remoteAudioTrack = track;\n                if (this.audioAdapter) {\n                    // Delegate playback to the platform-specific adapter\n                    await this.audioAdapter.attachRemoteTrack(remoteAudioTrack, this.outputDeviceId);\n                    // Set up output volume analysis and audio capture\n                    await this.setupAudioCapture(remoteAudioTrack);\n                    this.onDebug?.({ type: \"audio_element_ready\" });\n                }\n            }\n        });\n        this.room.on(RoomEvent.ActiveSpeakersChanged, async (speakers) => {\n            if (speakers.length > 0) {\n                this.updateMode(speakers[0].identity.startsWith(\"agent\") ? \"speaking\" : \"listening\");\n            }\n            else {\n                this.updateMode(\"listening\");\n            }\n        });\n        this.room.on(RoomEvent.ParticipantDisconnected, (participant) => {\n            if (participant.identity?.startsWith(\"agent\")) {\n                this.disconnect({\n                    reason: \"agent\",\n                    context: { type: \"close\", reason: \"agent disconnected\" },\n                });\n            }\n        });\n    }\n    close() {\n        if (this.isConnected) {\n            try {\n                // Explicitly stop all local tracks before disconnecting to ensure microphone is released\n                this.room.localParticipant.audioTrackPublications.forEach(publication => {\n                    if (publication.track) {\n                        publication.track.stop();\n                    }\n                });\n            }\n            catch (error) {\n                console.warn(\"Error stopping local tracks:\", error);\n            }\n            // Delegate all audio cleanup to the adapter\n            this.audioAdapter?.cleanup();\n            this.inputAnalyser = undefined;\n            this.outputAnalyser = undefined;\n            this.inputVolumeProvider = NO_VOLUME;\n            this.outputVolumeProvider = NO_VOLUME;\n            this.room.disconnect();\n        }\n    }\n    async sendMessage(message) {\n        if (!this.isConnected || !this.room.localParticipant) {\n            console.warn(\"Cannot send message: room not connected or no local participant\");\n            return;\n        }\n        // In WebRTC mode, audio is sent via published tracks, not data messages\n        if (\"user_audio_chunk\" in message) {\n            // Ignore audio data messages - audio flows through WebRTC tracks\n            return;\n        }\n        try {\n            const encoder = new TextEncoder();\n            const data = encoder.encode(JSON.stringify(message));\n            await this.room.localParticipant.publishData(data, { reliable: true });\n        }\n        catch (error) {\n            this.debug({\n                type: \"send_message_error\",\n                message: {\n                    message,\n                    error,\n                },\n            });\n            console.error(\"Failed to send message via WebRTC:\", error);\n        }\n    }\n    // Get the room instance for advanced usage\n    getRoom() {\n        return this.room;\n    }\n    /**\n     * Delegates input volume analysis to the audio adapter (if present).\n     * Called once during create() and again after an input device switch\n     * so the analyser follows the active mic track.\n     */\n    setupInputAnalyser(mediaStreamTrack) {\n        if (!this.audioAdapter)\n            return;\n        try {\n            const result = this.audioAdapter.setupInputAnalysis(mediaStreamTrack);\n            this.inputVolumeProvider = result.volumeProvider;\n            this.inputAnalyser = result.analyser;\n        }\n        catch (error) {\n            // Don't reset inputVolumeProvider here — an external provider (e.g.\n            // React Native's native volume layer) may still be valid.\n            console.warn(\"[ConversationalAI] Failed to set up input volume analyser:\", error);\n        }\n    }\n    setInputVolumeProvider(provider) {\n        this.inputVolumeProvider = provider;\n    }\n    setOutputVolumeProvider(provider) {\n        this.outputVolumeProvider = provider;\n    }\n    async setupAudioCapture(track) {\n        if (!this.audioAdapter)\n            return;\n        try {\n            const onAudioData = (audioData, maxVolume) => {\n                // Only send audio if there's significant volume (not just silence)\n                if (maxVolume > AUDIO_VOLUME_THRESHOLD) {\n                    // Convert to base64\n                    const base64Audio = arrayBufferToBase64(audioData);\n                    // Use sequential event ID for proper feedback tracking\n                    const eventId = this.audioEventId++;\n                    // Trigger the onAudio callback by simulating an audio event\n                    this.handleMessage({\n                        type: \"audio\",\n                        audio_event: {\n                            audio_base_64: base64Audio,\n                            event_id: eventId,\n                        },\n                    });\n                }\n            };\n            const result = await this.audioAdapter.setupOutputAnalysis(track, this.outputFormat, onAudioData);\n            this.outputVolumeProvider = result.volumeProvider;\n            this.outputAnalyser = result.analyser;\n        }\n        catch (error) {\n            console.warn(\"Failed to set up audio capture:\", error);\n        }\n    }\n    setAudioVolume(volume) {\n        this.audioAdapter?.setVolume(volume);\n    }\n    async setAudioOutputDevice(deviceId) {\n        if (!this.audioAdapter) {\n            throw new Error(\"Cannot set output device: no audio adapter available on this platform\");\n        }\n        await this.audioAdapter.setOutputDevice(deviceId);\n        // Store the device ID for future audio elements\n        this.outputDeviceId = deviceId;\n    }\n    async setAudioInputDevice(deviceId) {\n        if (!this.isConnected || !this.room.localParticipant) {\n            throw new Error(\"Cannot change input device: room not connected or no local participant\");\n        }\n        try {\n            // Get the current microphone track publication\n            const currentMicTrackPublication = this.room.localParticipant.getTrackPublication(Track.Source.Microphone);\n            // Stop the current microphone track if it exists\n            if (currentMicTrackPublication?.track) {\n                await currentMicTrackPublication.track.stop();\n                await this.room.localParticipant.unpublishTrack(currentMicTrackPublication.track);\n            }\n            // Create new audio track with the specified device\n            const audioTrack = await createLocalAudioTrack({\n                deviceId: { exact: deviceId },\n                echoCancellation: true,\n                noiseSuppression: true,\n                autoGainControl: true,\n                channelCount: { ideal: 1 },\n            });\n            // Publish the new microphone track\n            await this.room.localParticipant.publishTrack(audioTrack, {\n                name: \"microphone\",\n                source: Track.Source.Microphone,\n            });\n            // Reconnect the input analyser to the new track\n            this.setupInputAnalyser(audioTrack.mediaStreamTrack);\n        }\n        catch (error) {\n            console.error(\"Failed to change input device:\", error);\n            // Try to re-enable default microphone on failure\n            try {\n                await this.room.localParticipant.setMicrophoneEnabled(true);\n            }\n            catch (recoveryError) {\n                console.error(\"Failed to recover microphone after device switch error:\", recoveryError);\n            }\n            throw error;\n        }\n    }\n}\n//# sourceMappingURL=WebRTCConnection.js.map","import { WebRTCConnection } from \"../utils/WebRTCConnection.js\";\n/**\n * The active session setup strategy.\n * Defaults to undefined — set by platform-specific entrypoints on import.\n */\nexport let setupStrategy;\n/**\n * Override the voice session setup strategy.\n * Called by platform-specific entrypoints to inject their own setup handling.\n */\nexport function setSetupStrategy(strategy) {\n    setupStrategy = strategy;\n}\n/**\n * Sets up a voice session for a WebRTC connection.\n * Platform-agnostic: extracts the input/output controllers that\n * WebRTCConnection already provides via LiveKit.\n */\nexport function setupWebRTCSession(connection) {\n    if (!(connection instanceof WebRTCConnection)) {\n        throw new Error(\"setupWebRTCSession requires a WebRTCConnection. \" +\n            `Received: ${connection?.constructor?.name ?? typeof connection}`);\n    }\n    return {\n        connection,\n        input: connection.input,\n        output: connection.output,\n        playbackEventTarget: null,\n        detach: async () => { },\n    };\n}\n//# sourceMappingURL=VoiceSessionSetup.js.map","import { BaseConnection, parseFormat, } from \"./BaseConnection.js\";\nimport { sourceInfo } from \"../sourceInfo.js\";\nimport { isValidSocketEvent, } from \"./events.js\";\nimport { constructOverrides } from \"./overrides.js\";\nimport { SessionConnectionError } from \"./errors.js\";\nconst MAIN_PROTOCOL = \"convai\";\nconst WSS_API_ORIGIN = \"wss://api.elevenlabs.io\";\nconst WSS_API_PATHNAME = \"/v1/convai/conversation?agent_id=\";\nexport class WebSocketConnection extends BaseConnection {\n    socket;\n    conversationId;\n    inputFormat;\n    outputFormat;\n    outputListeners = new Set();\n    pendingAudioEvents = [];\n    constructor(socket, conversationId, inputFormat, outputFormat) {\n        super();\n        this.socket = socket;\n        this.conversationId = conversationId;\n        this.inputFormat = inputFormat;\n        this.outputFormat = outputFormat;\n        this.socket.addEventListener(\"error\", event => {\n            // In case the error event is followed by a close event, we want the\n            // latter to be the one that disconnects the session as it contains more\n            // useful information.\n            setTimeout(() => this.disconnect({\n                reason: \"error\",\n                message: \"The connection was closed due to a socket error.\",\n                context: { type: event.type },\n            }), 0);\n        });\n        this.socket.addEventListener(\"close\", event => {\n            const closeCode = event.code;\n            const closeReason = event.reason || undefined;\n            const context = {\n                type: event.type,\n                code: closeCode,\n                reason: closeReason,\n            };\n            this.disconnect(closeCode === 1000\n                ? { reason: \"agent\", context, closeCode, closeReason }\n                : {\n                    reason: \"error\",\n                    message: closeReason || \"The connection was closed by the server.\",\n                    context,\n                    closeCode,\n                    closeReason,\n                });\n        });\n        this.socket.addEventListener(\"message\", event => {\n            try {\n                const parsedEvent = JSON.parse(event.data);\n                if (!isValidSocketEvent(parsedEvent)) {\n                    this.debug({\n                        type: \"invalid_event\",\n                        message: \"Received invalid socket event\",\n                        data: event.data,\n                    });\n                    return;\n                }\n                this.handleMessage(parsedEvent);\n            }\n            catch (error) {\n                this.debug({\n                    type: \"parsing_error\",\n                    message: \"Failed to parse socket message\",\n                    error: error instanceof Error ? error.message : String(error),\n                    data: event.data,\n                });\n            }\n        });\n    }\n    static async create(config) {\n        let socket = null;\n        try {\n            const origin = config.origin ?? WSS_API_ORIGIN;\n            let url;\n            const { name: source, version } = sourceInfo;\n            if (config.signedUrl) {\n                const separator = config.signedUrl.includes(\"?\") ? \"&\" : \"?\";\n                url = `${config.signedUrl}${separator}source=${source}&version=${version}`;\n            }\n            else {\n                url = `${origin}${WSS_API_PATHNAME}${config.agentId}&source=${source}&version=${version}`;\n            }\n            if (config.environment) {\n                url += `&environment=${encodeURIComponent(config.environment)}`;\n            }\n            const protocols = [MAIN_PROTOCOL];\n            if (config.authorization) {\n                protocols.push(`bearer.${config.authorization}`);\n            }\n            socket = new WebSocket(url, protocols);\n            const conversationConfig = await new Promise((resolve, reject) => {\n                socket.addEventListener(\"open\", () => {\n                    const overridesEvent = constructOverrides(config);\n                    socket?.send(JSON.stringify(overridesEvent));\n                }, { once: true });\n                socket.addEventListener(\"error\", event => {\n                    // In case the error event is followed by a close event, we want the\n                    // latter to be the one that rejects the promise as it contains more\n                    // useful information.\n                    setTimeout(() => reject(new SessionConnectionError(\"The connection was closed due to a socket error.\")), 0);\n                });\n                socket.addEventListener(\"close\", (event) => {\n                    const message = event.reason ||\n                        (event.code === 1000\n                            ? \"Connection closed normally before session could be established.\"\n                            : \"Connection closed unexpectedly before session could be established.\");\n                    reject(new SessionConnectionError(message, {\n                        closeCode: event.code,\n                        closeReason: event.reason || undefined,\n                    }));\n                });\n                socket.addEventListener(\"message\", (event) => {\n                    const message = JSON.parse(event.data);\n                    if (!isValidSocketEvent(message)) {\n                        return;\n                    }\n                    if (message.type === \"conversation_initiation_metadata\") {\n                        resolve(message.conversation_initiation_metadata_event);\n                    }\n                    else {\n                        console.warn(\"First received message is not conversation metadata.\");\n                    }\n                }, { once: true });\n            });\n            const { conversation_id, agent_output_audio_format, user_input_audio_format, } = conversationConfig;\n            const inputFormat = parseFormat(user_input_audio_format ?? \"pcm_16000\");\n            const outputFormat = parseFormat(agent_output_audio_format);\n            return new WebSocketConnection(socket, conversation_id, inputFormat, outputFormat);\n        }\n        catch (error) {\n            socket?.close();\n            throw error;\n        }\n    }\n    close() {\n        this.pendingAudioEvents = [];\n        this.socket.close(1000, \"User ended conversation\");\n    }\n    sendMessage(message) {\n        this.socket.send(JSON.stringify(message));\n    }\n    addListener(listener) {\n        const hadListeners = this.outputListeners.size > 0;\n        this.outputListeners.add(listener);\n        if (hadListeners || this.pendingAudioEvents.length === 0) {\n            return;\n        }\n        const pending = this.pendingAudioEvents;\n        this.pendingAudioEvents = [];\n        for (const event of pending) {\n            listener(event);\n        }\n    }\n    removeListener(listener) {\n        this.outputListeners.delete(listener);\n    }\n    handleMessage(parsedEvent) {\n        super.handleMessage(parsedEvent);\n        // Emit audio events to output listeners\n        if (parsedEvent.type === \"audio\" && parsedEvent.audio_event.audio_base_64) {\n            const audioEvent = {\n                audio_base_64: parsedEvent.audio_event.audio_base_64,\n            };\n            if (this.outputListeners.size === 0) {\n                this.pendingAudioEvents.push(audioEvent);\n                return;\n            }\n            this.outputListeners.forEach(listener => listener(audioEvent));\n        }\n    }\n}\n//# sourceMappingURL=WebSocketConnection.js.map","import { WebSocketConnection } from \"./WebSocketConnection.js\";\nimport { WebRTCConnection } from \"./WebRTCConnection.js\";\nfunction determineConnectionType(config) {\n    const hasSignedUrl = \"signedUrl\" in config && config.signedUrl;\n    // Reject invalid combination: signedUrl only supports websocket\n    // Cast needed because TS narrows signedUrl configs to connectionType?: \"websocket\",\n    // but this guard protects against invalid configs from plain JS callers.\n    if (hasSignedUrl && config.connectionType === \"webrtc\") {\n        throw new Error(\"signedUrl only supports websocket connections. Remove connectionType or set it to 'websocket'.\");\n    }\n    // If connectionType is explicitly specified, use it\n    if (config.connectionType) {\n        return config.connectionType;\n    }\n    // If conversationToken is provided, use WebRTC\n    if (\"conversationToken\" in config && config.conversationToken) {\n        return \"webrtc\";\n    }\n    // If signedUrl is provided, use WebSocket (it only supports websocket)\n    if (hasSignedUrl) {\n        return \"websocket\";\n    }\n    // Infer from conversation mode: text-only uses websocket, voice uses webrtc\n    return config.textOnly ? \"websocket\" : \"webrtc\";\n}\nexport async function createConnection(config) {\n    const connectionType = determineConnectionType(config);\n    switch (connectionType) {\n        case \"websocket\":\n            return WebSocketConnection.create(config);\n        case \"webrtc\":\n            return WebRTCConnection.create(config);\n        default:\n            throw new Error(`Unknown connection type: ${connectionType}`);\n    }\n}\n//# sourceMappingURL=ConnectionFactory.js.map","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"1.12.0\";\n//# sourceMappingURL=version.js.map","const URLCache = new Map();\nexport function createWorkletModuleLoader(name, sourceCode) {\n    return async (worklet, path) => {\n        const cachedUrl = URLCache.get(name);\n        if (cachedUrl) {\n            return worklet.addModule(cachedUrl);\n        }\n        // If a path is provided, use it directly (CSP-friendly approach)\n        if (path) {\n            try {\n                await worklet.addModule(path);\n                URLCache.set(name, path);\n                return;\n            }\n            catch (error) {\n                throw new Error(`Failed to load the ${name} worklet module from path: ${path}. Error: ${error}`);\n            }\n        }\n        const blob = new Blob([sourceCode], { type: \"application/javascript\" });\n        const blobURL = URL.createObjectURL(blob);\n        try {\n            await worklet.addModule(blobURL);\n            URLCache.set(name, blobURL);\n            return;\n        }\n        catch {\n            URL.revokeObjectURL(blobURL);\n        }\n        try {\n            // Attempting to start a conversation in Safari inside an iframe will\n            // throw a CORS error because the blob:// protocol is considered\n            // cross-origin. In such cases, fall back to using a base64 data URL:\n            const base64 = btoa(sourceCode);\n            const moduleURL = `data:application/javascript;base64,${base64}`;\n            await worklet.addModule(moduleURL);\n            URLCache.set(name, moduleURL);\n        }\n        catch (error) {\n            throw new Error(`Failed to load the ${name} worklet module. Make sure the browser supports AudioWorklets. If you are using a strict CSP, you may need to self-host the worklet files.`);\n        }\n    };\n}\n//# sourceMappingURL=createWorkletModuleLoader.js.map","// AUTO-GENERATED BY packages/client/scripts/generateWorklets.js\nimport { createWorkletModuleLoader } from \"./createWorkletModuleLoader.js\";\nexport const loadAudioConcatProcessor = createWorkletModuleLoader(\"audioConcatProcessor\", \n// language=JavaScript\n`/*\n * ulaw decoding logic taken from the wavefile library\n * https://github.com/rochars/wavefile/blob/master/lib/codecs/mulaw.js\n * USED BY @elevenlabs/client\n */\n\nconst decodeTable = [0, 132, 396, 924, 1980, 4092, 8316, 16764];\n\nfunction decodeSample(muLawSample) {\n  let sign;\n  let exponent;\n  let mantissa;\n  let sample;\n  muLawSample = ~muLawSample;\n  sign = muLawSample & 0x80;\n  exponent = (muLawSample >> 4) & 0x07;\n  mantissa = muLawSample & 0x0f;\n  sample = decodeTable[exponent] + (mantissa << (exponent + 3));\n  if (sign !== 0) sample = -sample;\n\n  return sample;\n}\n\nclass AudioConcatProcessor extends AudioWorkletProcessor {\n  constructor() {\n    super();\n    this.buffers = []; // Initialize an empty buffer\n    this.cursor = 0;\n    this.currentBuffer = null;\n    this.wasInterrupted = false;\n    this.finished = false;\n\n    this.port.onmessage = ({ data }) => {\n      switch (data.type) {\n        case \"setFormat\":\n          this.format = data.format;\n          if (globalThis.LibSampleRate && sampleRate !== data.sampleRate) {\n            globalThis.LibSampleRate.create(\n              1,\n              data.sampleRate,\n              sampleRate\n            ).then(resampler => {\n              this.resampler = resampler;\n            });\n          }\n          break;\n        case \"buffer\":\n          this.wasInterrupted = false;\n          this.buffers.push(\n            this.format === \"ulaw\"\n              ? new Uint8Array(data.buffer)\n              : new Int16Array(data.buffer)\n          );\n          break;\n        case \"interrupt\":\n          this.wasInterrupted = true;\n          break;\n        case \"clearInterrupted\":\n          if (this.wasInterrupted) {\n            this.wasInterrupted = false;\n            this.buffers = [];\n            this.currentBuffer = null;\n          }\n      }\n    };\n  }\n  process(_, outputs) {\n    let finished = false;\n    const output = outputs[0][0];\n    for (let i = 0; i < output.length; i++) {\n      if (!this.currentBuffer) {\n        if (this.buffers.length === 0) {\n          finished = true;\n          break;\n        }\n        this.currentBuffer = this.buffers.shift();\n        if (this.resampler) {\n          this.currentBuffer = this.resampler.full(this.currentBuffer);\n        }\n        this.cursor = 0;\n      }\n\n      let value = this.currentBuffer[this.cursor];\n      if (this.format === \"ulaw\") {\n        value = decodeSample(value);\n      }\n      output[i] = value / 32768;\n      this.cursor++;\n\n      if (this.cursor >= this.currentBuffer.length) {\n        this.currentBuffer = null;\n      }\n    }\n\n    if (this.finished !== finished) {\n      this.finished = finished;\n      this.port.postMessage({ type: \"process\", finished });\n    }\n\n    return true; // Continue processing\n  }\n}\n\nregisterProcessor(\"audioConcatProcessor\", AudioConcatProcessor);\n`);\n//# sourceMappingURL=audioConcatProcessor.generated.js.map","const LIBSAMPLERATE_JS = \"https://cdn.jsdelivr.net/npm/@alexanderolsen/libsamplerate-js@2.1.2/dist/libsamplerate.worklet.js\";\nexport async function addLibsamplerateModule(context, customPath) {\n    // Use custom libsamplerate path if provided, otherwise fallback to CDN\n    const libsamplerateUrl = customPath || LIBSAMPLERATE_JS;\n    await context.audioWorklet.addModule(libsamplerateUrl);\n}\n//# sourceMappingURL=addLibsamplerateModule.js.map","/**\n * Calculate a scalar volume level (0–1) from byte frequency data.\n *\n * The value is the mean of all frequency bins normalised to [0, 1].\n */\nexport function calculateVolume(frequencyData) {\n    if (frequencyData.length === 0) {\n        return 0;\n    }\n    let volume = 0;\n    for (let i = 0; i < frequencyData.length; i++) {\n        volume += frequencyData[i] / 255;\n    }\n    volume /= frequencyData.length;\n    return volume < 0 ? 0 : volume > 1 ? 1 : volume;\n}\n//# sourceMappingURL=calculateVolume.js.map","import { calculateVolume } from \"../../utils/calculateVolume.js\";\nimport { resampleVoiceRange, } from \"../../utils/volumeProvider.js\";\nexport function createAnalyserVolumeProvider(analyser, sampleRate) {\n    const binCount = analyser.frequencyBinCount;\n    let rawData;\n    // Resampled buffer used by getVolume() so the scalar is computed from the\n    // voice-frequency range only, matching RN's RMS processor behaviour.\n    let voiceData;\n    return {\n        getVolume() {\n            rawData ??= new Uint8Array(binCount);\n            voiceData ??= new Uint8Array(binCount);\n            analyser.getByteFrequencyData(rawData);\n            resampleVoiceRange(rawData, voiceData, sampleRate);\n            return calculateVolume(voiceData);\n        },\n        getByteFrequencyData(buffer) {\n            rawData ??= new Uint8Array(binCount);\n            analyser.getByteFrequencyData(rawData);\n            resampleVoiceRange(rawData, buffer, sampleRate);\n        },\n    };\n}\n//# sourceMappingURL=volumeProvider.js.map","export function isIosDevice() {\n    return ([\n        \"iPad Simulator\",\n        \"iPhone Simulator\",\n        \"iPod Simulator\",\n        \"iPad\",\n        \"iPhone\",\n        \"iPod\",\n    ].includes(navigator.platform) ||\n        // iPad on iOS 13 detection\n        (navigator.userAgent.includes(\"Mac\") && \"ontouchend\" in document));\n}\nexport function isAndroidDevice() {\n    return /android/i.test(navigator.userAgent);\n}\n//# sourceMappingURL=compatibility.js.map","import { loadAudioConcatProcessor } from \"./audioConcatProcessor.generated.js\";\nimport { addLibsamplerateModule } from \"./addLibsamplerateModule.js\";\nimport { createAnalyserVolumeProvider, } from \"./volumeProvider.js\";\nimport { isIosDevice } from \"./compatibility.js\";\nfunction maybePrimeIosPlayback({ sampleRate, format, worklet, audioElement, }) {\n    if (!isIosDevice()) {\n        return;\n    }\n    // ~100ms of silence is enough to flush the worklet → MediaStream → audio\n    // element pipeline so iOS treats the element as \"playing media\" and won't\n    // stall the first real audio chunk.\n    const PRIME_DURATION_MS = 100;\n    const primeFrameCount = Math.floor((sampleRate * PRIME_DURATION_MS) / 1000);\n    // μ-law silence is 0xFF, not 0x00. The worklet decodes 0x00 to ~-32124\n    // (near full-scale negative DC), which would emit a loud pop instead of\n    // priming with silence. PCM silence is plain zero, so the zero-filled\n    // Int16Array is correct as-is.\n    const silentBuffer = format === \"ulaw\"\n        ? new Uint8Array(primeFrameCount).fill(0xff)\n        : new Int16Array(primeFrameCount);\n    worklet.port.postMessage({\n        type: \"buffer\",\n        buffer: silentBuffer.buffer,\n    });\n    void audioElement.play().catch(() => { });\n}\nexport class MediaDeviceOutput {\n    context;\n    analyser;\n    gain;\n    worklet;\n    audioElement;\n    static async create({ sampleRate, format, outputDeviceId, workletPaths, libsampleratePath, audioContext, }) {\n        let context = audioContext ?? null;\n        let audioElement = null;\n        try {\n            const supportsSampleRateConstraint = navigator.mediaDevices.getSupportedConstraints().sampleRate;\n            if (!context) {\n                context = new AudioContext(supportsSampleRateConstraint ? { sampleRate } : {});\n            }\n            const analyser = context.createAnalyser();\n            const gain = context.createGain();\n            // Always create an audio element for device switching capability\n            audioElement = new Audio();\n            audioElement.src = \"\";\n            audioElement.load();\n            audioElement.autoplay = true;\n            audioElement.style.display = \"none\";\n            document.body.appendChild(audioElement);\n            // Create media stream destination to route audio to the element\n            const destination = context.createMediaStreamDestination();\n            audioElement.srcObject = destination.stream;\n            gain.connect(analyser);\n            analyser.connect(destination);\n            if (!supportsSampleRateConstraint || context.sampleRate !== sampleRate) {\n                if (context.sampleRate !== sampleRate) {\n                    console.warn(`[ConversationalAI] Sample rate ${sampleRate} not available, resampling to ${context.sampleRate}`);\n                }\n                await addLibsamplerateModule(context, libsampleratePath);\n            }\n            await loadAudioConcatProcessor(context.audioWorklet, workletPaths?.audioConcatProcessor);\n            const worklet = new AudioWorkletNode(context, \"audioConcatProcessor\");\n            worklet.port.postMessage({ type: \"setFormat\", format, sampleRate });\n            worklet.connect(gain);\n            await context.resume();\n            maybePrimeIosPlayback({ sampleRate, format, worklet, audioElement });\n            // Set initial output device if provided\n            if (outputDeviceId && audioElement.setSinkId) {\n                await audioElement.setSinkId(outputDeviceId);\n            }\n            const newOutput = new MediaDeviceOutput(context, analyser, gain, worklet, audioElement);\n            return newOutput;\n        }\n        catch (error) {\n            // Clean up audio element from DOM\n            if (audioElement?.parentNode) {\n                audioElement.parentNode.removeChild(audioElement);\n            }\n            audioElement?.pause();\n            if (context && context.state !== \"closed\") {\n                await context.close();\n            }\n            throw error;\n        }\n    }\n    volume = 1;\n    interrupted = false;\n    interruptTimeout = null;\n    volumeProvider;\n    constructor(context, analyser, gain, worklet, audioElement) {\n        this.context = context;\n        this.analyser = analyser;\n        this.gain = gain;\n        this.worklet = worklet;\n        this.audioElement = audioElement;\n        // Start the MessagePort to enable addEventListener to work\n        // (required when using addEventListener instead of onmessage)\n        this.worklet.port.start();\n        this.volumeProvider = createAnalyserVolumeProvider(analyser, context.sampleRate);\n    }\n    getAnalyser() {\n        return this.analyser;\n    }\n    getVolume() {\n        return this.volumeProvider.getVolume();\n    }\n    getByteFrequencyData(buffer) {\n        this.volumeProvider.getByteFrequencyData(buffer);\n    }\n    addListener(listener) {\n        this.worklet.port.addEventListener(\"message\", listener);\n    }\n    removeListener(listener) {\n        this.worklet.port.removeEventListener(\"message\", listener);\n    }\n    setVolume(volume) {\n        this.volume = volume;\n        this.gain.gain.value = volume;\n    }\n    playAudio(chunk) {\n        this.gain.gain.cancelScheduledValues(this.context.currentTime);\n        this.gain.gain.value = this.volume;\n        if (this.interruptTimeout) {\n            clearTimeout(this.interruptTimeout);\n            this.interruptTimeout = null;\n        }\n        this.worklet.port.postMessage({ type: \"clearInterrupted\" });\n        this.worklet.port.postMessage({ type: \"buffer\", buffer: chunk });\n    }\n    interrupt(resetDuration = 2000) {\n        this.interrupted = true;\n        // Clear any existing timeout\n        if (this.interruptTimeout) {\n            clearTimeout(this.interruptTimeout);\n            this.interruptTimeout = null;\n        }\n        // Send interrupt message to worklet to flush queued buffers\n        this.worklet.port.postMessage({ type: \"interrupt\" });\n        // Fade out audio gain\n        this.gain.gain.exponentialRampToValueAtTime(0.0001, this.context.currentTime + resetDuration / 1000);\n        // After fade completes, restore volume and accept new audio\n        this.interruptTimeout = setTimeout(() => {\n            this.interrupted = false;\n            this.gain.gain.value = this.volume;\n            this.worklet.port.postMessage({ type: \"clearInterrupted\" });\n            this.interruptTimeout = null;\n        }, resetDuration);\n    }\n    async setDevice(config) {\n        if (!(\"setSinkId\" in HTMLAudioElement.prototype)) {\n            throw new Error(\"setSinkId is not supported in this browser\");\n        }\n        // Extract outputDeviceId from config\n        const outputDeviceId = config?.outputDeviceId;\n        // Note: sampleRate and format cannot be changed on an existing output\n        // (would require recreating the AudioContext).\n        // These options are only used during initial MediaDeviceOutput.create()\n        // If deviceId is undefined, use empty string which resets to default device\n        await this.audioElement.setSinkId(outputDeviceId || \"\");\n    }\n    async close() {\n        // Clear any pending interrupt timeout\n        if (this.interruptTimeout) {\n            clearTimeout(this.interruptTimeout);\n            this.interruptTimeout = null;\n        }\n        // Remove audio element from DOM\n        if (this.audioElement.parentNode) {\n            this.audioElement.parentNode.removeChild(this.audioElement);\n        }\n        this.audioElement.pause();\n        await this.context.close();\n    }\n}\n//# sourceMappingURL=output.js.map","// AUTO-GENERATED BY packages/client/scripts/generateWorklets.js\nimport { createWorkletModuleLoader } from \"./createWorkletModuleLoader.js\";\nexport const loadRawAudioProcessor = createWorkletModuleLoader(\"rawAudioProcessor\", \n// language=JavaScript\n`/*\n * ulaw encoding logic taken from the wavefile library\n * https://github.com/rochars/wavefile/blob/master/lib/codecs/mulaw.js\n * USED BY @elevenlabs/client\n */\n\nconst BIAS = 0x84;\nconst CLIP = 32635;\nconst encodeTable = [\n  0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,\n  4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,\n  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,\n  5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,\n  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,\n  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,\n  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,\n  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,\n  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,\n  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,\n  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,\n  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,\n  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,\n  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,\n  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,\n  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7\n];\n\nfunction encodeSample(sample) {\n  let sign;\n  let exponent;\n  let mantissa;\n  let muLawSample;\n  sign = (sample >> 8) & 0x80;\n  if (sign !== 0) sample = -sample;\n  sample = sample + BIAS;\n  if (sample > CLIP) sample = CLIP;\n  exponent = encodeTable[(sample>>7) & 0xFF];\n  mantissa = (sample >> (exponent+3)) & 0x0F;\n  muLawSample = ~(sign | (exponent << 4) | mantissa);\n  \n  return muLawSample;\n}\n\nclass RawAudioProcessor extends AudioWorkletProcessor {\n  constructor() {\n    super();\n              \n    this.port.onmessage = ({ data }) => {\n      switch (data.type) {\n        case \"setFormat\":\n          this.isMuted = false;\n          this.buffer = []; // Initialize an empty buffer\n          const chunkDurationMs = data.chunkDurationMs ?? 25;\n          this.bufferSize = Math.max(\n            1,\n            Math.round((data.sampleRate * chunkDurationMs) / 1000)\n          );\n          this.format = data.format;\n\n          if (globalThis.LibSampleRate && sampleRate !== data.sampleRate) {\n            globalThis.LibSampleRate.create(1, sampleRate, data.sampleRate).then(resampler => {\n              this.resampler = resampler;\n            });\n          }\n          break;\n        case \"setMuted\":\n          this.isMuted = data.isMuted;\n          break;\n      }\n    };\n  }\n  process(inputs) {\n    if (!this.buffer) {\n      return true;\n    }\n    \n    const input = inputs[0]; // Get the first input node\n    if (input.length > 0) {\n      let channelData = input[0]; // Get the first channel's data\n\n      // Resample the audio if necessary\n      if (this.resampler) {\n        channelData = this.resampler.full(channelData);\n      }\n\n      // Add channel data to the buffer\n      this.buffer.push(...channelData);\n      // Get max volume \n      let sum = 0.0;\n      for (let i = 0; i < channelData.length; i++) {\n        sum += channelData[i] * channelData[i];\n      }\n      const maxVolume = Math.sqrt(sum / channelData.length);\n      // Check if buffer size has reached or exceeded the threshold\n      if (this.buffer.length >= this.bufferSize) {\n        const float32Array = this.isMuted \n          ? new Float32Array(this.buffer.length)\n          : new Float32Array(this.buffer);\n\n        let encodedArray = this.format === \"ulaw\"\n          ? new Uint8Array(float32Array.length)\n          : new Int16Array(float32Array.length);\n\n        // Iterate through the Float32Array and convert each sample to PCM16\n        for (let i = 0; i < float32Array.length; i++) {\n          // Clamp the value to the range [-1, 1]\n          let sample = Math.max(-1, Math.min(1, float32Array[i]));\n\n          // Scale the sample to the range [-32768, 32767]\n          let value = sample < 0 ? sample * 32768 : sample * 32767;\n          if (this.format === \"ulaw\") {\n            value = encodeSample(Math.round(value));\n          }\n\n          encodedArray[i] = value;\n        }\n\n        // Send the buffered data to the main script\n        this.port.postMessage([encodedArray, maxVolume]);\n\n        // Clear the buffer after sending\n        this.buffer = [];\n      }\n    }\n    return true; // Continue processing\n  }\n}\nregisterProcessor(\"rawAudioProcessor\", RawAudioProcessor);\n`);\n//# sourceMappingURL=rawAudioProcessor.generated.js.map","/** Default microphone audio chunk duration sent to the agent (WebSocket path). */\nexport const DEFAULT_INPUT_CHUNK_DURATION_MS = 25;\n//# sourceMappingURL=InputController.js.map","import { loadRawAudioProcessor } from \"./rawAudioProcessor.generated.js\";\nimport { isIosDevice } from \"./compatibility.js\";\nimport { addLibsamplerateModule } from \"./addLibsamplerateModule.js\";\nimport { DEFAULT_INPUT_CHUNK_DURATION_MS, } from \"../../InputController.js\";\nimport { createAnalyserVolumeProvider, } from \"./volumeProvider.js\";\nconst defaultConstraints = {\n    echoCancellation: true,\n    noiseSuppression: true,\n    // Automatic gain control helps maintain a steady volume level with microphones: https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackSettings/autoGainControl\n    autoGainControl: true,\n    // Mono audio for better echo cancellation\n    channelCount: { ideal: 1 },\n};\nexport class MediaDeviceInput {\n    context;\n    analyser;\n    worklet;\n    inputStream;\n    mediaStreamSource;\n    permissions;\n    onError;\n    static async create({ sampleRate, format, preferHeadphonesForIosDevices, inputDeviceId, workletPaths, libsampleratePath, onError, inputChunkDurationMs = DEFAULT_INPUT_CHUNK_DURATION_MS, }) {\n        let context = null;\n        let inputStream = null;\n        try {\n            const options = {\n                sampleRate: { ideal: sampleRate },\n                ...defaultConstraints,\n            };\n            if (isIosDevice() && preferHeadphonesForIosDevices) {\n                const availableDevices = await window.navigator.mediaDevices.enumerateDevices();\n                const idealDevice = availableDevices.find(d => \n                // cautious to include \"bluetooth\" in the search\n                // as might trigger bluetooth speakers\n                d.kind === \"audioinput\" &&\n                    [\"airpod\", \"headphone\", \"earphone\"].find(keyword => d.label.toLowerCase().includes(keyword)));\n                if (idealDevice) {\n                    options.deviceId = { ideal: idealDevice.deviceId };\n                }\n            }\n            if (inputDeviceId) {\n                options.deviceId =\n                    MediaDeviceInput.getDeviceIdConstraint(inputDeviceId);\n            }\n            const supportsSampleRateConstraint = navigator.mediaDevices.getSupportedConstraints().sampleRate;\n            context = new window.AudioContext(supportsSampleRateConstraint ? { sampleRate } : {});\n            const analyser = context.createAnalyser();\n            if (!supportsSampleRateConstraint) {\n                await addLibsamplerateModule(context, libsampleratePath);\n            }\n            await loadRawAudioProcessor(context.audioWorklet, workletPaths?.rawAudioProcessor);\n            const constraints = { voiceIsolation: true, ...options };\n            inputStream = await navigator.mediaDevices.getUserMedia({\n                audio: constraints,\n            });\n            const source = context.createMediaStreamSource(inputStream);\n            const worklet = new AudioWorkletNode(context, \"rawAudioProcessor\");\n            worklet.port.postMessage({\n                type: \"setFormat\",\n                format,\n                sampleRate,\n                chunkDurationMs: inputChunkDurationMs,\n            });\n            source.connect(analyser);\n            analyser.connect(worklet);\n            await context.resume();\n            const permissions = await navigator.permissions.query({\n                name: \"microphone\",\n            });\n            return new MediaDeviceInput(context, analyser, worklet, inputStream, source, permissions, onError);\n        }\n        catch (error) {\n            inputStream?.getTracks().forEach(track => {\n                track.stop();\n            });\n            context?.close();\n            throw error;\n        }\n    }\n    // Use { ideal } on iOS as a defensive measure - some iOS versions may not support { exact } for deviceId constraints\n    static getDeviceIdConstraint(deviceId) {\n        if (!deviceId) {\n            return undefined;\n        }\n        return isIosDevice() ? { ideal: deviceId } : { exact: deviceId };\n    }\n    muted = false;\n    volumeProvider;\n    constructor(context, analyser, worklet, inputStream, mediaStreamSource, permissions, onError = console.error) {\n        this.context = context;\n        this.analyser = analyser;\n        this.worklet = worklet;\n        this.inputStream = inputStream;\n        this.mediaStreamSource = mediaStreamSource;\n        this.permissions = permissions;\n        this.onError = onError;\n        this.permissions.addEventListener(\"change\", this.handlePermissionsChange);\n        // Start the MessagePort to enable addEventListener to work\n        // (required when using addEventListener instead of onmessage)\n        this.worklet.port.start();\n        this.volumeProvider = createAnalyserVolumeProvider(analyser, context.sampleRate);\n    }\n    getAnalyser() {\n        return this.analyser;\n    }\n    getVolume() {\n        if (this.muted)\n            return 0;\n        return this.volumeProvider.getVolume();\n    }\n    getByteFrequencyData(buffer) {\n        if (this.muted) {\n            buffer.fill(0);\n            return;\n        }\n        this.volumeProvider.getByteFrequencyData(buffer);\n    }\n    isMuted() {\n        return this.muted;\n    }\n    addListener(listener) {\n        this.worklet.port.addEventListener(\"message\", listener);\n    }\n    removeListener(listener) {\n        this.worklet.port.removeEventListener(\"message\", listener);\n    }\n    forgetInputStreamAndSource() {\n        for (const track of this.inputStream.getTracks()) {\n            track.stop();\n        }\n        this.mediaStreamSource.disconnect();\n    }\n    async close() {\n        this.forgetInputStreamAndSource();\n        this.permissions.removeEventListener(\"change\", this.handlePermissionsChange);\n        await this.context.close();\n    }\n    async setMuted(isMuted) {\n        this.muted = isMuted;\n        this.worklet.port.postMessage({ type: \"setMuted\", isMuted });\n    }\n    settingInput = false;\n    async setDevice(config) {\n        try {\n            if (this.settingInput) {\n                throw new Error(\"Input device is already being set\");\n            }\n            this.settingInput = true;\n            // Extract inputDeviceId from config\n            const inputDeviceId = config?.inputDeviceId;\n            // Note: sampleRate, format, inputChunkDurationMs, and\n            // preferHeadphonesForIosDevices cannot be changed on an existing input\n            // (would require recreating the AudioContext). These options are only used\n            // during initial MediaDeviceInput.create()\n            // Create new constraints with the specified device or use default\n            const options = {\n                ...defaultConstraints,\n            };\n            if (inputDeviceId) {\n                options.deviceId =\n                    MediaDeviceInput.getDeviceIdConstraint(inputDeviceId);\n            }\n            // If inputDeviceId is undefined, don't set deviceId constraint - browser uses default\n            const constraints = { voiceIsolation: true, ...options };\n            // Get new media stream with the specified device before forgetting the old one\n            // this prevents unintended interruption of the audio stream in case the new stream isn't obtained\n            const newInputStream = await navigator.mediaDevices.getUserMedia({\n                audio: constraints,\n            });\n            this.forgetInputStreamAndSource();\n            // Replace the stream and create new source\n            this.inputStream = newInputStream;\n            this.mediaStreamSource =\n                this.context.createMediaStreamSource(newInputStream);\n            // Reconnect the audio graph\n            this.mediaStreamSource.connect(this.analyser);\n        }\n        catch (error) {\n            this.onError(\"Failed to switch input device:\", error);\n            throw error;\n        }\n        finally {\n            this.settingInput = false;\n        }\n    }\n    handlePermissionsChange = () => {\n        if (this.permissions.state === \"denied\") {\n            this.onError(\"Microphone permission denied\");\n            // TODO: Tell the user to grant permission in some other way\n        }\n        else if (!this.settingInput) {\n            // Let's try to reset the input device, but only if we're not already in the process of setting it\n            const [track] = this.inputStream.getAudioTracks();\n            const { deviceId } = track?.getSettings() ?? {};\n            this.setDevice({ inputDeviceId: deviceId }).catch(error => {\n                this.onError(\"Failed to reset input device after permission change:\", error);\n            });\n        }\n    };\n}\n//# sourceMappingURL=input.js.map","import { arrayBufferToBase64 } from \"./audio.js\";\nexport function attachInputToConnection(input, connection) {\n    const listener = event => {\n        const rawAudioPcmData = event.data[0];\n        // TODO: When supported, maxVolume can be used to avoid sending silent audio\n        // const maxVolume = event.data[1];\n        connection.sendMessage({\n            user_audio_chunk: arrayBufferToBase64(rawAudioPcmData.buffer),\n        });\n    };\n    input.addListener(listener);\n    return () => {\n        input.removeListener(listener);\n    };\n}\n//# sourceMappingURL=attachInputToConnection.js.map","import { base64ToArrayBuffer } from \"./audio.js\";\nexport function attachConnectionToOutput(connection, output) {\n    const listener = event => {\n        output.playAudio(base64ToArrayBuffer(event.audio_base_64));\n    };\n    connection.addListener(listener);\n    return () => {\n        connection.removeListener(listener);\n    };\n}\n//# sourceMappingURL=attachConnectionToOutput.js.map","/**\n * Resolves a platform-specific delay from a DelayConfig.\n * The `platform` parameter is determined by the caller (e.g. via\n * `compatibility.ts` on the web, or from the React Native runtime).\n */\nconst DEFAULT_DELAY = {\n    default: 0,\n    // Give the Android AudioManager enough time to switch to the correct audio mode\n    android: 3_000,\n};\nexport function resolveDelay(delayConfig, platform = \"default\") {\n    const config = delayConfig ?? DEFAULT_DELAY;\n    if (platform === \"android\")\n        return config.android ?? config.default;\n    if (platform === \"ios\")\n        return config.ios ?? config.default;\n    return config.default;\n}\nexport async function applyDelay(delayMs) {\n    if (delayMs > 0) {\n        await new Promise(resolve => setTimeout(resolve, delayMs));\n    }\n}\n//# sourceMappingURL=applyDelay.js.map","import { isIosDevice } from \"./compatibility.js\";\nconst STASH_TTL_MS = 30_000;\nconst UNLOCK_EVENTS = [\"touchstart\", \"touchend\", \"click\"];\nlet stashedAudioContext = null;\nlet discardTimer = null;\nlet unlockListenerInstalled = false;\nfunction unlockAudioContext(ctx) {\n    const buffer = ctx.createBuffer(1, 1, 22050);\n    const source = ctx.createBufferSource();\n    source.buffer = buffer;\n    source.connect(ctx.destination);\n    source.start(0);\n    void ctx.resume().catch(() => { });\n}\nfunction scheduleStashDiscard() {\n    if (discardTimer) {\n        clearTimeout(discardTimer);\n    }\n    discardTimer = setTimeout(() => {\n        discardTimer = null;\n        discardStashedAudioContext();\n    }, STASH_TTL_MS);\n}\nfunction clearStashDiscardTimer() {\n    if (!discardTimer) {\n        return;\n    }\n    clearTimeout(discardTimer);\n    discardTimer = null;\n}\n/** Unlock iOS audio during a user gesture. No-op on non-iOS. */\nexport function unlockIosAudioForSession() {\n    if (!isIosDevice() || stashedAudioContext) {\n        return;\n    }\n    const ctx = new AudioContext();\n    unlockAudioContext(ctx);\n    stashedAudioContext = ctx;\n    scheduleStashDiscard();\n}\n/**\n * Listen for the first user interaction on the page and unlock iOS audio in\n * the capture phase, before application click handlers run. Covers callers\n * (such as the convai widget) that `await` before `Conversation.startSession`.\n */\nexport function installIosAudioUnlockListener() {\n    if (!isIosDevice() ||\n        unlockListenerInstalled ||\n        typeof document === \"undefined\") {\n        return;\n    }\n    unlockListenerInstalled = true;\n    const onUserGesture = () => {\n        unlockIosAudioForSession();\n    };\n    for (const event of UNLOCK_EVENTS) {\n        document.addEventListener(event, onUserGesture, true);\n    }\n}\nexport function takeUnlockedAudioContext() {\n    const ctx = stashedAudioContext;\n    stashedAudioContext = null;\n    clearStashDiscardTimer();\n    return ctx;\n}\nexport function discardStashedAudioContext() {\n    if (!stashedAudioContext) {\n        return;\n    }\n    void stashedAudioContext.close().catch(() => { });\n    stashedAudioContext = null;\n    clearStashDiscardTimer();\n}\n//# sourceMappingURL=audioUnlock.js.map","import { setSetupStrategy, setupWebRTCSession, } from \"../VoiceSessionSetup.js\";\nimport { MediaDeviceOutput } from \"./output.js\";\nimport { MediaDeviceInput } from \"./input.js\";\nimport { WebSocketConnection } from \"../../utils/WebSocketConnection.js\";\nimport { attachInputToConnection } from \"../../utils/attachInputToConnection.js\";\nimport { attachConnectionToOutput } from \"../../utils/attachConnectionToOutput.js\";\nimport { createConnection } from \"../../utils/ConnectionFactory.js\";\nimport { applyDelay, resolveDelay } from \"../../utils/applyDelay.js\";\nimport { isAndroidDevice, isIosDevice } from \"./compatibility.js\";\nimport { discardStashedAudioContext, takeUnlockedAudioContext, } from \"./audioUnlock.js\";\nfunction detectPlatform() {\n    if (isAndroidDevice())\n        return \"android\";\n    if (isIosDevice())\n        return \"ios\";\n    return \"default\";\n}\nasync function requestWakeLock() {\n    if (\"wakeLock\" in navigator) {\n        // unavailable without HTTPS, including localhost in dev\n        try {\n            return await navigator.wakeLock.request(\"screen\");\n        }\n        catch (_e) {\n            // Wake Lock is not required for the conversation to work\n        }\n    }\n    return null;\n}\n/**\n * Sets up WebSocket-specific input and output controllers using\n * web MediaDevice APIs (AudioContext, AudioWorklet, etc.).\n */\nasync function setupWebSocketIO(options, connection, audioContext) {\n    const [input, output] = await Promise.all([\n        MediaDeviceInput.create({\n            ...connection.inputFormat,\n            preferHeadphonesForIosDevices: options.preferHeadphonesForIosDevices,\n            inputDeviceId: options.inputDeviceId,\n            inputChunkDurationMs: options.inputChunkDurationMs,\n            workletPaths: options.workletPaths,\n            libsampleratePath: options.libsampleratePath,\n        }),\n        MediaDeviceOutput.create({\n            ...connection.outputFormat,\n            outputDeviceId: options.outputDeviceId,\n            workletPaths: options.workletPaths,\n            audioContext: audioContext ?? undefined,\n        }),\n    ]);\n    const detachInput = attachInputToConnection(input, connection);\n    const detachOutput = attachConnectionToOutput(connection, output);\n    return {\n        input,\n        output,\n        playbackEventTarget: output,\n        detach: async () => {\n            detachInput();\n            detachOutput();\n        },\n    };\n}\n/**\n * Web platform session setup strategy.\n * Handles wake lock, preliminary mic permission, platform-specific delay,\n * connection creation, and input/output setup.\n */\nexport async function webSessionSetup(options) {\n    const useWakeLock = options.useWakeLock ?? true;\n    let wakeLock = null;\n    let preliminaryInputStream = null;\n    let unlockedAudioContext = null;\n    try {\n        if (useWakeLock) {\n            wakeLock = await requestWakeLock();\n        }\n        // Some browsers won't allow calling getSupportedConstraints or\n        // enumerateDevices before getting approval for microphone access.\n        preliminaryInputStream = await navigator.mediaDevices.getUserMedia({\n            audio: true,\n        });\n        const platform = detectPlatform();\n        await applyDelay(resolveDelay(options.connectionDelay, platform));\n        const connection = await createConnection(options);\n        let result;\n        try {\n            if (connection instanceof WebSocketConnection) {\n                unlockedAudioContext = takeUnlockedAudioContext();\n                result = {\n                    connection,\n                    ...(await setupWebSocketIO(options, connection, unlockedAudioContext)),\n                };\n                // Ownership transferred to MediaDeviceOutput.\n                unlockedAudioContext = null;\n            }\n            else {\n                // WebRTC doesn't use the unlocked context — discard the stash so it\n                // doesn't sit until the TTL fires.\n                discardStashedAudioContext();\n                result = setupWebRTCSession(connection);\n            }\n        }\n        catch (ioError) {\n            await unlockedAudioContext?.close().catch(() => { });\n            unlockedAudioContext = null;\n            connection.close();\n            throw ioError;\n        }\n        // Stop the preliminary stream after setting up the session.\n        // Its only purpose was triggering the browser's microphone permission\n        // prompt; it must remain alive until the strategy finishes because\n        // MediaDeviceInput.create (WebSocket path) needs mic access granted.\n        if (preliminaryInputStream) {\n            for (const track of preliminaryInputStream.getTracks()) {\n                track.stop();\n            }\n            preliminaryInputStream = null;\n        }\n        // Set up visibility change handler for wake lock re-acquisition.\n        // Wake locks are automatically released when a page is hidden (e.g.\n        // switching tabs), so attempt to re-acquire when visible again.\n        let visibilityChangeHandler = null;\n        if (wakeLock) {\n            visibilityChangeHandler = () => {\n                if (document.visibilityState === \"visible\" && wakeLock?.released) {\n                    requestWakeLock().then(lock => {\n                        wakeLock = lock;\n                    });\n                }\n            };\n            document.addEventListener(\"visibilitychange\", visibilityChangeHandler);\n        }\n        const originalDetach = result.detach;\n        return {\n            ...result,\n            detach: async () => {\n                await originalDetach();\n                if (visibilityChangeHandler) {\n                    document.removeEventListener(\"visibilitychange\", visibilityChangeHandler);\n                }\n                try {\n                    await wakeLock?.release();\n                    wakeLock = null;\n                }\n                catch (_e) { }\n            },\n        };\n    }\n    catch (error) {\n        // Clean up on setup failure\n        if (preliminaryInputStream) {\n            for (const track of preliminaryInputStream.getTracks()) {\n                track.stop();\n            }\n        }\n        try {\n            await wakeLock?.release();\n            wakeLock = null;\n        }\n        catch (_e) { }\n        discardStashedAudioContext();\n        throw error;\n    }\n}\n// Register the web strategy as the default\nsetSetupStrategy(webSessionSetup);\n//# sourceMappingURL=VoiceSessionSetup.js.map","import { loadRawAudioProcessor } from \"./rawAudioProcessor.generated.js\";\nimport { createAnalyserVolumeProvider } from \"./volumeProvider.js\";\n/**\n * Web implementation of {@link WebRTCAudioAdapter}.\n *\n * Uses AudioContext, HTMLAudioElement, and AudioWorkletNode to:\n * - Attach remote audio tracks for playback via the DOM\n * - Analyse input/output volume via AnalyserNode\n * - Capture raw output audio via an AudioWorklet for the `onAudio` callback\n */\nexport class WebAudioAdapter {\n    audioElements = [];\n    inputAudioContext = null;\n    audioCaptureContext = null;\n    async attachRemoteTrack(track, outputDeviceId) {\n        const audioElement = track.attach();\n        audioElement.autoplay = true;\n        audioElement.controls = false;\n        // Set output device if one was previously selected\n        if (outputDeviceId && audioElement.setSinkId) {\n            try {\n                await audioElement.setSinkId(outputDeviceId);\n            }\n            catch (error) {\n                console.warn(\"Failed to set output device for new audio element:\", error);\n            }\n        }\n        // Add to DOM (hidden) to ensure it plays\n        audioElement.style.display = \"none\";\n        document.body.appendChild(audioElement);\n        // Store reference for volume control and cleanup\n        this.audioElements.push(audioElement);\n    }\n    setupInputAnalysis(mediaStreamTrack) {\n        // Clean up previous input audio context\n        if (this.inputAudioContext) {\n            this.inputAudioContext.close().catch(() => { });\n            this.inputAudioContext = null;\n        }\n        const ctx = new AudioContext();\n        const analyser = ctx.createAnalyser();\n        const source = ctx.createMediaStreamSource(new MediaStream([mediaStreamTrack]));\n        source.connect(analyser);\n        this.inputAudioContext = ctx;\n        return {\n            volumeProvider: createAnalyserVolumeProvider(analyser, ctx.sampleRate),\n            analyser,\n        };\n    }\n    async setupOutputAnalysis(track, format, onAudioData) {\n        // Clean up previous audio capture context\n        if (this.audioCaptureContext) {\n            this.audioCaptureContext.close().catch(() => { });\n            this.audioCaptureContext = null;\n        }\n        // Create audio context for processing\n        const audioContext = new AudioContext();\n        this.audioCaptureContext = audioContext;\n        // Create analyser for frequency data\n        const analyser = audioContext.createAnalyser();\n        analyser.fftSize = 2048;\n        analyser.smoothingTimeConstant = 0.8;\n        // Create MediaStream from the track\n        const mediaStream = new MediaStream([track.mediaStreamTrack]);\n        // Create audio source from the stream\n        const source = audioContext.createMediaStreamSource(mediaStream);\n        const volumeProvider = createAnalyserVolumeProvider(analyser, audioContext.sampleRate);\n        await loadRawAudioProcessor(audioContext.audioWorklet);\n        const worklet = new AudioWorkletNode(audioContext, \"rawAudioProcessor\");\n        // Configure the processor and set up the message listener\n        // before connecting the graph, so no early messages are missed.\n        worklet.port.postMessage({\n            type: \"setFormat\",\n            format: format.format,\n            sampleRate: format.sampleRate,\n        });\n        worklet.port.onmessage = (event) => {\n            const [audioData, maxVolume] = event.data;\n            onAudioData(audioData.buffer, maxVolume);\n        };\n        // Connect the audio graph: source → analyser → worklet\n        source.connect(analyser);\n        analyser.connect(worklet);\n        return { volumeProvider, analyser };\n    }\n    setVolume(volume) {\n        for (const element of this.audioElements) {\n            element.volume = volume;\n        }\n    }\n    async setOutputDevice(deviceId) {\n        if (!(\"setSinkId\" in HTMLAudioElement.prototype)) {\n            throw new Error(\"setSinkId is not supported in this browser\");\n        }\n        await Promise.all(this.audioElements.map(async (element) => {\n            try {\n                await element.setSinkId(deviceId);\n            }\n            catch (error) {\n                console.error(\"Failed to set sink ID for audio element:\", error);\n                throw error;\n            }\n        }));\n    }\n    cleanup() {\n        // Clean up input audio context\n        if (this.inputAudioContext) {\n            this.inputAudioContext.close().catch(error => {\n                console.warn(\"Error closing input audio context:\", error);\n            });\n            this.inputAudioContext = null;\n        }\n        // Clean up audio capture context\n        if (this.audioCaptureContext) {\n            this.audioCaptureContext.close().catch(error => {\n                console.warn(\"Error closing audio capture context:\", error);\n            });\n            this.audioCaptureContext = null;\n        }\n        // Clean up audio elements\n        for (const element of this.audioElements) {\n            element.remove();\n        }\n        this.audioElements = [];\n    }\n}\n//# sourceMappingURL=webAudioAdapter.js.map","// Cross-platform runtime globals.\n//\n// These APIs are available natively on the web, Node.js (>=18), and\n// React Native, but are not part of TypeScript's standard library when\n// `lib` omits \"DOM\". We declare the minimal subset actually used by\n// the codebase so that `tsconfig.common.json` (lib: [\"ES2022\"]) compiles\n// without DOM.\n//\n// Because this file has an `export`, TypeScript treats it as a module.\n// All ambient declarations must therefore be inside `declare global`.\n// ---------------------------------------------------------------------------\n// Runtime assertions\n// ---------------------------------------------------------------------------\n/**\n * Throws if any of the expected cross-platform globals are missing.\n * Call once at startup to surface environment issues early.\n */\nexport function assertRuntimeCompatibility() {\n    const required = [\n        \"fetch\",\n        \"WebSocket\",\n        \"TextEncoder\",\n        \"TextDecoder\",\n        \"URL\",\n        \"btoa\",\n        \"atob\",\n    ];\n    for (const name of required) {\n        if (typeof globalThis[name] === \"undefined\") {\n            throw new Error(`${name} is not available in this environment.`);\n        }\n    }\n}\n//# sourceMappingURL=runtime.js.map","import { createConnection } from \"./utils/ConnectionFactory.js\";\nimport { applyDelay, resolveDelay } from \"./utils/applyDelay.js\";\nimport { BaseConversation } from \"./BaseConversation.js\";\nconst EMPTY_FREQUENCY_DATA = new Uint8Array(0);\nexport class TextConversation extends BaseConversation {\n    type = \"text\";\n    setVolume() {\n        throw new Error(\"setVolume is not supported in text conversations\");\n    }\n    setMicMuted() {\n        throw new Error(\"setMicMuted is not supported in text conversations\");\n    }\n    getInputByteFrequencyData() {\n        return EMPTY_FREQUENCY_DATA;\n    }\n    getOutputByteFrequencyData() {\n        return EMPTY_FREQUENCY_DATA;\n    }\n    getInputVolume() {\n        return 0;\n    }\n    getOutputVolume() {\n        return 0;\n    }\n    static async startSession(options) {\n        const fullOptions = BaseConversation.getFullOptions(options);\n        if (fullOptions.onStatusChange) {\n            fullOptions.onStatusChange({ status: \"connecting\" });\n        }\n        if (fullOptions.onCanSendFeedbackChange) {\n            fullOptions.onCanSendFeedbackChange({ canSendFeedback: false });\n        }\n        if (fullOptions.onModeChange) {\n            fullOptions.onModeChange({ mode: \"listening\" });\n        }\n        if (fullOptions.onCanSendFeedbackChange) {\n            fullOptions.onCanSendFeedbackChange({ canSendFeedback: false });\n        }\n        let connection = null;\n        let conversation = null;\n        try {\n            await applyDelay(resolveDelay(fullOptions.connectionDelay));\n            connection = await createConnection(fullOptions);\n            conversation = new TextConversation(fullOptions, connection);\n            fullOptions.onConversationCreated?.(conversation);\n            conversation.markConnected();\n            fullOptions.onConnect?.({ conversationId: connection.conversationId });\n            return conversation;\n        }\n        catch (error) {\n            if (conversation) {\n                await conversation.endSession().catch(() => { });\n            }\n            else {\n                fullOptions.onStatusChange?.({ status: \"disconnected\" });\n                connection?.close();\n            }\n            throw error;\n        }\n    }\n}\n//# sourceMappingURL=TextConversation.js.map","import { BaseConversation, } from \"./BaseConversation.js\";\nimport { setupStrategy } from \"./platform/VoiceSessionSetup.js\";\nexport class VoiceConversation extends BaseConversation {\n    input;\n    output;\n    playbackEventTarget;\n    cleanUp;\n    type = \"voice\";\n    static async startSession(options) {\n        const fullOptions = BaseConversation.getFullOptions(options);\n        if (fullOptions.onStatusChange) {\n            fullOptions.onStatusChange({ status: \"connecting\" });\n        }\n        if (fullOptions.onCanSendFeedbackChange) {\n            fullOptions.onCanSendFeedbackChange({ canSendFeedback: false });\n        }\n        let conversation = null;\n        let sessionSetup = null;\n        try {\n            // Platform-specific strategy handles wake lock, mic permission,\n            // delay, connection creation, and input/output setup.\n            if (!setupStrategy) {\n                throw new Error(\"No voice session setup strategy registered. \" +\n                    'Import the platform-specific entry point (e.g. @elevenlabs/client via the \"browser\" export).');\n            }\n            sessionSetup = await setupStrategy(fullOptions);\n            conversation = new VoiceConversation(fullOptions, sessionSetup.connection, sessionSetup.input, sessionSetup.output, sessionSetup.playbackEventTarget, sessionSetup.detach);\n            fullOptions.onConversationCreated?.(conversation);\n            conversation.markConnected();\n            fullOptions.onConnect?.({\n                conversationId: sessionSetup.connection.conversationId,\n            });\n            return conversation;\n        }\n        catch (error) {\n            if (conversation) {\n                await conversation.endSession().catch(() => { });\n            }\n            else {\n                // Strategy returned but conversation wasn't created — clean up\n                if (sessionSetup) {\n                    await sessionSetup.detach().catch(() => { });\n                }\n                fullOptions.onStatusChange?.({ status: \"disconnected\" });\n            }\n            throw error;\n        }\n    }\n    inputFrequencyData;\n    outputFrequencyData;\n    handlePlaybackEvent = event => {\n        if (event.data.type === \"process\") {\n            this.updateMode(event.data.finished ? \"listening\" : \"speaking\");\n        }\n    };\n    constructor(options, connection, input, output, playbackEventTarget, cleanUp) {\n        super(options, connection);\n        this.input = input;\n        this.output = output;\n        this.playbackEventTarget = playbackEventTarget;\n        this.cleanUp = cleanUp;\n        playbackEventTarget?.addListener(this.handlePlaybackEvent);\n    }\n    async handleEndSession() {\n        this.playbackEventTarget?.removeListener(this.handlePlaybackEvent);\n        this.playbackEventTarget = null;\n        await this.cleanUp();\n        await super.handleEndSession();\n        await this.input.close();\n        await this.output.close();\n    }\n    handleInterruption(event) {\n        super.handleInterruption(event);\n        this.updateMode(\"listening\");\n        this.output.interrupt();\n    }\n    handleAudio(event) {\n        super.handleAudio(event);\n        if (event.audio_event.alignment && this.options.onAudioAlignment) {\n            this.options.onAudioAlignment(event.audio_event.alignment);\n        }\n        if (this.lastInterruptTimestamp <= event.audio_event.event_id) {\n            if (event.audio_event.audio_base_64) {\n                this.options.onAudio?.(event.audio_event.audio_base_64);\n                // Audio routing is handled by attachConnectionToOutput for WebSocket\n                // WebRTC handles audio playback directly through LiveKit tracks\n            }\n            this.currentEventId = event.audio_event.event_id;\n            this.updateCanSendFeedback();\n            this.updateMode(\"speaking\");\n        }\n    }\n    static FREQUENCY_BIN_COUNT = 1024;\n    setMicMuted(isMuted) {\n        this.input.setMuted(isMuted).catch(error => {\n            this.options.onError?.(\"Failed to set input muted state\", error);\n        });\n    }\n    getInputByteFrequencyData() {\n        this.inputFrequencyData ??= new Uint8Array(VoiceConversation.FREQUENCY_BIN_COUNT);\n        this.input.getByteFrequencyData(this.inputFrequencyData);\n        return this.inputFrequencyData;\n    }\n    getOutputByteFrequencyData() {\n        this.outputFrequencyData ??= new Uint8Array(VoiceConversation.FREQUENCY_BIN_COUNT);\n        this.output.getByteFrequencyData(this.outputFrequencyData);\n        return this.outputFrequencyData;\n    }\n    getInputVolume() {\n        return this.input.getVolume();\n    }\n    getOutputVolume() {\n        return this.output.getVolume();\n    }\n    async changeInputDevice({ sampleRate, format, preferHeadphonesForIosDevices, inputDeviceId, }) {\n        try {\n            await this.input.setDevice({\n                inputDeviceId,\n                sampleRate,\n                format,\n                preferHeadphonesForIosDevices,\n            });\n        }\n        catch (error) {\n            console.error(\"Error changing input device\", error);\n            throw error;\n        }\n    }\n    async changeOutputDevice({ sampleRate, format, outputDeviceId, }) {\n        try {\n            await this.output.setDevice({\n                outputDeviceId,\n                sampleRate,\n                format,\n            });\n        }\n        catch (error) {\n            console.error(\"Error changing output device\", error);\n            throw error;\n        }\n    }\n    setVolume = ({ volume }) => {\n        // clamp & coerce\n        const clampedVolume = Number.isFinite(volume)\n            ? Math.min(1, Math.max(0, volume))\n            : 1;\n        this.volume = clampedVolume;\n        // Delegate to output controller\n        this.output.setVolume(clampedVolume);\n    };\n}\n//# sourceMappingURL=VoiceConversation.js.map","/**\n * Simple EventEmitter implementation for browser compatibility.\n */\nclass EventEmitter {\n    listeners = new Map();\n    on(event, listener) {\n        if (!this.listeners.has(event)) {\n            this.listeners.set(event, new Set());\n        }\n        const eventListeners = this.listeners.get(event);\n        if (eventListeners) {\n            eventListeners.add(listener);\n        }\n    }\n    off(event, listener) {\n        const eventListeners = this.listeners.get(event);\n        if (eventListeners) {\n            eventListeners.delete(listener);\n        }\n    }\n    emit(event, ...args) {\n        const eventListeners = this.listeners.get(event);\n        if (eventListeners) {\n            eventListeners.forEach(listener => {\n                listener(...args);\n            });\n        }\n    }\n}\nfunction normalizeError(error) {\n    if (typeof error === \"object\" &&\n        error !== null &&\n        \"message_type\" in error &&\n        \"error\" in error &&\n        typeof error.message_type === \"string\" &&\n        typeof error.error === \"string\") {\n        return error;\n    }\n    return {\n        message_type: \"error\",\n        error: error instanceof Error ? error.message : String(error),\n    };\n}\n/**\n * Events emitted by the RealtimeConnection.\n */\nexport var RealtimeEvents;\n(function (RealtimeEvents) {\n    /** Emitted when the session is successfully started */\n    RealtimeEvents[\"SESSION_STARTED\"] = \"session_started\";\n    /** Emitted when a partial (interim) transcript is available */\n    RealtimeEvents[\"PARTIAL_TRANSCRIPT\"] = \"partial_transcript\";\n    /** Emitted when a final transcript is available */\n    RealtimeEvents[\"COMMITTED_TRANSCRIPT\"] = \"committed_transcript\";\n    /** Emitted when a final transcript with timestamps is available */\n    RealtimeEvents[\"COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS\"] = \"committed_transcript_with_timestamps\";\n    /** Emitted when an authentication error occurs */\n    RealtimeEvents[\"AUTH_ERROR\"] = \"auth_error\";\n    /** Emitted when an error occurs (also emitted for all specific error types) */\n    RealtimeEvents[\"ERROR\"] = \"error\";\n    /** Emitted when the WebSocket connection is opened */\n    RealtimeEvents[\"OPEN\"] = \"open\";\n    /** Emitted when the WebSocket connection is closed */\n    RealtimeEvents[\"CLOSE\"] = \"close\";\n    /** Emitted when a quota exceeded error occurs */\n    RealtimeEvents[\"QUOTA_EXCEEDED\"] = \"quota_exceeded\";\n    /** Emitted when commit is throttled */\n    RealtimeEvents[\"COMMIT_THROTTLED\"] = \"commit_throttled\";\n    /** Emitted when a transcriber error occurs */\n    RealtimeEvents[\"TRANSCRIBER_ERROR\"] = \"transcriber_error\";\n    /** Emitted when terms have not been accepted */\n    RealtimeEvents[\"UNACCEPTED_TERMS\"] = \"unaccepted_terms\";\n    /** Emitted when rate limited */\n    RealtimeEvents[\"RATE_LIMITED\"] = \"rate_limited\";\n    /** Emitted when there's an input error */\n    RealtimeEvents[\"INPUT_ERROR\"] = \"input_error\";\n    /** Emitted when the queue overflows */\n    RealtimeEvents[\"QUEUE_OVERFLOW\"] = \"queue_overflow\";\n    /** Emitted when resources are exhausted */\n    RealtimeEvents[\"RESOURCE_EXHAUSTED\"] = \"resource_exhausted\";\n    /** Emitted when session time limit is exceeded */\n    RealtimeEvents[\"SESSION_TIME_LIMIT_EXCEEDED\"] = \"session_time_limit_exceeded\";\n    /** Emitted when chunk size is exceeded */\n    RealtimeEvents[\"CHUNK_SIZE_EXCEEDED\"] = \"chunk_size_exceeded\";\n    /** Emitted when there's insufficient audio activity */\n    RealtimeEvents[\"INSUFFICIENT_AUDIO_ACTIVITY\"] = \"insufficient_audio_activity\";\n})(RealtimeEvents || (RealtimeEvents = {}));\n/**\n * Manages a real-time transcription WebSocket connection.\n *\n * @example\n * ```typescript\n * const connection = await Scribe.connect({\n *     token: \"...\",\n *     modelId: \"scribe_v2_realtime\",\n *     audioFormat: AudioFormat.PCM_16000,\n *     sampleRate: 16000,\n * });\n *\n * connection.on(RealtimeEvents.SESSION_STARTED, (data) => {\n *     console.log(\"Session started\");\n * });\n *\n * connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data) => {\n *     console.log(\"Partial:\", data.transcript);\n * });\n *\n * connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data) => {\n *     console.log(\"Final:\", data.transcript);\n *     connection.close();\n * });\n *\n * // Send audio data\n * connection.send({ audioBase64: base64String });\n *\n * // Commit and close\n * connection.commit();\n * ```\n */\nexport class RealtimeConnection {\n    websocket = null;\n    eventEmitter = new EventEmitter();\n    currentSampleRate = 16000;\n    _muted = false;\n    /** @internal True once the socket is gone (via close() or a server close); read by ScribeRealtime to abort a racing mic setup. */\n    _closed = false;\n    _audioCleanup;\n    /** @internal Set by ScribeRealtime in microphone mode to enable track-level muting. */\n    _mediaStreamTrack;\n    constructor(sampleRate) {\n        this.currentSampleRate = sampleRate;\n    }\n    /**\n     * Whether audio capture is currently muted.\n     *\n     * In microphone mode, the underlying `MediaStreamTrack` is disabled so the\n     * browser captures silence instead of real microphone input. Silence continues\n     * to be sent to the server to keep the connection alive.\n     *\n     * Muting is only supported when this connection was created with microphone\n     * options. Manual audio connections cannot be muted because `send()` forwards\n     * caller-provided audio directly.\n     */\n    get isMuted() {\n        return this._muted;\n    }\n    getMediaStreamTrackForMute(action) {\n        if (!this._mediaStreamTrack) {\n            throw new Error(`Cannot ${action} audio without an active microphone MediaStreamTrack. ` +\n                \"mute() and unmute() are only supported for microphone connections.\");\n        }\n        return this._mediaStreamTrack;\n    }\n    /**\n     * Mutes audio capture.\n     *\n     * In microphone mode, disables the underlying `MediaStreamTrack` so the browser\n     * replaces real microphone input with silence. The silence continues to flow to\n     * the server, keeping the connection alive without producing transcriptions.\n     *\n     * @throws {Error} If this connection was not created with microphone options\n     * or no microphone `MediaStreamTrack` is available.\n     */\n    mute() {\n        const mediaStreamTrack = this.getMediaStreamTrackForMute(\"mute\");\n        this._muted = true;\n        mediaStreamTrack.enabled = false;\n    }\n    /**\n     * Unmutes audio capture.\n     *\n     * Re-enables the `MediaStreamTrack` so real microphone audio flows again.\n     *\n     * @throws {Error} If this connection was not created with microphone options\n     * or no microphone `MediaStreamTrack` is available.\n     */\n    unmute() {\n        const mediaStreamTrack = this.getMediaStreamTrackForMute(\"unmute\");\n        this._muted = false;\n        mediaStreamTrack.enabled = true;\n    }\n    /**\n     * @internal\n     * Used internally by ScribeRealtime to attach the WebSocket after connection is created.\n     */\n    setWebSocket(websocket) {\n        this.websocket = websocket;\n        // If WebSocket is already open, emit OPEN event immediately\n        if (this.websocket.readyState === WebSocket.OPEN) {\n            this.eventEmitter.emit(RealtimeEvents.OPEN);\n        }\n        else {\n            // Otherwise, wait for the open event\n            this.websocket.addEventListener(\"open\", () => {\n                this.eventEmitter.emit(RealtimeEvents.OPEN);\n            });\n        }\n        this.websocket.addEventListener(\"message\", (event) => {\n            try {\n                const data = JSON.parse(event.data);\n                switch (data.message_type) {\n                    case \"session_started\":\n                        this.eventEmitter.emit(RealtimeEvents.SESSION_STARTED, data);\n                        break;\n                    case \"partial_transcript\":\n                        this.eventEmitter.emit(RealtimeEvents.PARTIAL_TRANSCRIPT, data);\n                        break;\n                    case \"committed_transcript\":\n                        this.eventEmitter.emit(RealtimeEvents.COMMITTED_TRANSCRIPT, data);\n                        break;\n                    case \"committed_transcript_with_timestamps\":\n                        this.eventEmitter.emit(RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS, data);\n                        break;\n                    // Error cases - emit both specific event and generic ERROR\n                    case \"auth_error\":\n                        this.eventEmitter.emit(RealtimeEvents.AUTH_ERROR, data);\n                        this.eventEmitter.emit(RealtimeEvents.ERROR, data);\n                        break;\n                    case \"quota_exceeded\":\n                        this.eventEmitter.emit(RealtimeEvents.QUOTA_EXCEEDED, data);\n                        this.eventEmitter.emit(RealtimeEvents.ERROR, data);\n                        break;\n                    case \"commit_throttled\":\n                        this.eventEmitter.emit(RealtimeEvents.COMMIT_THROTTLED, data);\n                        this.eventEmitter.emit(RealtimeEvents.ERROR, data);\n                        break;\n                    case \"transcriber_error\":\n                        this.eventEmitter.emit(RealtimeEvents.TRANSCRIBER_ERROR, data);\n                        this.eventEmitter.emit(RealtimeEvents.ERROR, data);\n                        break;\n                    case \"unaccepted_terms\":\n                        this.eventEmitter.emit(RealtimeEvents.UNACCEPTED_TERMS, data);\n                        this.eventEmitter.emit(RealtimeEvents.ERROR, data);\n                        break;\n                    case \"rate_limited\":\n                        this.eventEmitter.emit(RealtimeEvents.RATE_LIMITED, data);\n                        this.eventEmitter.emit(RealtimeEvents.ERROR, data);\n                        break;\n                    case \"input_error\":\n                        this.eventEmitter.emit(RealtimeEvents.INPUT_ERROR, data);\n                        this.eventEmitter.emit(RealtimeEvents.ERROR, data);\n                        break;\n                    case \"queue_overflow\":\n                        this.eventEmitter.emit(RealtimeEvents.QUEUE_OVERFLOW, data);\n                        this.eventEmitter.emit(RealtimeEvents.ERROR, data);\n                        break;\n                    case \"resource_exhausted\":\n                        this.eventEmitter.emit(RealtimeEvents.RESOURCE_EXHAUSTED, data);\n                        this.eventEmitter.emit(RealtimeEvents.ERROR, data);\n                        break;\n                    case \"session_time_limit_exceeded\":\n                        this.eventEmitter.emit(RealtimeEvents.SESSION_TIME_LIMIT_EXCEEDED, data);\n                        this.eventEmitter.emit(RealtimeEvents.ERROR, data);\n                        break;\n                    case \"chunk_size_exceeded\":\n                        this.eventEmitter.emit(RealtimeEvents.CHUNK_SIZE_EXCEEDED, data);\n                        this.eventEmitter.emit(RealtimeEvents.ERROR, data);\n                        break;\n                    case \"insufficient_audio_activity\":\n                        this.eventEmitter.emit(RealtimeEvents.INSUFFICIENT_AUDIO_ACTIVITY, data);\n                        this.eventEmitter.emit(RealtimeEvents.ERROR, data);\n                        break;\n                    case \"error\":\n                        this.eventEmitter.emit(RealtimeEvents.ERROR, data);\n                        break;\n                    default:\n                        console.warn(\"Unknown message type:\", data);\n                }\n            }\n            catch (error) {\n                console.error(\"Failed to parse WebSocket message:\", error, event.data);\n                this._emitError(new Error(`Failed to parse message: ${error}`));\n            }\n        });\n        this.websocket.addEventListener(\"error\", (error) => {\n            // Aborting a still-connecting socket fires an error event; an\n            // app-initiated close() is expected, not a failure.\n            if (this._closed)\n                return;\n            console.error(\"WebSocket error:\", error);\n            this._emitError(new Error(\"WebSocket error\"));\n        });\n        this.websocket.addEventListener(\"close\", (event) => {\n            // close() sets _closed before closing the socket; a server-initiated\n            // close reaches this listener with _closed still false.\n            const appInitiated = this._closed;\n            this._closed = true;\n            // An app-initiated close is expected. Closing a still-connecting socket\n            // yields code 1006, which would otherwise log/emit as an unexpected error.\n            if (!appInitiated) {\n                console.log(`WebSocket closed: code=${event.code}, reason=\"${event.reason}\", wasClean=${event.wasClean}`);\n                // Emit error if close was not clean or had an error code\n                if (!event.wasClean || (event.code !== 1000 && event.code !== 1005)) {\n                    const errorMessage = `WebSocket closed unexpectedly: ${event.code} - ${event.reason || \"No reason provided\"}`;\n                    console.error(errorMessage);\n                    this._emitError(new Error(errorMessage));\n                }\n            }\n            // A server-initiated close only fires this listener, never close(), so\n            // release the microphone here too. Guarded so it never double-runs.\n            if (this._audioCleanup) {\n                this._audioCleanup();\n                this._audioCleanup = undefined;\n            }\n            this.eventEmitter.emit(RealtimeEvents.CLOSE, event);\n        });\n    }\n    /**\n     * Attaches an event listener for the specified event.\n     *\n     * @param event - The event to listen for (use RealtimeEvents enum)\n     * @param listener - The callback function to execute when the event fires\n     *\n     * @example\n     * ```typescript\n     * connection.on(RealtimeEvents.SESSION_STARTED, (data) => {\n     *     console.log(\"Session started\", data.session_id);\n     * });\n     *\n     * connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data) => {\n     *     console.log(\"Partial:\", data.text);\n     * });\n     *\n     * connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data) => {\n     *     console.log(\"Final:\", data.text);\n     * });\n     * ```\n     */\n    on(event, listener) {\n        this.eventEmitter.on(event, listener);\n    }\n    /**\n     * Removes an event listener for the specified event.\n     *\n     * @param event - The event to stop listening for\n     * @param listener - The callback function to remove\n     *\n     * @example\n     * ```typescript\n     * const handler = (data: PartialTranscriptMessage) => console.log(data.text);\n     * connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, handler);\n     *\n     * // Later, remove the listener\n     * connection.off(RealtimeEvents.PARTIAL_TRANSCRIPT, handler);\n     * ```\n     */\n    off(event, listener) {\n        this.eventEmitter.off(event, listener);\n    }\n    /** @internal Report a local failure through the public Scribe error event. */\n    _emitError(error) {\n        this.eventEmitter.emit(RealtimeEvents.ERROR, normalizeError(error));\n    }\n    /**\n     * Sends audio data to the transcription service.\n     *\n     * @param data - Audio data configuration\n     * @param data.audioBase64 - Base64-encoded audio data\n     * @param data.commit - Whether to commit the transcription after this chunk. You likely want to use connection.commit() instead (default: false)\n     * @param data.sampleRate - Sample rate of the audio (default: configured sample rate)\n     * @param data.previousText - Send context to the model via base64 encoded audio or text from a previous transcription. Can only be sent alongside the first audio chunk. If sent in a subsequent chunk, an error will be returned.\n     *\n     * @throws {Error} If the WebSocket connection is not open\n     *\n     * @remarks\n     * Manual audio sent with `send()` is transmitted directly. Use `mute()` only\n     * for microphone connections, where it disables the microphone track and the\n     * browser produces silence frames.\n     *\n     * @example\n     * ```typescript\n     * // Send audio chunk without committing\n     * connection.send({\n     *     audioBase64: base64EncodedAudio,\n     * });\n     *\n     * // Send audio chunk with custom sample rate and previous text\n     * connection.send({\n     *     audioBase64: base64EncodedAudio,\n     *     sampleRate: 16000,\n     *     previousText: \"Previous transcription text\",\n     * });\n     * ```\n     */\n    send(data) {\n        if (!this.websocket || this.websocket.readyState !== WebSocket.OPEN) {\n            throw new Error(\"WebSocket is not connected\");\n        }\n        const message = {\n            message_type: \"input_audio_chunk\",\n            audio_base_64: data.audioBase64,\n            commit: data.commit ?? false,\n            sample_rate: data.sampleRate ?? this.currentSampleRate,\n            previous_text: data.previousText,\n        };\n        this.websocket.send(JSON.stringify(message));\n    }\n    /**\n     * Commits the transcription, signaling that a segment of audio has been sent. This clears the buffer and triggers a COMMITTED_TRANSCRIPT event. Context from previous segments is kept.\n     * Committing a segment triggers a COMMITTED_TRANSCRIPT event.\n     *\n     * @throws {Error} If the WebSocket connection is not open\n     *\n     * @remarks\n     * Only needed when using CommitStrategy.MANUAL.\n     * When using CommitStrategy.VAD, commits are handled automatically by the server.\n     *\n     * @example\n     * ```typescript\n     * // Send all audio chunks\n     * for (const chunk of audioChunks) {\n     *     connection.send({ audioBase64: chunk });\n     * }\n     *\n     * // Finalize the transcription\n     * connection.commit();\n     * ```\n     */\n    commit() {\n        if (!this.websocket || this.websocket.readyState !== WebSocket.OPEN) {\n            throw new Error(\"WebSocket is not connected\");\n        }\n        const message = {\n            message_type: \"input_audio_chunk\",\n            audio_base_64: \"\",\n            commit: true,\n            sample_rate: this.currentSampleRate,\n        };\n        this.websocket.send(JSON.stringify(message));\n    }\n    /**\n     * Closes the WebSocket connection and cleans up resources.\n     * This will terminate any ongoing transcription and stop microphone streaming if active.\n     *\n     * @remarks\n     * After calling close(), this connection cannot be reused.\n     * Create a new connection if you need to start transcribing again.\n     *\n     * @example\n     * ```typescript\n     * connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data) => {\n     *     console.log(\"Segment committed:\", data.transcript);\n     *     connection.close();\n     * });\n     * ```\n     */\n    close() {\n        // Flag first so a mic setup still resolving (see ScribeRealtime.\n        // streamFromMicrophone) can tell the connection is gone and clean up.\n        this._closed = true;\n        // Cleanup audio resources (microphone stream, audio context)\n        if (this._audioCleanup) {\n            this._audioCleanup();\n            this._audioCleanup = undefined;\n        }\n        // Close WebSocket connection\n        if (this.websocket) {\n            this.websocket.close(1000, \"User ended session\");\n        }\n    }\n}\n//# sourceMappingURL=connection.js.map","import { RealtimeConnection } from \"./connection.js\";\nimport { getScribeMicrophoneSetup } from \"./microphone.js\";\nexport var AudioFormat;\n(function (AudioFormat) {\n    AudioFormat[\"PCM_8000\"] = \"pcm_8000\";\n    AudioFormat[\"PCM_16000\"] = \"pcm_16000\";\n    AudioFormat[\"PCM_22050\"] = \"pcm_22050\";\n    AudioFormat[\"PCM_24000\"] = \"pcm_24000\";\n    AudioFormat[\"PCM_44100\"] = \"pcm_44100\";\n    AudioFormat[\"PCM_48000\"] = \"pcm_48000\";\n    AudioFormat[\"ULAW_8000\"] = \"ulaw_8000\";\n})(AudioFormat || (AudioFormat = {}));\nexport var CommitStrategy;\n(function (CommitStrategy) {\n    CommitStrategy[\"MANUAL\"] = \"manual\";\n    CommitStrategy[\"VAD\"] = \"vad\";\n})(CommitStrategy || (CommitStrategy = {}));\n/**\n * Real-time speech-to-text transcription client for browser environments.\n * Supports microphone streaming and manual audio chunk transmission.\n */\n// biome-ignore lint/complexity/noStaticOnlyClass: This class is static only because it is a singleton\nexport class ScribeRealtime {\n    static DEFAULT_BASE_URI = \"wss://api.elevenlabs.io\";\n    static getWebSocketUri(baseUri = ScribeRealtime.DEFAULT_BASE_URI) {\n        return `${baseUri}/v1/speech-to-text/realtime`;\n    }\n    static buildWebSocketUri(options) {\n        const baseUri = ScribeRealtime.getWebSocketUri(options.baseUri);\n        const params = new URLSearchParams();\n        // Model ID and token are required, so no check required\n        params.append(\"model_id\", options.modelId);\n        params.append(\"token\", options.token);\n        // Add optional parameters if provided, with validation\n        if (options.commitStrategy !== undefined) {\n            params.append(\"commit_strategy\", options.commitStrategy);\n        }\n        if (options.audioFormat !== undefined) {\n            params.append(\"audio_format\", options.audioFormat);\n        }\n        if (options.vadSilenceThresholdSecs !== undefined) {\n            if (options.vadSilenceThresholdSecs <= 0.3 ||\n                options.vadSilenceThresholdSecs > 3.0) {\n                throw new Error(\"vadSilenceThresholdSecs must be between 0.3 and 3.0\");\n            }\n            params.append(\"vad_silence_threshold_secs\", options.vadSilenceThresholdSecs.toString());\n        }\n        if (options.vadThreshold !== undefined) {\n            if (options.vadThreshold < 0.1 || options.vadThreshold > 0.9) {\n                throw new Error(\"vadThreshold must be between 0.1 and 0.9\");\n            }\n            params.append(\"vad_threshold\", options.vadThreshold.toString());\n        }\n        if (options.minSpeechDurationMs !== undefined) {\n            if (options.minSpeechDurationMs <= 50 ||\n                options.minSpeechDurationMs > 2000) {\n                throw new Error(\"minSpeechDurationMs must be between 50 and 2000\");\n            }\n            params.append(\"min_speech_duration_ms\", options.minSpeechDurationMs.toString());\n        }\n        if (options.minSilenceDurationMs !== undefined) {\n            if (options.minSilenceDurationMs <= 50 ||\n                options.minSilenceDurationMs > 2000) {\n                throw new Error(\"minSilenceDurationMs must be between 50 and 2000\");\n            }\n            params.append(\"min_silence_duration_ms\", options.minSilenceDurationMs.toString());\n        }\n        if (options.languageCode !== undefined) {\n            params.append(\"language_code\", options.languageCode);\n        }\n        if (options.includeTimestamps !== undefined) {\n            params.append(\"include_timestamps\", options.includeTimestamps ? \"true\" : \"false\");\n        }\n        if (options.includeLanguageDetection !== undefined) {\n            params.append(\"include_language_detection\", options.includeLanguageDetection ? \"true\" : \"false\");\n        }\n        if (options.keyterms !== undefined) {\n            for (const term of options.keyterms) {\n                params.append(\"keyterms\", term);\n            }\n        }\n        if (options.noVerbatim !== undefined) {\n            params.append(\"no_verbatim\", options.noVerbatim ? \"true\" : \"false\");\n        }\n        if (options.enableLogging !== undefined) {\n            params.append(\"enable_logging\", options.enableLogging ? \"true\" : \"false\");\n        }\n        const queryString = params.toString();\n        return queryString ? `${baseUri}?${queryString}` : baseUri;\n    }\n    /**\n     * Establishes a WebSocket connection for real-time speech-to-text transcription.\n     *\n     * @param options - Configuration options for the connection\n     * @returns A RealtimeConnection instance\n     *\n     * @example\n     * ```typescript\n     * // Manual audio streaming\n     * const connection = Scribe.connect({\n     *     token: \"...\",\n     *     modelId: \"scribe_v2_realtime\",\n     *     audioFormat: AudioFormat.PCM_16000,\n     *     sampleRate: 16000,\n     * });\n     *\n     * // Automatic microphone streaming\n     * const connection = Scribe.connect({\n     *     token: \"...\",\n     *     modelId: \"scribe_v2_realtime\",\n     *     microphone: {\n     *         echoCancellation: true,\n     *         noiseSuppression: true\n     *     }\n     * });\n     * ```\n     */\n    static connect(options) {\n        if (!options.modelId) {\n            throw new Error(\"modelId is required\");\n        }\n        // Create connection object first so users can attach event listeners before messages arrive\n        const sampleRate = \"microphone\" in options && options.microphone\n            ? 16000\n            : options.sampleRate;\n        const connection = new RealtimeConnection(sampleRate);\n        // Build WebSocket URI with query parameters\n        const uri = ScribeRealtime.buildWebSocketUri(options);\n        const websocket = new WebSocket(uri);\n        // If microphone mode, set up streaming handler\n        if (\"microphone\" in options && options.microphone) {\n            websocket.addEventListener(\"open\", () => {\n                ScribeRealtime.streamFromMicrophone(options, connection);\n            });\n        }\n        connection.setWebSocket(websocket);\n        return connection;\n    }\n    static async streamFromMicrophone(options, connection) {\n        try {\n            const setup = getScribeMicrophoneSetup();\n            const result = await setup(options.microphone ?? {}, base64Audio => {\n                // A frame can arrive after close(); send() throws on a closed socket.\n                if (connection._closed)\n                    return;\n                connection.send({ audioBase64: base64Audio });\n            });\n            connection._mediaStreamTrack = result.mediaStreamTrack;\n            connection._audioCleanup = result.cleanup;\n            // close() may have run while this setup was in flight, before\n            // _audioCleanup was assigned; release the mic now so it does not leak.\n            if (connection._closed) {\n                result.cleanup();\n                connection._audioCleanup = undefined;\n            }\n        }\n        catch (error) {\n            console.error(\"Failed to start microphone streaming:\", error);\n            connection._emitError(error);\n        }\n    }\n}\n//# sourceMappingURL=scribe.js.map","import { isTextOnly } from \"./BaseConversation.js\";\nimport { assertRuntimeCompatibility } from \"./runtime.js\";\nimport { TextConversation } from \"./TextConversation.js\";\nimport { VoiceConversation } from \"./VoiceConversation.js\";\nexport { DEFAULT_INPUT_CHUNK_DURATION_MS } from \"./InputController.js\";\nexport { createConnection } from \"./utils/ConnectionFactory.js\";\nexport { WebSocketConnection } from \"./utils/WebSocketConnection.js\";\nexport { WebRTCConnection } from \"./utils/WebRTCConnection.js\";\nexport { postOverallFeedback } from \"./utils/postOverallFeedback.js\";\nexport { SessionConnectionError } from \"./utils/errors.js\";\nexport { VoiceConversation } from \"./VoiceConversation.js\";\nexport { TextConversation } from \"./TextConversation.js\";\n// Scribe exports\nexport { Scribe, AudioFormat, CommitStrategy, RealtimeEvents, RealtimeConnection, } from \"./scribe/index.js\";\nexport const Conversation = {\n    async startSession(options) {\n        assertRuntimeCompatibility();\n        return isTextOnly(options)\n            ? TextConversation.startSession(options)\n            : VoiceConversation.startSession(options);\n    },\n};\n//# sourceMappingURL=index.js.map","// Side-effect: registers the web voice session setup strategy\nimport \"./VoiceSessionSetup.js\";\n// Side-effect: arms iOS audio unlock on first user gesture (no-op on other\n// platforms). Needed because the convai widget awaits other promises (terms\n// modal etc.) between the user's tap and Conversation.startSession, by which\n// point the gesture has been consumed.\nimport { installIosAudioUnlockListener } from \"./audioUnlock.js\";\ninstallIosAudioUnlockListener();\n// Side-effect: registers the web audio adapter for WebRTC connections\nimport { setWebRTCAudioAdapterFactory } from \"../../WebRTCAudioAdapter.js\";\nimport { WebAudioAdapter } from \"./webAudioAdapter.js\";\nsetWebRTCAudioAdapterFactory(() => new WebAudioAdapter());\n// Side-effect: registers the web Scribe microphone implementation\nimport { setScribeMicrophoneSetup } from \"../../scribe/microphone.js\";\nimport { webScribeMicrophoneSetup } from \"./scribeMicrophone.js\";\nsetScribeMicrophoneSetup(webScribeMicrophoneSetup);\nexport * from \"../../index.js\";\n//# sourceMappingURL=index.js.map","import { createContext, useContext, useLayoutEffect, useRef, } from \"react\";\nexport const ConversationContext = createContext(null);\n/**\n * Returns the raw `Conversation` instance (or `null` if no session is active).\n * This is a public escape hatch for advanced use cases that need direct access\n * to the underlying `@elevenlabs/client` Conversation object.\n *\n * Can be used outside a `ConversationProvider` — returns `null` in that case.\n */\nexport function useRawConversation() {\n    const ctx = useContext(ConversationContext);\n    return ctx?.conversation ?? null;\n}\n/**\n * Returns a stable ref to the active `Conversation` instance.\n * The ref's `.current` is `null` when no session is active, and updates\n * without causing re-renders — ideal for use inside callbacks and sub-providers.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useRawConversationRef() {\n    const ctx = useContext(ConversationContext);\n    if (!ctx) {\n        throw new Error(\"useRawConversationRef must be used within a ConversationProvider\");\n    }\n    return ctx.conversationRef;\n}\n/**\n * Registers callback handlers with the nearest `ConversationProvider`.\n * Uses a ref internally so the latest callback values are always invoked\n * without re-subscribing on every render.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useRegisterCallbacks(callbacks) {\n    const ctx = useContext(ConversationContext);\n    if (!ctx) {\n        throw new Error(\"useRegisterCallbacks must be used within a ConversationProvider\");\n    }\n    const { registerCallbacks } = ctx;\n    const callbacksRef = useRef(callbacks);\n    // Re-subscribe when the set of provided callback keys changes.\n    const activeKeyToken = Object.keys(callbacks)\n        .filter(key => callbacks[key] !== undefined)\n        .sort()\n        .join(\"|\");\n    useLayoutEffect(() => {\n        callbacksRef.current = callbacks;\n    });\n    useLayoutEffect(() => {\n        const activeKeys = activeKeyToken === \"\" ? [] : activeKeyToken.split(\"|\");\n        const stableCallbacks = Object.fromEntries(activeKeys.map((key) => [\n            key,\n            (...args) => {\n                const fn = callbacksRef.current[key];\n                if (typeof fn === \"function\") {\n                    fn(...args);\n                }\n            },\n        ]));\n        return registerCallbacks(stableCallbacks);\n    }, [registerCallbacks, activeKeyToken]);\n}\n//# sourceMappingURL=ConversationContext.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useCallback, useContext, useMemo } from \"react\";\nimport { VoiceConversation, } from \"@elevenlabs/client\";\nimport { ConversationContext } from \"./ConversationContext.js\";\nconst EMPTY_FREQUENCY_DATA = new Uint8Array(0);\nexport const ConversationControlsContext = createContext(null);\n/**\n * Reads from `ConversationContext` and provides stable action references to\n * `ConversationControlsContext`. Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationControlsProvider({ children, }) {\n    const ctx = useContext(ConversationContext);\n    if (!ctx) {\n        throw new Error(\"ConversationControlsProvider must be rendered inside a ConversationProvider\");\n    }\n    const { conversationRef } = ctx;\n    const getConversation = useCallback(() => {\n        const conversation = conversationRef.current;\n        if (!conversation) {\n            throw new Error(\"No active conversation. Call startSession() first.\");\n        }\n        return conversation;\n    }, [conversationRef]);\n    const sendUserMessage = useCallback((text) => {\n        getConversation().sendUserMessage(text);\n    }, [getConversation]);\n    const sendMultimodalMessage = useCallback((options) => {\n        getConversation().sendMultimodalMessage(options);\n    }, [getConversation]);\n    const uploadFile = useCallback((file) => {\n        return getConversation().uploadFile(file);\n    }, [getConversation]);\n    const sendContextualUpdate = useCallback((text, options) => {\n        getConversation().sendContextualUpdate(text, options);\n    }, [getConversation]);\n    const sendUserActivity = useCallback(() => {\n        getConversation().sendUserActivity();\n    }, [getConversation]);\n    const sendMCPToolApprovalResult = useCallback((toolCallId, isApproved) => {\n        getConversation().sendMCPToolApprovalResult(toolCallId, isApproved);\n    }, [getConversation]);\n    const setVolume = useCallback((options) => {\n        getConversation().setVolume(options);\n    }, [getConversation]);\n    const changeInputDevice = useCallback(async (config) => {\n        const conversation = getConversation();\n        if (conversation instanceof VoiceConversation) {\n            return await conversation.changeInputDevice(config);\n        }\n        throw new Error(\"Device switching is only available for voice conversations\");\n    }, [getConversation]);\n    const changeOutputDevice = useCallback(async (config) => {\n        const conversation = getConversation();\n        if (conversation instanceof VoiceConversation) {\n            return await conversation.changeOutputDevice(config);\n        }\n        throw new Error(\"Device switching is only available for voice conversations\");\n    }, [getConversation]);\n    const getInputByteFrequencyData = useCallback(() => {\n        return (conversationRef.current?.getInputByteFrequencyData() ??\n            EMPTY_FREQUENCY_DATA);\n    }, [conversationRef]);\n    const getOutputByteFrequencyData = useCallback(() => {\n        return (conversationRef.current?.getOutputByteFrequencyData() ??\n            EMPTY_FREQUENCY_DATA);\n    }, [conversationRef]);\n    const getInputVolume = useCallback(() => {\n        return conversationRef.current?.getInputVolume() ?? 0;\n    }, [conversationRef]);\n    const getOutputVolume = useCallback(() => {\n        return conversationRef.current?.getOutputVolume() ?? 0;\n    }, [conversationRef]);\n    const getId = useCallback(() => {\n        return getConversation().getId();\n    }, [getConversation]);\n    const value = useMemo(() => ({\n        startSession: ctx.startSession,\n        endSession: ctx.endSession,\n        sendUserMessage,\n        sendMultimodalMessage,\n        uploadFile,\n        sendContextualUpdate,\n        sendUserActivity,\n        sendMCPToolApprovalResult,\n        setVolume,\n        changeInputDevice,\n        changeOutputDevice,\n        getInputByteFrequencyData,\n        getOutputByteFrequencyData,\n        getInputVolume,\n        getOutputVolume,\n        getId,\n    }), [\n        ctx.startSession,\n        ctx.endSession,\n        sendUserMessage,\n        sendMultimodalMessage,\n        uploadFile,\n        sendContextualUpdate,\n        sendUserActivity,\n        sendMCPToolApprovalResult,\n        setVolume,\n        changeInputDevice,\n        changeOutputDevice,\n        getInputByteFrequencyData,\n        getOutputByteFrequencyData,\n        getInputVolume,\n        getOutputVolume,\n        getId,\n    ]);\n    return (_jsx(ConversationControlsContext.Provider, { value: value, children: children }));\n}\n/**\n * Returns stable action references for controlling the conversation.\n * All function references are stable and will never cause re-renders.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationControls() {\n    const ctx = useContext(ConversationControlsContext);\n    if (!ctx) {\n        throw new Error(\"useConversationControls must be used within a ConversationProvider\");\n    }\n    return ctx;\n}\n//# sourceMappingURL=ConversationControls.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useContext, useMemo, useState } from \"react\";\nimport { useRegisterCallbacks } from \"./ConversationContext.js\";\nconst ConversationStatusContext = createContext(null);\n/**\n * Reads from `ConversationContext` and registers `onStatusChange` + `onError`\n * callbacks. Manages its own `status`/`message` state and provides it through\n * `ConversationStatusContext`. Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationStatusProvider({ children, }) {\n    const [status, setStatus] = useState(\"disconnected\");\n    const [message, setMessage] = useState(undefined);\n    useRegisterCallbacks({\n        onStatusChange({ status: newStatus }) {\n            if (newStatus === \"disconnecting\") {\n                // Transient state — keep current status\n                return;\n            }\n            setStatus(newStatus);\n            // Clear error message when transitioning to a non-error state\n            setMessage(undefined);\n        },\n        onError(errorMessage) {\n            setStatus(\"error\");\n            setMessage(errorMessage);\n        },\n    });\n    const value = useMemo(() => ({ status, message }), [status, message]);\n    return (_jsx(ConversationStatusContext.Provider, { value: value, children: children }));\n}\n/**\n * Returns the current conversation status and any error message.\n * Re-renders when the connection status or error message changes.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationStatus() {\n    const ctx = useContext(ConversationStatusContext);\n    if (!ctx) {\n        throw new Error(\"useConversationStatus must be used within a ConversationProvider\");\n    }\n    return ctx;\n}\n//# sourceMappingURL=ConversationStatus.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useCallback, useContext, useEffect, useMemo, useState, } from \"react\";\nimport { useRawConversation, useRawConversationRef, useRegisterCallbacks, } from \"./ConversationContext.js\";\nconst ConversationInputContext = createContext(null);\n/**\n * Reads from `ConversationContext` and manages microphone mute state.\n * `setMuted` calls `conversation.setMicMuted()` and updates local state.\n * Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationInputProvider({ children, isMuted: controlledIsMuted, onMutedChange, }) {\n    const conversation = useRawConversation();\n    const conversationRef = useRawConversationRef();\n    const isControlled = typeof controlledIsMuted === \"boolean\";\n    const [uncontrolledIsMuted, setUncontrolledIsMuted] = useState(false);\n    const isMuted = isControlled ? controlledIsMuted : uncontrolledIsMuted;\n    useRegisterCallbacks({\n        onDisconnect() {\n            if (!isControlled) {\n                setUncontrolledIsMuted(false);\n            }\n        },\n    });\n    useEffect(() => {\n        if (isControlled && conversation) {\n            conversation.setMicMuted(controlledIsMuted);\n        }\n    }, [conversation, controlledIsMuted, isControlled]);\n    const setMuted = useCallback((muted) => {\n        const conversation = conversationRef.current;\n        if (!conversation) {\n            throw new Error(\"No active conversation. Call startSession() first.\");\n        }\n        if (!isControlled) {\n            conversation.setMicMuted(muted);\n            setUncontrolledIsMuted(muted);\n        }\n        onMutedChange?.(muted);\n    }, [conversationRef, isControlled, onMutedChange]);\n    const value = useMemo(() => ({ isMuted, setMuted }), [isMuted, setMuted]);\n    return (_jsx(ConversationInputContext.Provider, { value: value, children: children }));\n}\n/**\n * Returns the current microphone mute state and a function to change it.\n * Re-renders only when the mute state changes.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationInput() {\n    const ctx = useContext(ConversationInputContext);\n    if (!ctx) {\n        throw new Error(\"useConversationInput must be used within a ConversationProvider\");\n    }\n    return ctx;\n}\n//# sourceMappingURL=ConversationInput.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useContext, useMemo, useState } from \"react\";\nimport { useRegisterCallbacks } from \"./ConversationContext.js\";\nconst ConversationModeContext = createContext(null);\n/**\n * Reads from `ConversationContext` and registers an `onModeChange` callback.\n * Manages its own `mode` state and provides it through\n * `ConversationModeContext`. Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationModeProvider({ children, }) {\n    const [mode, setMode] = useState(\"listening\");\n    useRegisterCallbacks({\n        onModeChange({ mode: newMode }) {\n            setMode(newMode);\n        },\n        onDisconnect() {\n            setMode(\"listening\");\n        },\n    });\n    const value = useMemo(() => ({\n        mode,\n        isSpeaking: mode === \"speaking\",\n        isListening: mode === \"listening\",\n    }), [mode]);\n    return (_jsx(ConversationModeContext.Provider, { value: value, children: children }));\n}\n/**\n * Returns the current conversation mode (speaking/listening) and\n * convenience booleans. Re-renders only when the mode changes.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationMode() {\n    const ctx = useContext(ConversationModeContext);\n    if (!ctx) {\n        throw new Error(\"useConversationMode must be used within a ConversationProvider\");\n    }\n    return ctx;\n}\n//# sourceMappingURL=ConversationMode.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useCallback, useContext, useMemo, useState, } from \"react\";\nimport { useRawConversationRef, useRegisterCallbacks, } from \"./ConversationContext.js\";\nconst ConversationFeedbackContext = createContext(null);\n/**\n * Reads from `ConversationContext` and registers an `onCanSendFeedbackChange`\n * callback. Manages its own `canSendFeedback` state and provides it along with\n * a `sendFeedback` action through `ConversationFeedbackContext`.\n * Must be rendered inside a `ConversationProvider`.\n */\nexport function ConversationFeedbackProvider({ children, }) {\n    const conversationRef = useRawConversationRef();\n    const [canSendFeedback, setCanSendFeedback] = useState(false);\n    useRegisterCallbacks({\n        onCanSendFeedbackChange({ canSendFeedback: newValue }) {\n            setCanSendFeedback(newValue);\n        },\n        onDisconnect() {\n            setCanSendFeedback(false);\n        },\n    });\n    const sendFeedback = useCallback((like, eventId) => {\n        conversationRef.current?.sendFeedback(like, eventId);\n    }, [conversationRef]);\n    const value = useMemo(() => ({\n        canSendFeedback,\n        sendFeedback,\n    }), [canSendFeedback, sendFeedback]);\n    return (_jsx(ConversationFeedbackContext.Provider, { value: value, children: children }));\n}\n/**\n * Returns the current feedback state and a `sendFeedback` action.\n * Re-renders only when `canSendFeedback` changes.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversationFeedback() {\n    const ctx = useContext(ConversationFeedbackContext);\n    if (!ctx) {\n        throw new Error(\"useConversationFeedback must be used within a ConversationProvider\");\n    }\n    return ctx;\n}\n//# sourceMappingURL=ConversationFeedback.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { createContext, useCallback, useContext, useLayoutEffect, useRef } from \"react\";\nimport { ConversationContext } from \"./ConversationContext.js\";\n/**\n * Creates a fresh clientTools object by merging option-provided tools with\n * hook-registered tools from the registry. Throws if a hook-registered tool\n * name conflicts with an option-provided tool.\n */\nexport function buildClientTools(optionTools, registry) {\n    const clientTools = { ...optionTools };\n    for (const [name, handler] of registry) {\n        if (Object.hasOwn(clientTools, name)) {\n            throw new Error(`Client tool \"${name}\" is already provided via props/options. ` +\n                `Remove it from props or do not register it with useConversationClientTool.`);\n        }\n        clientTools[name] = handler;\n    }\n    return clientTools;\n}\nconst ConversationClientToolsContext = createContext(null);\nexport function ConversationClientToolsProvider({ children, }) {\n    const ctx = useContext(ConversationContext);\n    if (!ctx) {\n        throw new Error(\"ConversationClientToolsProvider must be rendered inside a ConversationProvider\");\n    }\n    const { clientToolsRegistry, clientToolsRef } = ctx;\n    const registerClientTool = useCallback((name, handler) => {\n        if (clientToolsRegistry.has(name)) {\n            throw new Error(`Client tool \"${name}\" is already registered by another hook. ` +\n                `Each tool name must be unique.`);\n        }\n        clientToolsRegistry.set(name, handler);\n        clientToolsRef.current[name] = handler;\n        return () => {\n            if (clientToolsRegistry.get(name) === handler) {\n                clientToolsRegistry.delete(name);\n            }\n            if (clientToolsRef.current[name] === handler) {\n                delete clientToolsRef.current[name];\n            }\n        };\n    }, [clientToolsRegistry, clientToolsRef]);\n    return (_jsx(ConversationClientToolsContext.Provider, { value: registerClientTool, children: children }));\n}\n// ---------------------------------------------------------------------------\n// Hook\n// ---------------------------------------------------------------------------\n/**\n * Registers a named client tool with the nearest `ConversationProvider`.\n * The tool is available during any active conversation and is automatically\n * unregistered when the component unmounts.\n *\n * The handler always reflects the latest closure value (ref pattern),\n * so it is safe to reference component state or props without listing\n * them as dependencies.\n *\n * @typeParam TTools - An interface mapping tool names to function signatures.\n * @typeParam TName  - The specific tool name (inferred from the first argument).\n * @param name    - The tool name (must match the name configured on the agent).\n * @param handler - The function invoked when the agent calls this tool.\n *\n * @example\n * ```tsx\n * type Tools = {\n *   get_weather: (params: { city: string }) => string;\n *   set_volume: (params: { level: number }) => void;\n * };\n *\n * useConversationClientTool<Tools>(\"get_weather\", (params) => {\n *   return `Weather in ${params.city} is sunny.`;\n * });\n * ```\n */\nexport function useConversationClientTool(name, handler) {\n    const registerClientTool = useContext(ConversationClientToolsContext);\n    if (!registerClientTool) {\n        throw new Error(\"useConversationClientTool must be used within a ConversationProvider\");\n    }\n    const handlerRef = useRef(handler);\n    // eslint-disable-next-line react-hooks/refs -- intentional sync during render for latest-ref pattern\n    handlerRef.current = handler;\n    useLayoutEffect(() => {\n        const stableHandler = parameters => handlerRef.current(parameters);\n        return registerClientTool(name, stableHandler);\n    }, [registerClientTool, name]);\n}\n//# sourceMappingURL=ConversationClientTools.js.map","export class ListenerSet {\n    listeners = new Set();\n    add(fn) {\n        this.listeners.add(fn);\n        return () => {\n            this.listeners.delete(fn);\n        };\n    }\n    invoke(...args) {\n        for (const fn of this.listeners)\n            fn(...args);\n    }\n    get size() {\n        return this.listeners.size;\n    }\n}\n//# sourceMappingURL=ListenerSet.js.map","import { ListenerSet } from \"./ListenerSet.js\";\nfunction assertFunction(value, key) {\n    if (typeof value !== \"function\") {\n        throw new Error(`Expected function for key \"${key}\", got ${typeof value}`);\n    }\n}\n/**\n * A map of named listener sets. Each key maps to a `ListenerSet` that can have\n * multiple listeners registered. Typed through `T` so that `register` and\n * `compose` preserve per-key callback signatures.\n *\n * All keys are pre-initialized in the constructor so `register` can validate\n * keys. `compose()` only includes keys with at least one registered listener,\n * preserving callback-presence semantics used by the client as feature guards.\n * For included keys, composed functions delegate to the live listener set, so\n * listeners added/removed after `compose()` still take effect. Keys with no\n * listeners at compose time are omitted entirely; call `compose()` again after\n * registering listeners to pick up newly populated keys.\n */\nexport class ListenerMap {\n    sets = new Map();\n    constructor(keys) {\n        for (const key of keys) {\n            this.sets.set(key, new ListenerSet());\n        }\n    }\n    /**\n     * Register listeners for one or more keys. Returns a function that removes\n     * all listeners added by this call.\n     */\n    register(callbacks) {\n        const removers = Object.entries(callbacks)\n            .filter(([, fn]) => fn !== undefined)\n            .map(([key, fn]) => {\n            assertFunction(fn, key);\n            const set = this.sets.get(key);\n            if (!set) {\n                throw new Error(`Unknown callback key \"${key}\"`);\n            }\n            return set.add(fn);\n        });\n        return () => {\n            for (const remove of removers)\n                remove();\n        };\n    }\n    /**\n     * Compose all registered listeners into a single callbacks object. Each\n     * composed function delegates to the live listener set, so listeners\n     * added/removed after this call still take effect.\n     */\n    compose() {\n        return Object.fromEntries(Array.from(this.sets.entries())\n            .filter(([, set]) => set.size > 0)\n            .map(([key, set]) => [\n            key,\n            (...args) => {\n                set.invoke(...args);\n            },\n        ]));\n    }\n}\n//# sourceMappingURL=ListenerMap.js.map","import { useMemo, useRef } from \"react\";\nimport { CALLBACK_KEYS } from \"@elevenlabs/client/internal\";\n/**\n * Wraps user-provided callback props in stable ref-backed functions,\n * preventing stale closure bugs when the session outlives renders.\n *\n * Returns a `Partial<Callbacks>` containing only the keys the caller\n * actually provided. Function references are stable per key across\n * renders, but always invoke the latest prop value. The returned object\n * reference is stable as long as the set of provided keys doesn't change.\n */\nexport function useStableCallbacks(props) {\n    // Store the latest prop value for each callback in a ref.\n    // Uses Record<string, unknown> to avoid TypeScript's union-to-intersection\n    // issue when indexing Callbacks with a union of all its keys.\n    const callbackRefs = useRef({});\n    // Compute a stable scalar from the set of provided keys so we can\n    // memoize the result object.\n    const activeKeys = CALLBACK_KEYS.filter(key => props[key] !== undefined);\n    const activeKeySet = activeKeys.join(\"|\");\n    const stableCallbacks = useMemo(() => Object.fromEntries(activeKeys.map(key => [\n        key,\n        (...args) => {\n            const fn = callbackRefs.current[key];\n            fn?.(...args);\n        },\n    ])), \n    // eslint-disable-next-line react-hooks/exhaustive-deps -- activeKeySet is a stable scalar derived from activeKeys\n    [activeKeySet]);\n    for (const key of CALLBACK_KEYS) {\n        // eslint-disable-next-line react-hooks/refs -- callback refs intentionally track latest props for stable event handlers\n        callbackRefs.current[key] = props[key];\n    }\n    return stableCallbacks;\n}\n//# sourceMappingURL=useStableCallbacks.js.map","import { jsx as _jsx } from \"react/jsx-runtime\";\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, } from \"react\";\nimport { Conversation, } from \"@elevenlabs/client\";\nimport { CALLBACK_KEYS, mergeOptions, parseLocation, getOriginForLocation, getLivekitUrlForLocation, } from \"@elevenlabs/client/internal\";\nimport { ConversationContext, } from \"./ConversationContext.js\";\nimport { ConversationControlsProvider } from \"./ConversationControls.js\";\nimport { ConversationStatusProvider } from \"./ConversationStatus.js\";\nimport { ConversationInputProvider, } from \"./ConversationInput.js\";\nimport { ConversationModeProvider } from \"./ConversationMode.js\";\nimport { ConversationFeedbackProvider } from \"./ConversationFeedback.js\";\nimport { ConversationClientToolsProvider, buildClientTools, } from \"./ConversationClientTools.js\";\nimport { ListenerMap } from \"./ListenerMap.js\";\nimport { useStableCallbacks } from \"./useStableCallbacks.js\";\nconst SUB_PROVIDERS_WITHOUT_PROPS = [\n    ConversationControlsProvider,\n    ConversationStatusProvider,\n    ConversationModeProvider,\n    ConversationFeedbackProvider,\n    ConversationClientToolsProvider,\n];\nexport function ConversationProvider({ children, isMuted, onMutedChange, ...defaultOptions }) {\n    /** The active conversation instance, if any. */\n    const conversationRef = useRef(null);\n    /** In-flight startSession promise, used to prevent duplicate connections. */\n    const lockRef = useRef(null);\n    /** Monotonic id used to ignore stale async handlers from older starts. */\n    const startSessionIdRef = useRef(0);\n    /** Signals that endSession was called while a connection was still pending. */\n    const shouldEndRef = useRef(false);\n    /** Registry of hook-registered client tools. Survives across sessions. */\n    const [clientToolsRegistry] = useState(() => new Map());\n    /** Ref to the live clientTools object currently held by BaseConversation. */\n    const clientToolsRef = useRef({});\n    /** Always holds the latest provider props, avoiding stale closures in callbacks. */\n    const defaultOptionsRef = useRef(defaultOptions);\n    // eslint-disable-next-line react-hooks/refs -- intentional sync during render for latest-ref pattern\n    defaultOptionsRef.current = defaultOptions;\n    /** Callback registry for sub-providers (status, mode, feedback, etc.). */\n    const [listenerMap] = useState(() => new ListenerMap(CALLBACK_KEYS));\n    /** Reactive mirror of conversationRef, triggers re-renders for context consumers. */\n    const [conversation, setConversation] = useState(null);\n    const stableCallbacks = useStableCallbacks(defaultOptions);\n    const registerCallbacks = useCallback((callbacks) => listenerMap.register(callbacks), [listenerMap]);\n    // Sync provider state when session ends externally (agent disconnect,\n    // raw instance endSession(), etc.). Uses the listener map so it composes\n    // with user-provided onDisconnect callbacks.\n    useLayoutEffect(() => {\n        return listenerMap.register({\n            onDisconnect: () => {\n                conversationRef.current = null;\n                setConversation(null);\n            },\n        });\n    }, [listenerMap]);\n    const startSession = useCallback((options) => {\n        if (conversationRef.current) {\n            return;\n        }\n        if (lockRef.current) {\n            return;\n        }\n        shouldEndRef.current = false;\n        const startSessionId = ++startSessionIdRef.current;\n        const defaults = defaultOptionsRef.current;\n        const resolvedServerLocation = parseLocation(options?.serverLocation || defaults?.serverLocation);\n        const origin = getOriginForLocation(resolvedServerLocation);\n        const calculatedLivekitUrl = getLivekitUrlForLocation(resolvedServerLocation);\n        // Strip raw callbacks from defaults — stableCallbacks provides\n        // ref-backed versions that won't go stale across renders.\n        const defaultConfig = { ...defaults };\n        for (const key of CALLBACK_KEYS) {\n            delete defaultConfig[key];\n        }\n        const sessionOptions = mergeOptions({ livekitUrl: calculatedLivekitUrl }, defaultConfig, stableCallbacks, listenerMap.compose(), options ?? {}, { origin });\n        const clientTools = buildClientTools(sessionOptions.clientTools, clientToolsRegistry);\n        clientToolsRef.current = clientTools;\n        sessionOptions.clientTools = clientTools;\n        const userOnConversationCreated = sessionOptions.onConversationCreated;\n        const isStaleStartSession = () => startSessionId !== startSessionIdRef.current;\n        const handleConversationCreated = (conv) => {\n            if (shouldEndRef.current || isStaleStartSession()) {\n                return;\n            }\n            conversationRef.current = conv;\n            setConversation(conv);\n            userOnConversationCreated?.(conv);\n        };\n        const handleConnect = props => {\n            if (shouldEndRef.current || isStaleStartSession()) {\n                return;\n            }\n            lockRef.current = null;\n            sessionOptions.onConnect?.(props);\n        };\n        const providerLifecycleOptions = {\n            onConversationCreated: handleConversationCreated,\n            onConnect: handleConnect,\n        };\n        const startSessionOptions = {\n            ...sessionOptions,\n            ...providerLifecycleOptions,\n        };\n        lockRef.current = Conversation.startSession(startSessionOptions);\n        lockRef.current.then(conv => {\n            if (isStaleStartSession()) {\n                return;\n            }\n            if (shouldEndRef.current) {\n                conv.endSession();\n                lockRef.current = null;\n                return;\n            }\n            if (conversationRef.current !== conv) {\n                conversationRef.current = conv;\n                setConversation(conv);\n            }\n            lockRef.current = null;\n        }, (error) => {\n            if (isStaleStartSession()) {\n                return;\n            }\n            conversationRef.current = null;\n            setConversation(null);\n            lockRef.current = null;\n            if (shouldEndRef.current) {\n                return;\n            }\n            // The client SDK calls onStatusChange(\"disconnected\") before\n            // rejecting, but never calls onError — surface the failure here\n            // so listeners (e.g. ConversationStatusProvider) transition to\n            // the \"error\" state with a meaningful message.\n            const message = error instanceof Error\n                ? error.message\n                : \"Session failed to start\";\n            sessionOptions.onError?.(message, error);\n        });\n    }, [stableCallbacks, listenerMap, clientToolsRegistry, clientToolsRef]);\n    const endSession = useCallback(() => {\n        shouldEndRef.current = true;\n        const pendingConnection = lockRef.current;\n        const conv = conversationRef.current;\n        conversationRef.current = null;\n        setConversation(null);\n        if (pendingConnection) {\n            pendingConnection.then(c => c.endSession(), () => { });\n        }\n        else {\n            conv?.endSession();\n        }\n    }, []);\n    // Cleanup on unmount\n    useEffect(() => {\n        return () => {\n            shouldEndRef.current = true;\n            if (lockRef.current) {\n                lockRef.current.then(conv => conv.endSession(), () => { });\n            }\n            else {\n                conversationRef.current?.endSession();\n            }\n        };\n    }, []);\n    const contextValue = useMemo(() => ({\n        conversation,\n        conversationRef,\n        startSession,\n        endSession,\n        registerCallbacks,\n        clientToolsRegistry,\n        clientToolsRef,\n    }), [conversation, conversationRef, startSession, endSession, registerCallbacks, clientToolsRegistry, clientToolsRef]);\n    const wrappedChildren = SUB_PROVIDERS_WITHOUT_PROPS.reduceRight((nested, Provider) => _jsx(Provider, { children: nested }), _jsx(ConversationInputProvider, { isMuted: isMuted, onMutedChange: onMutedChange, children: children }));\n    return (_jsx(ConversationContext.Provider, { value: contextValue, children: wrappedChildren }));\n}\n//# sourceMappingURL=ConversationProvider.js.map","import { useCallback, useEffect, useRef } from \"react\";\nimport { CALLBACK_KEYS } from \"@elevenlabs/client/internal\";\nimport { useConversationControls } from \"./ConversationControls.js\";\nimport { useConversationStatus } from \"./ConversationStatus.js\";\nimport { useConversationInput } from \"./ConversationInput.js\";\nimport { useConversationMode } from \"./ConversationMode.js\";\nimport { useConversationFeedback } from \"./ConversationFeedback.js\";\nimport { useRawConversation, useRegisterCallbacks, } from \"./ConversationContext.js\";\nimport { useStableCallbacks } from \"./useStableCallbacks.js\";\n/**\n * Convenience hook that combines all granular conversation hooks into a single\n * return value. Less performant than using individual hooks because any state\n * change in any sub-context triggers a re-render of the consuming component.\n *\n * Accepts optional `micMuted`, `volume`, session config, and callback props.\n * Session config and callbacks passed here are used as defaults when calling\n * `startSession()` without arguments. Callbacks are also registered with the\n * provider so they stay up-to-date across re-renders.\n *\n * Must be used within a `ConversationProvider`.\n */\nexport function useConversation(props = {}) {\n    const { micMuted, volume, ...hookOptions } = props;\n    const stableCallbacks = useStableCallbacks(hookOptions);\n    useRegisterCallbacks(stableCallbacks);\n    const hookOptionsRef = useRef(hookOptions);\n    // eslint-disable-next-line react-hooks/refs -- intentional sync during render for latest-ref pattern\n    hookOptionsRef.current = hookOptions;\n    const controls = useConversationControls();\n    const { status, message } = useConversationStatus();\n    const { isMuted, setMuted } = useConversationInput();\n    const { mode, isSpeaking, isListening } = useConversationMode();\n    const { canSendFeedback, sendFeedback } = useConversationFeedback();\n    const startSession = useCallback((options) => {\n        // Strip callbacks from the hook-level defaults: those are registered via\n        // useRegisterCallbacks and kept ref-stable across renders.\n        // NOTE: We intentionally do NOT strip callbacks from the `options` parameter\n        // here. Callbacks passed directly to startSession() are treated as one-shot\n        // per-session overrides, and may capture render-local state. This asymmetry\n        // (hook callbacks are ref-stable; startSession callbacks are one-shot) is\n        // intentional and relied on by the public API.\n        const sessionConfig = { ...hookOptionsRef.current };\n        for (const key of CALLBACK_KEYS) {\n            delete sessionConfig[key];\n        }\n        controls.startSession({\n            ...sessionConfig,\n            ...options,\n        });\n    }, [controls, hookOptionsRef]);\n    const conversation = useRawConversation();\n    useEffect(() => {\n        if (micMuted !== undefined && conversation) {\n            setMuted(micMuted);\n        }\n    }, [micMuted, conversation, setMuted]);\n    useEffect(() => {\n        if (volume !== undefined && conversation) {\n            conversation.setVolume({ volume });\n        }\n    }, [volume, conversation]);\n    return {\n        ...controls,\n        startSession,\n        status,\n        message,\n        isMuted: micMuted ?? isMuted,\n        setMuted,\n        mode,\n        isSpeaking,\n        isListening,\n        canSendFeedback,\n        sendFeedback,\n    };\n}\n//# sourceMappingURL=useConversation.js.map","import { setSourceInfo } from \"@elevenlabs/client/internal\";\nimport { PACKAGE_VERSION } from \"./version.js\";\nsetSourceInfo({ name: \"react_sdk\", version: PACKAGE_VERSION });\nexport * from \"@elevenlabs/client\";\n// Scribe exports\nexport { useScribe, AudioFormat, CommitStrategy, RealtimeEvents, } from \"./scribe.js\";\n// Conversation context API\nexport { ConversationProvider } from \"./conversation/ConversationProvider.js\";\nexport { useConversationControls } from \"./conversation/ConversationControls.js\";\nexport { useConversationStatus } from \"./conversation/ConversationStatus.js\";\nexport { useConversationInput } from \"./conversation/ConversationInput.js\";\nexport { useConversationMode } from \"./conversation/ConversationMode.js\";\nexport { useConversationFeedback } from \"./conversation/ConversationFeedback.js\";\nexport { useRawConversation } from \"./conversation/ConversationContext.js\";\nexport { useConversation } from \"./conversation/useConversation.js\";\nexport { useConversationClientTool } from \"./conversation/ConversationClientTools.js\";\n//# sourceMappingURL=index.js.map","// Simulator Types - Type definitions for the phone simulator components\n\nexport interface DialerProps {\n  onCall: (number: string) => void;\n}\n\nexport interface CallProps {\n  number: string;\n  onEnd: () => void;\n}\n\nexport interface DialPadProps {\n  onDigitPress: (digit: string) => void;\n  disabled?: boolean;\n}\n\nexport interface DisplayScreenProps {\n  value: string;\n  placeholder?: string;\n}\n\nexport interface CallButtonProps {\n  onCall: () => void;\n  onClear: () => void;\n  disabled?: boolean;\n}\n\nexport interface DisclaimerHeaderProps {\n  title: string;\n  subtitle: string;\n  warning?: string;\n}\n\nexport type CallPhase = 'ringing' | 'connecting' | 'connected' | 'error';\n\nexport interface CallStatusIndicatorProps {\n  callPhase: CallPhase;\n}\n\nexport interface CallDurationProps {\n  seconds: number;\n}\n\nexport interface UsePhoneSimulatorReturn {\n  number: string;\n  handleDigitPress: (digit: string) => void;\n  handleCall: () => void;\n  clearNumber: () => void;\n  isValidNumber: boolean;\n}\n\nexport type EmergencyNumber = '911' | '999';\n\nexport const VALID_EMERGENCY_NUMBERS: readonly string[] = ['911', '999'] as const;\nexport const MAX_DIAL_LENGTH = 3;\n\nexport const DIAL_PAD_DIGITS: readonly (string | number)[] = [\n  1, 2, 3,\n  4, 5, 6,\n  7, 8, 9,\n  '*', 0, '#'\n] as const;\n","interface TokenCache {\n  token: string;\n  fetchedAt: number;\n}\n\n// Token is valid for 10 minutes, but we'll refresh after 5 minutes to be safe\nconst TOKEN_VALIDITY_MS = 5 * 60 * 1000;\n\nlet tokenCache: TokenCache | null = null;\nlet fetchPromise: Promise<string | null> | null = null;\n\n/**\n * Pre-fetches and caches the ElevenLabs conversation token\n * This reduces perceived latency by having the token ready when user calls\n */\nexport const prefetchToken = async (): Promise<string | null> => {\n  // If we're already fetching, return that promise\n  if (fetchPromise) {\n    return fetchPromise;\n  }\n\n  // If we have a valid cached token, return it\n  if (tokenCache && Date.now() - tokenCache.fetchedAt < TOKEN_VALIDITY_MS) {\n    return tokenCache.token;\n  }\n\n  // Start fetching\n  fetchPromise = (async () => {\n    try {\n      console.log('[TokenPrefetch] Fetching new token...');\n      const response = await fetch('/api/elevenlabs-conversation-token');\n      const data = await response.json();\n\n      if (!response.ok || !data?.token) {\n        console.error('[TokenPrefetch] Failed to fetch token:', data?.error);\n        return null;\n      }\n\n      tokenCache = {\n        token: data.token,\n        fetchedAt: Date.now(),\n      };\n\n      console.log('[TokenPrefetch] Token cached successfully');\n      return data.token;\n    } catch (err) {\n      console.error('[TokenPrefetch] Error:', err);\n      return null;\n    } finally {\n      fetchPromise = null;\n    }\n  })();\n\n  return fetchPromise;\n};\n\n/**\n * Gets a cached token if available and valid\n */\nexport const getCachedToken = (): string | null => {\n  if (tokenCache && Date.now() - tokenCache.fetchedAt < TOKEN_VALIDITY_MS) {\n    return tokenCache.token;\n  }\n  return null;\n};\n\n/**\n * Clears the token cache (useful after a call ends)\n */\nexport const clearTokenCache = (): void => {\n  tokenCache = null;\n};\n\n/**\n * Warms up the connection by pre-fetching the token\n * Call this when user starts dialing an emergency number\n */\nexport const warmupConnection = (): void => {\n  // Only prefetch if we don't have a valid token\n  if (!getCachedToken()) {\n    prefetchToken();\n  }\n};\n","import { useState, useCallback, useEffect } from 'react';\nimport { useToast } from '@/components/ui/use-toast';\nimport {\n  UsePhoneSimulatorReturn,\n  VALID_EMERGENCY_NUMBERS,\n  MAX_DIAL_LENGTH,\n} from '@/types/simulator';\nimport { warmupConnection } from '@/services/tokenPrefetch';\n\n/**\n * Custom hook that encapsulates all phone simulator business logic\n * Separates dialing logic from UI rendering (SOLID - Single Responsibility)\n * Pre-fetches connection token when user starts dialing emergency numbers\n */\nexport const usePhoneSimulator = (\n  onValidCall: (number: string) => void\n): UsePhoneSimulatorReturn => {\n  const [number, setNumber] = useState<string>('');\n  const { toast } = useToast();\n\n  // Pre-fetch token when user has dialed a valid prefix\n  useEffect(() => {\n    // Start warming up when user dials \"9\" (could be 911 or 999)\n    if (number === '9' || number === '91' || number === '99') {\n      console.log('[PhoneSimulator] Warming up connection...');\n      warmupConnection();\n    }\n  }, [number]);\n\n  const handleDigitPress = useCallback((digit: string): void => {\n    setNumber((prev) => {\n      if (prev.length < MAX_DIAL_LENGTH) {\n        return prev + digit;\n      }\n      return prev;\n    });\n  }, []);\n\n  const clearNumber = useCallback((): void => {\n    setNumber('');\n  }, []);\n\n  const isValidNumber = VALID_EMERGENCY_NUMBERS.includes(number);\n\n  const handleCall = useCallback((): void => {\n    if (isValidNumber) {\n      onValidCall(number);\n    } else {\n      toast({\n        title: 'Invalid Emergency Number',\n        description: 'Please dial 999 or 911 for emergency services',\n        variant: 'destructive',\n      });\n    }\n  }, [number, isValidNumber, onValidCall, toast]);\n\n  return {\n    number,\n    handleDigitPress,\n    handleCall,\n    clearNumber,\n    isValidNumber,\n  };\n};\n","import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst buttonVariants = cva(\n  \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n  {\n    variants: {\n      variant: {\n        default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n        destructive:\n          \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n        outline:\n          \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n        secondary:\n          \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n        ghost: \"hover:bg-accent hover:text-accent-foreground\",\n        link: \"text-primary underline-offset-4 hover:underline\",\n      },\n      size: {\n        default: \"h-10 px-4 py-2\",\n        sm: \"h-9 rounded-md px-3\",\n        lg: \"h-11 rounded-md px-8\",\n        icon: \"h-10 w-10\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"default\",\n    },\n  }\n)\n\nexport interface ButtonProps\n  extends React.ButtonHTMLAttributes<HTMLButtonElement>,\n    VariantProps<typeof buttonVariants> {\n  asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n  ({ className, variant, size, asChild = false, ...props }, ref) => {\n    const Comp = asChild ? Slot : \"button\"\n    return (\n      <Comp\n        className={cn(buttonVariants({ variant, size, className }))}\n        ref={ref}\n        {...props}\n      />\n    )\n  }\n)\nButton.displayName = \"Button\"\n\nexport { Button, buttonVariants }\n","import React from 'react';\nimport { Button } from '@/components/ui/button';\nimport { DialPadProps, DIAL_PAD_DIGITS } from '@/types/simulator';\n\n/**\n * DialPad Component\n * Renders the numeric keypad for dialing\n * Single Responsibility: Only handles digit input UI\n */\nconst DialPad: React.FC<DialPadProps> = ({ onDigitPress, disabled = false }) => {\n  return (\n    <div className=\"grid grid-cols-3 gap-2 sm:gap-4 mb-4 sm:mb-6\">\n      {DIAL_PAD_DIGITS.map((digit) => (\n        <Button\n          key={digit}\n          onClick={() => onDigitPress(digit.toString())}\n          className=\"emergency-button h-12 sm:h-14 text-lg sm:text-xl\"\n          variant=\"outline\"\n          disabled={disabled}\n          aria-label={`Dial ${digit}`}\n        >\n          {digit}\n        </Button>\n      ))}\n    </div>\n  );\n};\n\nexport default DialPad;\n","import React from 'react';\nimport { DisplayScreenProps } from '@/types/simulator';\n\n/**\n * DisplayScreen Component\n * Shows the currently dialed number\n * Single Responsibility: Only handles display of the number\n */\nconst DisplayScreen: React.FC<DisplayScreenProps> = ({\n  value,\n  placeholder = '',\n}) => {\n  return (\n    <div\n      className=\"text-2xl sm:text-3xl font-bold text-center mb-4 sm:mb-6 h-12 text-foreground\"\n      aria-live=\"polite\"\n      aria-label={`Dialed number: ${value || 'empty'}`}\n    >\n      {value || <span className=\"text-muted-foreground\">{placeholder}</span>}\n    </div>\n  );\n};\n\nexport default DisplayScreen;\n","import React from 'react';\nimport { Button } from '@/components/ui/button';\nimport { Phone } from 'lucide-react';\nimport { CallButtonProps } from '@/types/simulator';\n\n/**\n * CallButton Component\n * Renders the Clear and Call action buttons\n * Single Responsibility: Only handles call initiation UI\n */\nconst CallButton: React.FC<CallButtonProps> = ({\n  onCall,\n  onClear,\n  disabled = false,\n}) => {\n  return (\n    <div className=\"grid grid-cols-2 gap-2 sm:gap-4\">\n      <Button\n        onClick={onClear}\n        variant=\"outline\"\n        className=\"emergency-button h-12 sm:h-14\"\n        aria-label=\"Clear dialed number\"\n      >\n        Clear\n      </Button>\n      <Button\n        onClick={onCall}\n        className=\"emergency-button bg-red-600 hover:bg-red-700 h-12 sm:h-14\"\n        disabled={disabled}\n        aria-label=\"Start emergency call\"\n      >\n        <Phone className=\"mr-2 h-4 w-4\" /> Call\n      </Button>\n    </div>\n  );\n};\n\nexport default CallButton;\n","import React from 'react';\nimport { DisclaimerHeaderProps } from '@/types/simulator';\n\n/**\n * DisclaimerHeader Component\n * Displays the simulator title and training disclaimer\n * Single Responsibility: Only handles header/disclaimer display\n */\nconst DisclaimerHeader: React.FC<DisclaimerHeaderProps> = ({\n  title,\n  subtitle,\n  warning,\n}) => {\n  return (\n    <div className=\"text-center mb-4\">\n      <h1 className=\"text-xl sm:text-2xl font-bold text-foreground mb-2\">\n        {title}\n      </h1>\n      <p className=\"text-muted-foreground\">{subtitle}</p>\n      {warning && (\n        <p className=\"text-sm text-destructive mt-1\">{warning}</p>\n      )}\n    </div>\n  );\n};\n\nexport default DisclaimerHeader;\n","import React from 'react';\nimport { Phone, Mic, Loader2 } from 'lucide-react';\n\ntype CallPhase = 'ringing' | 'connecting' | 'connected' | 'error';\n\ninterface CallStatusIndicatorProps {\n  callPhase: CallPhase;\n}\n\n/**\n * CallStatusIndicator Component\n * Shows the current call connection status with visual feedback\n */\nconst CallStatusIndicator: React.FC<CallStatusIndicatorProps> = ({\n  callPhase,\n}) => {\n  if (callPhase === 'ringing') {\n    return (\n      <div className=\"flex flex-col items-center gap-3\">\n        <div className=\"animate-pulse\">\n          <div className=\"w-16 h-16 sm:w-24 sm:h-24 rounded-full bg-amber-500 flex items-center justify-center ring-4 ring-amber-500/30 ring-offset-2 ring-offset-background animate-[ping_1.5s_ease-in-out_infinite]\">\n            <Phone className=\"h-8 w-8 sm:h-12 sm:w-12 text-white\" />\n          </div>\n        </div>\n        <p className=\"text-amber-600 dark:text-amber-400 font-medium animate-pulse\">\n          Ringing...\n        </p>\n      </div>\n    );\n  }\n\n  if (callPhase === 'connecting') {\n    return (\n      <div className=\"flex flex-col items-center gap-3\">\n        <div className=\"w-16 h-16 sm:w-24 sm:h-24 rounded-full bg-blue-500 flex items-center justify-center\">\n          <Loader2 className=\"h-8 w-8 sm:h-12 sm:w-12 text-white animate-spin\" />\n        </div>\n        <p className=\"text-blue-600 dark:text-blue-400 font-medium animate-pulse\">\n          Connecting...\n        </p>\n      </div>\n    );\n  }\n\n  if (callPhase === 'error') {\n    return (\n      <div className=\"flex flex-col items-center gap-3\">\n        <div className=\"w-16 h-16 sm:w-24 sm:h-24 rounded-full bg-red-600 flex items-center justify-center\">\n          <Phone className=\"h-8 w-8 sm:h-12 sm:w-12 text-white\" />\n        </div>\n        <p className=\"text-red-600 dark:text-red-400 font-medium\">\n          Connection Failed\n        </p>\n      </div>\n    );\n  }\n\n  // Connected state\n  return (\n    <div className=\"flex flex-col items-center gap-3\">\n      <div className=\"w-16 h-16 sm:w-24 sm:h-24 rounded-full bg-green-500 flex items-center justify-center\">\n        <Mic className=\"h-8 w-8 sm:h-12 sm:w-12 text-white\" />\n      </div>\n      <p className=\"text-green-600 dark:text-green-400 font-medium\">\n        Connected\n      </p>\n    </div>\n  );\n};\n\nexport default CallStatusIndicator;\n","import React from 'react';\nimport { CallDurationProps } from '@/types/simulator';\n\n/**\n * CallDuration Component\n * Displays the formatted call duration\n */\nconst CallDuration: React.FC<CallDurationProps> = ({ seconds }) => {\n  const formatDuration = (totalSeconds: number): string => {\n    const mins = Math.floor(totalSeconds / 60);\n    const secs = totalSeconds % 60;\n    return `${mins}:${secs.toString().padStart(2, '0')}`;\n  };\n\n  return (\n    <div className=\"text-center\">\n      <p className=\"text-lg sm:text-xl font-mono text-foreground\">\n        {formatDuration(seconds)}\n      </p>\n    </div>\n  );\n};\n\nexport default CallDuration;\n","import React from 'react';\nimport { usePhoneSimulator } from '@/hooks/usePhoneSimulator';\nimport {\n  DialPad,\n  DisplayScreen,\n  CallButton,\n  DisclaimerHeader,\n} from '@/components/simulator';\nimport { DialerProps } from '@/types/simulator';\n\n/**\n * EmergencyDialer Component\n * Composes smaller components to create the full dialer interface\n * Uses usePhoneSimulator hook for business logic (Dependency Inversion)\n */\nconst EmergencyDialer: React.FC<DialerProps> = ({ onCall }) => {\n  const { number, handleDigitPress, handleCall, clearNumber } =\n    usePhoneSimulator(onCall);\n\n  return (\n    <div className=\"w-full max-w-md mx-auto p-4 sm:p-6\">\n      <DisclaimerHeader\n        title=\"Emergency Call Simulator\"\n        subtitle=\"Dial 999 or 911\"\n        warning=\"For training purposes only\"\n      />\n\n      <div className=\"bg-card rounded-lg shadow-lg p-4 sm:p-6 mb-4 sm:mb-6 border border-border\">\n        <DisplayScreen value={number} />\n        <DialPad onDigitPress={handleDigitPress} />\n        <CallButton onCall={handleCall} onClear={clearNumber} />\n      </div>\n    </div>\n  );\n};\n\nexport default EmergencyDialer;\n","import { useRef, useCallback, useEffect } from 'react';\n\n/**\n * Custom hook to manage the phone ringing sound effect\n * Plays a looping ring tone until stopped\n */\nexport const useRingingSound = () => {\n  const audioContextRef = useRef<AudioContext | null>(null);\n  const oscillatorRef = useRef<OscillatorNode | null>(null);\n  const gainNodeRef = useRef<GainNode | null>(null);\n  const isPlayingRef = useRef(false);\n  const ringIntervalRef = useRef<NodeJS.Timeout | null>(null);\n\n  const createRingTone = useCallback(() => {\n    if (!audioContextRef.current) {\n      audioContextRef.current = new AudioContext();\n    }\n    \n    const ctx = audioContextRef.current;\n    const oscillator = ctx.createOscillator();\n    const gainNode = ctx.createGain();\n    \n    // Classic phone ring frequencies (US dial tone pattern)\n    oscillator.type = 'sine';\n    oscillator.frequency.setValueAtTime(440, ctx.currentTime); // A4\n    \n    gainNode.gain.setValueAtTime(0.3, ctx.currentTime);\n    \n    oscillator.connect(gainNode);\n    gainNode.connect(ctx.destination);\n    \n    oscillatorRef.current = oscillator;\n    gainNodeRef.current = gainNode;\n    \n    return { oscillator, gainNode, ctx };\n  }, []);\n\n  const startRinging = useCallback(() => {\n    if (isPlayingRef.current) return;\n    isPlayingRef.current = true;\n\n    const playRingBurst = () => {\n      if (!isPlayingRef.current) return;\n      \n      const { oscillator, gainNode, ctx } = createRingTone();\n      \n      // Ring pattern: 2 seconds on, 4 seconds off (US standard)\n      // We'll do a shorter pattern: 1s on, 2s off for better UX\n      gainNode.gain.setValueAtTime(0, ctx.currentTime);\n      gainNode.gain.linearRampToValueAtTime(0.25, ctx.currentTime + 0.05);\n      \n      // Add a second frequency for dual-tone effect\n      const osc2 = ctx.createOscillator();\n      osc2.type = 'sine';\n      osc2.frequency.setValueAtTime(480, ctx.currentTime); // Slightly higher\n      const gain2 = ctx.createGain();\n      gain2.gain.setValueAtTime(0, ctx.currentTime);\n      gain2.gain.linearRampToValueAtTime(0.2, ctx.currentTime + 0.05);\n      osc2.connect(gain2);\n      gain2.connect(ctx.destination);\n      \n      oscillator.start(ctx.currentTime);\n      osc2.start(ctx.currentTime);\n      \n      // Fade out after 1 second\n      setTimeout(() => {\n        if (gainNode && gain2) {\n          const now = ctx.currentTime;\n          gainNode.gain.linearRampToValueAtTime(0, now + 0.1);\n          gain2.gain.linearRampToValueAtTime(0, now + 0.1);\n          \n          setTimeout(() => {\n            oscillator.stop();\n            osc2.stop();\n          }, 150);\n        }\n      }, 1000);\n    };\n\n    // Play first ring immediately\n    playRingBurst();\n    \n    // Then ring every 3 seconds (1s ring + 2s pause)\n    ringIntervalRef.current = setInterval(() => {\n      if (isPlayingRef.current) {\n        playRingBurst();\n      }\n    }, 3000);\n  }, [createRingTone]);\n\n  const stopRinging = useCallback(() => {\n    isPlayingRef.current = false;\n    \n    if (ringIntervalRef.current) {\n      clearInterval(ringIntervalRef.current);\n      ringIntervalRef.current = null;\n    }\n    \n    // Fade out any current sound\n    if (gainNodeRef.current && audioContextRef.current) {\n      try {\n        gainNodeRef.current.gain.linearRampToValueAtTime(\n          0,\n          audioContextRef.current.currentTime + 0.1\n        );\n      } catch {\n        // Ignore if already stopped\n      }\n    }\n    \n    if (oscillatorRef.current) {\n      try {\n        oscillatorRef.current.stop();\n      } catch {\n        // Ignore if already stopped\n      }\n      oscillatorRef.current = null;\n    }\n  }, []);\n\n  // Cleanup on unmount\n  useEffect(() => {\n    return () => {\n      stopRinging();\n      if (audioContextRef.current) {\n        audioContextRef.current.close();\n      }\n    };\n  }, [stopRinging]);\n\n  return { startRinging, stopRinging };\n};\n","/**\n * Format a duration in seconds as `M:SS` (zero-padded seconds).\n * Used by the call timer; extracted so it can be unit-tested\n * without spinning up React state.\n */\nexport function formatDuration(seconds: number): string {\n  if (!Number.isFinite(seconds) || seconds < 0) return \"0:00\";\n  const total = Math.floor(seconds);\n  const mins = Math.floor(total / 60);\n  const secs = total % 60;\n  return `${mins}:${secs.toString().padStart(2, \"0\")}`;\n}\n","// Function to track conversions for Google Ads\nexport const trackConversion = (phoneNumber: string) => {\n  if (typeof window.gtag !== 'undefined') {\n    window.gtag('event', 'conversion', {\n      'send_to': 'ca-pub-1138854450517299',\n      'value': 1.0,\n      'currency': 'USD',\n      'transaction_id': Date.now().toString()\n    });\n    console.log('Google Ads conversion tracked for:', phoneNumber);\n  }\n};\n\n/**\n * Reports the two call-setup timings useEmergencyCall already computes\n * (token-ready and WebRTC-connected, both measured from dial) as a GA event.\n * Turns README's \"first-response latency < 800ms\" outcome metric from an\n * ad-hoc console.log into a real, aggregable production number. No-ops\n * silently if analytics hasn't been consented to (gtag won't be defined yet).\n */\nexport const trackCallLatency = (tokenMs: number, connectedMs: number) => {\n  if (typeof window.gtag !== 'undefined') {\n    window.gtag('event', 'call_latency', {\n      token_ready_ms: Math.round(tokenMs),\n      connected_ms: Math.round(connectedMs),\n    });\n  }\n};\n\n/**\n * Reports the actual outcome metric from README (\"dispatcher's first\n * audible response < 800ms from end-of-child-utterance\") as a GA event.\n * This is distinct from trackCallLatency above, which only covers call\n * *setup* (dial to connected) — this measures turn-taking latency inside\n * an already-connected conversation, which is mostly ElevenLabs agent\n * pipeline time (STT -> LLM -> TTS), not anything this app controls.\n */\nexport const trackAgentResponseLatency = (latencyMs: number) => {\n  if (typeof window.gtag !== 'undefined') {\n    window.gtag('event', 'agent_response_latency', {\n      response_ms: Math.round(latencyMs),\n    });\n  }\n};","import { useEffect, useState, useCallback, useRef } from 'react';\nimport { useToast } from '@/components/ui/use-toast';\nimport { useConversation } from '@elevenlabs/react';\nimport { useRingingSound } from './useRingingSound';\nimport { getCachedToken, prefetchToken, clearTokenCache } from '@/services/tokenPrefetch';\nimport { formatDuration } from '@/utils/duration';\nimport { trackCallLatency, trackAgentResponseLatency } from '@/utils/googleAds';\n\n// VAD score above this is treated as \"the child is actively speaking\".\n// ElevenLabs doesn't document a canonical threshold for this score; 0.5 is\n// a reasonable midpoint and only affects instrumentation, not call behaviour.\nconst VAD_SPEECH_THRESHOLD = 0.5;\n\ntype CallPhase = 'ringing' | 'connecting' | 'connected' | 'error';\n\ninterface UseEmergencyCallProps {\n  onCallEnd: () => void;\n}\n\ninterface UseEmergencyCallReturn {\n  callDuration: number;\n  callPhase: CallPhase;\n  connectionError: string | null;\n  handleEndCall: () => Promise<void>;\n  formatDuration: (seconds: number) => string;\n}\n\n/**\n * Custom hook that encapsulates all emergency call logic\n * Handles ElevenLabs conversation, microphone access, and call state\n * Implements \"Ring-then-Connect\" flow with WebRTC for lowest latency\n *\n * Must be rendered under a <ConversationProvider> (mounted in App.tsx) —\n * @elevenlabs/react's useConversation requires one, unlike the deprecated\n * @11labs/react it replaced.\n */\nexport const useEmergencyCall = ({\n  onCallEnd,\n}: UseEmergencyCallProps): UseEmergencyCallReturn => {\n  const { toast } = useToast();\n  const [callDuration, setCallDuration] = useState<number>(0);\n  const [callPhase, setCallPhase] = useState<CallPhase>('ringing');\n  const [connectionError, setConnectionError] = useState<string | null>(null);\n  const timerRef = useRef<NodeJS.Timeout | null>(null);\n  const { startRinging, stopRinging } = useRingingSound();\n\n  // Latency instrumentation. startSession() no longer returns a promise that\n  // resolves on connect (see below), so \"connected\" timing has to be read\n  // inside the async onConnect callback instead of after an awaited call —\n  // these refs carry the dial-start time and token-ready time across to it.\n  const startTimeRef = useRef<number>(0);\n  const tokenMsRef = useRef<number>(0);\n\n  // Per-utterance response-latency instrumentation (README outcome metric\n  // #1: \"dispatcher's first audible response < 800ms from end-of-child-\n  // utterance\"). lastSpeechEndRef tracks the last moment VAD saw the child\n  // actively talking — once it stops updating, that timestamp is \"end of\n  // utterance\". awaitingResponseRef gates onAudio so only the *first* audio\n  // chunk of the agent's next reply is measured, not every chunk of a\n  // streamed response.\n  const lastSpeechEndRef = useRef<number | null>(null);\n  const awaitingResponseRef = useRef(false);\n\n  const conversation = useConversation({\n    onVadScore: ({ vadScore }) => {\n      if (vadScore > VAD_SPEECH_THRESHOLD) {\n        lastSpeechEndRef.current = performance.now();\n        awaitingResponseRef.current = true;\n      }\n    },\n    onAudio: () => {\n      if (awaitingResponseRef.current && lastSpeechEndRef.current !== null) {\n        const responseMs = performance.now() - lastSpeechEndRef.current;\n        console.log(`[EmergencyCall] Agent response latency: ${responseMs.toFixed(0)}ms`);\n        trackAgentResponseLatency(responseMs);\n        awaitingResponseRef.current = false;\n      }\n    },\n    onConnect: () => {\n      // Agent WebRTC connected - stop ringing and start timer\n      stopRinging();\n      setCallPhase('connected');\n\n      const connectedMs = performance.now() - startTimeRef.current;\n      console.log(`[EmergencyCall] Connected in ${connectedMs.toFixed(0)}ms`);\n      trackCallLatency(tokenMsRef.current, connectedMs);\n\n      // Start the call timer only when truly connected\n      timerRef.current = setInterval(() => {\n        setCallDuration((prev) => prev + 1);\n      }, 1000);\n\n      toast({\n        title: 'Connected to Emergency Services',\n        description: 'You are now connected to an emergency operator',\n      });\n    },\n    onDisconnect: () => {\n      stopRinging();\n    },\n    onMessage: () => {\n      // If we receive a message, ensure we're in connected state\n      if (callPhase !== 'connected') {\n        stopRinging();\n        setCallPhase('connected');\n      }\n    },\n    onError: (message, context) => {\n      console.error('[EmergencyCall] Conversation error:', message, context);\n      stopRinging();\n      setCallPhase('error');\n      setConnectionError('Connection issue occurred');\n      toast({\n        title: 'Connection Error',\n        description: 'Unable to connect. Please try again.',\n        variant: 'destructive',\n      });\n    },\n  });\n\n  const startCall = useCallback(async (): Promise<void> => {\n    startTimeRef.current = performance.now();\n\n    try {\n      // Start ringing immediately for perceived latency reduction\n      setCallPhase('ringing');\n      startRinging();\n\n      // Check for pre-fetched token first (from warmup during dialing)\n      let token = getCachedToken();\n\n      // Request microphone permission immediately\n      const micPromise = navigator.mediaDevices.getUserMedia({\n        audio: {\n          echoCancellation: true,\n          noiseSuppression: true,\n          autoGainControl: true,\n        },\n      });\n\n      // If no cached token, fetch one in parallel with mic permission\n      if (!token) {\n        console.log('[EmergencyCall] No cached token, fetching...');\n        const [, fetchedToken] = await Promise.all([\n          micPromise,\n          prefetchToken(),\n        ]);\n        token = fetchedToken;\n      } else {\n        console.log('[EmergencyCall] Using pre-fetched token');\n        await micPromise;\n      }\n\n      if (!token) {\n        throw new Error('connection_failed');\n      }\n\n      tokenMsRef.current = performance.now() - startTimeRef.current;\n      console.log(`[EmergencyCall] Token ready in ${tokenMsRef.current.toFixed(0)}ms`);\n\n      // Transition to connecting phase\n      setCallPhase('connecting');\n\n      // Start the conversation with WebRTC for lowest latency. Unlike the\n      // previous SDK, startSession() is fire-and-forget: it never returns a\n      // promise or throws for connection failures. Success is reported via\n      // onConnect above, failure via onError — both registered on the hook.\n      conversation.startSession({\n        conversationToken: token,\n        connectionType: 'webrtc',\n      });\n    } catch (error) {\n      // Only mic-permission and token-fetch failures land here now —\n      // connection failures are handled by the onError callback instead.\n      stopRinging();\n      let errorMessage = 'Unable to connect. Please try again.';\n\n      if ((error as Error).name === 'NotAllowedError') {\n        errorMessage = 'Please allow microphone access and try again.';\n      } else if ((error as Error).name === 'NotFoundError') {\n        errorMessage = 'No microphone detected.';\n      }\n\n      setCallPhase('error');\n      setConnectionError(errorMessage);\n      toast({\n        title: 'Connection Error',\n        description: errorMessage,\n        variant: 'destructive',\n      });\n    }\n  }, [conversation, toast, startRinging, stopRinging]);\n\n  useEffect(() => {\n    startCall();\n\n    return () => {\n      stopRinging();\n      clearTokenCache();\n      if (timerRef.current) {\n        clearInterval(timerRef.current);\n      }\n      conversation.endSession();\n    };\n  }, []);\n\n  const handleEndCall = useCallback(async (): Promise<void> => {\n    stopRinging();\n    clearTokenCache();\n    if (timerRef.current) {\n      clearInterval(timerRef.current);\n    }\n    conversation.endSession();\n    onCallEnd();\n  }, [conversation, onCallEnd, stopRinging]);\n\n  return {\n    callDuration,\n    callPhase,\n    connectionError,\n    handleEndCall,\n    // Pure helper imported from `@/utils/duration` so it can be unit-tested.\n    formatDuration,\n  };\n};\n","import React from 'react';\nimport { Button } from '@/components/ui/button';\nimport { PhoneOff } from 'lucide-react';\nimport { useEmergencyCall } from '@/hooks/useEmergencyCall';\nimport { CallStatusIndicator, CallDuration } from '@/components/simulator';\nimport { CallProps } from '@/types/simulator';\n\n/**\n * EmergencyCall Component\n * Handles the active call UI with ElevenLabs integration\n * Uses useEmergencyCall hook for call management logic\n * Implements \"Ring-then-Connect\" flow for better perceived latency\n */\nconst EmergencyCall: React.FC<CallProps> = ({ number, onEnd }) => {\n  const { callDuration, callPhase, handleEndCall, formatDuration } = useEmergencyCall({\n    onCallEnd: onEnd,\n  });\n\n  return (\n    <div className=\"w-full max-w-md mx-auto p-4 sm:p-6\">\n      <div className=\"bg-card rounded-lg shadow-lg p-4 sm:p-6 border border-border\">\n        <div className=\"text-center mb-4 sm:mb-6\">\n          <h2 className=\"text-xl sm:text-2xl font-bold mb-2 text-foreground\">\n            Emergency Call\n          </h2>\n          <p className=\"text-muted-foreground\">\n            {callPhase === 'connected' ? `Connected to ${number}` : `Calling ${number}`}\n          </p>\n        </div>\n\n        <div className=\"space-y-4 sm:space-y-6\">\n          <div className=\"flex justify-center\">\n            <CallStatusIndicator callPhase={callPhase} />\n          </div>\n\n          {/* Only show call duration when connected */}\n          {callPhase === 'connected' && (\n            <CallDuration seconds={callDuration} />\n          )}\n\n          {/* Show elapsed time indicator while connecting */}\n          {(callPhase === 'ringing' || callPhase === 'connecting') && (\n            <div className=\"text-center\">\n              <p className=\"text-sm text-muted-foreground font-mono\">\n                --:--\n              </p>\n            </div>\n          )}\n\n          <Button\n            onClick={handleEndCall}\n            className=\"w-full bg-red-600 hover:bg-red-700\"\n            size=\"lg\"\n          >\n            <PhoneOff className=\"mr-2 h-4 w-4\" /> End Call\n          </Button>\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default EmergencyCall;\n","import React from 'react';\nimport { AlertTriangle } from 'lucide-react';\n\nconst HomepageContent = () => {\n  return (\n    <section className=\"bg-gray-50 dark:bg-gray-900/50 py-12 px-4\">\n      <div className=\"max-w-3xl mx-auto space-y-8\">\n        {/* Section 1: The Science of Panic */}\n        <div className=\"space-y-4\">\n          <h2 className=\"text-2xl md:text-3xl font-bold text-foreground\">\n            Why \"Knowing\" Isn't Enough: The Science of Panic\n          </h2>\n          <p className=\"text-lg text-foreground/90 leading-relaxed\">\n            Most children know the number 911 (or 999), but knowing the number is different from being able to dial it under pressure. In a high-stress emergency, the human brain enters a \"fight or flight\" state, which can degrade fine motor skills and cognitive recall. This simulator is designed to bridge the gap between theory and practice, building the specific \"muscle memory\" required to unlock a phone, open the keypad, and dial calmly.\n          </p>\n        </div>\n\n        {/* Section 2: The 3 Golden Rules */}\n        <div className=\"space-y-6\">\n          <h2 className=\"text-2xl md:text-3xl font-bold text-foreground\">\n            The 3 Golden Rules of Emergency Calls\n          </h2>\n\n          {/* Rule 1 */}\n          <div className=\"space-y-3\">\n            <h3 className=\"text-xl font-semibold text-foreground\">\n              1. Location is Your Superpower\n            </h3>\n            <p className=\"text-foreground/90 leading-relaxed\">\n              Many parents assume that calling 911 instantly transmits their exact location to the police. This is not always true. Cell phone triangulation can be imprecise, especially in apartment buildings or rural areas.\n            </p>\n            <div className=\"pl-4 border-l-4 border-primary/50\">\n              <p className=\"text-foreground/80 italic\">\n                <strong className=\"text-foreground not-italic\">The Lesson:</strong> Teach your child to state their full address immediately. \"I am at 123 Main Street.\" Make sure they know to look for landmarks if they are away from home.\n              </p>\n            </div>\n          </div>\n\n          {/* Rule 2 */}\n          <div className=\"space-y-3\">\n            <h3 className=\"text-xl font-semibold text-foreground\">\n              2. Never Hang Up (Even if it's a Mistake)\n            </h3>\n            <p className=\"text-foreground/90 leading-relaxed\">\n              Curiosity often leads children to dial 911 just to see what happens. If they panic and hang up, the dispatcher must assume the worst. They will call back or dispatch an officer to investigate, wasting critical resources.\n            </p>\n            <div className=\"pl-4 border-l-4 border-primary/50\">\n              <p className=\"text-foreground/80 italic\">\n                <strong className=\"text-foreground not-italic\">The Lesson:</strong> Teach your child that if they dial by accident, they should stay on the line and simply say, \"I'm sorry, there is no emergency.\" The dispatcher will thank them and hang up—no trouble, no police.\n              </p>\n            </div>\n          </div>\n\n          {/* Rule 3 */}\n          <div className=\"space-y-3\">\n            <h3 className=\"text-xl font-semibold text-foreground\">\n              3. The \"Dispatcher Handshake\"\n            </h3>\n            <p className=\"text-foreground/90 leading-relaxed\">\n              Children often expect help to arrive the second they hear a voice. They may scream or cry over the operator.\n            </p>\n            <div className=\"pl-4 border-l-4 border-primary/50\">\n              <p className=\"text-foreground/80 italic\">\n                <strong className=\"text-foreground not-italic\">The Lesson:</strong> Explain that the voice on the phone is a teammate. The dispatcher has a specific script of questions to ask (\"What is the emergency?\", \"Who is with you?\"). Teaching your child to stop, listen, and answer clearly is the fastest way to get help.\n              </p>\n            </div>\n          </div>\n        </div>\n\n        {/* Section 3: When Should You Call? */}\n        <div className=\"space-y-4\">\n          <h2 className=\"text-2xl md:text-3xl font-bold text-foreground\">\n            When Should You Call?\n          </h2>\n          <p className=\"text-foreground/90 leading-relaxed\">\n            Use this simulator to role-play specific scenarios.\n          </p>\n          <div className=\"grid md:grid-cols-2 gap-4\">\n            <div className=\"bg-green-50 dark:bg-green-950/30 border border-green-200 dark:border-green-800 rounded-lg p-4\">\n              <h4 className=\"font-semibold text-green-800 dark:text-green-400 mb-2\">\n                ✓ DO Call For:\n              </h4>\n              <ul className=\"text-foreground/80 space-y-1 text-sm\">\n                <li>• A fire</li>\n                <li>• A person who won't wake up</li>\n                <li>• A dangerous stranger</li>\n                <li>• A family member who is hurt and can't speak</li>\n              </ul>\n            </div>\n            <div className=\"bg-red-50 dark:bg-red-950/30 border border-red-200 dark:border-red-800 rounded-lg p-4\">\n              <h4 className=\"font-semibold text-red-800 dark:text-red-400 mb-2\">\n                ✗ DO NOT Call For:\n              </h4>\n              <ul className=\"text-foreground/80 space-y-1 text-sm\">\n                <li>• A lost pet</li>\n                <li>• A minor cut</li>\n                <li>• Being locked out of the house</li>\n              </ul>\n            </div>\n          </div>\n        </div>\n\n        {/* Safety Disclaimer */}\n        <div className=\"bg-amber-50 dark:bg-amber-950/30 border border-amber-300 dark:border-amber-700 rounded-lg p-6\">\n          <div className=\"flex gap-4\">\n            <AlertTriangle className=\"h-6 w-6 text-amber-600 dark:text-amber-500 flex-shrink-0 mt-0.5\" />\n            <div>\n              <h2 className=\"text-xl font-bold text-foreground mb-2\">\n                Safety Disclaimer\n              </h2>\n              <p className=\"text-foreground/90\">\n                This tool is for educational simulation only. It does NOT connect to \n                real emergency services. In a real emergency, always dial 911 or 999 \n                on a real phone.\n              </p>\n            </div>\n          </div>\n        </div>\n      </div>\n    </section>\n  );\n};\n\nexport default HomepageContent;\n","// packages/react/context/src/createContext.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n  const Context = React.createContext(defaultContext);\n  const Provider = (props) => {\n    const { children, ...context } = props;\n    const value = React.useMemo(() => context, Object.values(context));\n    return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n  };\n  Provider.displayName = rootComponentName + \"Provider\";\n  function useContext2(consumerName) {\n    const context = React.useContext(Context);\n    if (context) return context;\n    if (defaultContext !== void 0) return defaultContext;\n    throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n  }\n  return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n  let defaultContexts = [];\n  function createContext3(rootComponentName, defaultContext) {\n    const BaseContext = React.createContext(defaultContext);\n    const index = defaultContexts.length;\n    defaultContexts = [...defaultContexts, defaultContext];\n    const Provider = (props) => {\n      const { scope, children, ...context } = props;\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      const value = React.useMemo(() => context, Object.values(context));\n      return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n    };\n    Provider.displayName = rootComponentName + \"Provider\";\n    function useContext2(consumerName, scope) {\n      const Context = scope?.[scopeName]?.[index] || BaseContext;\n      const context = React.useContext(Context);\n      if (context) return context;\n      if (defaultContext !== void 0) return defaultContext;\n      throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n    }\n    return [Provider, useContext2];\n  }\n  const createScope = () => {\n    const scopeContexts = defaultContexts.map((defaultContext) => {\n      return React.createContext(defaultContext);\n    });\n    return function useScope(scope) {\n      const contexts = scope?.[scopeName] || scopeContexts;\n      return React.useMemo(\n        () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n        [scope, contexts]\n      );\n    };\n  };\n  createScope.scopeName = scopeName;\n  return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n  const baseScope = scopes[0];\n  if (scopes.length === 1) return baseScope;\n  const createScope = () => {\n    const scopeHooks = scopes.map((createScope2) => ({\n      useScope: createScope2(),\n      scopeName: createScope2.scopeName\n    }));\n    return function useComposedScopes(overrideScopes) {\n      const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n        const scopeProps = useScope(overrideScopes);\n        const currentScope = scopeProps[`__scope${scopeName}`];\n        return { ...nextScopes2, ...currentScope };\n      }, {});\n      return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n    };\n  };\n  createScope.scopeName = baseScope.scopeName;\n  return createScope;\n}\nexport {\n  createContext2 as createContext,\n  createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/focus-scope/src/FocusScope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n  const {\n    loop = false,\n    trapped = false,\n    onMountAutoFocus: onMountAutoFocusProp,\n    onUnmountAutoFocus: onUnmountAutoFocusProp,\n    ...scopeProps\n  } = props;\n  const [container, setContainer] = React.useState(null);\n  const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n  const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n  const lastFocusedElementRef = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n  const focusScope = React.useRef({\n    paused: false,\n    pause() {\n      this.paused = true;\n    },\n    resume() {\n      this.paused = false;\n    }\n  }).current;\n  React.useEffect(() => {\n    if (trapped) {\n      let handleFocusIn2 = function(event) {\n        if (focusScope.paused || !container) return;\n        const target = event.target;\n        if (container.contains(target)) {\n          lastFocusedElementRef.current = target;\n        } else {\n          focus(lastFocusedElementRef.current, { select: true });\n        }\n      }, handleFocusOut2 = function(event) {\n        if (focusScope.paused || !container) return;\n        const relatedTarget = event.relatedTarget;\n        if (relatedTarget === null) return;\n        if (!container.contains(relatedTarget)) {\n          focus(lastFocusedElementRef.current, { select: true });\n        }\n      }, handleMutations2 = function(mutations) {\n        const focusedElement = document.activeElement;\n        if (focusedElement !== document.body) return;\n        for (const mutation of mutations) {\n          if (mutation.removedNodes.length > 0) focus(container);\n        }\n      };\n      var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n      document.addEventListener(\"focusin\", handleFocusIn2);\n      document.addEventListener(\"focusout\", handleFocusOut2);\n      const mutationObserver = new MutationObserver(handleMutations2);\n      if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n      return () => {\n        document.removeEventListener(\"focusin\", handleFocusIn2);\n        document.removeEventListener(\"focusout\", handleFocusOut2);\n        mutationObserver.disconnect();\n      };\n    }\n  }, [trapped, container, focusScope.paused]);\n  React.useEffect(() => {\n    if (container) {\n      focusScopesStack.add(focusScope);\n      const previouslyFocusedElement = document.activeElement;\n      const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n      if (!hasFocusedCandidate) {\n        const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n        container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n        container.dispatchEvent(mountEvent);\n        if (!mountEvent.defaultPrevented) {\n          focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n          if (document.activeElement === previouslyFocusedElement) {\n            focus(container);\n          }\n        }\n      }\n      return () => {\n        container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n        setTimeout(() => {\n          const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n          container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n          container.dispatchEvent(unmountEvent);\n          if (!unmountEvent.defaultPrevented) {\n            focus(previouslyFocusedElement ?? document.body, { select: true });\n          }\n          container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n          focusScopesStack.remove(focusScope);\n        }, 0);\n      };\n    }\n  }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n  const handleKeyDown = React.useCallback(\n    (event) => {\n      if (!loop && !trapped) return;\n      if (focusScope.paused) return;\n      const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n      const focusedElement = document.activeElement;\n      if (isTabKey && focusedElement) {\n        const container2 = event.currentTarget;\n        const [first, last] = getTabbableEdges(container2);\n        const hasTabbableElementsInside = first && last;\n        if (!hasTabbableElementsInside) {\n          if (focusedElement === container2) event.preventDefault();\n        } else {\n          if (!event.shiftKey && focusedElement === last) {\n            event.preventDefault();\n            if (loop) focus(first, { select: true });\n          } else if (event.shiftKey && focusedElement === first) {\n            event.preventDefault();\n            if (loop) focus(last, { select: true });\n          }\n        }\n      }\n    },\n    [loop, trapped, focusScope.paused]\n  );\n  return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n  const previouslyFocusedElement = document.activeElement;\n  for (const candidate of candidates) {\n    focus(candidate, { select });\n    if (document.activeElement !== previouslyFocusedElement) return;\n  }\n}\nfunction getTabbableEdges(container) {\n  const candidates = getTabbableCandidates(container);\n  const first = findVisible(candidates, container);\n  const last = findVisible(candidates.reverse(), container);\n  return [first, last];\n}\nfunction getTabbableCandidates(container) {\n  const nodes = [];\n  const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n    acceptNode: (node) => {\n      const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n      if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n      return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n    }\n  });\n  while (walker.nextNode()) nodes.push(walker.currentNode);\n  return nodes;\n}\nfunction findVisible(elements, container) {\n  for (const element of elements) {\n    if (!isHidden(element, { upTo: container })) return element;\n  }\n}\nfunction isHidden(node, { upTo }) {\n  if (getComputedStyle(node).visibility === \"hidden\") return true;\n  while (node) {\n    if (upTo !== void 0 && node === upTo) return false;\n    if (getComputedStyle(node).display === \"none\") return true;\n    node = node.parentElement;\n  }\n  return false;\n}\nfunction isSelectableInput(element) {\n  return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n  if (element && element.focus) {\n    const previouslyFocusedElement = document.activeElement;\n    element.focus({ preventScroll: true });\n    if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n      element.select();\n  }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n  let stack = [];\n  return {\n    add(focusScope) {\n      const activeFocusScope = stack[0];\n      if (focusScope !== activeFocusScope) {\n        activeFocusScope?.pause();\n      }\n      stack = arrayRemove(stack, focusScope);\n      stack.unshift(focusScope);\n    },\n    remove(focusScope) {\n      stack = arrayRemove(stack, focusScope);\n      stack[0]?.resume();\n    }\n  };\n}\nfunction arrayRemove(array, item) {\n  const updatedArray = [...array];\n  const index = updatedArray.indexOf(item);\n  if (index !== -1) {\n    updatedArray.splice(index, 1);\n  }\n  return updatedArray;\n}\nfunction removeLinks(items) {\n  return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n  FocusScope,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/presence/src/Presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// packages/react/presence/src/useStateMachine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n  return React.useReducer((state, event) => {\n    const nextState = machine[state][event];\n    return nextState ?? state;\n  }, initialState);\n}\n\n// packages/react/presence/src/Presence.tsx\nvar Presence = (props) => {\n  const { present, children } = props;\n  const presence = usePresence(present);\n  const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n  const ref = useComposedRefs(presence.ref, getElementRef(child));\n  const forceMount = typeof children === \"function\";\n  return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n  const [node, setNode] = React2.useState();\n  const stylesRef = React2.useRef({});\n  const prevPresentRef = React2.useRef(present);\n  const prevAnimationNameRef = React2.useRef(\"none\");\n  const initialState = present ? \"mounted\" : \"unmounted\";\n  const [state, send] = useStateMachine(initialState, {\n    mounted: {\n      UNMOUNT: \"unmounted\",\n      ANIMATION_OUT: \"unmountSuspended\"\n    },\n    unmountSuspended: {\n      MOUNT: \"mounted\",\n      ANIMATION_END: \"unmounted\"\n    },\n    unmounted: {\n      MOUNT: \"mounted\"\n    }\n  });\n  React2.useEffect(() => {\n    const currentAnimationName = getAnimationName(stylesRef.current);\n    prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n  }, [state]);\n  useLayoutEffect(() => {\n    const styles = stylesRef.current;\n    const wasPresent = prevPresentRef.current;\n    const hasPresentChanged = wasPresent !== present;\n    if (hasPresentChanged) {\n      const prevAnimationName = prevAnimationNameRef.current;\n      const currentAnimationName = getAnimationName(styles);\n      if (present) {\n        send(\"MOUNT\");\n      } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n        send(\"UNMOUNT\");\n      } else {\n        const isAnimating = prevAnimationName !== currentAnimationName;\n        if (wasPresent && isAnimating) {\n          send(\"ANIMATION_OUT\");\n        } else {\n          send(\"UNMOUNT\");\n        }\n      }\n      prevPresentRef.current = present;\n    }\n  }, [present, send]);\n  useLayoutEffect(() => {\n    if (node) {\n      let timeoutId;\n      const ownerWindow = node.ownerDocument.defaultView ?? window;\n      const handleAnimationEnd = (event) => {\n        const currentAnimationName = getAnimationName(stylesRef.current);\n        const isCurrentAnimation = currentAnimationName.includes(event.animationName);\n        if (event.target === node && isCurrentAnimation) {\n          send(\"ANIMATION_END\");\n          if (!prevPresentRef.current) {\n            const currentFillMode = node.style.animationFillMode;\n            node.style.animationFillMode = \"forwards\";\n            timeoutId = ownerWindow.setTimeout(() => {\n              if (node.style.animationFillMode === \"forwards\") {\n                node.style.animationFillMode = currentFillMode;\n              }\n            });\n          }\n        }\n      };\n      const handleAnimationStart = (event) => {\n        if (event.target === node) {\n          prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n        }\n      };\n      node.addEventListener(\"animationstart\", handleAnimationStart);\n      node.addEventListener(\"animationcancel\", handleAnimationEnd);\n      node.addEventListener(\"animationend\", handleAnimationEnd);\n      return () => {\n        ownerWindow.clearTimeout(timeoutId);\n        node.removeEventListener(\"animationstart\", handleAnimationStart);\n        node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n        node.removeEventListener(\"animationend\", handleAnimationEnd);\n      };\n    } else {\n      send(\"ANIMATION_END\");\n    }\n  }, [node, send]);\n  return {\n    isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n    ref: React2.useCallback((node2) => {\n      if (node2) stylesRef.current = getComputedStyle(node2);\n      setNode(node2);\n    }, [])\n  };\n}\nfunction getAnimationName(styles) {\n  return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n  let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n  let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.ref;\n  }\n  getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n  mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n  if (mayWarn) {\n    return element.props.ref;\n  }\n  return element.props.ref || element.ref;\n}\nexport {\n  Presence\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/focus-guards/src/FocusGuards.tsx\nimport * as React from \"react\";\nvar count = 0;\nfunction FocusGuards(props) {\n  useFocusGuards();\n  return props.children;\n}\nfunction useFocusGuards() {\n  React.useEffect(() => {\n    const edgeGuards = document.querySelectorAll(\"[data-radix-focus-guard]\");\n    document.body.insertAdjacentElement(\"afterbegin\", edgeGuards[0] ?? createFocusGuard());\n    document.body.insertAdjacentElement(\"beforeend\", edgeGuards[1] ?? createFocusGuard());\n    count++;\n    return () => {\n      if (count === 1) {\n        document.querySelectorAll(\"[data-radix-focus-guard]\").forEach((node) => node.remove());\n      }\n      count--;\n    };\n  }, []);\n}\nfunction createFocusGuard() {\n  const element = document.createElement(\"span\");\n  element.setAttribute(\"data-radix-focus-guard\", \"\");\n  element.tabIndex = 0;\n  element.style.outline = \"none\";\n  element.style.opacity = \"0\";\n  element.style.position = \"fixed\";\n  element.style.pointerEvents = \"none\";\n  return element;\n}\nvar Root = FocusGuards;\nexport {\n  FocusGuards,\n  Root,\n  useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n    if (typeof ref === 'function') {\n        ref(value);\n    }\n    else if (ref) {\n        ref.current = value;\n    }\n    return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n    var ref = useState(function () { return ({\n        // value\n        value: initialValue,\n        // last callback\n        callback: callback,\n        // \"memoized\" public interface\n        facade: {\n            get current() {\n                return ref.value;\n            },\n            set current(value) {\n                var last = ref.value;\n                if (last !== value) {\n                    ref.value = value;\n                    ref.callback(value, last);\n                }\n            },\n        },\n    }); })[0];\n    // update callback\n    ref.callback = callback;\n    return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n *   const ownRef = useRef();\n *   const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n *   return <div ref={domRef}>...</div>\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n    var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n        return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n    });\n    // handle refs changes - added or removed\n    useIsomorphicLayoutEffect(function () {\n        var oldValue = currentValues.get(callbackRef);\n        if (oldValue) {\n            var prevRefs_1 = new Set(oldValue);\n            var nextRefs_1 = new Set(refs);\n            var current_1 = callbackRef.current;\n            prevRefs_1.forEach(function (ref) {\n                if (!nextRefs_1.has(ref)) {\n                    assignRef(ref, null);\n                }\n            });\n            nextRefs_1.forEach(function (ref) {\n                if (!prevRefs_1.has(ref)) {\n                    assignRef(ref, current_1);\n                }\n            });\n        }\n        currentValues.set(callbackRef, refs);\n    }, [refs]);\n    return callbackRef;\n}\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n};\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n    return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    var buffer = [];\n    var assigned = false;\n    var medium = {\n        read: function () {\n            if (assigned) {\n                throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n            }\n            if (buffer.length) {\n                return buffer[buffer.length - 1];\n            }\n            return defaults;\n        },\n        useMedium: function (data) {\n            var item = middleware(data, assigned);\n            buffer.push(item);\n            return function () {\n                buffer = buffer.filter(function (x) { return x !== item; });\n            };\n        },\n        assignSyncMedium: function (cb) {\n            assigned = true;\n            while (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n            }\n            buffer = {\n                push: function (x) { return cb(x); },\n                filter: function () { return buffer; },\n            };\n        },\n        assignMedium: function (cb) {\n            assigned = true;\n            var pendingQueue = [];\n            if (buffer.length) {\n                var cbs = buffer;\n                buffer = [];\n                cbs.forEach(cb);\n                pendingQueue = buffer;\n            }\n            var executeQueue = function () {\n                var cbs = pendingQueue;\n                pendingQueue = [];\n                cbs.forEach(cb);\n            };\n            var cycle = function () { return Promise.resolve().then(executeQueue); };\n            cycle();\n            buffer = {\n                push: function (x) {\n                    pendingQueue.push(x);\n                    cycle();\n                },\n                filter: function (filter) {\n                    pendingQueue = pendingQueue.filter(filter);\n                    return buffer;\n                },\n            };\n        },\n    };\n    return medium;\n}\nexport function createMedium(defaults, middleware) {\n    if (middleware === void 0) { middleware = ItoI; }\n    return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n    if (options === void 0) { options = {}; }\n    var medium = innerCreateMedium(null);\n    medium.options = __assign({ async: true, ssr: false }, options);\n    return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n    var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n    if (!sideCar) {\n        throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n    }\n    var Target = sideCar.read();\n    if (!Target) {\n        throw new Error('Sidecar medium not found');\n    }\n    return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n    medium.useMedium(exported);\n    return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n    return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n    var ref = React.useRef(null);\n    var _a = React.useState({\n        onScrollCapture: nothing,\n        onWheelCapture: nothing,\n        onTouchMoveCapture: nothing,\n    }), callbacks = _a[0], setCallbacks = _a[1];\n    var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n    var SideCar = sideCar;\n    var containerRef = useMergeRefs([ref, parentRef]);\n    var containerProps = __assign(__assign({}, rest), callbacks);\n    return (React.createElement(React.Fragment, null,\n        enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n        forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n    enabled: true,\n    removeScrollBar: true,\n    inert: false,\n};\nRemoveScroll.classNames = {\n    fullWidth: fullWidthClassName,\n    zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n    currentNonce = nonce;\n};\nexport var getNonce = function () {\n    if (currentNonce) {\n        return currentNonce;\n    }\n    if (typeof __webpack_nonce__ !== 'undefined') {\n        return __webpack_nonce__;\n    }\n    return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n    if (!document)\n        return null;\n    var tag = document.createElement('style');\n    tag.type = 'text/css';\n    var nonce = getNonce();\n    if (nonce) {\n        tag.setAttribute('nonce', nonce);\n    }\n    return tag;\n}\nfunction injectStyles(tag, css) {\n    // @ts-ignore\n    if (tag.styleSheet) {\n        // @ts-ignore\n        tag.styleSheet.cssText = css;\n    }\n    else {\n        tag.appendChild(document.createTextNode(css));\n    }\n}\nfunction insertStyleTag(tag) {\n    var head = document.head || document.getElementsByTagName('head')[0];\n    head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n    var counter = 0;\n    var stylesheet = null;\n    return {\n        add: function (style) {\n            if (counter == 0) {\n                if ((stylesheet = makeStyleTag())) {\n                    injectStyles(stylesheet, style);\n                    insertStyleTag(stylesheet);\n                }\n            }\n            counter++;\n        },\n        remove: function () {\n            counter--;\n            if (!counter && stylesheet) {\n                stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n                stylesheet = null;\n            }\n        },\n    };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n    var sheet = stylesheetSingleton();\n    return function (styles, isDynamic) {\n        React.useEffect(function () {\n            sheet.add(styles);\n            return function () {\n                sheet.remove();\n            };\n        }, [styles && isDynamic]);\n    };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n    var useStyle = styleHookSingleton();\n    var Sheet = function (_a) {\n        var styles = _a.styles, dynamic = _a.dynamic;\n        useStyle(styles, dynamic);\n        return null;\n    };\n    return Sheet;\n};\n","export var zeroGap = {\n    left: 0,\n    top: 0,\n    right: 0,\n    gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n    var cs = window.getComputedStyle(document.body);\n    var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n    var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n    var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n    return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n    if (gapMode === void 0) { gapMode = 'margin'; }\n    if (typeof window === 'undefined') {\n        return zeroGap;\n    }\n    var offsets = getOffset(gapMode);\n    var documentWidth = document.documentElement.clientWidth;\n    var windowWidth = window.innerWidth;\n    return {\n        left: offsets[0],\n        top: offsets[1],\n        right: offsets[2],\n        gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n    };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n    var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n    if (gapMode === void 0) { gapMode = 'margin'; }\n    return \"\\n  .\".concat(noScrollbarsClassName, \" {\\n   overflow: hidden \").concat(important, \";\\n   padding-right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  body[\").concat(lockAttribute, \"] {\\n    overflow: hidden \").concat(important, \";\\n    overscroll-behavior: contain;\\n    \").concat([\n        allowRelative && \"position: relative \".concat(important, \";\"),\n        gapMode === 'margin' &&\n            \"\\n    padding-left: \".concat(left, \"px;\\n    padding-top: \").concat(top, \"px;\\n    padding-right: \").concat(right, \"px;\\n    margin-left:0;\\n    margin-top:0;\\n    margin-right: \").concat(gap, \"px \").concat(important, \";\\n    \"),\n        gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n    ]\n        .filter(Boolean)\n        .join(''), \"\\n  }\\n  \\n  .\").concat(zeroRightClassName, \" {\\n    right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  \\n  .\").concat(fullWidthClassName, \" {\\n    margin-right: \").concat(gap, \"px \").concat(important, \";\\n  }\\n  \\n  .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n    right: 0 \").concat(important, \";\\n  }\\n  \\n  .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n    margin-right: 0 \").concat(important, \";\\n  }\\n  \\n  body[\").concat(lockAttribute, \"] {\\n    \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n  }\\n\");\n};\nvar getCurrentUseCounter = function () {\n    var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n    return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n    React.useEffect(function () {\n        document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n        return function () {\n            var newCounter = getCurrentUseCounter() - 1;\n            if (newCounter <= 0) {\n                document.body.removeAttribute(lockAttribute);\n            }\n            else {\n                document.body.setAttribute(lockAttribute, newCounter.toString());\n            }\n        };\n    }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n    var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n    useLockAttribute();\n    /*\n     gap will be measured on every component mount\n     however it will be used only by the \"first\" invocation\n     due to singleton nature of <Style\n     */\n    var gap = React.useMemo(function () { return getGapWidth(gapMode); }, [gapMode]);\n    return React.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? '!important' : '') });\n};\n","var passiveSupported = false;\nif (typeof window !== 'undefined') {\n    try {\n        var options = Object.defineProperty({}, 'passive', {\n            get: function () {\n                passiveSupported = true;\n                return true;\n            },\n        });\n        // @ts-ignore\n        window.addEventListener('test', options, options);\n        // @ts-ignore\n        window.removeEventListener('test', options, options);\n    }\n    catch (err) {\n        passiveSupported = false;\n    }\n}\nexport var nonPassive = passiveSupported ? { passive: false } : false;\n","var alwaysContainsScroll = function (node) {\n    // textarea will always _contain_ scroll inside self. It only can be hidden\n    return node.tagName === 'TEXTAREA';\n};\nvar elementCanBeScrolled = function (node, overflow) {\n    if (!(node instanceof Element)) {\n        return false;\n    }\n    var styles = window.getComputedStyle(node);\n    return (\n    // not-not-scrollable\n    styles[overflow] !== 'hidden' &&\n        // contains scroll inside self\n        !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === 'visible'));\n};\nvar elementCouldBeVScrolled = function (node) { return elementCanBeScrolled(node, 'overflowY'); };\nvar elementCouldBeHScrolled = function (node) { return elementCanBeScrolled(node, 'overflowX'); };\nexport var locationCouldBeScrolled = function (axis, node) {\n    var ownerDocument = node.ownerDocument;\n    var current = node;\n    do {\n        // Skip over shadow root\n        if (typeof ShadowRoot !== 'undefined' && current instanceof ShadowRoot) {\n            current = current.host;\n        }\n        var isScrollable = elementCouldBeScrolled(axis, current);\n        if (isScrollable) {\n            var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];\n            if (scrollHeight > clientHeight) {\n                return true;\n            }\n        }\n        current = current.parentNode;\n    } while (current && current !== ownerDocument.body);\n    return false;\n};\nvar getVScrollVariables = function (_a) {\n    var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n    return [\n        scrollTop,\n        scrollHeight,\n        clientHeight,\n    ];\n};\nvar getHScrollVariables = function (_a) {\n    var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n    return [\n        scrollLeft,\n        scrollWidth,\n        clientWidth,\n    ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n    return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n    return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n    /**\n     * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n     * and then increasingly negative as you scroll towards the end of the content.\n     * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n     */\n    return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n    var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n    var delta = directionFactor * sourceDelta;\n    // find scrollable target\n    var target = event.target;\n    var targetInLock = endTarget.contains(target);\n    var shouldCancelScroll = false;\n    var isDeltaPositive = delta > 0;\n    var availableScroll = 0;\n    var availableScrollTop = 0;\n    do {\n        var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n        var elementScroll = scroll_1 - capacity - directionFactor * position;\n        if (position || elementScroll) {\n            if (elementCouldBeScrolled(axis, target)) {\n                availableScroll += elementScroll;\n                availableScrollTop += position;\n            }\n        }\n        if (target instanceof ShadowRoot) {\n            target = target.host;\n        }\n        else {\n            target = target.parentNode;\n        }\n    } while (\n    // portaled content\n    (!targetInLock && target !== document.body) ||\n        // self content\n        (targetInLock && (endTarget.contains(target) || endTarget === target)));\n    // handle epsilon around 0 (non standard zoom levels)\n    if (isDeltaPositive &&\n        ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n        shouldCancelScroll = true;\n    }\n    else if (!isDeltaPositive &&\n        ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n        shouldCancelScroll = true;\n    }\n    return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n    return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n    return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n  .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n  .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n    var shouldPreventQueue = React.useRef([]);\n    var touchStartRef = React.useRef([0, 0]);\n    var activeAxis = React.useRef();\n    var id = React.useState(idCounter++)[0];\n    var Style = React.useState(styleSingleton)[0];\n    var lastProps = React.useRef(props);\n    React.useEffect(function () {\n        lastProps.current = props;\n    }, [props]);\n    React.useEffect(function () {\n        if (props.inert) {\n            document.body.classList.add(\"block-interactivity-\".concat(id));\n            var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n            allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n            return function () {\n                document.body.classList.remove(\"block-interactivity-\".concat(id));\n                allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n            };\n        }\n        return;\n    }, [props.inert, props.lockRef.current, props.shards]);\n    var shouldCancelEvent = React.useCallback(function (event, parent) {\n        if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n            return !lastProps.current.allowPinchZoom;\n        }\n        var touch = getTouchXY(event);\n        var touchStart = touchStartRef.current;\n        var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n        var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n        var currentAxis;\n        var target = event.target;\n        var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n        // allow horizontal touch move on Range inputs. They will not cause any scroll\n        if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n            return false;\n        }\n        var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n        if (!canBeScrolledInMainDirection) {\n            return true;\n        }\n        if (canBeScrolledInMainDirection) {\n            currentAxis = moveDirection;\n        }\n        else {\n            currentAxis = moveDirection === 'v' ? 'h' : 'v';\n            canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n            // other axis might be not scrollable\n        }\n        if (!canBeScrolledInMainDirection) {\n            return false;\n        }\n        if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n            activeAxis.current = currentAxis;\n        }\n        if (!currentAxis) {\n            return true;\n        }\n        var cancelingAxis = activeAxis.current || currentAxis;\n        return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n    }, []);\n    var shouldPrevent = React.useCallback(function (_event) {\n        var event = _event;\n        if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n            // not the last active\n            return;\n        }\n        var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n        var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n        // self event, and should be canceled\n        if (sourceEvent && sourceEvent.should) {\n            if (event.cancelable) {\n                event.preventDefault();\n            }\n            return;\n        }\n        // outside or shard event\n        if (!sourceEvent) {\n            var shardNodes = (lastProps.current.shards || [])\n                .map(extractRef)\n                .filter(Boolean)\n                .filter(function (node) { return node.contains(event.target); });\n            var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n            if (shouldStop) {\n                if (event.cancelable) {\n                    event.preventDefault();\n                }\n            }\n        }\n    }, []);\n    var shouldCancel = React.useCallback(function (name, delta, target, should) {\n        var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n        shouldPreventQueue.current.push(event);\n        setTimeout(function () {\n            shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n        }, 1);\n    }, []);\n    var scrollTouchStart = React.useCallback(function (event) {\n        touchStartRef.current = getTouchXY(event);\n        activeAxis.current = undefined;\n    }, []);\n    var scrollWheel = React.useCallback(function (event) {\n        shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n    }, []);\n    var scrollTouchMove = React.useCallback(function (event) {\n        shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n    }, []);\n    React.useEffect(function () {\n        lockStack.push(Style);\n        props.setCallbacks({\n            onScrollCapture: scrollWheel,\n            onWheelCapture: scrollWheel,\n            onTouchMoveCapture: scrollTouchMove,\n        });\n        document.addEventListener('wheel', shouldPrevent, nonPassive);\n        document.addEventListener('touchmove', shouldPrevent, nonPassive);\n        document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n        return function () {\n            lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n            document.removeEventListener('wheel', shouldPrevent, nonPassive);\n            document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n            document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n        };\n    }, []);\n    var removeScrollBar = props.removeScrollBar, inert = props.inert;\n    return (React.createElement(React.Fragment, null,\n        inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n        removeScrollBar ? React.createElement(RemoveScrollBar, { gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n    var shadowParent = null;\n    while (node !== null) {\n        if (node instanceof ShadowRoot) {\n            shadowParent = node.host;\n            node = node.host;\n        }\n        node = node.parentNode;\n    }\n    return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","var getDefaultParent = function (originalTarget) {\n    if (typeof document === 'undefined') {\n        return null;\n    }\n    var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n    return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n    return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n    return targets\n        .map(function (target) {\n        if (parent.contains(target)) {\n            return target;\n        }\n        var correctedTarget = unwrapHost(target);\n        if (correctedTarget && parent.contains(correctedTarget)) {\n            return correctedTarget;\n        }\n        console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n        return null;\n    })\n        .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n    var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n    if (!markerMap[markerName]) {\n        markerMap[markerName] = new WeakMap();\n    }\n    var markerCounter = markerMap[markerName];\n    var hiddenNodes = [];\n    var elementsToKeep = new Set();\n    var elementsToStop = new Set(targets);\n    var keep = function (el) {\n        if (!el || elementsToKeep.has(el)) {\n            return;\n        }\n        elementsToKeep.add(el);\n        keep(el.parentNode);\n    };\n    targets.forEach(keep);\n    var deep = function (parent) {\n        if (!parent || elementsToStop.has(parent)) {\n            return;\n        }\n        Array.prototype.forEach.call(parent.children, function (node) {\n            if (elementsToKeep.has(node)) {\n                deep(node);\n            }\n            else {\n                try {\n                    var attr = node.getAttribute(controlAttribute);\n                    var alreadyHidden = attr !== null && attr !== 'false';\n                    var counterValue = (counterMap.get(node) || 0) + 1;\n                    var markerValue = (markerCounter.get(node) || 0) + 1;\n                    counterMap.set(node, counterValue);\n                    markerCounter.set(node, markerValue);\n                    hiddenNodes.push(node);\n                    if (counterValue === 1 && alreadyHidden) {\n                        uncontrolledNodes.set(node, true);\n                    }\n                    if (markerValue === 1) {\n                        node.setAttribute(markerName, 'true');\n                    }\n                    if (!alreadyHidden) {\n                        node.setAttribute(controlAttribute, 'true');\n                    }\n                }\n                catch (e) {\n                    console.error('aria-hidden: cannot operate on ', node, e);\n                }\n            }\n        });\n    };\n    deep(parentNode);\n    elementsToKeep.clear();\n    lockCount++;\n    return function () {\n        hiddenNodes.forEach(function (node) {\n            var counterValue = counterMap.get(node) - 1;\n            var markerValue = markerCounter.get(node) - 1;\n            counterMap.set(node, counterValue);\n            markerCounter.set(node, markerValue);\n            if (!counterValue) {\n                if (!uncontrolledNodes.has(node)) {\n                    node.removeAttribute(controlAttribute);\n                }\n                uncontrolledNodes.delete(node);\n            }\n            if (!markerValue) {\n                node.removeAttribute(markerName);\n            }\n        });\n        lockCount--;\n        if (!lockCount) {\n            // clear\n            counterMap = new WeakMap();\n            counterMap = new WeakMap();\n            uncontrolledNodes = new WeakMap();\n            markerMap = {};\n        }\n    };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n    var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n    var activeParentNode = parentNode || getDefaultParent(originalTarget);\n    if (!activeParentNode) {\n        return function () { return null; };\n    }\n    // we should not hide ariaLive elements - https://github.com/theKashey/aria-hidden/issues/10\n    targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live]')));\n    return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-inert-ed'; }\n    var activeParentNode = parentNode || getDefaultParent(originalTarget);\n    if (!activeParentNode) {\n        return function () { return null; };\n    }\n    return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n    return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n    if (markerName === void 0) { markerName = 'data-suppressed'; }\n    return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","\"use client\";\n\n// packages/react/dialog/src/Dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n  const {\n    __scopeDialog,\n    children,\n    open: openProp,\n    defaultOpen,\n    onOpenChange,\n    modal = true\n  } = props;\n  const triggerRef = React.useRef(null);\n  const contentRef = React.useRef(null);\n  const [open = false, setOpen] = useControllableState({\n    prop: openProp,\n    defaultProp: defaultOpen,\n    onChange: onOpenChange\n  });\n  return /* @__PURE__ */ jsx(\n    DialogProvider,\n    {\n      scope: __scopeDialog,\n      triggerRef,\n      contentRef,\n      contentId: useId(),\n      titleId: useId(),\n      descriptionId: useId(),\n      open,\n      onOpenChange: setOpen,\n      onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n      modal,\n      children\n    }\n  );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...triggerProps } = props;\n    const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n    const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        \"aria-haspopup\": \"dialog\",\n        \"aria-expanded\": context.open,\n        \"aria-controls\": context.contentId,\n        \"data-state\": getState(context.open),\n        ...triggerProps,\n        ref: composedTriggerRef,\n        onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n      }\n    );\n  }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n  forceMount: void 0\n});\nvar DialogPortal = (props) => {\n  const { __scopeDialog, forceMount, children, container } = props;\n  const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n  return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n    const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n    const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n    return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n  }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar DialogOverlayImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...overlayProps } = props;\n    const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n    return (\n      // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n      // ie. when `Overlay` and `Content` are siblings\n      /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n        Primitive.div,\n        {\n          \"data-state\": getState(context.open),\n          ...overlayProps,\n          ref: forwardedRef,\n          style: { pointerEvents: \"auto\", ...overlayProps.style }\n        }\n      ) })\n    );\n  }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n    const { forceMount = portalContext.forceMount, ...contentProps } = props;\n    const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n  }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n  (props, forwardedRef) => {\n    const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n    const contentRef = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n    React.useEffect(() => {\n      const content = contentRef.current;\n      if (content) return hideOthers(content);\n    }, []);\n    return /* @__PURE__ */ jsx(\n      DialogContentImpl,\n      {\n        ...props,\n        ref: composedRefs,\n        trapFocus: context.open,\n        disableOutsidePointerEvents: true,\n        onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n          event.preventDefault();\n          context.triggerRef.current?.focus();\n        }),\n        onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n          const originalEvent = event.detail.originalEvent;\n          const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n          const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n          if (isRightClick) event.preventDefault();\n        }),\n        onFocusOutside: composeEventHandlers(\n          props.onFocusOutside,\n          (event) => event.preventDefault()\n        )\n      }\n    );\n  }\n);\nvar DialogContentNonModal = React.forwardRef(\n  (props, forwardedRef) => {\n    const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n    const hasInteractedOutsideRef = React.useRef(false);\n    const hasPointerDownOutsideRef = React.useRef(false);\n    return /* @__PURE__ */ jsx(\n      DialogContentImpl,\n      {\n        ...props,\n        ref: forwardedRef,\n        trapFocus: false,\n        disableOutsidePointerEvents: false,\n        onCloseAutoFocus: (event) => {\n          props.onCloseAutoFocus?.(event);\n          if (!event.defaultPrevented) {\n            if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n            event.preventDefault();\n          }\n          hasInteractedOutsideRef.current = false;\n          hasPointerDownOutsideRef.current = false;\n        },\n        onInteractOutside: (event) => {\n          props.onInteractOutside?.(event);\n          if (!event.defaultPrevented) {\n            hasInteractedOutsideRef.current = true;\n            if (event.detail.originalEvent.type === \"pointerdown\") {\n              hasPointerDownOutsideRef.current = true;\n            }\n          }\n          const target = event.target;\n          const targetIsTrigger = context.triggerRef.current?.contains(target);\n          if (targetIsTrigger) event.preventDefault();\n          if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n            event.preventDefault();\n          }\n        }\n      }\n    );\n  }\n);\nvar DialogContentImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n    const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n    const contentRef = React.useRef(null);\n    const composedRefs = useComposedRefs(forwardedRef, contentRef);\n    useFocusGuards();\n    return /* @__PURE__ */ jsxs(Fragment, { children: [\n      /* @__PURE__ */ jsx(\n        FocusScope,\n        {\n          asChild: true,\n          loop: true,\n          trapped: trapFocus,\n          onMountAutoFocus: onOpenAutoFocus,\n          onUnmountAutoFocus: onCloseAutoFocus,\n          children: /* @__PURE__ */ jsx(\n            DismissableLayer,\n            {\n              role: \"dialog\",\n              id: context.contentId,\n              \"aria-describedby\": context.descriptionId,\n              \"aria-labelledby\": context.titleId,\n              \"data-state\": getState(context.open),\n              ...contentProps,\n              ref: composedRefs,\n              onDismiss: () => context.onOpenChange(false)\n            }\n          )\n        }\n      ),\n      /* @__PURE__ */ jsxs(Fragment, { children: [\n        /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n        /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n      ] })\n    ] });\n  }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...titleProps } = props;\n    const context = useDialogContext(TITLE_NAME, __scopeDialog);\n    return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n  }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...descriptionProps } = props;\n    const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n    return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n  }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeDialog, ...closeProps } = props;\n    const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        ...closeProps,\n        ref: forwardedRef,\n        onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n      }\n    );\n  }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n  return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n  contentName: CONTENT_NAME,\n  titleName: TITLE_NAME,\n  docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n  const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n  const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n  React.useEffect(() => {\n    if (titleId) {\n      const hasTitle = document.getElementById(titleId);\n      if (!hasTitle) console.error(MESSAGE);\n    }\n  }, [MESSAGE, titleId]);\n  return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n  const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n  const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n  React.useEffect(() => {\n    const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n    if (descriptionId && describedById) {\n      const hasDescription = document.getElementById(descriptionId);\n      if (!hasDescription) console.warn(MESSAGE);\n    }\n  }, [MESSAGE, contentRef, descriptionId]);\n  return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n  Close,\n  Content,\n  Description,\n  Dialog,\n  DialogClose,\n  DialogContent,\n  DialogDescription,\n  DialogOverlay,\n  DialogPortal,\n  DialogTitle,\n  DialogTrigger,\n  Overlay,\n  Portal,\n  Root,\n  Title,\n  Trigger,\n  WarningProvider,\n  createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { X } from \"lucide-react\"\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Sheet = SheetPrimitive.Root\n\nconst SheetTrigger = SheetPrimitive.Trigger\n\nconst SheetClose = SheetPrimitive.Close\n\nconst SheetPortal = SheetPrimitive.Portal\n\nconst SheetOverlay = React.forwardRef<\n  React.ElementRef<typeof SheetPrimitive.Overlay>,\n  React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n  <SheetPrimitive.Overlay\n    className={cn(\n      \"fixed inset-0 z-50 bg-black/80  data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0\",\n      className\n    )}\n    {...props}\n    ref={ref}\n  />\n))\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName\n\nconst sheetVariants = cva(\n  \"fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n  {\n    variants: {\n      side: {\n        top: \"inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top\",\n        bottom:\n          \"inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom\",\n        left: \"inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm\",\n        right:\n          \"inset-y-0 right-0 h-full w-3/4  border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm\",\n      },\n    },\n    defaultVariants: {\n      side: \"right\",\n    },\n  }\n)\n\ninterface SheetContentProps\n  extends React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content>,\n  VariantProps<typeof sheetVariants> { }\n\nconst SheetContent = React.forwardRef<\n  React.ElementRef<typeof SheetPrimitive.Content>,\n  SheetContentProps\n>(({ side = \"right\", className, children, ...props }, ref) => (\n  <SheetPortal>\n    <SheetOverlay />\n    <SheetPrimitive.Content\n      ref={ref}\n      className={cn(sheetVariants({ side }), className)}\n      {...props}\n    >\n      {children}\n      <SheetPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary\">\n        <X className=\"h-4 w-4\" />\n        <span className=\"sr-only\">Close</span>\n      </SheetPrimitive.Close>\n    </SheetPrimitive.Content>\n  </SheetPortal>\n))\nSheetContent.displayName = SheetPrimitive.Content.displayName\n\nconst SheetHeader = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\n      \"flex flex-col space-y-2 text-center sm:text-left\",\n      className\n    )}\n    {...props}\n  />\n)\nSheetHeader.displayName = \"SheetHeader\"\n\nconst SheetFooter = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => (\n  <div\n    className={cn(\n      \"flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2\",\n      className\n    )}\n    {...props}\n  />\n)\nSheetFooter.displayName = \"SheetFooter\"\n\nconst SheetTitle = React.forwardRef<\n  React.ElementRef<typeof SheetPrimitive.Title>,\n  React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => (\n  <SheetPrimitive.Title\n    ref={ref}\n    className={cn(\"text-lg font-semibold text-foreground\", className)}\n    {...props}\n  />\n))\nSheetTitle.displayName = SheetPrimitive.Title.displayName\n\nconst SheetDescription = React.forwardRef<\n  React.ElementRef<typeof SheetPrimitive.Description>,\n  React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => (\n  <SheetPrimitive.Description\n    ref={ref}\n    className={cn(\"text-sm text-muted-foreground\", className)}\n    {...props}\n  />\n))\nSheetDescription.displayName = SheetPrimitive.Description.displayName\n\nexport {\n  Sheet, SheetClose,\n  SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger\n}\n\n","import React, { useState } from 'react';\nimport { Link, useLocation } from 'react-router-dom';\nimport { Menu, Home, BookOpen, FileText, Shield, HelpCircle, ExternalLink, User } from 'lucide-react';\nimport { Button } from '@/components/ui/button';\nimport {\n  Sheet,\n  SheetContent,\n  SheetHeader,\n  SheetTitle,\n  SheetTrigger,\n} from '@/components/ui/sheet';\n\nconst navLinks = [\n  { to: '/', label: 'Home', icon: Home },\n  { to: '/guide', label: 'Guide', icon: BookOpen },\n  { to: '/faq', label: 'FAQ', icon: HelpCircle },\n  { to: '/about', label: 'About', icon: User },\n  { to: '/privacy', label: 'Privacy', icon: Shield },\n];\n\nconst Navigation = () => {\n  const [open, setOpen] = useState(false);\n  const location = useLocation();\n\n  return (\n    <header className=\"sticky top-0 z-50 w-full border-b border-border bg-background/95 backdrop-blur-sm\">\n      <nav className=\"container mx-auto px-4\">\n        <div className=\"flex h-14 items-center justify-between\">\n          {/* Logo/Brand */}\n          <Link to=\"/\" className=\"flex items-center gap-2 font-semibold text-foreground\">\n            <span className=\"text-lg\">911/999 Call Simulator</span>\n          </Link>\n\n          {/* Desktop Navigation - visible on md and up */}\n          <nav className=\"hidden md:flex flex-row gap-6 items-center\">\n            {navLinks.map((link) => {\n              const isActive = location.pathname === link.to;\n              return (\n                <Link\n                  key={link.to}\n                  to={link.to}\n                  className={`px-3 py-2 rounded-md text-sm font-medium whitespace-nowrap transition-colors ${\n                    isActive\n                      ? 'bg-primary text-primary-foreground'\n                      : 'text-muted-foreground hover:text-blue-600 hover:bg-accent'\n                  }`}\n                >\n                  {link.label}\n                </Link>\n              );\n            })}\n          </nav>\n\n          {/* Mobile Menu Button - visible on small screens */}\n          <Sheet open={open} onOpenChange={setOpen}>\n            <SheetTrigger asChild>\n              <Button\n                variant=\"outline\"\n                size=\"icon\"\n                className=\"md:hidden\"\n              >\n                <Menu className=\"h-5 w-5\" />\n                <span className=\"sr-only\">Open menu</span>\n              </Button>\n            </SheetTrigger>\n            <SheetContent side=\"right\" className=\"w-72 bg-background\">\n              <SheetHeader className=\"text-left\">\n                <SheetTitle className=\"text-foreground text-lg font-semibold\">\n                  911/999 Call Simulator\n                </SheetTitle>\n              </SheetHeader>\n              <nav className=\"mt-8 flex flex-col gap-2\">\n                {navLinks.map((link) => {\n                  const Icon = link.icon;\n                  const isActive = location.pathname === link.to;\n                  return (\n                    <Link\n                      key={link.to}\n                      to={link.to}\n                      onClick={() => setOpen(false)}\n                      className={`flex items-center gap-3 px-4 py-3 rounded-lg transition-colors ${\n                        isActive\n                          ? 'bg-primary text-primary-foreground'\n                          : 'text-foreground hover:bg-accent'\n                      }`}\n                    >\n                      <Icon className=\"h-5 w-5\" />\n                      <span className=\"font-medium\">{link.label}</span>\n                    </Link>\n                  );\n                })}\n              </nav>\n            </SheetContent>\n          </Sheet>\n        </div>\n      </nav>\n    </header>\n  );\n};\n\nexport default Navigation;\n","const KofiWidget = () => {\n  return (\n    <a\n      href=\"https://ko-fi.com/Q5Q41R660M\"\n      target=\"_blank\"\n      rel=\"noopener noreferrer\"\n      className=\"inline-flex items-center gap-2 px-4 py-2 rounded-lg text-white font-medium transition-transform hover:scale-105\"\n      style={{ backgroundColor: '#73b8f5' }}\n    >\n      <img\n        src=\"https://storage.ko-fi.com/cdn/cup-border.png\"\n        alt=\"Ko-fi\"\n        className=\"h-5 w-5\"\n      />\n      Support this site\n    </a>\n  );\n};\n\nexport default KofiWidget;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport KofiWidget from './KofiWidget';\n\nconst Footer = () => {\n  return (\n    <footer className=\"bg-gray-900 text-white py-8 mt-auto\">\n      <div className=\"container mx-auto px-4\">\n        <div className=\"flex justify-center mb-6\">\n          <KofiWidget />\n        </div>\n        <div className=\"text-center space-y-2\">\n          <p className=\"text-gray-300 text-sm\">\n            © 2025 911/999 Call Simulator - Educational Tool Only\n          </p>\n          <p className=\"text-gray-500 text-xs\">\n            This is a training simulation. For real emergencies, dial 911 or 999.\n          </p>\n          <div className=\"flex items-center justify-center gap-4 mt-2\">\n            <Link \n              to=\"/privacy\" \n              className=\"text-gray-400 hover:text-white text-sm transition-colors hover:underline\"\n            >\n              Privacy Policy\n            </Link>\n            <span className=\"text-gray-600\">|</span>\n            <button\n              onClick={() => {\n                localStorage.removeItem('cookies-accepted');\n                window.dispatchEvent(new CustomEvent('reset-cookie-consent'));\n              }}\n              className=\"text-gray-400 hover:text-white text-sm transition-colors hover:underline\"\n            >\n              Cookie Settings\n            </button>\n          </div>\n        </div>\n      </div>\n    </footer>\n  );\n};\n\nexport default Footer;\n","/**\n * Cookie-consent gating for analytics + advertising scripts.\n *\n * Under UK PECR / GDPR, non-strictly-necessary cookies require prior\n * informed consent. This module:\n *   1. Reads/writes the user's consent decision to localStorage.\n *   2. Loads the Google Analytics + Google AdSense scripts only after\n *      consent is given (deferred-load pattern).\n *\n * The functions that don't touch the DOM accept a Storage interface so\n * they can be unit-tested without a browser.\n */\n\nexport type ConsentState = \"accepted\" | \"declined\" | \"unknown\";\n\nexport const CONSENT_KEY = \"cookies-accepted\";\n\n// Fired on window whenever the user's consent decision changes, so\n// components (e.g. the consent-gated <Analytics /> in App.tsx) can\n// react without polling localStorage.\nexport const CONSENT_CHANGE_EVENT = \"cookie-consent-changed\";\n\nconst GA_MEASUREMENT_ID = \"G-51DDNPLJSB\";\nconst ADSENSE_CLIENT_ID = \"ca-pub-1138854450517299\";\n\ninterface MinimalStorage {\n  getItem(key: string): string | null;\n  setItem(key: string, value: string): void;\n}\n\n/**\n * Read the current consent state. Recognises:\n *   - \"true\" or \"accepted\" → accepted (legacy + new spelling)\n *   - \"declined\" → declined\n *   - anything else (or absent) → unknown\n */\nexport function getConsentState(storage: MinimalStorage): ConsentState {\n  const v = storage.getItem(CONSENT_KEY);\n  if (v === \"true\" || v === \"accepted\") return \"accepted\";\n  if (v === \"declined\") return \"declined\";\n  return \"unknown\";\n}\n\nexport function setConsent(\n  storage: MinimalStorage,\n  value: Exclude<ConsentState, \"unknown\">,\n): void {\n  storage.setItem(CONSENT_KEY, value);\n}\n\n/**\n * Inject a `<script>` tag with the given attributes. Idempotent —\n * if a script with the same `src` already exists, this is a no-op.\n */\nfunction injectScript(src: string, attrs: Record<string, string> = {}): void {\n  if (document.querySelector(`script[src=\"${src}\"]`)) return;\n  const s = document.createElement(\"script\");\n  s.src = src;\n  s.async = true;\n  for (const [k, v] of Object.entries(attrs)) s.setAttribute(k, v);\n  document.head.appendChild(s);\n}\n\nlet analyticsLoaded = false;\n\n/**\n * Load Google Analytics + Google AdSense. Only call this when consent\n * has been granted. Idempotent — repeated calls are a no-op.\n */\nexport function loadAnalytics(): void {\n  if (analyticsLoaded) return;\n  analyticsLoaded = true;\n\n  // Google Analytics (gtag)\n  injectScript(`https://www.googletagmanager.com/gtag/js?id=${GA_MEASUREMENT_ID}`);\n  // gtag bootstrap — must run after the script tag is in the DOM but\n  // can be inline; uses dataLayer which gtag.js will pick up on load.\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  const w = window as any;\n  w.dataLayer = w.dataLayer || [];\n  // eslint-disable-next-line prefer-rest-params, @typescript-eslint/no-explicit-any\n  w.gtag = function gtag(..._args: any[]) {\n    w.dataLayer.push(arguments);\n  };\n  w.gtag(\"js\", new Date());\n  w.gtag(\"config\", GA_MEASUREMENT_ID);\n\n  // Google AdSense\n  injectScript(\n    `https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=${ADSENSE_CLIENT_ID}`,\n    { crossorigin: \"anonymous\" },\n  );\n}\n\n/**\n * Bootstrap helper for app start: if the user has already accepted\n * cookies in a prior session, load analytics now.\n */\nexport function loadAnalyticsIfConsented(): void {\n  if (typeof window === \"undefined\") return;\n  if (getConsentState(window.localStorage) === \"accepted\") {\n    loadAnalytics();\n  }\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Button } from \"@/components/ui/button\";\nimport {\n  CONSENT_CHANGE_EVENT,\n  CONSENT_KEY,\n  getConsentState,\n  loadAnalytics,\n  setConsent,\n} from \"@/utils/consent\";\n\nconst CookieBanner = () => {\n  const [visible, setVisible] = useState(false);\n\n  useEffect(() => {\n    const state = getConsentState(window.localStorage);\n    if (state === \"unknown\") setVisible(true);\n\n    const handleReset = () => setVisible(true);\n    window.addEventListener(\"reset-cookie-consent\", handleReset);\n    return () => window.removeEventListener(\"reset-cookie-consent\", handleReset);\n  }, []);\n\n  const handleAccept = () => {\n    setConsent(window.localStorage, \"accepted\");\n    loadAnalytics();\n    window.dispatchEvent(new Event(CONSENT_CHANGE_EVENT));\n    setVisible(false);\n  };\n\n  const handleDecline = () => {\n    setConsent(window.localStorage, \"declined\");\n    window.dispatchEvent(new Event(CONSENT_CHANGE_EVENT));\n    setVisible(false);\n  };\n\n  if (!visible) return null;\n\n  return (\n    <div\n      role=\"dialog\"\n      aria-label=\"Cookie consent\"\n      className=\"fixed bottom-4 right-4 z-50 max-w-sm bg-card border border-border rounded-lg shadow-xl p-4\"\n    >\n      <p className=\"text-sm text-muted-foreground mb-3\">\n        We use analytics and advertising cookies. They only load if you accept.\n        Strictly-necessary cookies (which remember this choice) are always on.{\" \"}\n        <Link to=\"/privacy\" className=\"text-primary hover:underline\">\n          Learn more\n        </Link>\n      </p>\n      <div className=\"flex gap-2\">\n        <Button size=\"sm\" variant=\"outline\" onClick={handleDecline} className=\"flex-1\">\n          Decline\n        </Button>\n        <Button size=\"sm\" onClick={handleAccept} className=\"flex-1\">\n          Accept\n        </Button>\n      </div>\n    </div>\n  );\n};\n\n// Re-export for tests / external bootstraps that just want the storage key.\nexport { CONSENT_KEY };\n\nexport default CookieBanner;\n","import React from 'react';\nimport Navigation from './Navigation';\nimport Footer from './Footer';\nimport CookieBanner from './CookieBanner';\n\n/**\n * MainLayout Component\n * Provides consistent page structure across all pages\n * Contains Navigation, Footer, and CookieBanner\n * Single Responsibility: Page layout composition only\n */\ninterface MainLayoutProps {\n  children: React.ReactNode;\n  showFooter?: boolean;\n}\n\nconst MainLayout: React.FC<MainLayoutProps> = ({ children, showFooter = true }) => {\n  return (\n    <div className=\"min-h-screen flex flex-col bg-background\">\n      <Navigation />\n      <main className=\"flex-1\">\n        {children}\n      </main>\n      {showFooter && <Footer />}\n      <CookieBanner />\n    </div>\n  );\n};\n\nexport default MainLayout;\n","/**\n * Canonical base URLs for the three production domains this app is\n * deployed to (one Vercel project each, per README). Used anywhere\n * a page needs to self-reference an absolute URL — canonical tags,\n * JSON-LD, hreflang — so each domain credits itself rather than a\n * sibling domain.\n */\nexport const US_DOMAIN = \"https://911callsimulator.com\";\nexport const UK_DOMAIN = \"https://999callsimulator.com\";\nexport const UK_ALT_DOMAIN = \"https://999callbuddy.com\";\n\n/**\n * Resolve the current hostname to its own canonical base URL.\n * Falls back to US_DOMAIN (SSR / unknown host).\n */\nexport function getCurrentDomainBase(hostname: string): string {\n  if (hostname.includes(\"999callbuddy\")) return UK_ALT_DOMAIN;\n  if (hostname.includes(\"999callsimulator\")) return UK_DOMAIN;\n  return US_DOMAIN;\n}\n","import React, { useState } from \"react\";\nimport { Helmet } from \"react-helmet-async\";\nimport EmergencyDialer from \"@/components/EmergencyDialer\";\nimport EmergencyCall from \"@/components/EmergencyCall\";\nimport HomepageContent from \"@/components/HomepageContent\";\nimport { trackConversion } from \"@/utils/googleAds\";\nimport MainLayout from \"@/components/MainLayout\";\nimport { getCurrentDomainBase } from \"@/utils/domain\";\n\n// No aggregateRating here: we have no real review data. Fabricating one\n// violates the project's data-honesty rule and risks a Google structured-data\n// manual action for fake review markup — add it back only with real numbers.\nfunction getStructuredData(base: string) {\n  return {\n    \"@context\": \"https://schema.org\",\n    \"@graph\": [\n      {\n        \"@type\": \"WebSite\",\n        name: \"911/999 Call Simulator\",\n        url: base,\n        description:\n          \"Free interactive 911/999 simulator for kids. Teach your child how to call emergency services safely with our realistic, AI-powered dispatcher training tool.\",\n      },\n      {\n        \"@type\": \"WebApplication\",\n        name: \"911/999 Call Simulator\",\n        url: base,\n        applicationCategory: \"EducationalApplication\",\n        operatingSystem: \"Any\",\n        offers: {\n          \"@type\": \"Offer\",\n          price: \"0\",\n          priceCurrency: \"USD\",\n        },\n        description:\n          \"An AI-powered 911 call simulator that teaches children how to respond in emergencies. Practice calling 911 in a safe, controlled environment.\",\n        featureList: [\n          \"AI-powered dispatcher simulation\",\n          \"Realistic emergency call experience\",\n          \"Safe practice environment\",\n          \"Age-appropriate for children 4+\",\n        ],\n        screenshot: `${base}/og-image.png`,\n      },\n      {\n        \"@type\": \"Organization\",\n        name: \"911/999 Call Simulator\",\n        url: base,\n        logo: `${base}/favicon.ico`,\n      },\n    ],\n  };\n}\n\nconst Index = () => {\n  const [activeCall, setActiveCall] = useState<string | null>(null);\n  const host = typeof window !== \"undefined\" ? window.location.hostname : \"\";\n  const structuredData = getStructuredData(getCurrentDomainBase(host));\n\n  const handleStartCall = (number: string) => {\n    setActiveCall(number);\n    trackConversion(number);\n  };\n\n  const handleEndCall = () => {\n    setActiveCall(null);\n  };\n\n  return (\n    <MainLayout>\n      <Helmet>\n        <script type=\"application/ld+json\">{JSON.stringify(structuredData)}</script>\n      </Helmet>\n      <div className=\"min-h-[calc(100vh-200px)] bg-background flex items-center justify-center relative p-4\">\n        {activeCall ? (\n          <EmergencyCall number={activeCall} onEnd={handleEndCall} />\n        ) : (\n          <EmergencyDialer onCall={handleStartCall} />\n        )}\n      </div>\n      <HomepageContent />\n    </MainLayout>\n  );\n};\n\nexport default Index;\n","import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nexport interface TextareaProps\n  extends React.TextareaHTMLAttributes<HTMLTextAreaElement> {}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n  ({ className, ...props }, ref) => {\n    return (\n      <textarea\n        className={cn(\n          \"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50\",\n          className\n        )}\n        ref={ref}\n        {...props}\n      />\n    )\n  }\n)\nTextarea.displayName = \"Textarea\"\n\nexport { Textarea }\n","import React from 'react';\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\nvar isObject = (value) => !isNullOrUndefined(value) &&\n    !Array.isArray(value) &&\n    isObjectType(value) &&\n    !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\n    ? isCheckBoxInput(event.target)\n        ? event.target.checked\n        : event.target.value\n    : event;\n\nvar getNodeParentName = (name) => name.substring(0, name.search(/\\.\\d+(\\.|$)/)) || name;\n\nvar isNameInFieldArray = (names, name) => names.has(getNodeParentName(name));\n\nvar isPlainObject = (tempObject) => {\n    const prototypeCopy = tempObject.constructor && tempObject.constructor.prototype;\n    return (isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf'));\n};\n\nvar isWeb = typeof window !== 'undefined' &&\n    typeof window.HTMLElement !== 'undefined' &&\n    typeof document !== 'undefined';\n\nfunction cloneObject(data) {\n    let copy;\n    const isArray = Array.isArray(data);\n    if (data instanceof Date) {\n        copy = new Date(data);\n    }\n    else if (data instanceof Set) {\n        copy = new Set(data);\n    }\n    else if (!(isWeb && (data instanceof Blob || data instanceof FileList)) &&\n        (isArray || isObject(data))) {\n        copy = isArray ? [] : {};\n        if (!isArray && !isPlainObject(data)) {\n            copy = data;\n        }\n        else {\n            for (const key in data) {\n                if (data.hasOwnProperty(key)) {\n                    copy[key] = cloneObject(data[key]);\n                }\n            }\n        }\n    }\n    else {\n        return data;\n    }\n    return copy;\n}\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar isUndefined = (val) => val === undefined;\n\nvar get = (object, path, defaultValue) => {\n    if (!path || !isObject(object)) {\n        return defaultValue;\n    }\n    const result = compact(path.split(/[,[\\].]+?/)).reduce((result, key) => isNullOrUndefined(result) ? result : result[key], object);\n    return isUndefined(result) || result === object\n        ? isUndefined(object[path])\n            ? defaultValue\n            : object[path]\n        : result;\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar stringToPath = (input) => compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n\nvar set = (object, path, value) => {\n    let index = -1;\n    const tempPath = isKey(path) ? [path] : stringToPath(path);\n    const length = tempPath.length;\n    const lastIndex = length - 1;\n    while (++index < length) {\n        const key = tempPath[index];\n        let newValue = value;\n        if (index !== lastIndex) {\n            const objValue = object[key];\n            newValue =\n                isObject(objValue) || Array.isArray(objValue)\n                    ? objValue\n                    : !isNaN(+tempPath[index + 1])\n                        ? []\n                        : {};\n        }\n        if (key === '__proto__') {\n            return;\n        }\n        object[key] = newValue;\n        object = object[key];\n    }\n    return object;\n};\n\nconst EVENTS = {\n    BLUR: 'blur',\n    FOCUS_OUT: 'focusout',\n    CHANGE: 'change',\n};\nconst VALIDATION_MODE = {\n    onBlur: 'onBlur',\n    onChange: 'onChange',\n    onSubmit: 'onSubmit',\n    onTouched: 'onTouched',\n    all: 'all',\n};\nconst INPUT_VALIDATION_RULES = {\n    max: 'max',\n    min: 'min',\n    maxLength: 'maxLength',\n    minLength: 'minLength',\n    pattern: 'pattern',\n    required: 'required',\n    validate: 'validate',\n};\n\nconst HookFormContext = React.createContext(null);\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n *   const methods = useForm();\n *   const onSubmit = data => console.log(data);\n *\n *   return (\n *     <FormProvider {...methods} >\n *       <form onSubmit={methods.handleSubmit(onSubmit)}>\n *         <NestedInput />\n *         <input type=\"submit\" />\n *       </form>\n *     </FormProvider>\n *   );\n * }\n *\n *  function NestedInput() {\n *   const { register } = useFormContext(); // retrieve all hook methods\n *   return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst useFormContext = () => React.useContext(HookFormContext);\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://reactjs.org/docs/context.html) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n *   const methods = useForm();\n *   const onSubmit = data => console.log(data);\n *\n *   return (\n *     <FormProvider {...methods} >\n *       <form onSubmit={methods.handleSubmit(onSubmit)}>\n *         <NestedInput />\n *         <input type=\"submit\" />\n *       </form>\n *     </FormProvider>\n *   );\n * }\n *\n *  function NestedInput() {\n *   const { register } = useFormContext(); // retrieve all hook methods\n *   return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst FormProvider = (props) => {\n    const { children, ...data } = props;\n    return (React.createElement(HookFormContext.Provider, { value: data }, children));\n};\n\nvar getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {\n    const result = {\n        defaultValues: control._defaultValues,\n    };\n    for (const key in formState) {\n        Object.defineProperty(result, key, {\n            get: () => {\n                const _key = key;\n                if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n                    control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n                }\n                localProxyFormState && (localProxyFormState[_key] = true);\n                return formState[_key];\n            },\n        });\n    }\n    return result;\n};\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, updateFormState, isRoot) => {\n    updateFormState(formStateData);\n    const { name, ...formState } = formStateData;\n    return (isEmptyObject(formState) ||\n        Object.keys(formState).length >= Object.keys(_proxyFormState).length ||\n        Object.keys(formState).find((key) => _proxyFormState[key] ===\n            (!isRoot || VALIDATION_MODE.all)));\n};\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar shouldSubscribeByName = (name, signalName, exact) => !name ||\n    !signalName ||\n    name === signalName ||\n    convertToArrayPayload(name).some((currentName) => currentName &&\n        (exact\n            ? currentName === signalName\n            : currentName.startsWith(signalName) ||\n                signalName.startsWith(currentName)));\n\nfunction useSubscribe(props) {\n    const _props = React.useRef(props);\n    _props.current = props;\n    React.useEffect(() => {\n        const subscription = !props.disabled &&\n            _props.current.subject &&\n            _props.current.subject.subscribe({\n                next: _props.current.next,\n            });\n        return () => {\n            subscription && subscription.unsubscribe();\n        };\n    }, [props.disabled]);\n}\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n *   const { register, handleSubmit, control } = useForm({\n *     defaultValues: {\n *     firstName: \"firstName\"\n *   }});\n *   const { dirtyFields } = useFormState({\n *     control\n *   });\n *   const onSubmit = (data) => console.log(data);\n *\n *   return (\n *     <form onSubmit={handleSubmit(onSubmit)}>\n *       <input {...register(\"firstName\")} placeholder=\"First Name\" />\n *       {dirtyFields.firstName && <p>Field is dirty.</p>}\n *       <input type=\"submit\" />\n *     </form>\n *   );\n * }\n * ```\n */\nfunction useFormState(props) {\n    const methods = useFormContext();\n    const { control = methods.control, disabled, name, exact } = props || {};\n    const [formState, updateFormState] = React.useState(control._formState);\n    const _mounted = React.useRef(true);\n    const _localProxyFormState = React.useRef({\n        isDirty: false,\n        isLoading: false,\n        dirtyFields: false,\n        touchedFields: false,\n        validatingFields: false,\n        isValidating: false,\n        isValid: false,\n        errors: false,\n    });\n    const _name = React.useRef(name);\n    _name.current = name;\n    useSubscribe({\n        disabled,\n        next: (value) => _mounted.current &&\n            shouldSubscribeByName(_name.current, value.name, exact) &&\n            shouldRenderFormState(value, _localProxyFormState.current, control._updateFormState) &&\n            updateFormState({\n                ...control._formState,\n                ...value,\n            }),\n        subject: control._subjects.state,\n    });\n    React.useEffect(() => {\n        _mounted.current = true;\n        _localProxyFormState.current.isValid && control._updateValid(true);\n        return () => {\n            _mounted.current = false;\n        };\n    }, [control]);\n    return getProxyFormState(formState, control, _localProxyFormState.current, false);\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) => {\n    if (isString(names)) {\n        isGlobal && _names.watch.add(names);\n        return get(formValues, names, defaultValue);\n    }\n    if (Array.isArray(names)) {\n        return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName), get(formValues, fieldName)));\n    }\n    isGlobal && (_names.watchAll = true);\n    return formValues;\n};\n\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n *   name: \"fieldName\"\n *   control,\n * })\n * ```\n */\nfunction useWatch(props) {\n    const methods = useFormContext();\n    const { control = methods.control, name, defaultValue, disabled, exact, } = props || {};\n    const _name = React.useRef(name);\n    _name.current = name;\n    useSubscribe({\n        disabled,\n        subject: control._subjects.values,\n        next: (formState) => {\n            if (shouldSubscribeByName(_name.current, formState.name, exact)) {\n                updateValue(cloneObject(generateWatchOutput(_name.current, control._names, formState.values || control._formValues, false, defaultValue)));\n            }\n        },\n    });\n    const [value, updateValue] = React.useState(control._getWatch(name, defaultValue));\n    React.useEffect(() => control._removeUnmounted());\n    return value;\n}\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n *   const { field, fieldState, formState } = useController(props);\n *   return (\n *     <div>\n *       <input {...field} placeholder={props.name} />\n *       <p>{fieldState.isTouched && \"Touched\"}</p>\n *       <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n *     </div>\n *   );\n * }\n * ```\n */\nfunction useController(props) {\n    const methods = useFormContext();\n    const { name, disabled, control = methods.control, shouldUnregister } = props;\n    const isArrayField = isNameInFieldArray(control._names.array, name);\n    const value = useWatch({\n        control,\n        name,\n        defaultValue: get(control._formValues, name, get(control._defaultValues, name, props.defaultValue)),\n        exact: true,\n    });\n    const formState = useFormState({\n        control,\n        name,\n        exact: true,\n    });\n    const _registerProps = React.useRef(control.register(name, {\n        ...props.rules,\n        value,\n        ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n    }));\n    React.useEffect(() => {\n        const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\n        const updateMounted = (name, value) => {\n            const field = get(control._fields, name);\n            if (field && field._f) {\n                field._f.mount = value;\n            }\n        };\n        updateMounted(name, true);\n        if (_shouldUnregisterField) {\n            const value = cloneObject(get(control._options.defaultValues, name));\n            set(control._defaultValues, name, value);\n            if (isUndefined(get(control._formValues, name))) {\n                set(control._formValues, name, value);\n            }\n        }\n        return () => {\n            (isArrayField\n                ? _shouldUnregisterField && !control._state.action\n                : _shouldUnregisterField)\n                ? control.unregister(name)\n                : updateMounted(name, false);\n        };\n    }, [name, control, isArrayField, shouldUnregister]);\n    React.useEffect(() => {\n        if (get(control._fields, name)) {\n            control._updateDisabledField({\n                disabled,\n                fields: control._fields,\n                name,\n                value: get(control._fields, name)._f.value,\n            });\n        }\n    }, [disabled, name, control]);\n    return {\n        field: {\n            name,\n            value,\n            ...(isBoolean(disabled) || formState.disabled\n                ? { disabled: formState.disabled || disabled }\n                : {}),\n            onChange: React.useCallback((event) => _registerProps.current.onChange({\n                target: {\n                    value: getEventValue(event),\n                    name: name,\n                },\n                type: EVENTS.CHANGE,\n            }), [name]),\n            onBlur: React.useCallback(() => _registerProps.current.onBlur({\n                target: {\n                    value: get(control._formValues, name),\n                    name: name,\n                },\n                type: EVENTS.BLUR,\n            }), [name, control]),\n            ref: React.useCallback((elm) => {\n                const field = get(control._fields, name);\n                if (field && elm) {\n                    field._f.ref = {\n                        focus: () => elm.focus(),\n                        select: () => elm.select(),\n                        setCustomValidity: (message) => elm.setCustomValidity(message),\n                        reportValidity: () => elm.reportValidity(),\n                    };\n                }\n            }, [control._fields, name]),\n        },\n        formState,\n        fieldState: Object.defineProperties({}, {\n            invalid: {\n                enumerable: true,\n                get: () => !!get(formState.errors, name),\n            },\n            isDirty: {\n                enumerable: true,\n                get: () => !!get(formState.dirtyFields, name),\n            },\n            isTouched: {\n                enumerable: true,\n                get: () => !!get(formState.touchedFields, name),\n            },\n            isValidating: {\n                enumerable: true,\n                get: () => !!get(formState.validatingFields, name),\n            },\n            error: {\n                enumerable: true,\n                get: () => get(formState.errors, name),\n            },\n        }),\n    };\n}\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n *   const { control } = useForm<FormValues>({\n *     defaultValues: {\n *       test: \"\"\n *     }\n *   });\n *\n *   return (\n *     <form>\n *       <Controller\n *         control={control}\n *         name=\"test\"\n *         render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (\n *           <>\n *             <input\n *               onChange={onChange} // send value to hook form\n *               onBlur={onBlur} // notify when input is touched\n *               value={value} // return updated value\n *               ref={ref} // set ref for focus management\n *             />\n *             <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n *             <p>{fieldState.isTouched ? \"touched\" : \"\"}</p>\n *           </>\n *         )}\n *       />\n *     </form>\n *   );\n * }\n * ```\n */\nconst Controller = (props) => props.render(useController(props));\n\nconst POST_REQUEST = 'post';\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n *   const { control, formState: { errors } } = useForm();\n *\n *   return (\n *     <Form action=\"/api\" control={control}>\n *       <input {...register(\"name\")} />\n *       <p>{errors?.root?.server && 'Server error'}</p>\n *       <button>Submit</button>\n *     </Form>\n *   );\n * }\n * ```\n */\nfunction Form(props) {\n    const methods = useFormContext();\n    const [mounted, setMounted] = React.useState(false);\n    const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;\n    const submit = async (event) => {\n        let hasError = false;\n        let type = '';\n        await control.handleSubmit(async (data) => {\n            const formData = new FormData();\n            let formDataJson = '';\n            try {\n                formDataJson = JSON.stringify(data);\n            }\n            catch (_a) { }\n            for (const name of control._names.mount) {\n                formData.append(name, get(data, name));\n            }\n            if (onSubmit) {\n                await onSubmit({\n                    data,\n                    event,\n                    method,\n                    formData,\n                    formDataJson,\n                });\n            }\n            if (action) {\n                try {\n                    const shouldStringifySubmissionData = [\n                        headers && headers['Content-Type'],\n                        encType,\n                    ].some((value) => value && value.includes('json'));\n                    const response = await fetch(action, {\n                        method,\n                        headers: {\n                            ...headers,\n                            ...(encType ? { 'Content-Type': encType } : {}),\n                        },\n                        body: shouldStringifySubmissionData ? formDataJson : formData,\n                    });\n                    if (response &&\n                        (validateStatus\n                            ? !validateStatus(response.status)\n                            : response.status < 200 || response.status >= 300)) {\n                        hasError = true;\n                        onError && onError({ response });\n                        type = String(response.status);\n                    }\n                    else {\n                        onSuccess && onSuccess({ response });\n                    }\n                }\n                catch (error) {\n                    hasError = true;\n                    onError && onError({ error });\n                }\n            }\n        })(event);\n        if (hasError && props.control) {\n            props.control._subjects.state.next({\n                isSubmitSuccessful: false,\n            });\n            props.control.setError('root.server', {\n                type,\n            });\n        }\n    };\n    React.useEffect(() => {\n        setMounted(true);\n    }, []);\n    return render ? (React.createElement(React.Fragment, null, render({\n        submit,\n    }))) : (React.createElement(\"form\", { noValidate: mounted, action: action, method: method, encType: encType, onSubmit: submit, ...rest }, children));\n}\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\n    ? {\n        ...errors[name],\n        types: {\n            ...(errors[name] && errors[name].types ? errors[name].types : {}),\n            [type]: message || true,\n        },\n    }\n    : {};\n\nvar generateId = () => {\n    const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n        const r = (Math.random() * 16 + d) % 16 | 0;\n        return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n    });\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\n    ? options.focusName ||\n        `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n    : '';\n\nvar getValidationModes = (mode) => ({\n    isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n    isOnBlur: mode === VALIDATION_MODE.onBlur,\n    isOnChange: mode === VALIDATION_MODE.onChange,\n    isOnAll: mode === VALIDATION_MODE.all,\n    isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n\nvar isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&\n    (_names.watchAll ||\n        _names.watch.has(name) ||\n        [..._names.watch].some((watchName) => name.startsWith(watchName) &&\n            /^\\.\\w+/.test(name.slice(watchName.length))));\n\nconst iterateFieldsByAction = (fields, action, fieldsNames, abortEarly) => {\n    for (const key of fieldsNames || Object.keys(fields)) {\n        const field = get(fields, key);\n        if (field) {\n            const { _f, ...currentField } = field;\n            if (_f) {\n                if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n                    return true;\n                }\n                else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n                    return true;\n                }\n                else {\n                    if (iterateFieldsByAction(currentField, action)) {\n                        break;\n                    }\n                }\n            }\n            else if (isObject(currentField)) {\n                if (iterateFieldsByAction(currentField, action)) {\n                    break;\n                }\n            }\n        }\n    }\n    return;\n};\n\nvar updateFieldArrayRootError = (errors, error, name) => {\n    const fieldArrayErrors = convertToArrayPayload(get(errors, name));\n    set(fieldArrayErrors, 'root', error[name]);\n    set(errors, name, fieldArrayErrors);\n    return errors;\n};\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar isHTMLElement = (value) => {\n    if (!isWeb) {\n        return false;\n    }\n    const owner = value ? value.ownerDocument : 0;\n    return (value instanceof\n        (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement));\n};\n\nvar isMessage = (value) => isString(value);\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRegex = (value) => value instanceof RegExp;\n\nconst defaultResult = {\n    value: false,\n    isValid: false,\n};\nconst validResult = { value: true, isValid: true };\nvar getCheckboxValue = (options) => {\n    if (Array.isArray(options)) {\n        if (options.length > 1) {\n            const values = options\n                .filter((option) => option && option.checked && !option.disabled)\n                .map((option) => option.value);\n            return { value: values, isValid: !!values.length };\n        }\n        return options[0].checked && !options[0].disabled\n            ? // @ts-expect-error expected to work in the browser\n                options[0].attributes && !isUndefined(options[0].attributes.value)\n                    ? isUndefined(options[0].value) || options[0].value === ''\n                        ? validResult\n                        : { value: options[0].value, isValid: true }\n                    : validResult\n            : defaultResult;\n    }\n    return defaultResult;\n};\n\nconst defaultReturn = {\n    isValid: false,\n    value: null,\n};\nvar getRadioValue = (options) => Array.isArray(options)\n    ? options.reduce((previous, option) => option && option.checked && !option.disabled\n        ? {\n            isValid: true,\n            value: option.value,\n        }\n        : previous, defaultReturn)\n    : defaultReturn;\n\nfunction getValidateError(result, ref, type = 'validate') {\n    if (isMessage(result) ||\n        (Array.isArray(result) && result.every(isMessage)) ||\n        (isBoolean(result) && !result)) {\n        return {\n            type,\n            message: isMessage(result) ? result : '',\n            ref,\n        };\n    }\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\n    ? validationData\n    : {\n        value: validationData,\n        message: '',\n    };\n\nvar validateField = async (field, formValues, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\n    const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, disabled, } = field._f;\n    const inputValue = get(formValues, name);\n    if (!mount || disabled) {\n        return {};\n    }\n    const inputRef = refs ? refs[0] : ref;\n    const setCustomValidity = (message) => {\n        if (shouldUseNativeValidation && inputRef.reportValidity) {\n            inputRef.setCustomValidity(isBoolean(message) ? '' : message || '');\n            inputRef.reportValidity();\n        }\n    };\n    const error = {};\n    const isRadio = isRadioInput(ref);\n    const isCheckBox = isCheckBoxInput(ref);\n    const isRadioOrCheckbox = isRadio || isCheckBox;\n    const isEmpty = ((valueAsNumber || isFileInput(ref)) &&\n        isUndefined(ref.value) &&\n        isUndefined(inputValue)) ||\n        (isHTMLElement(ref) && ref.value === '') ||\n        inputValue === '' ||\n        (Array.isArray(inputValue) && !inputValue.length);\n    const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\n    const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\n        const message = exceedMax ? maxLengthMessage : minLengthMessage;\n        error[name] = {\n            type: exceedMax ? maxType : minType,\n            message,\n            ref,\n            ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n        };\n    };\n    if (isFieldArray\n        ? !Array.isArray(inputValue) || !inputValue.length\n        : required &&\n            ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n                (isBoolean(inputValue) && !inputValue) ||\n                (isCheckBox && !getCheckboxValue(refs).isValid) ||\n                (isRadio && !getRadioValue(refs).isValid))) {\n        const { value, message } = isMessage(required)\n            ? { value: !!required, message: required }\n            : getValueAndMessage(required);\n        if (value) {\n            error[name] = {\n                type: INPUT_VALIDATION_RULES.required,\n                message,\n                ref: inputRef,\n                ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n            };\n            if (!validateAllFieldCriteria) {\n                setCustomValidity(message);\n                return error;\n            }\n        }\n    }\n    if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n        let exceedMax;\n        let exceedMin;\n        const maxOutput = getValueAndMessage(max);\n        const minOutput = getValueAndMessage(min);\n        if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\n            const valueNumber = ref.valueAsNumber ||\n                (inputValue ? +inputValue : inputValue);\n            if (!isNullOrUndefined(maxOutput.value)) {\n                exceedMax = valueNumber > maxOutput.value;\n            }\n            if (!isNullOrUndefined(minOutput.value)) {\n                exceedMin = valueNumber < minOutput.value;\n            }\n        }\n        else {\n            const valueDate = ref.valueAsDate || new Date(inputValue);\n            const convertTimeToDate = (time) => new Date(new Date().toDateString() + ' ' + time);\n            const isTime = ref.type == 'time';\n            const isWeek = ref.type == 'week';\n            if (isString(maxOutput.value) && inputValue) {\n                exceedMax = isTime\n                    ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n                    : isWeek\n                        ? inputValue > maxOutput.value\n                        : valueDate > new Date(maxOutput.value);\n            }\n            if (isString(minOutput.value) && inputValue) {\n                exceedMin = isTime\n                    ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n                    : isWeek\n                        ? inputValue < minOutput.value\n                        : valueDate < new Date(minOutput.value);\n            }\n        }\n        if (exceedMax || exceedMin) {\n            getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\n            if (!validateAllFieldCriteria) {\n                setCustomValidity(error[name].message);\n                return error;\n            }\n        }\n    }\n    if ((maxLength || minLength) &&\n        !isEmpty &&\n        (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\n        const maxLengthOutput = getValueAndMessage(maxLength);\n        const minLengthOutput = getValueAndMessage(minLength);\n        const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\n            inputValue.length > +maxLengthOutput.value;\n        const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\n            inputValue.length < +minLengthOutput.value;\n        if (exceedMax || exceedMin) {\n            getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\n            if (!validateAllFieldCriteria) {\n                setCustomValidity(error[name].message);\n                return error;\n            }\n        }\n    }\n    if (pattern && !isEmpty && isString(inputValue)) {\n        const { value: patternValue, message } = getValueAndMessage(pattern);\n        if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n            error[name] = {\n                type: INPUT_VALIDATION_RULES.pattern,\n                message,\n                ref,\n                ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n            };\n            if (!validateAllFieldCriteria) {\n                setCustomValidity(message);\n                return error;\n            }\n        }\n    }\n    if (validate) {\n        if (isFunction(validate)) {\n            const result = await validate(inputValue, formValues);\n            const validateError = getValidateError(result, inputRef);\n            if (validateError) {\n                error[name] = {\n                    ...validateError,\n                    ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\n                };\n                if (!validateAllFieldCriteria) {\n                    setCustomValidity(validateError.message);\n                    return error;\n                }\n            }\n        }\n        else if (isObject(validate)) {\n            let validationResult = {};\n            for (const key in validate) {\n                if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n                    break;\n                }\n                const validateError = getValidateError(await validate[key](inputValue, formValues), inputRef, key);\n                if (validateError) {\n                    validationResult = {\n                        ...validateError,\n                        ...appendErrorsCurry(key, validateError.message),\n                    };\n                    setCustomValidity(validateError.message);\n                    if (validateAllFieldCriteria) {\n                        error[name] = validationResult;\n                    }\n                }\n            }\n            if (!isEmptyObject(validationResult)) {\n                error[name] = {\n                    ref: inputRef,\n                    ...validationResult,\n                };\n                if (!validateAllFieldCriteria) {\n                    return error;\n                }\n            }\n        }\n    }\n    setCustomValidity(true);\n    return error;\n};\n\nvar appendAt = (data, value) => [\n    ...data,\n    ...convertToArrayPayload(value),\n];\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nfunction insert(data, index, value) {\n    return [\n        ...data.slice(0, index),\n        ...convertToArrayPayload(value),\n        ...data.slice(index),\n    ];\n}\n\nvar moveArrayAt = (data, from, to) => {\n    if (!Array.isArray(data)) {\n        return [];\n    }\n    if (isUndefined(data[to])) {\n        data[to] = undefined;\n    }\n    data.splice(to, 0, data.splice(from, 1)[0]);\n    return data;\n};\n\nvar prependAt = (data, value) => [\n    ...convertToArrayPayload(value),\n    ...convertToArrayPayload(data),\n];\n\nfunction removeAtIndexes(data, indexes) {\n    let i = 0;\n    const temp = [...data];\n    for (const index of indexes) {\n        temp.splice(index - i, 1);\n        i++;\n    }\n    return compact(temp).length ? temp : [];\n}\nvar removeArrayAt = (data, index) => isUndefined(index)\n    ? []\n    : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\n    [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n\nfunction baseGet(object, updatePath) {\n    const length = updatePath.slice(0, -1).length;\n    let index = 0;\n    while (index < length) {\n        object = isUndefined(object) ? index++ : object[updatePath[index++]];\n    }\n    return object;\n}\nfunction isEmptyArray(obj) {\n    for (const key in obj) {\n        if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n            return false;\n        }\n    }\n    return true;\n}\nfunction unset(object, path) {\n    const paths = Array.isArray(path)\n        ? path\n        : isKey(path)\n            ? [path]\n            : stringToPath(path);\n    const childObject = paths.length === 1 ? object : baseGet(object, paths);\n    const index = paths.length - 1;\n    const key = paths[index];\n    if (childObject) {\n        delete childObject[key];\n    }\n    if (index !== 0 &&\n        ((isObject(childObject) && isEmptyObject(childObject)) ||\n            (Array.isArray(childObject) && isEmptyArray(childObject)))) {\n        unset(object, paths.slice(0, -1));\n    }\n    return object;\n}\n\nvar updateAt = (fieldValues, index, value) => {\n    fieldValues[index] = value;\n    return fieldValues;\n};\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n *   const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n *     defaultValues: {\n *       test: []\n *     }\n *   });\n *   const { fields, append } = useFieldArray({\n *     control,\n *     name: \"test\"\n *   });\n *\n *   return (\n *     <form onSubmit={handleSubmit(data => console.log(data))}>\n *       {fields.map((item, index) => (\n *          <input key={item.id} {...register(`test.${index}.firstName`)}  />\n *       ))}\n *       <button type=\"button\" onClick={() => append({ firstName: \"bill\" })}>\n *         append\n *       </button>\n *       <input type=\"submit\" />\n *     </form>\n *   );\n * }\n * ```\n */\nfunction useFieldArray(props) {\n    const methods = useFormContext();\n    const { control = methods.control, name, keyName = 'id', shouldUnregister, } = props;\n    const [fields, setFields] = React.useState(control._getFieldArray(name));\n    const ids = React.useRef(control._getFieldArray(name).map(generateId));\n    const _fieldIds = React.useRef(fields);\n    const _name = React.useRef(name);\n    const _actioned = React.useRef(false);\n    _name.current = name;\n    _fieldIds.current = fields;\n    control._names.array.add(name);\n    props.rules &&\n        control.register(name, props.rules);\n    useSubscribe({\n        next: ({ values, name: fieldArrayName, }) => {\n            if (fieldArrayName === _name.current || !fieldArrayName) {\n                const fieldValues = get(values, _name.current);\n                if (Array.isArray(fieldValues)) {\n                    setFields(fieldValues);\n                    ids.current = fieldValues.map(generateId);\n                }\n            }\n        },\n        subject: control._subjects.array,\n    });\n    const updateValues = React.useCallback((updatedFieldArrayValues) => {\n        _actioned.current = true;\n        control._updateFieldArray(name, updatedFieldArrayValues);\n    }, [control, name]);\n    const append = (value, options) => {\n        const appendValue = convertToArrayPayload(cloneObject(value));\n        const updatedFieldArrayValues = appendAt(control._getFieldArray(name), appendValue);\n        control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\n        ids.current = appendAt(ids.current, appendValue.map(generateId));\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._updateFieldArray(name, updatedFieldArrayValues, appendAt, {\n            argA: fillEmptyArray(value),\n        });\n    };\n    const prepend = (value, options) => {\n        const prependValue = convertToArrayPayload(cloneObject(value));\n        const updatedFieldArrayValues = prependAt(control._getFieldArray(name), prependValue);\n        control._names.focus = getFocusFieldName(name, 0, options);\n        ids.current = prependAt(ids.current, prependValue.map(generateId));\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._updateFieldArray(name, updatedFieldArrayValues, prependAt, {\n            argA: fillEmptyArray(value),\n        });\n    };\n    const remove = (index) => {\n        const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\n        ids.current = removeArrayAt(ids.current, index);\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._updateFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n            argA: index,\n        });\n    };\n    const insert$1 = (index, value, options) => {\n        const insertValue = convertToArrayPayload(cloneObject(value));\n        const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\n        control._names.focus = getFocusFieldName(name, index, options);\n        ids.current = insert(ids.current, index, insertValue.map(generateId));\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._updateFieldArray(name, updatedFieldArrayValues, insert, {\n            argA: index,\n            argB: fillEmptyArray(value),\n        });\n    };\n    const swap = (indexA, indexB) => {\n        const updatedFieldArrayValues = control._getFieldArray(name);\n        swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n        swapArrayAt(ids.current, indexA, indexB);\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._updateFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\n            argA: indexA,\n            argB: indexB,\n        }, false);\n    };\n    const move = (from, to) => {\n        const updatedFieldArrayValues = control._getFieldArray(name);\n        moveArrayAt(updatedFieldArrayValues, from, to);\n        moveArrayAt(ids.current, from, to);\n        updateValues(updatedFieldArrayValues);\n        setFields(updatedFieldArrayValues);\n        control._updateFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\n            argA: from,\n            argB: to,\n        }, false);\n    };\n    const update = (index, value) => {\n        const updateValue = cloneObject(value);\n        const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\n        ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\n        updateValues(updatedFieldArrayValues);\n        setFields([...updatedFieldArrayValues]);\n        control._updateFieldArray(name, updatedFieldArrayValues, updateAt, {\n            argA: index,\n            argB: updateValue,\n        }, true, false);\n    };\n    const replace = (value) => {\n        const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n        ids.current = updatedFieldArrayValues.map(generateId);\n        updateValues([...updatedFieldArrayValues]);\n        setFields([...updatedFieldArrayValues]);\n        control._updateFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\n    };\n    React.useEffect(() => {\n        control._state.action = false;\n        isWatched(name, control._names) &&\n            control._subjects.state.next({\n                ...control._formState,\n            });\n        if (_actioned.current &&\n            (!getValidationModes(control._options.mode).isOnSubmit ||\n                control._formState.isSubmitted)) {\n            if (control._options.resolver) {\n                control._executeSchema([name]).then((result) => {\n                    const error = get(result.errors, name);\n                    const existingError = get(control._formState.errors, name);\n                    if (existingError\n                        ? (!error && existingError.type) ||\n                            (error &&\n                                (existingError.type !== error.type ||\n                                    existingError.message !== error.message))\n                        : error && error.type) {\n                        error\n                            ? set(control._formState.errors, name, error)\n                            : unset(control._formState.errors, name);\n                        control._subjects.state.next({\n                            errors: control._formState.errors,\n                        });\n                    }\n                });\n            }\n            else {\n                const field = get(control._fields, name);\n                if (field &&\n                    field._f &&\n                    !(getValidationModes(control._options.reValidateMode).isOnSubmit &&\n                        getValidationModes(control._options.mode).isOnSubmit)) {\n                    validateField(field, control._formValues, control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\n                        control._subjects.state.next({\n                            errors: updateFieldArrayRootError(control._formState.errors, error, name),\n                        }));\n                }\n            }\n        }\n        control._subjects.values.next({\n            name,\n            values: { ...control._formValues },\n        });\n        control._names.focus &&\n            iterateFieldsByAction(control._fields, (ref, key) => {\n                if (control._names.focus &&\n                    key.startsWith(control._names.focus) &&\n                    ref.focus) {\n                    ref.focus();\n                    return 1;\n                }\n                return;\n            });\n        control._names.focus = '';\n        control._updateValid();\n        _actioned.current = false;\n    }, [fields, name, control]);\n    React.useEffect(() => {\n        !get(control._formValues, name) && control._updateFieldArray(name);\n        return () => {\n            (control._options.shouldUnregister || shouldUnregister) &&\n                control.unregister(name);\n        };\n    }, [name, control, keyName, shouldUnregister]);\n    return {\n        swap: React.useCallback(swap, [updateValues, name, control]),\n        move: React.useCallback(move, [updateValues, name, control]),\n        prepend: React.useCallback(prepend, [updateValues, name, control]),\n        append: React.useCallback(append, [updateValues, name, control]),\n        remove: React.useCallback(remove, [updateValues, name, control]),\n        insert: React.useCallback(insert$1, [updateValues, name, control]),\n        update: React.useCallback(update, [updateValues, name, control]),\n        replace: React.useCallback(replace, [updateValues, name, control]),\n        fields: React.useMemo(() => fields.map((field, index) => ({\n            ...field,\n            [keyName]: ids.current[index] || generateId(),\n        })), [fields, keyName]),\n    };\n}\n\nvar createSubject = () => {\n    let _observers = [];\n    const next = (value) => {\n        for (const observer of _observers) {\n            observer.next && observer.next(value);\n        }\n    };\n    const subscribe = (observer) => {\n        _observers.push(observer);\n        return {\n            unsubscribe: () => {\n                _observers = _observers.filter((o) => o !== observer);\n            },\n        };\n    };\n    const unsubscribe = () => {\n        _observers = [];\n    };\n    return {\n        get observers() {\n            return _observers;\n        },\n        next,\n        subscribe,\n        unsubscribe,\n    };\n};\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepEqual(object1, object2) {\n    if (isPrimitive(object1) || isPrimitive(object2)) {\n        return object1 === object2;\n    }\n    if (isDateObject(object1) && isDateObject(object2)) {\n        return object1.getTime() === object2.getTime();\n    }\n    const keys1 = Object.keys(object1);\n    const keys2 = Object.keys(object2);\n    if (keys1.length !== keys2.length) {\n        return false;\n    }\n    for (const key of keys1) {\n        const val1 = object1[key];\n        if (!keys2.includes(key)) {\n            return false;\n        }\n        if (key !== 'ref') {\n            const val2 = object2[key];\n            if ((isDateObject(val1) && isDateObject(val2)) ||\n                (isObject(val1) && isObject(val2)) ||\n                (Array.isArray(val1) && Array.isArray(val2))\n                ? !deepEqual(val1, val2)\n                : val1 !== val2) {\n                return false;\n            }\n        }\n    }\n    return true;\n}\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nvar objectHasFunction = (data) => {\n    for (const key in data) {\n        if (isFunction(data[key])) {\n            return true;\n        }\n    }\n    return false;\n};\n\nfunction markFieldsDirty(data, fields = {}) {\n    const isParentNodeArray = Array.isArray(data);\n    if (isObject(data) || isParentNodeArray) {\n        for (const key in data) {\n            if (Array.isArray(data[key]) ||\n                (isObject(data[key]) && !objectHasFunction(data[key]))) {\n                fields[key] = Array.isArray(data[key]) ? [] : {};\n                markFieldsDirty(data[key], fields[key]);\n            }\n            else if (!isNullOrUndefined(data[key])) {\n                fields[key] = true;\n            }\n        }\n    }\n    return fields;\n}\nfunction getDirtyFieldsFromDefaultValues(data, formValues, dirtyFieldsFromValues) {\n    const isParentNodeArray = Array.isArray(data);\n    if (isObject(data) || isParentNodeArray) {\n        for (const key in data) {\n            if (Array.isArray(data[key]) ||\n                (isObject(data[key]) && !objectHasFunction(data[key]))) {\n                if (isUndefined(formValues) ||\n                    isPrimitive(dirtyFieldsFromValues[key])) {\n                    dirtyFieldsFromValues[key] = Array.isArray(data[key])\n                        ? markFieldsDirty(data[key], [])\n                        : { ...markFieldsDirty(data[key]) };\n                }\n                else {\n                    getDirtyFieldsFromDefaultValues(data[key], isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\n                }\n            }\n            else {\n                dirtyFieldsFromValues[key] = !deepEqual(data[key], formValues[key]);\n            }\n        }\n    }\n    return dirtyFieldsFromValues;\n}\nvar getDirtyFields = (defaultValues, formValues) => getDirtyFieldsFromDefaultValues(defaultValues, formValues, markFieldsDirty(formValues));\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\n    ? value\n    : valueAsNumber\n        ? value === ''\n            ? NaN\n            : value\n                ? +value\n                : value\n        : valueAsDate && isString(value)\n            ? new Date(value)\n            : setValueAs\n                ? setValueAs(value)\n                : value;\n\nfunction getFieldValue(_f) {\n    const ref = _f.ref;\n    if (_f.refs ? _f.refs.every((ref) => ref.disabled) : ref.disabled) {\n        return;\n    }\n    if (isFileInput(ref)) {\n        return ref.files;\n    }\n    if (isRadioInput(ref)) {\n        return getRadioValue(_f.refs).value;\n    }\n    if (isMultipleSelect(ref)) {\n        return [...ref.selectedOptions].map(({ value }) => value);\n    }\n    if (isCheckBoxInput(ref)) {\n        return getCheckboxValue(_f.refs).value;\n    }\n    return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\n    const fields = {};\n    for (const name of fieldsNames) {\n        const field = get(_fields, name);\n        field && set(fields, name, field._f);\n    }\n    return {\n        criteriaMode,\n        names: [...fieldsNames],\n        fields,\n        shouldUseNativeValidation,\n    };\n};\n\nvar getRuleValue = (rule) => isUndefined(rule)\n    ? rule\n    : isRegex(rule)\n        ? rule.source\n        : isObject(rule)\n            ? isRegex(rule.value)\n                ? rule.value.source\n                : rule.value\n            : rule;\n\nconst ASYNC_FUNCTION = 'AsyncFunction';\nvar hasPromiseValidation = (fieldReference) => (!fieldReference || !fieldReference.validate) &&\n    !!((isFunction(fieldReference.validate) &&\n        fieldReference.validate.constructor.name === ASYNC_FUNCTION) ||\n        (isObject(fieldReference.validate) &&\n            Object.values(fieldReference.validate).find((validateFunction) => validateFunction.constructor.name === ASYNC_FUNCTION)));\n\nvar hasValidation = (options) => options.mount &&\n    (options.required ||\n        options.min ||\n        options.max ||\n        options.maxLength ||\n        options.minLength ||\n        options.pattern ||\n        options.validate);\n\nfunction schemaErrorLookup(errors, _fields, name) {\n    const error = get(errors, name);\n    if (error || isKey(name)) {\n        return {\n            error,\n            name,\n        };\n    }\n    const names = name.split('.');\n    while (names.length) {\n        const fieldName = names.join('.');\n        const field = get(_fields, fieldName);\n        const foundError = get(errors, fieldName);\n        if (field && !Array.isArray(field) && name !== fieldName) {\n            return { name };\n        }\n        if (foundError && foundError.type) {\n            return {\n                name: fieldName,\n                error: foundError,\n            };\n        }\n        names.pop();\n    }\n    return {\n        name,\n    };\n}\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\n    if (mode.isOnAll) {\n        return false;\n    }\n    else if (!isSubmitted && mode.isOnTouch) {\n        return !(isTouched || isBlurEvent);\n    }\n    else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n        return !isBlurEvent;\n    }\n    else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n        return isBlurEvent;\n    }\n    return true;\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nconst defaultOptions = {\n    mode: VALIDATION_MODE.onSubmit,\n    reValidateMode: VALIDATION_MODE.onChange,\n    shouldFocusError: true,\n};\nfunction createFormControl(props = {}) {\n    let _options = {\n        ...defaultOptions,\n        ...props,\n    };\n    let _formState = {\n        submitCount: 0,\n        isDirty: false,\n        isLoading: isFunction(_options.defaultValues),\n        isValidating: false,\n        isSubmitted: false,\n        isSubmitting: false,\n        isSubmitSuccessful: false,\n        isValid: false,\n        touchedFields: {},\n        dirtyFields: {},\n        validatingFields: {},\n        errors: _options.errors || {},\n        disabled: _options.disabled || false,\n    };\n    let _fields = {};\n    let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values)\n        ? cloneObject(_options.defaultValues || _options.values) || {}\n        : {};\n    let _formValues = _options.shouldUnregister\n        ? {}\n        : cloneObject(_defaultValues);\n    let _state = {\n        action: false,\n        mount: false,\n        watch: false,\n    };\n    let _names = {\n        mount: new Set(),\n        unMount: new Set(),\n        array: new Set(),\n        watch: new Set(),\n    };\n    let delayErrorCallback;\n    let timer = 0;\n    const _proxyFormState = {\n        isDirty: false,\n        dirtyFields: false,\n        validatingFields: false,\n        touchedFields: false,\n        isValidating: false,\n        isValid: false,\n        errors: false,\n    };\n    const _subjects = {\n        values: createSubject(),\n        array: createSubject(),\n        state: createSubject(),\n    };\n    const validationModeBeforeSubmit = getValidationModes(_options.mode);\n    const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n    const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\n    const debounce = (callback) => (wait) => {\n        clearTimeout(timer);\n        timer = setTimeout(callback, wait);\n    };\n    const _updateValid = async (shouldUpdateValid) => {\n        if (_proxyFormState.isValid || shouldUpdateValid) {\n            const isValid = _options.resolver\n                ? isEmptyObject((await _executeSchema()).errors)\n                : await executeBuiltInValidation(_fields, true);\n            if (isValid !== _formState.isValid) {\n                _subjects.state.next({\n                    isValid,\n                });\n            }\n        }\n    };\n    const _updateIsValidating = (names, isValidating) => {\n        if (_proxyFormState.isValidating || _proxyFormState.validatingFields) {\n            (names || Array.from(_names.mount)).forEach((name) => {\n                if (name) {\n                    isValidating\n                        ? set(_formState.validatingFields, name, isValidating)\n                        : unset(_formState.validatingFields, name);\n                }\n            });\n            _subjects.state.next({\n                validatingFields: _formState.validatingFields,\n                isValidating: !isEmptyObject(_formState.validatingFields),\n            });\n        }\n    };\n    const _updateFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\n        if (args && method) {\n            _state.action = true;\n            if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n                const fieldValues = method(get(_fields, name), args.argA, args.argB);\n                shouldSetValues && set(_fields, name, fieldValues);\n            }\n            if (shouldUpdateFieldsAndState &&\n                Array.isArray(get(_formState.errors, name))) {\n                const errors = method(get(_formState.errors, name), args.argA, args.argB);\n                shouldSetValues && set(_formState.errors, name, errors);\n                unsetEmptyArray(_formState.errors, name);\n            }\n            if (_proxyFormState.touchedFields &&\n                shouldUpdateFieldsAndState &&\n                Array.isArray(get(_formState.touchedFields, name))) {\n                const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\n                shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n            }\n            if (_proxyFormState.dirtyFields) {\n                _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n            }\n            _subjects.state.next({\n                name,\n                isDirty: _getDirty(name, values),\n                dirtyFields: _formState.dirtyFields,\n                errors: _formState.errors,\n                isValid: _formState.isValid,\n            });\n        }\n        else {\n            set(_formValues, name, values);\n        }\n    };\n    const updateErrors = (name, error) => {\n        set(_formState.errors, name, error);\n        _subjects.state.next({\n            errors: _formState.errors,\n        });\n    };\n    const _setErrors = (errors) => {\n        _formState.errors = errors;\n        _subjects.state.next({\n            errors: _formState.errors,\n            isValid: false,\n        });\n    };\n    const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\n        const field = get(_fields, name);\n        if (field) {\n            const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\n            isUndefined(defaultValue) ||\n                (ref && ref.defaultChecked) ||\n                shouldSkipSetValueAs\n                ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\n                : setFieldValue(name, defaultValue);\n            _state.mount && _updateValid();\n        }\n    };\n    const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\n        let shouldUpdateField = false;\n        let isPreviousDirty = false;\n        const output = {\n            name,\n        };\n        const disabledField = !!(get(_fields, name) &&\n            get(_fields, name)._f &&\n            get(_fields, name)._f.disabled);\n        if (!isBlurEvent || shouldDirty) {\n            if (_proxyFormState.isDirty) {\n                isPreviousDirty = _formState.isDirty;\n                _formState.isDirty = output.isDirty = _getDirty();\n                shouldUpdateField = isPreviousDirty !== output.isDirty;\n            }\n            const isCurrentFieldPristine = disabledField || deepEqual(get(_defaultValues, name), fieldValue);\n            isPreviousDirty = !!(!disabledField && get(_formState.dirtyFields, name));\n            isCurrentFieldPristine || disabledField\n                ? unset(_formState.dirtyFields, name)\n                : set(_formState.dirtyFields, name, true);\n            output.dirtyFields = _formState.dirtyFields;\n            shouldUpdateField =\n                shouldUpdateField ||\n                    (_proxyFormState.dirtyFields &&\n                        isPreviousDirty !== !isCurrentFieldPristine);\n        }\n        if (isBlurEvent) {\n            const isPreviousFieldTouched = get(_formState.touchedFields, name);\n            if (!isPreviousFieldTouched) {\n                set(_formState.touchedFields, name, isBlurEvent);\n                output.touchedFields = _formState.touchedFields;\n                shouldUpdateField =\n                    shouldUpdateField ||\n                        (_proxyFormState.touchedFields &&\n                            isPreviousFieldTouched !== isBlurEvent);\n            }\n        }\n        shouldUpdateField && shouldRender && _subjects.state.next(output);\n        return shouldUpdateField ? output : {};\n    };\n    const shouldRenderByError = (name, isValid, error, fieldState) => {\n        const previousFieldError = get(_formState.errors, name);\n        const shouldUpdateValid = _proxyFormState.isValid &&\n            isBoolean(isValid) &&\n            _formState.isValid !== isValid;\n        if (props.delayError && error) {\n            delayErrorCallback = debounce(() => updateErrors(name, error));\n            delayErrorCallback(props.delayError);\n        }\n        else {\n            clearTimeout(timer);\n            delayErrorCallback = null;\n            error\n                ? set(_formState.errors, name, error)\n                : unset(_formState.errors, name);\n        }\n        if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n            !isEmptyObject(fieldState) ||\n            shouldUpdateValid) {\n            const updatedFormState = {\n                ...fieldState,\n                ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n                errors: _formState.errors,\n                name,\n            };\n            _formState = {\n                ..._formState,\n                ...updatedFormState,\n            };\n            _subjects.state.next(updatedFormState);\n        }\n    };\n    const _executeSchema = async (name) => {\n        _updateIsValidating(name, true);\n        const result = await _options.resolver(_formValues, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation));\n        _updateIsValidating(name);\n        return result;\n    };\n    const executeSchemaAndUpdateState = async (names) => {\n        const { errors } = await _executeSchema(names);\n        if (names) {\n            for (const name of names) {\n                const error = get(errors, name);\n                error\n                    ? set(_formState.errors, name, error)\n                    : unset(_formState.errors, name);\n            }\n        }\n        else {\n            _formState.errors = errors;\n        }\n        return errors;\n    };\n    const executeBuiltInValidation = async (fields, shouldOnlyCheckValid, context = {\n        valid: true,\n    }) => {\n        for (const name in fields) {\n            const field = fields[name];\n            if (field) {\n                const { _f, ...fieldValue } = field;\n                if (_f) {\n                    const isFieldArrayRoot = _names.array.has(_f.name);\n                    const isPromiseFunction = field._f && hasPromiseValidation(field._f);\n                    if (isPromiseFunction && _proxyFormState.validatingFields) {\n                        _updateIsValidating([name], true);\n                    }\n                    const fieldError = await validateField(field, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation && !shouldOnlyCheckValid, isFieldArrayRoot);\n                    if (isPromiseFunction && _proxyFormState.validatingFields) {\n                        _updateIsValidating([name]);\n                    }\n                    if (fieldError[_f.name]) {\n                        context.valid = false;\n                        if (shouldOnlyCheckValid) {\n                            break;\n                        }\n                    }\n                    !shouldOnlyCheckValid &&\n                        (get(fieldError, _f.name)\n                            ? isFieldArrayRoot\n                                ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\n                                : set(_formState.errors, _f.name, fieldError[_f.name])\n                            : unset(_formState.errors, _f.name));\n                }\n                !isEmptyObject(fieldValue) &&\n                    (await executeBuiltInValidation(fieldValue, shouldOnlyCheckValid, context));\n            }\n        }\n        return context.valid;\n    };\n    const _removeUnmounted = () => {\n        for (const name of _names.unMount) {\n            const field = get(_fields, name);\n            field &&\n                (field._f.refs\n                    ? field._f.refs.every((ref) => !live(ref))\n                    : !live(field._f.ref)) &&\n                unregister(name);\n        }\n        _names.unMount = new Set();\n    };\n    const _getDirty = (name, data) => (name && data && set(_formValues, name, data),\n        !deepEqual(getValues(), _defaultValues));\n    const _getWatch = (names, defaultValue, isGlobal) => generateWatchOutput(names, _names, {\n        ...(_state.mount\n            ? _formValues\n            : isUndefined(defaultValue)\n                ? _defaultValues\n                : isString(names)\n                    ? { [names]: defaultValue }\n                    : defaultValue),\n    }, isGlobal, defaultValue);\n    const _getFieldArray = (name) => compact(get(_state.mount ? _formValues : _defaultValues, name, props.shouldUnregister ? get(_defaultValues, name, []) : []));\n    const setFieldValue = (name, value, options = {}) => {\n        const field = get(_fields, name);\n        let fieldValue = value;\n        if (field) {\n            const fieldReference = field._f;\n            if (fieldReference) {\n                !fieldReference.disabled &&\n                    set(_formValues, name, getFieldValueAs(value, fieldReference));\n                fieldValue =\n                    isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n                        ? ''\n                        : value;\n                if (isMultipleSelect(fieldReference.ref)) {\n                    [...fieldReference.ref.options].forEach((optionRef) => (optionRef.selected = fieldValue.includes(optionRef.value)));\n                }\n                else if (fieldReference.refs) {\n                    if (isCheckBoxInput(fieldReference.ref)) {\n                        fieldReference.refs.length > 1\n                            ? fieldReference.refs.forEach((checkboxRef) => (!checkboxRef.defaultChecked || !checkboxRef.disabled) &&\n                                (checkboxRef.checked = Array.isArray(fieldValue)\n                                    ? !!fieldValue.find((data) => data === checkboxRef.value)\n                                    : fieldValue === checkboxRef.value))\n                            : fieldReference.refs[0] &&\n                                (fieldReference.refs[0].checked = !!fieldValue);\n                    }\n                    else {\n                        fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\n                    }\n                }\n                else if (isFileInput(fieldReference.ref)) {\n                    fieldReference.ref.value = '';\n                }\n                else {\n                    fieldReference.ref.value = fieldValue;\n                    if (!fieldReference.ref.type) {\n                        _subjects.values.next({\n                            name,\n                            values: { ..._formValues },\n                        });\n                    }\n                }\n            }\n        }\n        (options.shouldDirty || options.shouldTouch) &&\n            updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);\n        options.shouldValidate && trigger(name);\n    };\n    const setValues = (name, value, options) => {\n        for (const fieldKey in value) {\n            const fieldValue = value[fieldKey];\n            const fieldName = `${name}.${fieldKey}`;\n            const field = get(_fields, fieldName);\n            (_names.array.has(name) ||\n                !isPrimitive(fieldValue) ||\n                (field && !field._f)) &&\n                !isDateObject(fieldValue)\n                ? setValues(fieldName, fieldValue, options)\n                : setFieldValue(fieldName, fieldValue, options);\n        }\n    };\n    const setValue = (name, value, options = {}) => {\n        const field = get(_fields, name);\n        const isFieldArray = _names.array.has(name);\n        const cloneValue = cloneObject(value);\n        set(_formValues, name, cloneValue);\n        if (isFieldArray) {\n            _subjects.array.next({\n                name,\n                values: { ..._formValues },\n            });\n            if ((_proxyFormState.isDirty || _proxyFormState.dirtyFields) &&\n                options.shouldDirty) {\n                _subjects.state.next({\n                    name,\n                    dirtyFields: getDirtyFields(_defaultValues, _formValues),\n                    isDirty: _getDirty(name, cloneValue),\n                });\n            }\n        }\n        else {\n            field && !field._f && !isNullOrUndefined(cloneValue)\n                ? setValues(name, cloneValue, options)\n                : setFieldValue(name, cloneValue, options);\n        }\n        isWatched(name, _names) && _subjects.state.next({ ..._formState });\n        _subjects.values.next({\n            name: _state.mount ? name : undefined,\n            values: { ..._formValues },\n        });\n    };\n    const onChange = async (event) => {\n        _state.mount = true;\n        const target = event.target;\n        let name = target.name;\n        let isFieldValueUpdated = true;\n        const field = get(_fields, name);\n        const getCurrentFieldValue = () => target.type ? getFieldValue(field._f) : getEventValue(event);\n        const _updateIsFieldValueUpdated = (fieldValue) => {\n            isFieldValueUpdated =\n                Number.isNaN(fieldValue) ||\n                    deepEqual(fieldValue, get(_formValues, name, fieldValue));\n        };\n        if (field) {\n            let error;\n            let isValid;\n            const fieldValue = getCurrentFieldValue();\n            const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n            const shouldSkipValidation = (!hasValidation(field._f) &&\n                !_options.resolver &&\n                !get(_formState.errors, name) &&\n                !field._f.deps) ||\n                skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, validationModeAfterSubmit, validationModeBeforeSubmit);\n            const watched = isWatched(name, _names, isBlurEvent);\n            set(_formValues, name, fieldValue);\n            if (isBlurEvent) {\n                field._f.onBlur && field._f.onBlur(event);\n                delayErrorCallback && delayErrorCallback(0);\n            }\n            else if (field._f.onChange) {\n                field._f.onChange(event);\n            }\n            const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent, false);\n            const shouldRender = !isEmptyObject(fieldState) || watched;\n            !isBlurEvent &&\n                _subjects.values.next({\n                    name,\n                    type: event.type,\n                    values: { ..._formValues },\n                });\n            if (shouldSkipValidation) {\n                if (_proxyFormState.isValid) {\n                    if (props.mode === 'onBlur') {\n                        if (isBlurEvent) {\n                            _updateValid();\n                        }\n                    }\n                    else {\n                        _updateValid();\n                    }\n                }\n                return (shouldRender &&\n                    _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\n            }\n            !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n            if (_options.resolver) {\n                const { errors } = await _executeSchema([name]);\n                _updateIsFieldValueUpdated(fieldValue);\n                if (isFieldValueUpdated) {\n                    const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\n                    const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\n                    error = errorLookupResult.error;\n                    name = errorLookupResult.name;\n                    isValid = isEmptyObject(errors);\n                }\n            }\n            else {\n                _updateIsValidating([name], true);\n                error = (await validateField(field, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\n                _updateIsValidating([name]);\n                _updateIsFieldValueUpdated(fieldValue);\n                if (isFieldValueUpdated) {\n                    if (error) {\n                        isValid = false;\n                    }\n                    else if (_proxyFormState.isValid) {\n                        isValid = await executeBuiltInValidation(_fields, true);\n                    }\n                }\n            }\n            if (isFieldValueUpdated) {\n                field._f.deps &&\n                    trigger(field._f.deps);\n                shouldRenderByError(name, isValid, error, fieldState);\n            }\n        }\n    };\n    const _focusInput = (ref, key) => {\n        if (get(_formState.errors, key) && ref.focus) {\n            ref.focus();\n            return 1;\n        }\n        return;\n    };\n    const trigger = async (name, options = {}) => {\n        let isValid;\n        let validationResult;\n        const fieldNames = convertToArrayPayload(name);\n        if (_options.resolver) {\n            const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\n            isValid = isEmptyObject(errors);\n            validationResult = name\n                ? !fieldNames.some((name) => get(errors, name))\n                : isValid;\n        }\n        else if (name) {\n            validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\n                const field = get(_fields, fieldName);\n                return await executeBuiltInValidation(field && field._f ? { [fieldName]: field } : field);\n            }))).every(Boolean);\n            !(!validationResult && !_formState.isValid) && _updateValid();\n        }\n        else {\n            validationResult = isValid = await executeBuiltInValidation(_fields);\n        }\n        _subjects.state.next({\n            ...(!isString(name) ||\n                (_proxyFormState.isValid && isValid !== _formState.isValid)\n                ? {}\n                : { name }),\n            ...(_options.resolver || !name ? { isValid } : {}),\n            errors: _formState.errors,\n        });\n        options.shouldFocus &&\n            !validationResult &&\n            iterateFieldsByAction(_fields, _focusInput, name ? fieldNames : _names.mount);\n        return validationResult;\n    };\n    const getValues = (fieldNames) => {\n        const values = {\n            ...(_state.mount ? _formValues : _defaultValues),\n        };\n        return isUndefined(fieldNames)\n            ? values\n            : isString(fieldNames)\n                ? get(values, fieldNames)\n                : fieldNames.map((name) => get(values, name));\n    };\n    const getFieldState = (name, formState) => ({\n        invalid: !!get((formState || _formState).errors, name),\n        isDirty: !!get((formState || _formState).dirtyFields, name),\n        error: get((formState || _formState).errors, name),\n        isValidating: !!get(_formState.validatingFields, name),\n        isTouched: !!get((formState || _formState).touchedFields, name),\n    });\n    const clearErrors = (name) => {\n        name &&\n            convertToArrayPayload(name).forEach((inputName) => unset(_formState.errors, inputName));\n        _subjects.state.next({\n            errors: name ? _formState.errors : {},\n        });\n    };\n    const setError = (name, error, options) => {\n        const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n        const currentError = get(_formState.errors, name) || {};\n        // Don't override existing error messages elsewhere in the object tree.\n        const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;\n        set(_formState.errors, name, {\n            ...restOfErrorTree,\n            ...error,\n            ref,\n        });\n        _subjects.state.next({\n            name,\n            errors: _formState.errors,\n            isValid: false,\n        });\n        options && options.shouldFocus && ref && ref.focus && ref.focus();\n    };\n    const watch = (name, defaultValue) => isFunction(name)\n        ? _subjects.values.subscribe({\n            next: (payload) => name(_getWatch(undefined, defaultValue), payload),\n        })\n        : _getWatch(name, defaultValue, true);\n    const unregister = (name, options = {}) => {\n        for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n            _names.mount.delete(fieldName);\n            _names.array.delete(fieldName);\n            if (!options.keepValue) {\n                unset(_fields, fieldName);\n                unset(_formValues, fieldName);\n            }\n            !options.keepError && unset(_formState.errors, fieldName);\n            !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n            !options.keepTouched && unset(_formState.touchedFields, fieldName);\n            !options.keepIsValidating &&\n                unset(_formState.validatingFields, fieldName);\n            !_options.shouldUnregister &&\n                !options.keepDefaultValue &&\n                unset(_defaultValues, fieldName);\n        }\n        _subjects.values.next({\n            values: { ..._formValues },\n        });\n        _subjects.state.next({\n            ..._formState,\n            ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n        });\n        !options.keepIsValid && _updateValid();\n    };\n    const _updateDisabledField = ({ disabled, name, field, fields, value, }) => {\n        if ((isBoolean(disabled) && _state.mount) || !!disabled) {\n            const inputValue = disabled\n                ? undefined\n                : isUndefined(value)\n                    ? getFieldValue(field ? field._f : get(fields, name)._f)\n                    : value;\n            set(_formValues, name, inputValue);\n            updateTouchAndDirty(name, inputValue, false, false, true);\n        }\n    };\n    const register = (name, options = {}) => {\n        let field = get(_fields, name);\n        const disabledIsDefined = isBoolean(options.disabled) || isBoolean(props.disabled);\n        set(_fields, name, {\n            ...(field || {}),\n            _f: {\n                ...(field && field._f ? field._f : { ref: { name } }),\n                name,\n                mount: true,\n                ...options,\n            },\n        });\n        _names.mount.add(name);\n        if (field) {\n            _updateDisabledField({\n                field,\n                disabled: isBoolean(options.disabled)\n                    ? options.disabled\n                    : props.disabled,\n                name,\n                value: options.value,\n            });\n        }\n        else {\n            updateValidAndValue(name, true, options.value);\n        }\n        return {\n            ...(disabledIsDefined\n                ? { disabled: options.disabled || props.disabled }\n                : {}),\n            ...(_options.progressive\n                ? {\n                    required: !!options.required,\n                    min: getRuleValue(options.min),\n                    max: getRuleValue(options.max),\n                    minLength: getRuleValue(options.minLength),\n                    maxLength: getRuleValue(options.maxLength),\n                    pattern: getRuleValue(options.pattern),\n                }\n                : {}),\n            name,\n            onChange,\n            onBlur: onChange,\n            ref: (ref) => {\n                if (ref) {\n                    register(name, options);\n                    field = get(_fields, name);\n                    const fieldRef = isUndefined(ref.value)\n                        ? ref.querySelectorAll\n                            ? ref.querySelectorAll('input,select,textarea')[0] || ref\n                            : ref\n                        : ref;\n                    const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n                    const refs = field._f.refs || [];\n                    if (radioOrCheckbox\n                        ? refs.find((option) => option === fieldRef)\n                        : fieldRef === field._f.ref) {\n                        return;\n                    }\n                    set(_fields, name, {\n                        _f: {\n                            ...field._f,\n                            ...(radioOrCheckbox\n                                ? {\n                                    refs: [\n                                        ...refs.filter(live),\n                                        fieldRef,\n                                        ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n                                    ],\n                                    ref: { type: fieldRef.type, name },\n                                }\n                                : { ref: fieldRef }),\n                        },\n                    });\n                    updateValidAndValue(name, false, undefined, fieldRef);\n                }\n                else {\n                    field = get(_fields, name, {});\n                    if (field._f) {\n                        field._f.mount = false;\n                    }\n                    (_options.shouldUnregister || options.shouldUnregister) &&\n                        !(isNameInFieldArray(_names.array, name) && _state.action) &&\n                        _names.unMount.add(name);\n                }\n            },\n        };\n    };\n    const _focusError = () => _options.shouldFocusError &&\n        iterateFieldsByAction(_fields, _focusInput, _names.mount);\n    const _disableForm = (disabled) => {\n        if (isBoolean(disabled)) {\n            _subjects.state.next({ disabled });\n            iterateFieldsByAction(_fields, (ref, name) => {\n                const currentField = get(_fields, name);\n                if (currentField) {\n                    ref.disabled = currentField._f.disabled || disabled;\n                    if (Array.isArray(currentField._f.refs)) {\n                        currentField._f.refs.forEach((inputRef) => {\n                            inputRef.disabled = currentField._f.disabled || disabled;\n                        });\n                    }\n                }\n            }, 0, false);\n        }\n    };\n    const handleSubmit = (onValid, onInvalid) => async (e) => {\n        let onValidError = undefined;\n        if (e) {\n            e.preventDefault && e.preventDefault();\n            e.persist && e.persist();\n        }\n        let fieldValues = cloneObject(_formValues);\n        _subjects.state.next({\n            isSubmitting: true,\n        });\n        if (_options.resolver) {\n            const { errors, values } = await _executeSchema();\n            _formState.errors = errors;\n            fieldValues = values;\n        }\n        else {\n            await executeBuiltInValidation(_fields);\n        }\n        unset(_formState.errors, 'root');\n        if (isEmptyObject(_formState.errors)) {\n            _subjects.state.next({\n                errors: {},\n            });\n            try {\n                await onValid(fieldValues, e);\n            }\n            catch (error) {\n                onValidError = error;\n            }\n        }\n        else {\n            if (onInvalid) {\n                await onInvalid({ ..._formState.errors }, e);\n            }\n            _focusError();\n            setTimeout(_focusError);\n        }\n        _subjects.state.next({\n            isSubmitted: true,\n            isSubmitting: false,\n            isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n            submitCount: _formState.submitCount + 1,\n            errors: _formState.errors,\n        });\n        if (onValidError) {\n            throw onValidError;\n        }\n    };\n    const resetField = (name, options = {}) => {\n        if (get(_fields, name)) {\n            if (isUndefined(options.defaultValue)) {\n                setValue(name, cloneObject(get(_defaultValues, name)));\n            }\n            else {\n                setValue(name, options.defaultValue);\n                set(_defaultValues, name, cloneObject(options.defaultValue));\n            }\n            if (!options.keepTouched) {\n                unset(_formState.touchedFields, name);\n            }\n            if (!options.keepDirty) {\n                unset(_formState.dirtyFields, name);\n                _formState.isDirty = options.defaultValue\n                    ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n                    : _getDirty();\n            }\n            if (!options.keepError) {\n                unset(_formState.errors, name);\n                _proxyFormState.isValid && _updateValid();\n            }\n            _subjects.state.next({ ..._formState });\n        }\n    };\n    const _reset = (formValues, keepStateOptions = {}) => {\n        const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n        const cloneUpdatedValues = cloneObject(updatedValues);\n        const isEmptyResetValues = isEmptyObject(formValues);\n        const values = isEmptyResetValues ? _defaultValues : cloneUpdatedValues;\n        if (!keepStateOptions.keepDefaultValues) {\n            _defaultValues = updatedValues;\n        }\n        if (!keepStateOptions.keepValues) {\n            if (keepStateOptions.keepDirtyValues) {\n                for (const fieldName of _names.mount) {\n                    get(_formState.dirtyFields, fieldName)\n                        ? set(values, fieldName, get(_formValues, fieldName))\n                        : setValue(fieldName, get(values, fieldName));\n                }\n            }\n            else {\n                if (isWeb && isUndefined(formValues)) {\n                    for (const name of _names.mount) {\n                        const field = get(_fields, name);\n                        if (field && field._f) {\n                            const fieldReference = Array.isArray(field._f.refs)\n                                ? field._f.refs[0]\n                                : field._f.ref;\n                            if (isHTMLElement(fieldReference)) {\n                                const form = fieldReference.closest('form');\n                                if (form) {\n                                    form.reset();\n                                    break;\n                                }\n                            }\n                        }\n                    }\n                }\n                _fields = {};\n            }\n            _formValues = props.shouldUnregister\n                ? keepStateOptions.keepDefaultValues\n                    ? cloneObject(_defaultValues)\n                    : {}\n                : cloneObject(values);\n            _subjects.array.next({\n                values: { ...values },\n            });\n            _subjects.values.next({\n                values: { ...values },\n            });\n        }\n        _names = {\n            mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n            unMount: new Set(),\n            array: new Set(),\n            watch: new Set(),\n            watchAll: false,\n            focus: '',\n        };\n        _state.mount =\n            !_proxyFormState.isValid ||\n                !!keepStateOptions.keepIsValid ||\n                !!keepStateOptions.keepDirtyValues;\n        _state.watch = !!props.shouldUnregister;\n        _subjects.state.next({\n            submitCount: keepStateOptions.keepSubmitCount\n                ? _formState.submitCount\n                : 0,\n            isDirty: isEmptyResetValues\n                ? false\n                : keepStateOptions.keepDirty\n                    ? _formState.isDirty\n                    : !!(keepStateOptions.keepDefaultValues &&\n                        !deepEqual(formValues, _defaultValues)),\n            isSubmitted: keepStateOptions.keepIsSubmitted\n                ? _formState.isSubmitted\n                : false,\n            dirtyFields: isEmptyResetValues\n                ? {}\n                : keepStateOptions.keepDirtyValues\n                    ? keepStateOptions.keepDefaultValues && _formValues\n                        ? getDirtyFields(_defaultValues, _formValues)\n                        : _formState.dirtyFields\n                    : keepStateOptions.keepDefaultValues && formValues\n                        ? getDirtyFields(_defaultValues, formValues)\n                        : keepStateOptions.keepDirty\n                            ? _formState.dirtyFields\n                            : {},\n            touchedFields: keepStateOptions.keepTouched\n                ? _formState.touchedFields\n                : {},\n            errors: keepStateOptions.keepErrors ? _formState.errors : {},\n            isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n                ? _formState.isSubmitSuccessful\n                : false,\n            isSubmitting: false,\n        });\n    };\n    const reset = (formValues, keepStateOptions) => _reset(isFunction(formValues)\n        ? formValues(_formValues)\n        : formValues, keepStateOptions);\n    const setFocus = (name, options = {}) => {\n        const field = get(_fields, name);\n        const fieldReference = field && field._f;\n        if (fieldReference) {\n            const fieldRef = fieldReference.refs\n                ? fieldReference.refs[0]\n                : fieldReference.ref;\n            if (fieldRef.focus) {\n                fieldRef.focus();\n                options.shouldSelect && fieldRef.select();\n            }\n        }\n    };\n    const _updateFormState = (updatedFormState) => {\n        _formState = {\n            ..._formState,\n            ...updatedFormState,\n        };\n    };\n    const _resetDefaultValues = () => isFunction(_options.defaultValues) &&\n        _options.defaultValues().then((values) => {\n            reset(values, _options.resetOptions);\n            _subjects.state.next({\n                isLoading: false,\n            });\n        });\n    return {\n        control: {\n            register,\n            unregister,\n            getFieldState,\n            handleSubmit,\n            setError,\n            _executeSchema,\n            _getWatch,\n            _getDirty,\n            _updateValid,\n            _removeUnmounted,\n            _updateFieldArray,\n            _updateDisabledField,\n            _getFieldArray,\n            _reset,\n            _resetDefaultValues,\n            _updateFormState,\n            _disableForm,\n            _subjects,\n            _proxyFormState,\n            _setErrors,\n            get _fields() {\n                return _fields;\n            },\n            get _formValues() {\n                return _formValues;\n            },\n            get _state() {\n                return _state;\n            },\n            set _state(value) {\n                _state = value;\n            },\n            get _defaultValues() {\n                return _defaultValues;\n            },\n            get _names() {\n                return _names;\n            },\n            set _names(value) {\n                _names = value;\n            },\n            get _formState() {\n                return _formState;\n            },\n            set _formState(value) {\n                _formState = value;\n            },\n            get _options() {\n                return _options;\n            },\n            set _options(value) {\n                _options = {\n                    ..._options,\n                    ...value,\n                };\n            },\n        },\n        trigger,\n        register,\n        handleSubmit,\n        watch,\n        setValue,\n        getValues,\n        reset,\n        resetField,\n        clearErrors,\n        unregister,\n        setError,\n        setFocus,\n        getFieldState,\n    };\n}\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n *   const { register, handleSubmit, watch, formState: { errors } } = useForm();\n *   const onSubmit = data => console.log(data);\n *\n *   console.log(watch(\"example\"));\n *\n *   return (\n *     <form onSubmit={handleSubmit(onSubmit)}>\n *       <input defaultValue=\"test\" {...register(\"example\")} />\n *       <input {...register(\"exampleRequired\", { required: true })} />\n *       {errors.exampleRequired && <span>This field is required</span>}\n *       <button>Submit</button>\n *     </form>\n *   );\n * }\n * ```\n */\nfunction useForm(props = {}) {\n    const _formControl = React.useRef();\n    const _values = React.useRef();\n    const [formState, updateFormState] = React.useState({\n        isDirty: false,\n        isValidating: false,\n        isLoading: isFunction(props.defaultValues),\n        isSubmitted: false,\n        isSubmitting: false,\n        isSubmitSuccessful: false,\n        isValid: false,\n        submitCount: 0,\n        dirtyFields: {},\n        touchedFields: {},\n        validatingFields: {},\n        errors: props.errors || {},\n        disabled: props.disabled || false,\n        defaultValues: isFunction(props.defaultValues)\n            ? undefined\n            : props.defaultValues,\n    });\n    if (!_formControl.current) {\n        _formControl.current = {\n            ...createFormControl(props),\n            formState,\n        };\n    }\n    const control = _formControl.current.control;\n    control._options = props;\n    useSubscribe({\n        subject: control._subjects.state,\n        next: (value) => {\n            if (shouldRenderFormState(value, control._proxyFormState, control._updateFormState, true)) {\n                updateFormState({ ...control._formState });\n            }\n        },\n    });\n    React.useEffect(() => control._disableForm(props.disabled), [control, props.disabled]);\n    React.useEffect(() => {\n        if (control._proxyFormState.isDirty) {\n            const isDirty = control._getDirty();\n            if (isDirty !== formState.isDirty) {\n                control._subjects.state.next({\n                    isDirty,\n                });\n            }\n        }\n    }, [control, formState.isDirty]);\n    React.useEffect(() => {\n        if (props.values && !deepEqual(props.values, _values.current)) {\n            control._reset(props.values, control._options.resetOptions);\n            _values.current = props.values;\n            updateFormState((state) => ({ ...state }));\n        }\n        else {\n            control._resetDefaultValues();\n        }\n    }, [props.values, control]);\n    React.useEffect(() => {\n        if (props.errors) {\n            control._setErrors(props.errors);\n        }\n    }, [props.errors, control]);\n    React.useEffect(() => {\n        if (!control._state.mount) {\n            control._updateValid();\n            control._state.mount = true;\n        }\n        if (control._state.watch) {\n            control._state.watch = false;\n            control._subjects.state.next({ ...control._formState });\n        }\n        control._removeUnmounted();\n    });\n    React.useEffect(() => {\n        props.shouldUnregister &&\n            control._subjects.values.next({\n                values: control._getWatch(),\n            });\n    }, [props.shouldUnregister, control]);\n    _formControl.current.formState = getProxyFormState(formState, control);\n    return _formControl.current;\n}\n\nexport { Controller, Form, FormProvider, appendErrors, get, set, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch };\n//# sourceMappingURL=index.esm.mjs.map\n","\"use client\";\n\n// packages/react/label/src/Label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n  return /* @__PURE__ */ jsx(\n    Primitive.label,\n    {\n      ...props,\n      ref: forwardedRef,\n      onMouseDown: (event) => {\n        const target = event.target;\n        if (target.closest(\"button, input, select, textarea\")) return;\n        props.onMouseDown?.(event);\n        if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n      }\n    }\n  );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n  Label,\n  Root\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst labelVariants = cva(\n  \"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n)\n\nconst Label = React.forwardRef<\n  React.ElementRef<typeof LabelPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> &\n    VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n  <LabelPrimitive.Root\n    ref={ref}\n    className={cn(labelVariants(), className)}\n    {...props}\n  />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport {\n  Controller,\n  ControllerProps,\n  FieldPath,\n  FieldValues,\n  FormProvider,\n  useFormContext,\n} from \"react-hook-form\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"@/components/ui/label\"\n\nconst Form = FormProvider\n\ntype FormFieldContextValue<\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> = {\n  name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue>(\n  {} as FormFieldContextValue\n)\n\nconst FormField = <\n  TFieldValues extends FieldValues = FieldValues,\n  TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n  ...props\n}: ControllerProps<TFieldValues, TName>) => {\n  return (\n    <FormFieldContext.Provider value={{ name: props.name }}>\n      <Controller {...props} />\n    </FormFieldContext.Provider>\n  )\n}\n\nconst useFormField = () => {\n  const fieldContext = React.useContext(FormFieldContext)\n  const itemContext = React.useContext(FormItemContext)\n  const { getFieldState, formState } = useFormContext()\n\n  const fieldState = getFieldState(fieldContext.name, formState)\n\n  if (!fieldContext) {\n    throw new Error(\"useFormField should be used within <FormField>\")\n  }\n\n  const { id } = itemContext\n\n  return {\n    id,\n    name: fieldContext.name,\n    formItemId: `${id}-form-item`,\n    formDescriptionId: `${id}-form-item-description`,\n    formMessageId: `${id}-form-item-message`,\n    ...fieldState,\n  }\n}\n\ntype FormItemContextValue = {\n  id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue>(\n  {} as FormItemContextValue\n)\n\nconst FormItem = React.forwardRef<\n  HTMLDivElement,\n  React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => {\n  const id = React.useId()\n\n  return (\n    <FormItemContext.Provider value={{ id }}>\n      <div ref={ref} className={cn(\"space-y-2\", className)} {...props} />\n    </FormItemContext.Provider>\n  )\n})\nFormItem.displayName = \"FormItem\"\n\nconst FormLabel = React.forwardRef<\n  React.ElementRef<typeof LabelPrimitive.Root>,\n  React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root>\n>(({ className, ...props }, ref) => {\n  const { error, formItemId } = useFormField()\n\n  return (\n    <Label\n      ref={ref}\n      className={cn(error && \"text-destructive\", className)}\n      htmlFor={formItemId}\n      {...props}\n    />\n  )\n})\nFormLabel.displayName = \"FormLabel\"\n\nconst FormControl = React.forwardRef<\n  React.ElementRef<typeof Slot>,\n  React.ComponentPropsWithoutRef<typeof Slot>\n>(({ ...props }, ref) => {\n  const { error, formItemId, formDescriptionId, formMessageId } = useFormField()\n\n  return (\n    <Slot\n      ref={ref}\n      id={formItemId}\n      aria-describedby={\n        !error\n          ? `${formDescriptionId}`\n          : `${formDescriptionId} ${formMessageId}`\n      }\n      aria-invalid={!!error}\n      {...props}\n    />\n  )\n})\nFormControl.displayName = \"FormControl\"\n\nconst FormDescription = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => {\n  const { formDescriptionId } = useFormField()\n\n  return (\n    <p\n      ref={ref}\n      id={formDescriptionId}\n      className={cn(\"text-sm text-muted-foreground\", className)}\n      {...props}\n    />\n  )\n})\nFormDescription.displayName = \"FormDescription\"\n\nconst FormMessage = React.forwardRef<\n  HTMLParagraphElement,\n  React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, children, ...props }, ref) => {\n  const { error, formMessageId } = useFormField()\n  const body = error ? String(error?.message) : children\n\n  if (!body) {\n    return null\n  }\n\n  return (\n    <p\n      ref={ref}\n      id={formMessageId}\n      className={cn(\"text-sm font-medium text-destructive\", className)}\n      {...props}\n    >\n      {body}\n    </p>\n  )\n})\nFormMessage.displayName = \"FormMessage\"\n\nexport {\n  useFormField,\n  Form,\n  FormItem,\n  FormLabel,\n  FormControl,\n  FormDescription,\n  FormMessage,\n  FormField,\n}\n","import{get as t,set as e}from\"react-hook-form\";const s=(e,s,o)=>{if(e&&\"reportValidity\"in e){const r=t(o,s);e.setCustomValidity(r&&r.message||\"\"),e.reportValidity()}},o=(t,e)=>{for(const o in e.fields){const r=e.fields[o];r&&r.ref&&\"reportValidity\"in r.ref?s(r.ref,o,t):r.refs&&r.refs.forEach(e=>s(e,o,t))}},r=(s,r)=>{r.shouldUseNativeValidation&&o(s,r);const f={};for(const o in s){const n=t(r.fields,o),a=Object.assign(s[o]||{},{ref:n&&n.ref});if(i(r.names||Object.keys(s),o)){const s=Object.assign({},t(f,o));e(s,\"root\",a),e(f,o,s)}else e(f,o,a)}return f},i=(t,e)=>t.some(t=>t.startsWith(e+\".\"));export{r as toNestErrors,o as validateFieldsNatively};\n//# sourceMappingURL=resolvers.mjs.map\n","import{validateFieldsNatively as r,toNestErrors as e}from\"@hookform/resolvers\";import{appendErrors as o}from\"react-hook-form\";var n=function(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"unionErrors\"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"unionErrors\"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n},t=function(o,t,s){return void 0===s&&(s={}),function(i,a,u){try{return Promise.resolve(function(e,n){try{var a=Promise.resolve(o[\"sync\"===s.mode?\"parse\":\"parseAsync\"](i,t)).then(function(e){return u.shouldUseNativeValidation&&r({},u),{errors:{},values:s.raw?i:e}})}catch(r){return n(r)}return a&&a.then?a.then(void 0,n):a}(0,function(r){if(function(r){return Array.isArray(null==r?void 0:r.errors)}(r))return{values:{},errors:e(n(r.errors,!u.shouldUseNativeValidation&&\"all\"===u.criteriaMode),u)};throw r}))}catch(r){return Promise.reject(r)}}};export{t as zodResolver};\n//# sourceMappingURL=zod.module.js.map\n","var util;\n(function (util) {\n    util.assertEqual = (val) => val;\n    function assertIs(_arg) { }\n    util.assertIs = assertIs;\n    function assertNever(_x) {\n        throw new Error();\n    }\n    util.assertNever = assertNever;\n    util.arrayToEnum = (items) => {\n        const obj = {};\n        for (const item of items) {\n            obj[item] = item;\n        }\n        return obj;\n    };\n    util.getValidEnumValues = (obj) => {\n        const validKeys = util.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== \"number\");\n        const filtered = {};\n        for (const k of validKeys) {\n            filtered[k] = obj[k];\n        }\n        return util.objectValues(filtered);\n    };\n    util.objectValues = (obj) => {\n        return util.objectKeys(obj).map(function (e) {\n            return obj[e];\n        });\n    };\n    util.objectKeys = typeof Object.keys === \"function\" // eslint-disable-line ban/ban\n        ? (obj) => Object.keys(obj) // eslint-disable-line ban/ban\n        : (object) => {\n            const keys = [];\n            for (const key in object) {\n                if (Object.prototype.hasOwnProperty.call(object, key)) {\n                    keys.push(key);\n                }\n            }\n            return keys;\n        };\n    util.find = (arr, checker) => {\n        for (const item of arr) {\n            if (checker(item))\n                return item;\n        }\n        return undefined;\n    };\n    util.isInteger = typeof Number.isInteger === \"function\"\n        ? (val) => Number.isInteger(val) // eslint-disable-line ban/ban\n        : (val) => typeof val === \"number\" && isFinite(val) && Math.floor(val) === val;\n    function joinValues(array, separator = \" | \") {\n        return array\n            .map((val) => (typeof val === \"string\" ? `'${val}'` : val))\n            .join(separator);\n    }\n    util.joinValues = joinValues;\n    util.jsonStringifyReplacer = (_, value) => {\n        if (typeof value === \"bigint\") {\n            return value.toString();\n        }\n        return value;\n    };\n})(util || (util = {}));\nvar objectUtil;\n(function (objectUtil) {\n    objectUtil.mergeShapes = (first, second) => {\n        return {\n            ...first,\n            ...second, // second overwrites first\n        };\n    };\n})(objectUtil || (objectUtil = {}));\nconst ZodParsedType = util.arrayToEnum([\n    \"string\",\n    \"nan\",\n    \"number\",\n    \"integer\",\n    \"float\",\n    \"boolean\",\n    \"date\",\n    \"bigint\",\n    \"symbol\",\n    \"function\",\n    \"undefined\",\n    \"null\",\n    \"array\",\n    \"object\",\n    \"unknown\",\n    \"promise\",\n    \"void\",\n    \"never\",\n    \"map\",\n    \"set\",\n]);\nconst getParsedType = (data) => {\n    const t = typeof data;\n    switch (t) {\n        case \"undefined\":\n            return ZodParsedType.undefined;\n        case \"string\":\n            return ZodParsedType.string;\n        case \"number\":\n            return isNaN(data) ? ZodParsedType.nan : ZodParsedType.number;\n        case \"boolean\":\n            return ZodParsedType.boolean;\n        case \"function\":\n            return ZodParsedType.function;\n        case \"bigint\":\n            return ZodParsedType.bigint;\n        case \"symbol\":\n            return ZodParsedType.symbol;\n        case \"object\":\n            if (Array.isArray(data)) {\n                return ZodParsedType.array;\n            }\n            if (data === null) {\n                return ZodParsedType.null;\n            }\n            if (data.then &&\n                typeof data.then === \"function\" &&\n                data.catch &&\n                typeof data.catch === \"function\") {\n                return ZodParsedType.promise;\n            }\n            if (typeof Map !== \"undefined\" && data instanceof Map) {\n                return ZodParsedType.map;\n            }\n            if (typeof Set !== \"undefined\" && data instanceof Set) {\n                return ZodParsedType.set;\n            }\n            if (typeof Date !== \"undefined\" && data instanceof Date) {\n                return ZodParsedType.date;\n            }\n            return ZodParsedType.object;\n        default:\n            return ZodParsedType.unknown;\n    }\n};\n\nconst ZodIssueCode = util.arrayToEnum([\n    \"invalid_type\",\n    \"invalid_literal\",\n    \"custom\",\n    \"invalid_union\",\n    \"invalid_union_discriminator\",\n    \"invalid_enum_value\",\n    \"unrecognized_keys\",\n    \"invalid_arguments\",\n    \"invalid_return_type\",\n    \"invalid_date\",\n    \"invalid_string\",\n    \"too_small\",\n    \"too_big\",\n    \"invalid_intersection_types\",\n    \"not_multiple_of\",\n    \"not_finite\",\n]);\nconst quotelessJson = (obj) => {\n    const json = JSON.stringify(obj, null, 2);\n    return json.replace(/\"([^\"]+)\":/g, \"$1:\");\n};\nclass ZodError extends Error {\n    constructor(issues) {\n        super();\n        this.issues = [];\n        this.addIssue = (sub) => {\n            this.issues = [...this.issues, sub];\n        };\n        this.addIssues = (subs = []) => {\n            this.issues = [...this.issues, ...subs];\n        };\n        const actualProto = new.target.prototype;\n        if (Object.setPrototypeOf) {\n            // eslint-disable-next-line ban/ban\n            Object.setPrototypeOf(this, actualProto);\n        }\n        else {\n            this.__proto__ = actualProto;\n        }\n        this.name = \"ZodError\";\n        this.issues = issues;\n    }\n    get errors() {\n        return this.issues;\n    }\n    format(_mapper) {\n        const mapper = _mapper ||\n            function (issue) {\n                return issue.message;\n            };\n        const fieldErrors = { _errors: [] };\n        const processError = (error) => {\n            for (const issue of error.issues) {\n                if (issue.code === \"invalid_union\") {\n                    issue.unionErrors.map(processError);\n                }\n                else if (issue.code === \"invalid_return_type\") {\n                    processError(issue.returnTypeError);\n                }\n                else if (issue.code === \"invalid_arguments\") {\n                    processError(issue.argumentsError);\n                }\n                else if (issue.path.length === 0) {\n                    fieldErrors._errors.push(mapper(issue));\n                }\n                else {\n                    let curr = fieldErrors;\n                    let i = 0;\n                    while (i < issue.path.length) {\n                        const el = issue.path[i];\n                        const terminal = i === issue.path.length - 1;\n                        if (!terminal) {\n                            curr[el] = curr[el] || { _errors: [] };\n                            // if (typeof el === \"string\") {\n                            //   curr[el] = curr[el] || { _errors: [] };\n                            // } else if (typeof el === \"number\") {\n                            //   const errorArray: any = [];\n                            //   errorArray._errors = [];\n                            //   curr[el] = curr[el] || errorArray;\n                            // }\n                        }\n                        else {\n                            curr[el] = curr[el] || { _errors: [] };\n                            curr[el]._errors.push(mapper(issue));\n                        }\n                        curr = curr[el];\n                        i++;\n                    }\n                }\n            }\n        };\n        processError(this);\n        return fieldErrors;\n    }\n    static assert(value) {\n        if (!(value instanceof ZodError)) {\n            throw new Error(`Not a ZodError: ${value}`);\n        }\n    }\n    toString() {\n        return this.message;\n    }\n    get message() {\n        return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);\n    }\n    get isEmpty() {\n        return this.issues.length === 0;\n    }\n    flatten(mapper = (issue) => issue.message) {\n        const fieldErrors = {};\n        const formErrors = [];\n        for (const sub of this.issues) {\n            if (sub.path.length > 0) {\n                fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n                fieldErrors[sub.path[0]].push(mapper(sub));\n            }\n            else {\n                formErrors.push(mapper(sub));\n            }\n        }\n        return { formErrors, fieldErrors };\n    }\n    get formErrors() {\n        return this.flatten();\n    }\n}\nZodError.create = (issues) => {\n    const error = new ZodError(issues);\n    return error;\n};\n\nconst errorMap = (issue, _ctx) => {\n    let message;\n    switch (issue.code) {\n        case ZodIssueCode.invalid_type:\n            if (issue.received === ZodParsedType.undefined) {\n                message = \"Required\";\n            }\n            else {\n                message = `Expected ${issue.expected}, received ${issue.received}`;\n            }\n            break;\n        case ZodIssueCode.invalid_literal:\n            message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;\n            break;\n        case ZodIssueCode.unrecognized_keys:\n            message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, \", \")}`;\n            break;\n        case ZodIssueCode.invalid_union:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_union_discriminator:\n            message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;\n            break;\n        case ZodIssueCode.invalid_enum_value:\n            message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;\n            break;\n        case ZodIssueCode.invalid_arguments:\n            message = `Invalid function arguments`;\n            break;\n        case ZodIssueCode.invalid_return_type:\n            message = `Invalid function return type`;\n            break;\n        case ZodIssueCode.invalid_date:\n            message = `Invalid date`;\n            break;\n        case ZodIssueCode.invalid_string:\n            if (typeof issue.validation === \"object\") {\n                if (\"includes\" in issue.validation) {\n                    message = `Invalid input: must include \"${issue.validation.includes}\"`;\n                    if (typeof issue.validation.position === \"number\") {\n                        message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;\n                    }\n                }\n                else if (\"startsWith\" in issue.validation) {\n                    message = `Invalid input: must start with \"${issue.validation.startsWith}\"`;\n                }\n                else if (\"endsWith\" in issue.validation) {\n                    message = `Invalid input: must end with \"${issue.validation.endsWith}\"`;\n                }\n                else {\n                    util.assertNever(issue.validation);\n                }\n            }\n            else if (issue.validation !== \"regex\") {\n                message = `Invalid ${issue.validation}`;\n            }\n            else {\n                message = \"Invalid\";\n            }\n            break;\n        case ZodIssueCode.too_small:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? \"exactly\" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact\n                    ? `exactly equal to `\n                    : issue.inclusive\n                        ? `greater than or equal to `\n                        : `greater than `}${issue.minimum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact\n                    ? `exactly equal to `\n                    : issue.inclusive\n                        ? `greater than or equal to `\n                        : `greater than `}${new Date(Number(issue.minimum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.too_big:\n            if (issue.type === \"array\")\n                message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;\n            else if (issue.type === \"string\")\n                message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;\n            else if (issue.type === \"number\")\n                message = `Number must be ${issue.exact\n                    ? `exactly`\n                    : issue.inclusive\n                        ? `less than or equal to`\n                        : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"bigint\")\n                message = `BigInt must be ${issue.exact\n                    ? `exactly`\n                    : issue.inclusive\n                        ? `less than or equal to`\n                        : `less than`} ${issue.maximum}`;\n            else if (issue.type === \"date\")\n                message = `Date must be ${issue.exact\n                    ? `exactly`\n                    : issue.inclusive\n                        ? `smaller than or equal to`\n                        : `smaller than`} ${new Date(Number(issue.maximum))}`;\n            else\n                message = \"Invalid input\";\n            break;\n        case ZodIssueCode.custom:\n            message = `Invalid input`;\n            break;\n        case ZodIssueCode.invalid_intersection_types:\n            message = `Intersection results could not be merged`;\n            break;\n        case ZodIssueCode.not_multiple_of:\n            message = `Number must be a multiple of ${issue.multipleOf}`;\n            break;\n        case ZodIssueCode.not_finite:\n            message = \"Number must be finite\";\n            break;\n        default:\n            message = _ctx.defaultError;\n            util.assertNever(issue);\n    }\n    return { message };\n};\n\nlet overrideErrorMap = errorMap;\nfunction setErrorMap(map) {\n    overrideErrorMap = map;\n}\nfunction getErrorMap() {\n    return overrideErrorMap;\n}\n\nconst makeIssue = (params) => {\n    const { data, path, errorMaps, issueData } = params;\n    const fullPath = [...path, ...(issueData.path || [])];\n    const fullIssue = {\n        ...issueData,\n        path: fullPath,\n    };\n    if (issueData.message !== undefined) {\n        return {\n            ...issueData,\n            path: fullPath,\n            message: issueData.message,\n        };\n    }\n    let errorMessage = \"\";\n    const maps = errorMaps\n        .filter((m) => !!m)\n        .slice()\n        .reverse();\n    for (const map of maps) {\n        errorMessage = map(fullIssue, { data, defaultError: errorMessage }).message;\n    }\n    return {\n        ...issueData,\n        path: fullPath,\n        message: errorMessage,\n    };\n};\nconst EMPTY_PATH = [];\nfunction addIssueToContext(ctx, issueData) {\n    const overrideMap = getErrorMap();\n    const issue = makeIssue({\n        issueData: issueData,\n        data: ctx.data,\n        path: ctx.path,\n        errorMaps: [\n            ctx.common.contextualErrorMap,\n            ctx.schemaErrorMap,\n            overrideMap,\n            overrideMap === errorMap ? undefined : errorMap, // then global default map\n        ].filter((x) => !!x),\n    });\n    ctx.common.issues.push(issue);\n}\nclass ParseStatus {\n    constructor() {\n        this.value = \"valid\";\n    }\n    dirty() {\n        if (this.value === \"valid\")\n            this.value = \"dirty\";\n    }\n    abort() {\n        if (this.value !== \"aborted\")\n            this.value = \"aborted\";\n    }\n    static mergeArray(status, results) {\n        const arrayValue = [];\n        for (const s of results) {\n            if (s.status === \"aborted\")\n                return INVALID;\n            if (s.status === \"dirty\")\n                status.dirty();\n            arrayValue.push(s.value);\n        }\n        return { status: status.value, value: arrayValue };\n    }\n    static async mergeObjectAsync(status, pairs) {\n        const syncPairs = [];\n        for (const pair of pairs) {\n            const key = await pair.key;\n            const value = await pair.value;\n            syncPairs.push({\n                key,\n                value,\n            });\n        }\n        return ParseStatus.mergeObjectSync(status, syncPairs);\n    }\n    static mergeObjectSync(status, pairs) {\n        const finalObject = {};\n        for (const pair of pairs) {\n            const { key, value } = pair;\n            if (key.status === \"aborted\")\n                return INVALID;\n            if (value.status === \"aborted\")\n                return INVALID;\n            if (key.status === \"dirty\")\n                status.dirty();\n            if (value.status === \"dirty\")\n                status.dirty();\n            if (key.value !== \"__proto__\" &&\n                (typeof value.value !== \"undefined\" || pair.alwaysSet)) {\n                finalObject[key.value] = value.value;\n            }\n        }\n        return { status: status.value, value: finalObject };\n    }\n}\nconst INVALID = Object.freeze({\n    status: \"aborted\",\n});\nconst DIRTY = (value) => ({ status: \"dirty\", value });\nconst OK = (value) => ({ status: \"valid\", value });\nconst isAborted = (x) => x.status === \"aborted\";\nconst isDirty = (x) => x.status === \"dirty\";\nconst isValid = (x) => x.status === \"valid\";\nconst isAsync = (x) => typeof Promise !== \"undefined\" && x instanceof Promise;\n\n/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n\r\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n    if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\ntypeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\r\n    var e = new Error(message);\r\n    return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\r\n};\n\nvar errorUtil;\n(function (errorUtil) {\n    errorUtil.errToObj = (message) => typeof message === \"string\" ? { message } : message || {};\n    errorUtil.toString = (message) => typeof message === \"string\" ? message : message === null || message === void 0 ? void 0 : message.message;\n})(errorUtil || (errorUtil = {}));\n\nvar _ZodEnum_cache, _ZodNativeEnum_cache;\nclass ParseInputLazyPath {\n    constructor(parent, value, path, key) {\n        this._cachedPath = [];\n        this.parent = parent;\n        this.data = value;\n        this._path = path;\n        this._key = key;\n    }\n    get path() {\n        if (!this._cachedPath.length) {\n            if (this._key instanceof Array) {\n                this._cachedPath.push(...this._path, ...this._key);\n            }\n            else {\n                this._cachedPath.push(...this._path, this._key);\n            }\n        }\n        return this._cachedPath;\n    }\n}\nconst handleResult = (ctx, result) => {\n    if (isValid(result)) {\n        return { success: true, data: result.value };\n    }\n    else {\n        if (!ctx.common.issues.length) {\n            throw new Error(\"Validation failed but no issues detected.\");\n        }\n        return {\n            success: false,\n            get error() {\n                if (this._error)\n                    return this._error;\n                const error = new ZodError(ctx.common.issues);\n                this._error = error;\n                return this._error;\n            },\n        };\n    }\n};\nfunction processCreateParams(params) {\n    if (!params)\n        return {};\n    const { errorMap, invalid_type_error, required_error, description } = params;\n    if (errorMap && (invalid_type_error || required_error)) {\n        throw new Error(`Can't use \"invalid_type_error\" or \"required_error\" in conjunction with custom error map.`);\n    }\n    if (errorMap)\n        return { errorMap: errorMap, description };\n    const customMap = (iss, ctx) => {\n        var _a, _b;\n        const { message } = params;\n        if (iss.code === \"invalid_enum_value\") {\n            return { message: message !== null && message !== void 0 ? message : ctx.defaultError };\n        }\n        if (typeof ctx.data === \"undefined\") {\n            return { message: (_a = message !== null && message !== void 0 ? message : required_error) !== null && _a !== void 0 ? _a : ctx.defaultError };\n        }\n        if (iss.code !== \"invalid_type\")\n            return { message: ctx.defaultError };\n        return { message: (_b = message !== null && message !== void 0 ? message : invalid_type_error) !== null && _b !== void 0 ? _b : ctx.defaultError };\n    };\n    return { errorMap: customMap, description };\n}\nclass ZodType {\n    constructor(def) {\n        /** Alias of safeParseAsync */\n        this.spa = this.safeParseAsync;\n        this._def = def;\n        this.parse = this.parse.bind(this);\n        this.safeParse = this.safeParse.bind(this);\n        this.parseAsync = this.parseAsync.bind(this);\n        this.safeParseAsync = this.safeParseAsync.bind(this);\n        this.spa = this.spa.bind(this);\n        this.refine = this.refine.bind(this);\n        this.refinement = this.refinement.bind(this);\n        this.superRefine = this.superRefine.bind(this);\n        this.optional = this.optional.bind(this);\n        this.nullable = this.nullable.bind(this);\n        this.nullish = this.nullish.bind(this);\n        this.array = this.array.bind(this);\n        this.promise = this.promise.bind(this);\n        this.or = this.or.bind(this);\n        this.and = this.and.bind(this);\n        this.transform = this.transform.bind(this);\n        this.brand = this.brand.bind(this);\n        this.default = this.default.bind(this);\n        this.catch = this.catch.bind(this);\n        this.describe = this.describe.bind(this);\n        this.pipe = this.pipe.bind(this);\n        this.readonly = this.readonly.bind(this);\n        this.isNullable = this.isNullable.bind(this);\n        this.isOptional = this.isOptional.bind(this);\n    }\n    get description() {\n        return this._def.description;\n    }\n    _getType(input) {\n        return getParsedType(input.data);\n    }\n    _getOrReturnCtx(input, ctx) {\n        return (ctx || {\n            common: input.parent.common,\n            data: input.data,\n            parsedType: getParsedType(input.data),\n            schemaErrorMap: this._def.errorMap,\n            path: input.path,\n            parent: input.parent,\n        });\n    }\n    _processInputParams(input) {\n        return {\n            status: new ParseStatus(),\n            ctx: {\n                common: input.parent.common,\n                data: input.data,\n                parsedType: getParsedType(input.data),\n                schemaErrorMap: this._def.errorMap,\n                path: input.path,\n                parent: input.parent,\n            },\n        };\n    }\n    _parseSync(input) {\n        const result = this._parse(input);\n        if (isAsync(result)) {\n            throw new Error(\"Synchronous parse encountered promise.\");\n        }\n        return result;\n    }\n    _parseAsync(input) {\n        const result = this._parse(input);\n        return Promise.resolve(result);\n    }\n    parse(data, params) {\n        const result = this.safeParse(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    safeParse(data, params) {\n        var _a;\n        const ctx = {\n            common: {\n                issues: [],\n                async: (_a = params === null || params === void 0 ? void 0 : params.async) !== null && _a !== void 0 ? _a : false,\n                contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n            },\n            path: (params === null || params === void 0 ? void 0 : params.path) || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const result = this._parseSync({ data, path: ctx.path, parent: ctx });\n        return handleResult(ctx, result);\n    }\n    async parseAsync(data, params) {\n        const result = await this.safeParseAsync(data, params);\n        if (result.success)\n            return result.data;\n        throw result.error;\n    }\n    async safeParseAsync(data, params) {\n        const ctx = {\n            common: {\n                issues: [],\n                contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,\n                async: true,\n            },\n            path: (params === null || params === void 0 ? void 0 : params.path) || [],\n            schemaErrorMap: this._def.errorMap,\n            parent: null,\n            data,\n            parsedType: getParsedType(data),\n        };\n        const maybeAsyncResult = this._parse({ data, path: ctx.path, parent: ctx });\n        const result = await (isAsync(maybeAsyncResult)\n            ? maybeAsyncResult\n            : Promise.resolve(maybeAsyncResult));\n        return handleResult(ctx, result);\n    }\n    refine(check, message) {\n        const getIssueProperties = (val) => {\n            if (typeof message === \"string\" || typeof message === \"undefined\") {\n                return { message };\n            }\n            else if (typeof message === \"function\") {\n                return message(val);\n            }\n            else {\n                return message;\n            }\n        };\n        return this._refinement((val, ctx) => {\n            const result = check(val);\n            const setError = () => ctx.addIssue({\n                code: ZodIssueCode.custom,\n                ...getIssueProperties(val),\n            });\n            if (typeof Promise !== \"undefined\" && result instanceof Promise) {\n                return result.then((data) => {\n                    if (!data) {\n                        setError();\n                        return false;\n                    }\n                    else {\n                        return true;\n                    }\n                });\n            }\n            if (!result) {\n                setError();\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    refinement(check, refinementData) {\n        return this._refinement((val, ctx) => {\n            if (!check(val)) {\n                ctx.addIssue(typeof refinementData === \"function\"\n                    ? refinementData(val, ctx)\n                    : refinementData);\n                return false;\n            }\n            else {\n                return true;\n            }\n        });\n    }\n    _refinement(refinement) {\n        return new ZodEffects({\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"refinement\", refinement },\n        });\n    }\n    superRefine(refinement) {\n        return this._refinement(refinement);\n    }\n    optional() {\n        return ZodOptional.create(this, this._def);\n    }\n    nullable() {\n        return ZodNullable.create(this, this._def);\n    }\n    nullish() {\n        return this.nullable().optional();\n    }\n    array() {\n        return ZodArray.create(this, this._def);\n    }\n    promise() {\n        return ZodPromise.create(this, this._def);\n    }\n    or(option) {\n        return ZodUnion.create([this, option], this._def);\n    }\n    and(incoming) {\n        return ZodIntersection.create(this, incoming, this._def);\n    }\n    transform(transform) {\n        return new ZodEffects({\n            ...processCreateParams(this._def),\n            schema: this,\n            typeName: ZodFirstPartyTypeKind.ZodEffects,\n            effect: { type: \"transform\", transform },\n        });\n    }\n    default(def) {\n        const defaultValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodDefault({\n            ...processCreateParams(this._def),\n            innerType: this,\n            defaultValue: defaultValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodDefault,\n        });\n    }\n    brand() {\n        return new ZodBranded({\n            typeName: ZodFirstPartyTypeKind.ZodBranded,\n            type: this,\n            ...processCreateParams(this._def),\n        });\n    }\n    catch(def) {\n        const catchValueFunc = typeof def === \"function\" ? def : () => def;\n        return new ZodCatch({\n            ...processCreateParams(this._def),\n            innerType: this,\n            catchValue: catchValueFunc,\n            typeName: ZodFirstPartyTypeKind.ZodCatch,\n        });\n    }\n    describe(description) {\n        const This = this.constructor;\n        return new This({\n            ...this._def,\n            description,\n        });\n    }\n    pipe(target) {\n        return ZodPipeline.create(this, target);\n    }\n    readonly() {\n        return ZodReadonly.create(this);\n    }\n    isOptional() {\n        return this.safeParse(undefined).success;\n    }\n    isNullable() {\n        return this.safeParse(null).success;\n    }\n}\nconst cuidRegex = /^c[^\\s-]{8,}$/i;\nconst cuid2Regex = /^[0-9a-z]+$/;\nconst ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/;\n// const uuidRegex =\n//   /^([a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[a-f0-9]{4}-[a-f0-9]{12}|00000000-0000-0000-0000-000000000000)$/i;\nconst uuidRegex = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/i;\nconst nanoidRegex = /^[a-z0-9_-]{21}$/i;\nconst durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n// from https://stackoverflow.com/a/46181/1550155\n// old version: too slow, didn't support unicode\n// const emailRegex = /^((([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z]|\\d|[!#\\$%&'\\*\\+\\-\\/=\\?\\^_`{\\|}~]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*)|((\\x22)((((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(([\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f]|\\x21|[\\x23-\\x5b]|[\\x5d-\\x7e]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(\\\\([\\x01-\\x09\\x0b\\x0c\\x0d-\\x7f]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]))))*(((\\x20|\\x09)*(\\x0d\\x0a))?(\\x20|\\x09)+)?(\\x22)))@((([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|\\d|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))\\.)+(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])*([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])))$/i;\n//old email regex\n// const emailRegex = /^(([^<>()[\\].,;:\\s@\"]+(\\.[^<>()[\\].,;:\\s@\"]+)*)|(\".+\"))@((?!-)([^<>()[\\].,;:\\s@\"]+\\.)+[^<>()[\\].,;:\\s@\"]{1,})[^-<>()[\\].,;:\\s@\"]$/i;\n// eslint-disable-next-line\n// const emailRegex =\n//   /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\])|(\\[IPv6:(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))\\])|([A-Za-z0-9]([A-Za-z0-9-]*[A-Za-z0-9])*(\\.[A-Za-z]{2,})+))$/;\n// const emailRegex =\n//   /^[a-zA-Z0-9\\.\\!\\#\\$\\%\\&\\'\\*\\+\\/\\=\\?\\^\\_\\`\\{\\|\\}\\~\\-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// const emailRegex =\n//   /^(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])$/i;\nconst emailRegex = /^(?!\\.)(?!.*\\.\\.)([A-Z0-9_'+\\-\\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\\-]*\\.)+[A-Z]{2,}$/i;\n// const emailRegex =\n//   /^[a-z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-z0-9-]+(?:\\.[a-z0-9\\-]+)*$/i;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emojiRegex = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nlet emojiRegex;\n// faster, simpler, safer\nconst ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv6Regex = /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// simple\n// const dateRegexSource = `\\\\d{4}-\\\\d{2}-\\\\d{2}`;\n// no leap year validation\n// const dateRegexSource = `\\\\d{4}-((0[13578]|10|12)-31|(0[13-9]|1[0-2])-30|(0[1-9]|1[0-2])-(0[1-9]|1\\\\d|2\\\\d))`;\n// with leap year validation\nconst dateRegexSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateRegex = new RegExp(`^${dateRegexSource}$`);\nfunction timeRegexSource(args) {\n    // let regex = `\\\\d{2}:\\\\d{2}:\\\\d{2}`;\n    let regex = `([01]\\\\d|2[0-3]):[0-5]\\\\d:[0-5]\\\\d`;\n    if (args.precision) {\n        regex = `${regex}\\\\.\\\\d{${args.precision}}`;\n    }\n    else if (args.precision == null) {\n        regex = `${regex}(\\\\.\\\\d+)?`;\n    }\n    return regex;\n}\nfunction timeRegex(args) {\n    return new RegExp(`^${timeRegexSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nfunction datetimeRegex(args) {\n    let regex = `${dateRegexSource}T${timeRegexSource(args)}`;\n    const opts = [];\n    opts.push(args.local ? `Z?` : `Z`);\n    if (args.offset)\n        opts.push(`([+-]\\\\d{2}:?\\\\d{2})`);\n    regex = `${regex}(${opts.join(\"|\")})`;\n    return new RegExp(`^${regex}$`);\n}\nfunction isValidIP(ip, version) {\n    if ((version === \"v4\" || !version) && ipv4Regex.test(ip)) {\n        return true;\n    }\n    if ((version === \"v6\" || !version) && ipv6Regex.test(ip)) {\n        return true;\n    }\n    return false;\n}\nclass ZodString extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = String(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.string) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.string,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.length < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.length > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"string\",\n                        inclusive: true,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"length\") {\n                const tooBig = input.data.length > check.value;\n                const tooSmall = input.data.length < check.value;\n                if (tooBig || tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    if (tooBig) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_big,\n                            maximum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    else if (tooSmall) {\n                        addIssueToContext(ctx, {\n                            code: ZodIssueCode.too_small,\n                            minimum: check.value,\n                            type: \"string\",\n                            inclusive: true,\n                            exact: true,\n                            message: check.message,\n                        });\n                    }\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"email\") {\n                if (!emailRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"email\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"emoji\") {\n                if (!emojiRegex) {\n                    emojiRegex = new RegExp(_emojiRegex, \"u\");\n                }\n                if (!emojiRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"emoji\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"uuid\") {\n                if (!uuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"uuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"nanoid\") {\n                if (!nanoidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"nanoid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid\") {\n                if (!cuidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"cuid2\") {\n                if (!cuid2Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"cuid2\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ulid\") {\n                if (!ulidRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ulid\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"url\") {\n                try {\n                    new URL(input.data);\n                }\n                catch (_a) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"url\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"regex\") {\n                check.regex.lastIndex = 0;\n                const testResult = check.regex.test(input.data);\n                if (!testResult) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"regex\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"trim\") {\n                input.data = input.data.trim();\n            }\n            else if (check.kind === \"includes\") {\n                if (!input.data.includes(check.value, check.position)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { includes: check.value, position: check.position },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"toLowerCase\") {\n                input.data = input.data.toLowerCase();\n            }\n            else if (check.kind === \"toUpperCase\") {\n                input.data = input.data.toUpperCase();\n            }\n            else if (check.kind === \"startsWith\") {\n                if (!input.data.startsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { startsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"endsWith\") {\n                if (!input.data.endsWith(check.value)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: { endsWith: check.value },\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"datetime\") {\n                const regex = datetimeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"datetime\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"date\") {\n                const regex = dateRegex;\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"date\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"time\") {\n                const regex = timeRegex(check);\n                if (!regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_string,\n                        validation: \"time\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"duration\") {\n                if (!durationRegex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"duration\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"ip\") {\n                if (!isValidIP(input.data, check.version)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"ip\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"base64\") {\n                if (!base64Regex.test(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        validation: \"base64\",\n                        code: ZodIssueCode.invalid_string,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    _regex(regex, validation, message) {\n        return this.refinement((data) => regex.test(data), {\n            validation,\n            code: ZodIssueCode.invalid_string,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    _addCheck(check) {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    email(message) {\n        return this._addCheck({ kind: \"email\", ...errorUtil.errToObj(message) });\n    }\n    url(message) {\n        return this._addCheck({ kind: \"url\", ...errorUtil.errToObj(message) });\n    }\n    emoji(message) {\n        return this._addCheck({ kind: \"emoji\", ...errorUtil.errToObj(message) });\n    }\n    uuid(message) {\n        return this._addCheck({ kind: \"uuid\", ...errorUtil.errToObj(message) });\n    }\n    nanoid(message) {\n        return this._addCheck({ kind: \"nanoid\", ...errorUtil.errToObj(message) });\n    }\n    cuid(message) {\n        return this._addCheck({ kind: \"cuid\", ...errorUtil.errToObj(message) });\n    }\n    cuid2(message) {\n        return this._addCheck({ kind: \"cuid2\", ...errorUtil.errToObj(message) });\n    }\n    ulid(message) {\n        return this._addCheck({ kind: \"ulid\", ...errorUtil.errToObj(message) });\n    }\n    base64(message) {\n        return this._addCheck({ kind: \"base64\", ...errorUtil.errToObj(message) });\n    }\n    ip(options) {\n        return this._addCheck({ kind: \"ip\", ...errorUtil.errToObj(options) });\n    }\n    datetime(options) {\n        var _a, _b;\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"datetime\",\n                precision: null,\n                offset: false,\n                local: false,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"datetime\",\n            precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n            offset: (_a = options === null || options === void 0 ? void 0 : options.offset) !== null && _a !== void 0 ? _a : false,\n            local: (_b = options === null || options === void 0 ? void 0 : options.local) !== null && _b !== void 0 ? _b : false,\n            ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n        });\n    }\n    date(message) {\n        return this._addCheck({ kind: \"date\", message });\n    }\n    time(options) {\n        if (typeof options === \"string\") {\n            return this._addCheck({\n                kind: \"time\",\n                precision: null,\n                message: options,\n            });\n        }\n        return this._addCheck({\n            kind: \"time\",\n            precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === \"undefined\" ? null : options === null || options === void 0 ? void 0 : options.precision,\n            ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n        });\n    }\n    duration(message) {\n        return this._addCheck({ kind: \"duration\", ...errorUtil.errToObj(message) });\n    }\n    regex(regex, message) {\n        return this._addCheck({\n            kind: \"regex\",\n            regex: regex,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    includes(value, options) {\n        return this._addCheck({\n            kind: \"includes\",\n            value: value,\n            position: options === null || options === void 0 ? void 0 : options.position,\n            ...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message),\n        });\n    }\n    startsWith(value, message) {\n        return this._addCheck({\n            kind: \"startsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    endsWith(value, message) {\n        return this._addCheck({\n            kind: \"endsWith\",\n            value: value,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    min(minLength, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    max(maxLength, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxLength,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    length(len, message) {\n        return this._addCheck({\n            kind: \"length\",\n            value: len,\n            ...errorUtil.errToObj(message),\n        });\n    }\n    /**\n     * @deprecated Use z.string().min(1) instead.\n     * @see {@link ZodString.min}\n     */\n    nonempty(message) {\n        return this.min(1, errorUtil.errToObj(message));\n    }\n    trim() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"trim\" }],\n        });\n    }\n    toLowerCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toLowerCase\" }],\n        });\n    }\n    toUpperCase() {\n        return new ZodString({\n            ...this._def,\n            checks: [...this._def.checks, { kind: \"toUpperCase\" }],\n        });\n    }\n    get isDatetime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"datetime\");\n    }\n    get isDate() {\n        return !!this._def.checks.find((ch) => ch.kind === \"date\");\n    }\n    get isTime() {\n        return !!this._def.checks.find((ch) => ch.kind === \"time\");\n    }\n    get isDuration() {\n        return !!this._def.checks.find((ch) => ch.kind === \"duration\");\n    }\n    get isEmail() {\n        return !!this._def.checks.find((ch) => ch.kind === \"email\");\n    }\n    get isURL() {\n        return !!this._def.checks.find((ch) => ch.kind === \"url\");\n    }\n    get isEmoji() {\n        return !!this._def.checks.find((ch) => ch.kind === \"emoji\");\n    }\n    get isUUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"uuid\");\n    }\n    get isNANOID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"nanoid\");\n    }\n    get isCUID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid\");\n    }\n    get isCUID2() {\n        return !!this._def.checks.find((ch) => ch.kind === \"cuid2\");\n    }\n    get isULID() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ulid\");\n    }\n    get isIP() {\n        return !!this._def.checks.find((ch) => ch.kind === \"ip\");\n    }\n    get isBase64() {\n        return !!this._def.checks.find((ch) => ch.kind === \"base64\");\n    }\n    get minLength() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxLength() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodString.create = (params) => {\n    var _a;\n    return new ZodString({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodString,\n        coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n        ...processCreateParams(params),\n    });\n};\n// https://stackoverflow.com/questions/3966484/why-does-modulus-operator-return-fractional-number-in-javascript/31711034#31711034\nfunction floatSafeRemainder(val, step) {\n    const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n    const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n    const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n    const valInt = parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n    const stepInt = parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n    return (valInt % stepInt) / Math.pow(10, decCount);\n}\nclass ZodNumber extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n        this.step = this.multipleOf;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Number(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.number) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.number,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"int\") {\n                if (!util.isInteger(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.invalid_type,\n                        expected: \"integer\",\n                        received: \"float\",\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"min\") {\n                const tooSmall = check.inclusive\n                    ? input.data < check.value\n                    : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        minimum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive\n                    ? input.data > check.value\n                    : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        maximum: check.value,\n                        type: \"number\",\n                        inclusive: check.inclusive,\n                        exact: false,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (floatSafeRemainder(input.data, check.value) !== 0) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"finite\") {\n                if (!Number.isFinite(input.data)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_finite,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodNumber({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    int(message) {\n        return this._addCheck({\n            kind: \"int\",\n            message: errorUtil.toString(message),\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: 0,\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value: value,\n            message: errorUtil.toString(message),\n        });\n    }\n    finite(message) {\n        return this._addCheck({\n            kind: \"finite\",\n            message: errorUtil.toString(message),\n        });\n    }\n    safe(message) {\n        return this._addCheck({\n            kind: \"min\",\n            inclusive: true,\n            value: Number.MIN_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        })._addCheck({\n            kind: \"max\",\n            inclusive: true,\n            value: Number.MAX_SAFE_INTEGER,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n    get isInt() {\n        return !!this._def.checks.find((ch) => ch.kind === \"int\" ||\n            (ch.kind === \"multipleOf\" && util.isInteger(ch.value)));\n    }\n    get isFinite() {\n        let max = null, min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"finite\" ||\n                ch.kind === \"int\" ||\n                ch.kind === \"multipleOf\") {\n                return true;\n            }\n            else if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n            else if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return Number.isFinite(min) && Number.isFinite(max);\n    }\n}\nZodNumber.create = (params) => {\n    return new ZodNumber({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodNumber,\n        coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n        ...processCreateParams(params),\n    });\n};\nclass ZodBigInt extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.min = this.gte;\n        this.max = this.lte;\n    }\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = BigInt(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.bigint) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.bigint,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        let ctx = undefined;\n        const status = new ParseStatus();\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                const tooSmall = check.inclusive\n                    ? input.data < check.value\n                    : input.data <= check.value;\n                if (tooSmall) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        type: \"bigint\",\n                        minimum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                const tooBig = check.inclusive\n                    ? input.data > check.value\n                    : input.data >= check.value;\n                if (tooBig) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        type: \"bigint\",\n                        maximum: check.value,\n                        inclusive: check.inclusive,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"multipleOf\") {\n                if (input.data % check.value !== BigInt(0)) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.not_multiple_of,\n                        multipleOf: check.value,\n                        message: check.message,\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return { status: status.value, value: input.data };\n    }\n    gte(value, message) {\n        return this.setLimit(\"min\", value, true, errorUtil.toString(message));\n    }\n    gt(value, message) {\n        return this.setLimit(\"min\", value, false, errorUtil.toString(message));\n    }\n    lte(value, message) {\n        return this.setLimit(\"max\", value, true, errorUtil.toString(message));\n    }\n    lt(value, message) {\n        return this.setLimit(\"max\", value, false, errorUtil.toString(message));\n    }\n    setLimit(kind, value, inclusive, message) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [\n                ...this._def.checks,\n                {\n                    kind,\n                    value,\n                    inclusive,\n                    message: errorUtil.toString(message),\n                },\n            ],\n        });\n    }\n    _addCheck(check) {\n        return new ZodBigInt({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    positive(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    negative(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: false,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonpositive(message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    nonnegative(message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: BigInt(0),\n            inclusive: true,\n            message: errorUtil.toString(message),\n        });\n    }\n    multipleOf(value, message) {\n        return this._addCheck({\n            kind: \"multipleOf\",\n            value,\n            message: errorUtil.toString(message),\n        });\n    }\n    get minValue() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min;\n    }\n    get maxValue() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max;\n    }\n}\nZodBigInt.create = (params) => {\n    var _a;\n    return new ZodBigInt({\n        checks: [],\n        typeName: ZodFirstPartyTypeKind.ZodBigInt,\n        coerce: (_a = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a !== void 0 ? _a : false,\n        ...processCreateParams(params),\n    });\n};\nclass ZodBoolean extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = Boolean(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.boolean) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.boolean,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodBoolean.create = (params) => {\n    return new ZodBoolean({\n        typeName: ZodFirstPartyTypeKind.ZodBoolean,\n        coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n        ...processCreateParams(params),\n    });\n};\nclass ZodDate extends ZodType {\n    _parse(input) {\n        if (this._def.coerce) {\n            input.data = new Date(input.data);\n        }\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.date) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.date,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (isNaN(input.data.getTime())) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_date,\n            });\n            return INVALID;\n        }\n        const status = new ParseStatus();\n        let ctx = undefined;\n        for (const check of this._def.checks) {\n            if (check.kind === \"min\") {\n                if (input.data.getTime() < check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_small,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        minimum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else if (check.kind === \"max\") {\n                if (input.data.getTime() > check.value) {\n                    ctx = this._getOrReturnCtx(input, ctx);\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.too_big,\n                        message: check.message,\n                        inclusive: true,\n                        exact: false,\n                        maximum: check.value,\n                        type: \"date\",\n                    });\n                    status.dirty();\n                }\n            }\n            else {\n                util.assertNever(check);\n            }\n        }\n        return {\n            status: status.value,\n            value: new Date(input.data.getTime()),\n        };\n    }\n    _addCheck(check) {\n        return new ZodDate({\n            ...this._def,\n            checks: [...this._def.checks, check],\n        });\n    }\n    min(minDate, message) {\n        return this._addCheck({\n            kind: \"min\",\n            value: minDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    max(maxDate, message) {\n        return this._addCheck({\n            kind: \"max\",\n            value: maxDate.getTime(),\n            message: errorUtil.toString(message),\n        });\n    }\n    get minDate() {\n        let min = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"min\") {\n                if (min === null || ch.value > min)\n                    min = ch.value;\n            }\n        }\n        return min != null ? new Date(min) : null;\n    }\n    get maxDate() {\n        let max = null;\n        for (const ch of this._def.checks) {\n            if (ch.kind === \"max\") {\n                if (max === null || ch.value < max)\n                    max = ch.value;\n            }\n        }\n        return max != null ? new Date(max) : null;\n    }\n}\nZodDate.create = (params) => {\n    return new ZodDate({\n        checks: [],\n        coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,\n        typeName: ZodFirstPartyTypeKind.ZodDate,\n        ...processCreateParams(params),\n    });\n};\nclass ZodSymbol extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.symbol) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.symbol,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodSymbol.create = (params) => {\n    return new ZodSymbol({\n        typeName: ZodFirstPartyTypeKind.ZodSymbol,\n        ...processCreateParams(params),\n    });\n};\nclass ZodUndefined extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.undefined,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodUndefined.create = (params) => {\n    return new ZodUndefined({\n        typeName: ZodFirstPartyTypeKind.ZodUndefined,\n        ...processCreateParams(params),\n    });\n};\nclass ZodNull extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.null) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.null,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodNull.create = (params) => {\n    return new ZodNull({\n        typeName: ZodFirstPartyTypeKind.ZodNull,\n        ...processCreateParams(params),\n    });\n};\nclass ZodAny extends ZodType {\n    constructor() {\n        super(...arguments);\n        // to prevent instances of other classes from extending ZodAny. this causes issues with catchall in ZodObject.\n        this._any = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodAny.create = (params) => {\n    return new ZodAny({\n        typeName: ZodFirstPartyTypeKind.ZodAny,\n        ...processCreateParams(params),\n    });\n};\nclass ZodUnknown extends ZodType {\n    constructor() {\n        super(...arguments);\n        // required\n        this._unknown = true;\n    }\n    _parse(input) {\n        return OK(input.data);\n    }\n}\nZodUnknown.create = (params) => {\n    return new ZodUnknown({\n        typeName: ZodFirstPartyTypeKind.ZodUnknown,\n        ...processCreateParams(params),\n    });\n};\nclass ZodNever extends ZodType {\n    _parse(input) {\n        const ctx = this._getOrReturnCtx(input);\n        addIssueToContext(ctx, {\n            code: ZodIssueCode.invalid_type,\n            expected: ZodParsedType.never,\n            received: ctx.parsedType,\n        });\n        return INVALID;\n    }\n}\nZodNever.create = (params) => {\n    return new ZodNever({\n        typeName: ZodFirstPartyTypeKind.ZodNever,\n        ...processCreateParams(params),\n    });\n};\nclass ZodVoid extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.undefined) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.void,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n}\nZodVoid.create = (params) => {\n    return new ZodVoid({\n        typeName: ZodFirstPartyTypeKind.ZodVoid,\n        ...processCreateParams(params),\n    });\n};\nclass ZodArray extends ZodType {\n    _parse(input) {\n        const { ctx, status } = this._processInputParams(input);\n        const def = this._def;\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (def.exactLength !== null) {\n            const tooBig = ctx.data.length > def.exactLength.value;\n            const tooSmall = ctx.data.length < def.exactLength.value;\n            if (tooBig || tooSmall) {\n                addIssueToContext(ctx, {\n                    code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,\n                    minimum: (tooSmall ? def.exactLength.value : undefined),\n                    maximum: (tooBig ? def.exactLength.value : undefined),\n                    type: \"array\",\n                    inclusive: true,\n                    exact: true,\n                    message: def.exactLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.minLength !== null) {\n            if (ctx.data.length < def.minLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxLength !== null) {\n            if (ctx.data.length > def.maxLength.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxLength.value,\n                    type: \"array\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxLength.message,\n                });\n                status.dirty();\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.all([...ctx.data].map((item, i) => {\n                return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n            })).then((result) => {\n                return ParseStatus.mergeArray(status, result);\n            });\n        }\n        const result = [...ctx.data].map((item, i) => {\n            return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));\n        });\n        return ParseStatus.mergeArray(status, result);\n    }\n    get element() {\n        return this._def.type;\n    }\n    min(minLength, message) {\n        return new ZodArray({\n            ...this._def,\n            minLength: { value: minLength, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxLength, message) {\n        return new ZodArray({\n            ...this._def,\n            maxLength: { value: maxLength, message: errorUtil.toString(message) },\n        });\n    }\n    length(len, message) {\n        return new ZodArray({\n            ...this._def,\n            exactLength: { value: len, message: errorUtil.toString(message) },\n        });\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodArray.create = (schema, params) => {\n    return new ZodArray({\n        type: schema,\n        minLength: null,\n        maxLength: null,\n        exactLength: null,\n        typeName: ZodFirstPartyTypeKind.ZodArray,\n        ...processCreateParams(params),\n    });\n};\nfunction deepPartialify(schema) {\n    if (schema instanceof ZodObject) {\n        const newShape = {};\n        for (const key in schema.shape) {\n            const fieldSchema = schema.shape[key];\n            newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));\n        }\n        return new ZodObject({\n            ...schema._def,\n            shape: () => newShape,\n        });\n    }\n    else if (schema instanceof ZodArray) {\n        return new ZodArray({\n            ...schema._def,\n            type: deepPartialify(schema.element),\n        });\n    }\n    else if (schema instanceof ZodOptional) {\n        return ZodOptional.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodNullable) {\n        return ZodNullable.create(deepPartialify(schema.unwrap()));\n    }\n    else if (schema instanceof ZodTuple) {\n        return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));\n    }\n    else {\n        return schema;\n    }\n}\nclass ZodObject extends ZodType {\n    constructor() {\n        super(...arguments);\n        this._cached = null;\n        /**\n         * @deprecated In most cases, this is no longer needed - unknown properties are now silently stripped.\n         * If you want to pass through unknown properties, use `.passthrough()` instead.\n         */\n        this.nonstrict = this.passthrough;\n        // extend<\n        //   Augmentation extends ZodRawShape,\n        //   NewOutput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_output\"]\n        //       : k extends keyof Output\n        //       ? Output[k]\n        //       : never;\n        //   }>,\n        //   NewInput extends util.flatten<{\n        //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n        //       ? Augmentation[k][\"_input\"]\n        //       : k extends keyof Input\n        //       ? Input[k]\n        //       : never;\n        //   }>\n        // >(\n        //   augmentation: Augmentation\n        // ): ZodObject<\n        //   extendShape<T, Augmentation>,\n        //   UnknownKeys,\n        //   Catchall,\n        //   NewOutput,\n        //   NewInput\n        // > {\n        //   return new ZodObject({\n        //     ...this._def,\n        //     shape: () => ({\n        //       ...this._def.shape(),\n        //       ...augmentation,\n        //     }),\n        //   }) as any;\n        // }\n        /**\n         * @deprecated Use `.extend` instead\n         *  */\n        this.augment = this.extend;\n    }\n    _getCached() {\n        if (this._cached !== null)\n            return this._cached;\n        const shape = this._def.shape();\n        const keys = util.objectKeys(shape);\n        return (this._cached = { shape, keys });\n    }\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.object) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const { status, ctx } = this._processInputParams(input);\n        const { shape, keys: shapeKeys } = this._getCached();\n        const extraKeys = [];\n        if (!(this._def.catchall instanceof ZodNever &&\n            this._def.unknownKeys === \"strip\")) {\n            for (const key in ctx.data) {\n                if (!shapeKeys.includes(key)) {\n                    extraKeys.push(key);\n                }\n            }\n        }\n        const pairs = [];\n        for (const key of shapeKeys) {\n            const keyValidator = shape[key];\n            const value = ctx.data[key];\n            pairs.push({\n                key: { status: \"valid\", value: key },\n                value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (this._def.catchall instanceof ZodNever) {\n            const unknownKeys = this._def.unknownKeys;\n            if (unknownKeys === \"passthrough\") {\n                for (const key of extraKeys) {\n                    pairs.push({\n                        key: { status: \"valid\", value: key },\n                        value: { status: \"valid\", value: ctx.data[key] },\n                    });\n                }\n            }\n            else if (unknownKeys === \"strict\") {\n                if (extraKeys.length > 0) {\n                    addIssueToContext(ctx, {\n                        code: ZodIssueCode.unrecognized_keys,\n                        keys: extraKeys,\n                    });\n                    status.dirty();\n                }\n            }\n            else if (unknownKeys === \"strip\") ;\n            else {\n                throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);\n            }\n        }\n        else {\n            // run catchall validation\n            const catchall = this._def.catchall;\n            for (const key of extraKeys) {\n                const value = ctx.data[key];\n                pairs.push({\n                    key: { status: \"valid\", value: key },\n                    value: catchall._parse(new ParseInputLazyPath(ctx, value, ctx.path, key) //, ctx.child(key), value, getParsedType(value)\n                    ),\n                    alwaysSet: key in ctx.data,\n                });\n            }\n        }\n        if (ctx.common.async) {\n            return Promise.resolve()\n                .then(async () => {\n                const syncPairs = [];\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    syncPairs.push({\n                        key,\n                        value,\n                        alwaysSet: pair.alwaysSet,\n                    });\n                }\n                return syncPairs;\n            })\n                .then((syncPairs) => {\n                return ParseStatus.mergeObjectSync(status, syncPairs);\n            });\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get shape() {\n        return this._def.shape();\n    }\n    strict(message) {\n        errorUtil.errToObj;\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strict\",\n            ...(message !== undefined\n                ? {\n                    errorMap: (issue, ctx) => {\n                        var _a, _b, _c, _d;\n                        const defaultError = (_c = (_b = (_a = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;\n                        if (issue.code === \"unrecognized_keys\")\n                            return {\n                                message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError,\n                            };\n                        return {\n                            message: defaultError,\n                        };\n                    },\n                }\n                : {}),\n        });\n    }\n    strip() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"strip\",\n        });\n    }\n    passthrough() {\n        return new ZodObject({\n            ...this._def,\n            unknownKeys: \"passthrough\",\n        });\n    }\n    // const AugmentFactory =\n    //   <Def extends ZodObjectDef>(def: Def) =>\n    //   <Augmentation extends ZodRawShape>(\n    //     augmentation: Augmentation\n    //   ): ZodObject<\n    //     extendShape<ReturnType<Def[\"shape\"]>, Augmentation>,\n    //     Def[\"unknownKeys\"],\n    //     Def[\"catchall\"]\n    //   > => {\n    //     return new ZodObject({\n    //       ...def,\n    //       shape: () => ({\n    //         ...def.shape(),\n    //         ...augmentation,\n    //       }),\n    //     }) as any;\n    //   };\n    extend(augmentation) {\n        return new ZodObject({\n            ...this._def,\n            shape: () => ({\n                ...this._def.shape(),\n                ...augmentation,\n            }),\n        });\n    }\n    /**\n     * Prior to zod@1.0.12 there was a bug in the\n     * inferred type of merged objects. Please\n     * upgrade if you are experiencing issues.\n     */\n    merge(merging) {\n        const merged = new ZodObject({\n            unknownKeys: merging._def.unknownKeys,\n            catchall: merging._def.catchall,\n            shape: () => ({\n                ...this._def.shape(),\n                ...merging._def.shape(),\n            }),\n            typeName: ZodFirstPartyTypeKind.ZodObject,\n        });\n        return merged;\n    }\n    // merge<\n    //   Incoming extends AnyZodObject,\n    //   Augmentation extends Incoming[\"shape\"],\n    //   NewOutput extends {\n    //     [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_output\"]\n    //       : k extends keyof Output\n    //       ? Output[k]\n    //       : never;\n    //   },\n    //   NewInput extends {\n    //     [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation\n    //       ? Augmentation[k][\"_input\"]\n    //       : k extends keyof Input\n    //       ? Input[k]\n    //       : never;\n    //   }\n    // >(\n    //   merging: Incoming\n    // ): ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"],\n    //   NewOutput,\n    //   NewInput\n    // > {\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    setKey(key, schema) {\n        return this.augment({ [key]: schema });\n    }\n    // merge<Incoming extends AnyZodObject>(\n    //   merging: Incoming\n    // ): //ZodObject<T & Incoming[\"_shape\"], UnknownKeys, Catchall> = (merging) => {\n    // ZodObject<\n    //   extendShape<T, ReturnType<Incoming[\"_def\"][\"shape\"]>>,\n    //   Incoming[\"_def\"][\"unknownKeys\"],\n    //   Incoming[\"_def\"][\"catchall\"]\n    // > {\n    //   // const mergedShape = objectUtil.mergeShapes(\n    //   //   this._def.shape(),\n    //   //   merging._def.shape()\n    //   // );\n    //   const merged: any = new ZodObject({\n    //     unknownKeys: merging._def.unknownKeys,\n    //     catchall: merging._def.catchall,\n    //     shape: () =>\n    //       objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),\n    //     typeName: ZodFirstPartyTypeKind.ZodObject,\n    //   }) as any;\n    //   return merged;\n    // }\n    catchall(index) {\n        return new ZodObject({\n            ...this._def,\n            catchall: index,\n        });\n    }\n    pick(mask) {\n        const shape = {};\n        util.objectKeys(mask).forEach((key) => {\n            if (mask[key] && this.shape[key]) {\n                shape[key] = this.shape[key];\n            }\n        });\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    omit(mask) {\n        const shape = {};\n        util.objectKeys(this.shape).forEach((key) => {\n            if (!mask[key]) {\n                shape[key] = this.shape[key];\n            }\n        });\n        return new ZodObject({\n            ...this._def,\n            shape: () => shape,\n        });\n    }\n    /**\n     * @deprecated\n     */\n    deepPartial() {\n        return deepPartialify(this);\n    }\n    partial(mask) {\n        const newShape = {};\n        util.objectKeys(this.shape).forEach((key) => {\n            const fieldSchema = this.shape[key];\n            if (mask && !mask[key]) {\n                newShape[key] = fieldSchema;\n            }\n            else {\n                newShape[key] = fieldSchema.optional();\n            }\n        });\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    required(mask) {\n        const newShape = {};\n        util.objectKeys(this.shape).forEach((key) => {\n            if (mask && !mask[key]) {\n                newShape[key] = this.shape[key];\n            }\n            else {\n                const fieldSchema = this.shape[key];\n                let newField = fieldSchema;\n                while (newField instanceof ZodOptional) {\n                    newField = newField._def.innerType;\n                }\n                newShape[key] = newField;\n            }\n        });\n        return new ZodObject({\n            ...this._def,\n            shape: () => newShape,\n        });\n    }\n    keyof() {\n        return createZodEnum(util.objectKeys(this.shape));\n    }\n}\nZodObject.create = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.strictCreate = (shape, params) => {\n    return new ZodObject({\n        shape: () => shape,\n        unknownKeys: \"strict\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nZodObject.lazycreate = (shape, params) => {\n    return new ZodObject({\n        shape,\n        unknownKeys: \"strip\",\n        catchall: ZodNever.create(),\n        typeName: ZodFirstPartyTypeKind.ZodObject,\n        ...processCreateParams(params),\n    });\n};\nclass ZodUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const options = this._def.options;\n        function handleResults(results) {\n            // return first issue-free validation if it exists\n            for (const result of results) {\n                if (result.result.status === \"valid\") {\n                    return result.result;\n                }\n            }\n            for (const result of results) {\n                if (result.result.status === \"dirty\") {\n                    // add issues from dirty option\n                    ctx.common.issues.push(...result.ctx.common.issues);\n                    return result.result;\n                }\n            }\n            // return invalid\n            const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return Promise.all(options.map(async (option) => {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                return {\n                    result: await option._parseAsync({\n                        data: ctx.data,\n                        path: ctx.path,\n                        parent: childCtx,\n                    }),\n                    ctx: childCtx,\n                };\n            })).then(handleResults);\n        }\n        else {\n            let dirty = undefined;\n            const issues = [];\n            for (const option of options) {\n                const childCtx = {\n                    ...ctx,\n                    common: {\n                        ...ctx.common,\n                        issues: [],\n                    },\n                    parent: null,\n                };\n                const result = option._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: childCtx,\n                });\n                if (result.status === \"valid\") {\n                    return result;\n                }\n                else if (result.status === \"dirty\" && !dirty) {\n                    dirty = { result, ctx: childCtx };\n                }\n                if (childCtx.common.issues.length) {\n                    issues.push(childCtx.common.issues);\n                }\n            }\n            if (dirty) {\n                ctx.common.issues.push(...dirty.ctx.common.issues);\n                return dirty.result;\n            }\n            const unionErrors = issues.map((issues) => new ZodError(issues));\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union,\n                unionErrors,\n            });\n            return INVALID;\n        }\n    }\n    get options() {\n        return this._def.options;\n    }\n}\nZodUnion.create = (types, params) => {\n    return new ZodUnion({\n        options: types,\n        typeName: ZodFirstPartyTypeKind.ZodUnion,\n        ...processCreateParams(params),\n    });\n};\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\n//////////                                 //////////\n//////////      ZodDiscriminatedUnion      //////////\n//////////                                 //////////\n/////////////////////////////////////////////////////\n/////////////////////////////////////////////////////\nconst getDiscriminator = (type) => {\n    if (type instanceof ZodLazy) {\n        return getDiscriminator(type.schema);\n    }\n    else if (type instanceof ZodEffects) {\n        return getDiscriminator(type.innerType());\n    }\n    else if (type instanceof ZodLiteral) {\n        return [type.value];\n    }\n    else if (type instanceof ZodEnum) {\n        return type.options;\n    }\n    else if (type instanceof ZodNativeEnum) {\n        // eslint-disable-next-line ban/ban\n        return util.objectValues(type.enum);\n    }\n    else if (type instanceof ZodDefault) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else if (type instanceof ZodUndefined) {\n        return [undefined];\n    }\n    else if (type instanceof ZodNull) {\n        return [null];\n    }\n    else if (type instanceof ZodOptional) {\n        return [undefined, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodNullable) {\n        return [null, ...getDiscriminator(type.unwrap())];\n    }\n    else if (type instanceof ZodBranded) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodReadonly) {\n        return getDiscriminator(type.unwrap());\n    }\n    else if (type instanceof ZodCatch) {\n        return getDiscriminator(type._def.innerType);\n    }\n    else {\n        return [];\n    }\n};\nclass ZodDiscriminatedUnion extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const discriminator = this.discriminator;\n        const discriminatorValue = ctx.data[discriminator];\n        const option = this.optionsMap.get(discriminatorValue);\n        if (!option) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_union_discriminator,\n                options: Array.from(this.optionsMap.keys()),\n                path: [discriminator],\n            });\n            return INVALID;\n        }\n        if (ctx.common.async) {\n            return option._parseAsync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n        else {\n            return option._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n        }\n    }\n    get discriminator() {\n        return this._def.discriminator;\n    }\n    get options() {\n        return this._def.options;\n    }\n    get optionsMap() {\n        return this._def.optionsMap;\n    }\n    /**\n     * The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.\n     * However, it only allows a union of objects, all of which need to share a discriminator property. This property must\n     * have a different value for each object in the union.\n     * @param discriminator the name of the discriminator property\n     * @param types an array of object schemas\n     * @param params\n     */\n    static create(discriminator, options, params) {\n        // Get all the valid discriminator values\n        const optionsMap = new Map();\n        // try {\n        for (const type of options) {\n            const discriminatorValues = getDiscriminator(type.shape[discriminator]);\n            if (!discriminatorValues.length) {\n                throw new Error(`A discriminator value for key \\`${discriminator}\\` could not be extracted from all schema options`);\n            }\n            for (const value of discriminatorValues) {\n                if (optionsMap.has(value)) {\n                    throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);\n                }\n                optionsMap.set(value, type);\n            }\n        }\n        return new ZodDiscriminatedUnion({\n            typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,\n            discriminator,\n            options,\n            optionsMap,\n            ...processCreateParams(params),\n        });\n    }\n}\nfunction mergeValues(a, b) {\n    const aType = getParsedType(a);\n    const bType = getParsedType(b);\n    if (a === b) {\n        return { valid: true, data: a };\n    }\n    else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {\n        const bKeys = util.objectKeys(b);\n        const sharedKeys = util\n            .objectKeys(a)\n            .filter((key) => bKeys.indexOf(key) !== -1);\n        const newObj = { ...a, ...b };\n        for (const key of sharedKeys) {\n            const sharedValue = mergeValues(a[key], b[key]);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newObj[key] = sharedValue.data;\n        }\n        return { valid: true, data: newObj };\n    }\n    else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {\n        if (a.length !== b.length) {\n            return { valid: false };\n        }\n        const newArray = [];\n        for (let index = 0; index < a.length; index++) {\n            const itemA = a[index];\n            const itemB = b[index];\n            const sharedValue = mergeValues(itemA, itemB);\n            if (!sharedValue.valid) {\n                return { valid: false };\n            }\n            newArray.push(sharedValue.data);\n        }\n        return { valid: true, data: newArray };\n    }\n    else if (aType === ZodParsedType.date &&\n        bType === ZodParsedType.date &&\n        +a === +b) {\n        return { valid: true, data: a };\n    }\n    else {\n        return { valid: false };\n    }\n}\nclass ZodIntersection extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const handleParsed = (parsedLeft, parsedRight) => {\n            if (isAborted(parsedLeft) || isAborted(parsedRight)) {\n                return INVALID;\n            }\n            const merged = mergeValues(parsedLeft.value, parsedRight.value);\n            if (!merged.valid) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.invalid_intersection_types,\n                });\n                return INVALID;\n            }\n            if (isDirty(parsedLeft) || isDirty(parsedRight)) {\n                status.dirty();\n            }\n            return { status: status.value, value: merged.data };\n        };\n        if (ctx.common.async) {\n            return Promise.all([\n                this._def.left._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n                this._def.right._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                }),\n            ]).then(([left, right]) => handleParsed(left, right));\n        }\n        else {\n            return handleParsed(this._def.left._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }), this._def.right._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            }));\n        }\n    }\n}\nZodIntersection.create = (left, right, params) => {\n    return new ZodIntersection({\n        left: left,\n        right: right,\n        typeName: ZodFirstPartyTypeKind.ZodIntersection,\n        ...processCreateParams(params),\n    });\n};\nclass ZodTuple extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.array) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.array,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        if (ctx.data.length < this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_small,\n                minimum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            return INVALID;\n        }\n        const rest = this._def.rest;\n        if (!rest && ctx.data.length > this._def.items.length) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.too_big,\n                maximum: this._def.items.length,\n                inclusive: true,\n                exact: false,\n                type: \"array\",\n            });\n            status.dirty();\n        }\n        const items = [...ctx.data]\n            .map((item, itemIndex) => {\n            const schema = this._def.items[itemIndex] || this._def.rest;\n            if (!schema)\n                return null;\n            return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));\n        })\n            .filter((x) => !!x); // filter nulls\n        if (ctx.common.async) {\n            return Promise.all(items).then((results) => {\n                return ParseStatus.mergeArray(status, results);\n            });\n        }\n        else {\n            return ParseStatus.mergeArray(status, items);\n        }\n    }\n    get items() {\n        return this._def.items;\n    }\n    rest(rest) {\n        return new ZodTuple({\n            ...this._def,\n            rest,\n        });\n    }\n}\nZodTuple.create = (schemas, params) => {\n    if (!Array.isArray(schemas)) {\n        throw new Error(\"You must pass an array of schemas to z.tuple([ ... ])\");\n    }\n    return new ZodTuple({\n        items: schemas,\n        typeName: ZodFirstPartyTypeKind.ZodTuple,\n        rest: null,\n        ...processCreateParams(params),\n    });\n};\nclass ZodRecord extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.object) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.object,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const pairs = [];\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        for (const key in ctx.data) {\n            pairs.push({\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),\n                value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),\n                alwaysSet: key in ctx.data,\n            });\n        }\n        if (ctx.common.async) {\n            return ParseStatus.mergeObjectAsync(status, pairs);\n        }\n        else {\n            return ParseStatus.mergeObjectSync(status, pairs);\n        }\n    }\n    get element() {\n        return this._def.valueType;\n    }\n    static create(first, second, third) {\n        if (second instanceof ZodType) {\n            return new ZodRecord({\n                keyType: first,\n                valueType: second,\n                typeName: ZodFirstPartyTypeKind.ZodRecord,\n                ...processCreateParams(third),\n            });\n        }\n        return new ZodRecord({\n            keyType: ZodString.create(),\n            valueType: first,\n            typeName: ZodFirstPartyTypeKind.ZodRecord,\n            ...processCreateParams(second),\n        });\n    }\n}\nclass ZodMap extends ZodType {\n    get keySchema() {\n        return this._def.keyType;\n    }\n    get valueSchema() {\n        return this._def.valueType;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.map) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.map,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const keyType = this._def.keyType;\n        const valueType = this._def.valueType;\n        const pairs = [...ctx.data.entries()].map(([key, value], index) => {\n            return {\n                key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index, \"key\"])),\n                value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index, \"value\"])),\n            };\n        });\n        if (ctx.common.async) {\n            const finalMap = new Map();\n            return Promise.resolve().then(async () => {\n                for (const pair of pairs) {\n                    const key = await pair.key;\n                    const value = await pair.value;\n                    if (key.status === \"aborted\" || value.status === \"aborted\") {\n                        return INVALID;\n                    }\n                    if (key.status === \"dirty\" || value.status === \"dirty\") {\n                        status.dirty();\n                    }\n                    finalMap.set(key.value, value.value);\n                }\n                return { status: status.value, value: finalMap };\n            });\n        }\n        else {\n            const finalMap = new Map();\n            for (const pair of pairs) {\n                const key = pair.key;\n                const value = pair.value;\n                if (key.status === \"aborted\" || value.status === \"aborted\") {\n                    return INVALID;\n                }\n                if (key.status === \"dirty\" || value.status === \"dirty\") {\n                    status.dirty();\n                }\n                finalMap.set(key.value, value.value);\n            }\n            return { status: status.value, value: finalMap };\n        }\n    }\n}\nZodMap.create = (keyType, valueType, params) => {\n    return new ZodMap({\n        valueType,\n        keyType,\n        typeName: ZodFirstPartyTypeKind.ZodMap,\n        ...processCreateParams(params),\n    });\n};\nclass ZodSet extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.set) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.set,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const def = this._def;\n        if (def.minSize !== null) {\n            if (ctx.data.size < def.minSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_small,\n                    minimum: def.minSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.minSize.message,\n                });\n                status.dirty();\n            }\n        }\n        if (def.maxSize !== null) {\n            if (ctx.data.size > def.maxSize.value) {\n                addIssueToContext(ctx, {\n                    code: ZodIssueCode.too_big,\n                    maximum: def.maxSize.value,\n                    type: \"set\",\n                    inclusive: true,\n                    exact: false,\n                    message: def.maxSize.message,\n                });\n                status.dirty();\n            }\n        }\n        const valueType = this._def.valueType;\n        function finalizeSet(elements) {\n            const parsedSet = new Set();\n            for (const element of elements) {\n                if (element.status === \"aborted\")\n                    return INVALID;\n                if (element.status === \"dirty\")\n                    status.dirty();\n                parsedSet.add(element.value);\n            }\n            return { status: status.value, value: parsedSet };\n        }\n        const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));\n        if (ctx.common.async) {\n            return Promise.all(elements).then((elements) => finalizeSet(elements));\n        }\n        else {\n            return finalizeSet(elements);\n        }\n    }\n    min(minSize, message) {\n        return new ZodSet({\n            ...this._def,\n            minSize: { value: minSize, message: errorUtil.toString(message) },\n        });\n    }\n    max(maxSize, message) {\n        return new ZodSet({\n            ...this._def,\n            maxSize: { value: maxSize, message: errorUtil.toString(message) },\n        });\n    }\n    size(size, message) {\n        return this.min(size, message).max(size, message);\n    }\n    nonempty(message) {\n        return this.min(1, message);\n    }\n}\nZodSet.create = (valueType, params) => {\n    return new ZodSet({\n        valueType,\n        minSize: null,\n        maxSize: null,\n        typeName: ZodFirstPartyTypeKind.ZodSet,\n        ...processCreateParams(params),\n    });\n};\nclass ZodFunction extends ZodType {\n    constructor() {\n        super(...arguments);\n        this.validate = this.implement;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.function) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.function,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        function makeArgsIssue(args, error) {\n            return makeIssue({\n                data: args,\n                path: ctx.path,\n                errorMaps: [\n                    ctx.common.contextualErrorMap,\n                    ctx.schemaErrorMap,\n                    getErrorMap(),\n                    errorMap,\n                ].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_arguments,\n                    argumentsError: error,\n                },\n            });\n        }\n        function makeReturnsIssue(returns, error) {\n            return makeIssue({\n                data: returns,\n                path: ctx.path,\n                errorMaps: [\n                    ctx.common.contextualErrorMap,\n                    ctx.schemaErrorMap,\n                    getErrorMap(),\n                    errorMap,\n                ].filter((x) => !!x),\n                issueData: {\n                    code: ZodIssueCode.invalid_return_type,\n                    returnTypeError: error,\n                },\n            });\n        }\n        const params = { errorMap: ctx.common.contextualErrorMap };\n        const fn = ctx.data;\n        if (this._def.returns instanceof ZodPromise) {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(async function (...args) {\n                const error = new ZodError([]);\n                const parsedArgs = await me._def.args\n                    .parseAsync(args, params)\n                    .catch((e) => {\n                    error.addIssue(makeArgsIssue(args, e));\n                    throw error;\n                });\n                const result = await Reflect.apply(fn, this, parsedArgs);\n                const parsedReturns = await me._def.returns._def.type\n                    .parseAsync(result, params)\n                    .catch((e) => {\n                    error.addIssue(makeReturnsIssue(result, e));\n                    throw error;\n                });\n                return parsedReturns;\n            });\n        }\n        else {\n            // Would love a way to avoid disabling this rule, but we need\n            // an alias (using an arrow function was what caused 2651).\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            const me = this;\n            return OK(function (...args) {\n                const parsedArgs = me._def.args.safeParse(args, params);\n                if (!parsedArgs.success) {\n                    throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);\n                }\n                const result = Reflect.apply(fn, this, parsedArgs.data);\n                const parsedReturns = me._def.returns.safeParse(result, params);\n                if (!parsedReturns.success) {\n                    throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);\n                }\n                return parsedReturns.data;\n            });\n        }\n    }\n    parameters() {\n        return this._def.args;\n    }\n    returnType() {\n        return this._def.returns;\n    }\n    args(...items) {\n        return new ZodFunction({\n            ...this._def,\n            args: ZodTuple.create(items).rest(ZodUnknown.create()),\n        });\n    }\n    returns(returnType) {\n        return new ZodFunction({\n            ...this._def,\n            returns: returnType,\n        });\n    }\n    implement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    strictImplement(func) {\n        const validatedFunc = this.parse(func);\n        return validatedFunc;\n    }\n    static create(args, returns, params) {\n        return new ZodFunction({\n            args: (args\n                ? args\n                : ZodTuple.create([]).rest(ZodUnknown.create())),\n            returns: returns || ZodUnknown.create(),\n            typeName: ZodFirstPartyTypeKind.ZodFunction,\n            ...processCreateParams(params),\n        });\n    }\n}\nclass ZodLazy extends ZodType {\n    get schema() {\n        return this._def.getter();\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const lazySchema = this._def.getter();\n        return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });\n    }\n}\nZodLazy.create = (getter, params) => {\n    return new ZodLazy({\n        getter: getter,\n        typeName: ZodFirstPartyTypeKind.ZodLazy,\n        ...processCreateParams(params),\n    });\n};\nclass ZodLiteral extends ZodType {\n    _parse(input) {\n        if (input.data !== this._def.value) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_literal,\n                expected: this._def.value,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n    get value() {\n        return this._def.value;\n    }\n}\nZodLiteral.create = (value, params) => {\n    return new ZodLiteral({\n        value: value,\n        typeName: ZodFirstPartyTypeKind.ZodLiteral,\n        ...processCreateParams(params),\n    });\n};\nfunction createZodEnum(values, params) {\n    return new ZodEnum({\n        values,\n        typeName: ZodFirstPartyTypeKind.ZodEnum,\n        ...processCreateParams(params),\n    });\n}\nclass ZodEnum extends ZodType {\n    constructor() {\n        super(...arguments);\n        _ZodEnum_cache.set(this, void 0);\n    }\n    _parse(input) {\n        if (typeof input.data !== \"string\") {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\")) {\n            __classPrivateFieldSet(this, _ZodEnum_cache, new Set(this._def.values), \"f\");\n        }\n        if (!__classPrivateFieldGet(this, _ZodEnum_cache, \"f\").has(input.data)) {\n            const ctx = this._getOrReturnCtx(input);\n            const expectedValues = this._def.values;\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get options() {\n        return this._def.values;\n    }\n    get enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Values() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    get Enum() {\n        const enumValues = {};\n        for (const val of this._def.values) {\n            enumValues[val] = val;\n        }\n        return enumValues;\n    }\n    extract(values, newDef = this._def) {\n        return ZodEnum.create(values, {\n            ...this._def,\n            ...newDef,\n        });\n    }\n    exclude(values, newDef = this._def) {\n        return ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {\n            ...this._def,\n            ...newDef,\n        });\n    }\n}\n_ZodEnum_cache = new WeakMap();\nZodEnum.create = createZodEnum;\nclass ZodNativeEnum extends ZodType {\n    constructor() {\n        super(...arguments);\n        _ZodNativeEnum_cache.set(this, void 0);\n    }\n    _parse(input) {\n        const nativeEnumValues = util.getValidEnumValues(this._def.values);\n        const ctx = this._getOrReturnCtx(input);\n        if (ctx.parsedType !== ZodParsedType.string &&\n            ctx.parsedType !== ZodParsedType.number) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                expected: util.joinValues(expectedValues),\n                received: ctx.parsedType,\n                code: ZodIssueCode.invalid_type,\n            });\n            return INVALID;\n        }\n        if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\")) {\n            __classPrivateFieldSet(this, _ZodNativeEnum_cache, new Set(util.getValidEnumValues(this._def.values)), \"f\");\n        }\n        if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, \"f\").has(input.data)) {\n            const expectedValues = util.objectValues(nativeEnumValues);\n            addIssueToContext(ctx, {\n                received: ctx.data,\n                code: ZodIssueCode.invalid_enum_value,\n                options: expectedValues,\n            });\n            return INVALID;\n        }\n        return OK(input.data);\n    }\n    get enum() {\n        return this._def.values;\n    }\n}\n_ZodNativeEnum_cache = new WeakMap();\nZodNativeEnum.create = (values, params) => {\n    return new ZodNativeEnum({\n        values: values,\n        typeName: ZodFirstPartyTypeKind.ZodNativeEnum,\n        ...processCreateParams(params),\n    });\n};\nclass ZodPromise extends ZodType {\n    unwrap() {\n        return this._def.type;\n    }\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        if (ctx.parsedType !== ZodParsedType.promise &&\n            ctx.common.async === false) {\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.promise,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        const promisified = ctx.parsedType === ZodParsedType.promise\n            ? ctx.data\n            : Promise.resolve(ctx.data);\n        return OK(promisified.then((data) => {\n            return this._def.type.parseAsync(data, {\n                path: ctx.path,\n                errorMap: ctx.common.contextualErrorMap,\n            });\n        }));\n    }\n}\nZodPromise.create = (schema, params) => {\n    return new ZodPromise({\n        type: schema,\n        typeName: ZodFirstPartyTypeKind.ZodPromise,\n        ...processCreateParams(params),\n    });\n};\nclass ZodEffects extends ZodType {\n    innerType() {\n        return this._def.schema;\n    }\n    sourceType() {\n        return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects\n            ? this._def.schema.sourceType()\n            : this._def.schema;\n    }\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        const effect = this._def.effect || null;\n        const checkCtx = {\n            addIssue: (arg) => {\n                addIssueToContext(ctx, arg);\n                if (arg.fatal) {\n                    status.abort();\n                }\n                else {\n                    status.dirty();\n                }\n            },\n            get path() {\n                return ctx.path;\n            },\n        };\n        checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);\n        if (effect.type === \"preprocess\") {\n            const processed = effect.transform(ctx.data, checkCtx);\n            if (ctx.common.async) {\n                return Promise.resolve(processed).then(async (processed) => {\n                    if (status.value === \"aborted\")\n                        return INVALID;\n                    const result = await this._def.schema._parseAsync({\n                        data: processed,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                    if (result.status === \"aborted\")\n                        return INVALID;\n                    if (result.status === \"dirty\")\n                        return DIRTY(result.value);\n                    if (status.value === \"dirty\")\n                        return DIRTY(result.value);\n                    return result;\n                });\n            }\n            else {\n                if (status.value === \"aborted\")\n                    return INVALID;\n                const result = this._def.schema._parseSync({\n                    data: processed,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (result.status === \"aborted\")\n                    return INVALID;\n                if (result.status === \"dirty\")\n                    return DIRTY(result.value);\n                if (status.value === \"dirty\")\n                    return DIRTY(result.value);\n                return result;\n            }\n        }\n        if (effect.type === \"refinement\") {\n            const executeRefinement = (acc) => {\n                const result = effect.refinement(acc, checkCtx);\n                if (ctx.common.async) {\n                    return Promise.resolve(result);\n                }\n                if (result instanceof Promise) {\n                    throw new Error(\"Async refinement encountered during synchronous parse operation. Use .parseAsync instead.\");\n                }\n                return acc;\n            };\n            if (ctx.common.async === false) {\n                const inner = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inner.status === \"aborted\")\n                    return INVALID;\n                if (inner.status === \"dirty\")\n                    status.dirty();\n                // return value is ignored\n                executeRefinement(inner.value);\n                return { status: status.value, value: inner.value };\n            }\n            else {\n                return this._def.schema\n                    ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n                    .then((inner) => {\n                    if (inner.status === \"aborted\")\n                        return INVALID;\n                    if (inner.status === \"dirty\")\n                        status.dirty();\n                    return executeRefinement(inner.value).then(() => {\n                        return { status: status.value, value: inner.value };\n                    });\n                });\n            }\n        }\n        if (effect.type === \"transform\") {\n            if (ctx.common.async === false) {\n                const base = this._def.schema._parseSync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (!isValid(base))\n                    return base;\n                const result = effect.transform(base.value, checkCtx);\n                if (result instanceof Promise) {\n                    throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);\n                }\n                return { status: status.value, value: result };\n            }\n            else {\n                return this._def.schema\n                    ._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx })\n                    .then((base) => {\n                    if (!isValid(base))\n                        return base;\n                    return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));\n                });\n            }\n        }\n        util.assertNever(effect);\n    }\n}\nZodEffects.create = (schema, effect, params) => {\n    return new ZodEffects({\n        schema,\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        effect,\n        ...processCreateParams(params),\n    });\n};\nZodEffects.createWithPreprocess = (preprocess, schema, params) => {\n    return new ZodEffects({\n        schema,\n        effect: { type: \"preprocess\", transform: preprocess },\n        typeName: ZodFirstPartyTypeKind.ZodEffects,\n        ...processCreateParams(params),\n    });\n};\nclass ZodOptional extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.undefined) {\n            return OK(undefined);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodOptional.create = (type, params) => {\n    return new ZodOptional({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodOptional,\n        ...processCreateParams(params),\n    });\n};\nclass ZodNullable extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType === ZodParsedType.null) {\n            return OK(null);\n        }\n        return this._def.innerType._parse(input);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodNullable.create = (type, params) => {\n    return new ZodNullable({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodNullable,\n        ...processCreateParams(params),\n    });\n};\nclass ZodDefault extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        let data = ctx.data;\n        if (ctx.parsedType === ZodParsedType.undefined) {\n            data = this._def.defaultValue();\n        }\n        return this._def.innerType._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    removeDefault() {\n        return this._def.innerType;\n    }\n}\nZodDefault.create = (type, params) => {\n    return new ZodDefault({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodDefault,\n        defaultValue: typeof params.default === \"function\"\n            ? params.default\n            : () => params.default,\n        ...processCreateParams(params),\n    });\n};\nclass ZodCatch extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        // newCtx is used to not collect issues from inner types in ctx\n        const newCtx = {\n            ...ctx,\n            common: {\n                ...ctx.common,\n                issues: [],\n            },\n        };\n        const result = this._def.innerType._parse({\n            data: newCtx.data,\n            path: newCtx.path,\n            parent: {\n                ...newCtx,\n            },\n        });\n        if (isAsync(result)) {\n            return result.then((result) => {\n                return {\n                    status: \"valid\",\n                    value: result.status === \"valid\"\n                        ? result.value\n                        : this._def.catchValue({\n                            get error() {\n                                return new ZodError(newCtx.common.issues);\n                            },\n                            input: newCtx.data,\n                        }),\n                };\n            });\n        }\n        else {\n            return {\n                status: \"valid\",\n                value: result.status === \"valid\"\n                    ? result.value\n                    : this._def.catchValue({\n                        get error() {\n                            return new ZodError(newCtx.common.issues);\n                        },\n                        input: newCtx.data,\n                    }),\n            };\n        }\n    }\n    removeCatch() {\n        return this._def.innerType;\n    }\n}\nZodCatch.create = (type, params) => {\n    return new ZodCatch({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodCatch,\n        catchValue: typeof params.catch === \"function\" ? params.catch : () => params.catch,\n        ...processCreateParams(params),\n    });\n};\nclass ZodNaN extends ZodType {\n    _parse(input) {\n        const parsedType = this._getType(input);\n        if (parsedType !== ZodParsedType.nan) {\n            const ctx = this._getOrReturnCtx(input);\n            addIssueToContext(ctx, {\n                code: ZodIssueCode.invalid_type,\n                expected: ZodParsedType.nan,\n                received: ctx.parsedType,\n            });\n            return INVALID;\n        }\n        return { status: \"valid\", value: input.data };\n    }\n}\nZodNaN.create = (params) => {\n    return new ZodNaN({\n        typeName: ZodFirstPartyTypeKind.ZodNaN,\n        ...processCreateParams(params),\n    });\n};\nconst BRAND = Symbol(\"zod_brand\");\nclass ZodBranded extends ZodType {\n    _parse(input) {\n        const { ctx } = this._processInputParams(input);\n        const data = ctx.data;\n        return this._def.type._parse({\n            data,\n            path: ctx.path,\n            parent: ctx,\n        });\n    }\n    unwrap() {\n        return this._def.type;\n    }\n}\nclass ZodPipeline extends ZodType {\n    _parse(input) {\n        const { status, ctx } = this._processInputParams(input);\n        if (ctx.common.async) {\n            const handleAsync = async () => {\n                const inResult = await this._def.in._parseAsync({\n                    data: ctx.data,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n                if (inResult.status === \"aborted\")\n                    return INVALID;\n                if (inResult.status === \"dirty\") {\n                    status.dirty();\n                    return DIRTY(inResult.value);\n                }\n                else {\n                    return this._def.out._parseAsync({\n                        data: inResult.value,\n                        path: ctx.path,\n                        parent: ctx,\n                    });\n                }\n            };\n            return handleAsync();\n        }\n        else {\n            const inResult = this._def.in._parseSync({\n                data: ctx.data,\n                path: ctx.path,\n                parent: ctx,\n            });\n            if (inResult.status === \"aborted\")\n                return INVALID;\n            if (inResult.status === \"dirty\") {\n                status.dirty();\n                return {\n                    status: \"dirty\",\n                    value: inResult.value,\n                };\n            }\n            else {\n                return this._def.out._parseSync({\n                    data: inResult.value,\n                    path: ctx.path,\n                    parent: ctx,\n                });\n            }\n        }\n    }\n    static create(a, b) {\n        return new ZodPipeline({\n            in: a,\n            out: b,\n            typeName: ZodFirstPartyTypeKind.ZodPipeline,\n        });\n    }\n}\nclass ZodReadonly extends ZodType {\n    _parse(input) {\n        const result = this._def.innerType._parse(input);\n        const freeze = (data) => {\n            if (isValid(data)) {\n                data.value = Object.freeze(data.value);\n            }\n            return data;\n        };\n        return isAsync(result)\n            ? result.then((data) => freeze(data))\n            : freeze(result);\n    }\n    unwrap() {\n        return this._def.innerType;\n    }\n}\nZodReadonly.create = (type, params) => {\n    return new ZodReadonly({\n        innerType: type,\n        typeName: ZodFirstPartyTypeKind.ZodReadonly,\n        ...processCreateParams(params),\n    });\n};\nfunction custom(check, params = {}, \n/**\n * @deprecated\n *\n * Pass `fatal` into the params object instead:\n *\n * ```ts\n * z.string().custom((val) => val.length > 5, { fatal: false })\n * ```\n *\n */\nfatal) {\n    if (check)\n        return ZodAny.create().superRefine((data, ctx) => {\n            var _a, _b;\n            if (!check(data)) {\n                const p = typeof params === \"function\"\n                    ? params(data)\n                    : typeof params === \"string\"\n                        ? { message: params }\n                        : params;\n                const _fatal = (_b = (_a = p.fatal) !== null && _a !== void 0 ? _a : fatal) !== null && _b !== void 0 ? _b : true;\n                const p2 = typeof p === \"string\" ? { message: p } : p;\n                ctx.addIssue({ code: \"custom\", ...p2, fatal: _fatal });\n            }\n        });\n    return ZodAny.create();\n}\nconst late = {\n    object: ZodObject.lazycreate,\n};\nvar ZodFirstPartyTypeKind;\n(function (ZodFirstPartyTypeKind) {\n    ZodFirstPartyTypeKind[\"ZodString\"] = \"ZodString\";\n    ZodFirstPartyTypeKind[\"ZodNumber\"] = \"ZodNumber\";\n    ZodFirstPartyTypeKind[\"ZodNaN\"] = \"ZodNaN\";\n    ZodFirstPartyTypeKind[\"ZodBigInt\"] = \"ZodBigInt\";\n    ZodFirstPartyTypeKind[\"ZodBoolean\"] = \"ZodBoolean\";\n    ZodFirstPartyTypeKind[\"ZodDate\"] = \"ZodDate\";\n    ZodFirstPartyTypeKind[\"ZodSymbol\"] = \"ZodSymbol\";\n    ZodFirstPartyTypeKind[\"ZodUndefined\"] = \"ZodUndefined\";\n    ZodFirstPartyTypeKind[\"ZodNull\"] = \"ZodNull\";\n    ZodFirstPartyTypeKind[\"ZodAny\"] = \"ZodAny\";\n    ZodFirstPartyTypeKind[\"ZodUnknown\"] = \"ZodUnknown\";\n    ZodFirstPartyTypeKind[\"ZodNever\"] = \"ZodNever\";\n    ZodFirstPartyTypeKind[\"ZodVoid\"] = \"ZodVoid\";\n    ZodFirstPartyTypeKind[\"ZodArray\"] = \"ZodArray\";\n    ZodFirstPartyTypeKind[\"ZodObject\"] = \"ZodObject\";\n    ZodFirstPartyTypeKind[\"ZodUnion\"] = \"ZodUnion\";\n    ZodFirstPartyTypeKind[\"ZodDiscriminatedUnion\"] = \"ZodDiscriminatedUnion\";\n    ZodFirstPartyTypeKind[\"ZodIntersection\"] = \"ZodIntersection\";\n    ZodFirstPartyTypeKind[\"ZodTuple\"] = \"ZodTuple\";\n    ZodFirstPartyTypeKind[\"ZodRecord\"] = \"ZodRecord\";\n    ZodFirstPartyTypeKind[\"ZodMap\"] = \"ZodMap\";\n    ZodFirstPartyTypeKind[\"ZodSet\"] = \"ZodSet\";\n    ZodFirstPartyTypeKind[\"ZodFunction\"] = \"ZodFunction\";\n    ZodFirstPartyTypeKind[\"ZodLazy\"] = \"ZodLazy\";\n    ZodFirstPartyTypeKind[\"ZodLiteral\"] = \"ZodLiteral\";\n    ZodFirstPartyTypeKind[\"ZodEnum\"] = \"ZodEnum\";\n    ZodFirstPartyTypeKind[\"ZodEffects\"] = \"ZodEffects\";\n    ZodFirstPartyTypeKind[\"ZodNativeEnum\"] = \"ZodNativeEnum\";\n    ZodFirstPartyTypeKind[\"ZodOptional\"] = \"ZodOptional\";\n    ZodFirstPartyTypeKind[\"ZodNullable\"] = \"ZodNullable\";\n    ZodFirstPartyTypeKind[\"ZodDefault\"] = \"ZodDefault\";\n    ZodFirstPartyTypeKind[\"ZodCatch\"] = \"ZodCatch\";\n    ZodFirstPartyTypeKind[\"ZodPromise\"] = \"ZodPromise\";\n    ZodFirstPartyTypeKind[\"ZodBranded\"] = \"ZodBranded\";\n    ZodFirstPartyTypeKind[\"ZodPipeline\"] = \"ZodPipeline\";\n    ZodFirstPartyTypeKind[\"ZodReadonly\"] = \"ZodReadonly\";\n})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));\nconst instanceOfType = (\n// const instanceOfType = <T extends new (...args: any[]) => any>(\ncls, params = {\n    message: `Input not instance of ${cls.name}`,\n}) => custom((data) => data instanceof cls, params);\nconst stringType = ZodString.create;\nconst numberType = ZodNumber.create;\nconst nanType = ZodNaN.create;\nconst bigIntType = ZodBigInt.create;\nconst booleanType = ZodBoolean.create;\nconst dateType = ZodDate.create;\nconst symbolType = ZodSymbol.create;\nconst undefinedType = ZodUndefined.create;\nconst nullType = ZodNull.create;\nconst anyType = ZodAny.create;\nconst unknownType = ZodUnknown.create;\nconst neverType = ZodNever.create;\nconst voidType = ZodVoid.create;\nconst arrayType = ZodArray.create;\nconst objectType = ZodObject.create;\nconst strictObjectType = ZodObject.strictCreate;\nconst unionType = ZodUnion.create;\nconst discriminatedUnionType = ZodDiscriminatedUnion.create;\nconst intersectionType = ZodIntersection.create;\nconst tupleType = ZodTuple.create;\nconst recordType = ZodRecord.create;\nconst mapType = ZodMap.create;\nconst setType = ZodSet.create;\nconst functionType = ZodFunction.create;\nconst lazyType = ZodLazy.create;\nconst literalType = ZodLiteral.create;\nconst enumType = ZodEnum.create;\nconst nativeEnumType = ZodNativeEnum.create;\nconst promiseType = ZodPromise.create;\nconst effectsType = ZodEffects.create;\nconst optionalType = ZodOptional.create;\nconst nullableType = ZodNullable.create;\nconst preprocessType = ZodEffects.createWithPreprocess;\nconst pipelineType = ZodPipeline.create;\nconst ostring = () => stringType().optional();\nconst onumber = () => numberType().optional();\nconst oboolean = () => booleanType().optional();\nconst coerce = {\n    string: ((arg) => ZodString.create({ ...arg, coerce: true })),\n    number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),\n    boolean: ((arg) => ZodBoolean.create({\n        ...arg,\n        coerce: true,\n    })),\n    bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),\n    date: ((arg) => ZodDate.create({ ...arg, coerce: true })),\n};\nconst NEVER = INVALID;\n\nvar z = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    defaultErrorMap: errorMap,\n    setErrorMap: setErrorMap,\n    getErrorMap: getErrorMap,\n    makeIssue: makeIssue,\n    EMPTY_PATH: EMPTY_PATH,\n    addIssueToContext: addIssueToContext,\n    ParseStatus: ParseStatus,\n    INVALID: INVALID,\n    DIRTY: DIRTY,\n    OK: OK,\n    isAborted: isAborted,\n    isDirty: isDirty,\n    isValid: isValid,\n    isAsync: isAsync,\n    get util () { return util; },\n    get objectUtil () { return objectUtil; },\n    ZodParsedType: ZodParsedType,\n    getParsedType: getParsedType,\n    ZodType: ZodType,\n    datetimeRegex: datetimeRegex,\n    ZodString: ZodString,\n    ZodNumber: ZodNumber,\n    ZodBigInt: ZodBigInt,\n    ZodBoolean: ZodBoolean,\n    ZodDate: ZodDate,\n    ZodSymbol: ZodSymbol,\n    ZodUndefined: ZodUndefined,\n    ZodNull: ZodNull,\n    ZodAny: ZodAny,\n    ZodUnknown: ZodUnknown,\n    ZodNever: ZodNever,\n    ZodVoid: ZodVoid,\n    ZodArray: ZodArray,\n    ZodObject: ZodObject,\n    ZodUnion: ZodUnion,\n    ZodDiscriminatedUnion: ZodDiscriminatedUnion,\n    ZodIntersection: ZodIntersection,\n    ZodTuple: ZodTuple,\n    ZodRecord: ZodRecord,\n    ZodMap: ZodMap,\n    ZodSet: ZodSet,\n    ZodFunction: ZodFunction,\n    ZodLazy: ZodLazy,\n    ZodLiteral: ZodLiteral,\n    ZodEnum: ZodEnum,\n    ZodNativeEnum: ZodNativeEnum,\n    ZodPromise: ZodPromise,\n    ZodEffects: ZodEffects,\n    ZodTransformer: ZodEffects,\n    ZodOptional: ZodOptional,\n    ZodNullable: ZodNullable,\n    ZodDefault: ZodDefault,\n    ZodCatch: ZodCatch,\n    ZodNaN: ZodNaN,\n    BRAND: BRAND,\n    ZodBranded: ZodBranded,\n    ZodPipeline: ZodPipeline,\n    ZodReadonly: ZodReadonly,\n    custom: custom,\n    Schema: ZodType,\n    ZodSchema: ZodType,\n    late: late,\n    get ZodFirstPartyTypeKind () { return ZodFirstPartyTypeKind; },\n    coerce: coerce,\n    any: anyType,\n    array: arrayType,\n    bigint: bigIntType,\n    boolean: booleanType,\n    date: dateType,\n    discriminatedUnion: discriminatedUnionType,\n    effect: effectsType,\n    'enum': enumType,\n    'function': functionType,\n    'instanceof': instanceOfType,\n    intersection: intersectionType,\n    lazy: lazyType,\n    literal: literalType,\n    map: mapType,\n    nan: nanType,\n    nativeEnum: nativeEnumType,\n    never: neverType,\n    'null': nullType,\n    nullable: nullableType,\n    number: numberType,\n    object: objectType,\n    oboolean: oboolean,\n    onumber: onumber,\n    optional: optionalType,\n    ostring: ostring,\n    pipeline: pipelineType,\n    preprocess: preprocessType,\n    promise: promiseType,\n    record: recordType,\n    set: setType,\n    strictObject: strictObjectType,\n    string: stringType,\n    symbol: symbolType,\n    transformer: effectsType,\n    tuple: tupleType,\n    'undefined': undefinedType,\n    union: unionType,\n    unknown: unknownType,\n    'void': voidType,\n    NEVER: NEVER,\n    ZodIssueCode: ZodIssueCode,\n    quotelessJson: quotelessJson,\n    ZodError: ZodError\n});\n\nexport { BRAND, DIRTY, EMPTY_PATH, INVALID, NEVER, OK, ParseStatus, ZodType as Schema, ZodAny, ZodArray, ZodBigInt, ZodBoolean, ZodBranded, ZodCatch, ZodDate, ZodDefault, ZodDiscriminatedUnion, ZodEffects, ZodEnum, ZodError, ZodFirstPartyTypeKind, ZodFunction, ZodIntersection, ZodIssueCode, ZodLazy, ZodLiteral, ZodMap, ZodNaN, ZodNativeEnum, ZodNever, ZodNull, ZodNullable, ZodNumber, ZodObject, ZodOptional, ZodParsedType, ZodPipeline, ZodPromise, ZodReadonly, ZodRecord, ZodType as ZodSchema, ZodSet, ZodString, ZodSymbol, ZodEffects as ZodTransformer, ZodTuple, ZodType, ZodUndefined, ZodUnion, ZodUnknown, ZodVoid, addIssueToContext, anyType as any, arrayType as array, bigIntType as bigint, booleanType as boolean, coerce, custom, dateType as date, datetimeRegex, z as default, errorMap as defaultErrorMap, discriminatedUnionType as discriminatedUnion, effectsType as effect, enumType as enum, functionType as function, getErrorMap, getParsedType, instanceOfType as instanceof, intersectionType as intersection, isAborted, isAsync, isDirty, isValid, late, lazyType as lazy, literalType as literal, makeIssue, mapType as map, nanType as nan, nativeEnumType as nativeEnum, neverType as never, nullType as null, nullableType as nullable, numberType as number, objectType as object, objectUtil, oboolean, onumber, optionalType as optional, ostring, pipelineType as pipeline, preprocessType as preprocess, promiseType as promise, quotelessJson, recordType as record, setType as set, setErrorMap, strictObjectType as strictObject, stringType as string, symbolType as symbol, effectsType as transformer, tupleType as tuple, undefinedType as undefined, unionType as union, unknownType as unknown, util, voidType as void, z };\n","//#region src/lib/tracingRegistry.ts\nconst EXTRACTOR_KEY = Symbol.for(\"@supabase/supabase-js.traceContextExtractor\");\n/**\n* Register the trace context extractor used by all Supabase clients in this\n* process. Called by the `@supabase/supabase-js/tracing` subpath as an import\n* side effect; the last registration wins.\n*/\nfunction registerTraceContextExtractor(extractor) {\n\tglobalThis[EXTRACTOR_KEY] = extractor;\n}\n/**\n* The currently registered trace context extractor, if any.\n*/\nfunction getTraceContextExtractor() {\n\treturn globalThis[EXTRACTOR_KEY];\n}\n\n//#endregion\nexport { registerTraceContextExtractor as n, getTraceContextExtractor as t };\n//# sourceMappingURL=tracingRegistry.mjs.map","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n  extendStatics = Object.setPrototypeOf ||\n      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n  return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n  if (typeof b !== \"function\" && b !== null)\n      throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n  extendStatics(d, b);\n  function __() { this.constructor = d; }\n  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n  __assign = Object.assign || function __assign(t) {\n      for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n      }\n      return t;\n  }\n  return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n  var t = {};\n  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n      t[p] = s[p];\n  if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n      for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n          if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n              t[p[i]] = s[p[i]];\n      }\n  return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n  if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n  return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n  return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n  function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n  var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n  var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n  var _, done = false;\n  for (var i = decorators.length - 1; i >= 0; i--) {\n      var context = {};\n      for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n      for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n      context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n      var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n      if (kind === \"accessor\") {\n          if (result === void 0) continue;\n          if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n          if (_ = accept(result.get)) descriptor.get = _;\n          if (_ = accept(result.set)) descriptor.set = _;\n          if (_ = accept(result.init)) initializers.unshift(_);\n      }\n      else if (_ = accept(result)) {\n          if (kind === \"field\") initializers.unshift(_);\n          else descriptor[key] = _;\n      }\n  }\n  if (target) Object.defineProperty(target, contextIn.name, descriptor);\n  done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n  var useValue = arguments.length > 2;\n  for (var i = 0; i < initializers.length; i++) {\n      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n  }\n  return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n  return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n  if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n  return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n  if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n  return new (P || (P = Promise))(function (resolve, reject) {\n      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n      function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n      step((generator = generator.apply(thisArg, _arguments || [])).next());\n  });\n}\n\nexport function __generator(thisArg, body) {\n  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n  return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n  function verb(n) { return function (v) { return step([n, v]); }; }\n  function step(op) {\n      if (f) throw new TypeError(\"Generator is already executing.\");\n      while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n              case 0: case 1: t = op; break;\n              case 4: _.label++; return { value: op[1], done: false };\n              case 5: _.label++; y = op[1]; op = [0]; continue;\n              case 7: op = _.ops.pop(); _.trys.pop(); continue;\n              default:\n                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n                  if (t[2]) _.ops.pop();\n                  _.trys.pop(); continue;\n          }\n          op = body.call(thisArg, _);\n      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n  }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  var desc = Object.getOwnPropertyDescriptor(m, k);\n  if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n      desc = { enumerable: true, get: function() { return m[k]; } };\n  }\n  Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n  if (k2 === undefined) k2 = k;\n  o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n  for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n  var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n  if (m) return m.call(o);\n  if (o && typeof o.length === \"number\") return {\n      next: function () {\n          if (o && i >= o.length) o = void 0;\n          return { value: o && o[i++], done: !o };\n      }\n  };\n  throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n  var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n  if (!m) return o;\n  var i = m.call(o), r, ar = [], e;\n  try {\n      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n  }\n  catch (error) { e = { error: error }; }\n  finally {\n      try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n      }\n      finally { if (e) throw e.error; }\n  }\n  return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n  for (var ar = [], i = 0; i < arguments.length; i++)\n      ar = ar.concat(__read(arguments[i]));\n  return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n  for (var r = Array(s), k = 0, i = 0; i < il; i++)\n      for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n          r[k] = a[j];\n  return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n      if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n      }\n  }\n  return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n  return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var g = generator.apply(thisArg, _arguments || []), i, q = [];\n  return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n  function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n  function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n  function fulfill(value) { resume(\"next\", value); }\n  function reject(value) { resume(\"throw\", value); }\n  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n  var i, p;\n  return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n  function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n  if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n  var m = o[Symbol.asyncIterator], i;\n  return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n  if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n  return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n  Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n  o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n  ownKeys = Object.getOwnPropertyNames || function (o) {\n    var ar = [];\n    for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n    return ar;\n  };\n  return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n  if (mod && mod.__esModule) return mod;\n  var result = {};\n  if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n  __setModuleDefault(result, mod);\n  return result;\n}\n\nexport function __importDefault(mod) {\n  return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n  return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n  if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n  if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n  if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n  return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n  if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n  return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n  if (value !== null && value !== void 0) {\n    if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n    var dispose, inner;\n    if (async) {\n      if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n      dispose = value[Symbol.asyncDispose];\n    }\n    if (dispose === void 0) {\n      if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n      dispose = value[Symbol.dispose];\n      if (async) inner = dispose;\n    }\n    if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n    if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n    env.stack.push({ value: value, dispose: dispose, async: async });\n  }\n  else if (async) {\n    env.stack.push({ async: true });\n  }\n  return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n  var e = new Error(message);\n  return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n  function fail(e) {\n    env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n    env.hasError = true;\n  }\n  var r, s = 0;\n  function next() {\n    while (r = env.stack.pop()) {\n      try {\n        if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n        if (r.dispose) {\n          var result = r.dispose.call(r.value);\n          if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n        }\n        else s |= 1;\n      }\n      catch (e) {\n        fail(e);\n      }\n    }\n    if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n    if (env.hasError) throw env.error;\n  }\n  return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n  if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n      return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n          return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n      });\n  }\n  return path;\n}\n\nexport default {\n  __extends,\n  __assign,\n  __rest,\n  __decorate,\n  __param,\n  __esDecorate,\n  __runInitializers,\n  __propKey,\n  __setFunctionName,\n  __metadata,\n  __awaiter,\n  __generator,\n  __createBinding,\n  __exportStar,\n  __values,\n  __read,\n  __spread,\n  __spreadArrays,\n  __spreadArray,\n  __await,\n  __asyncGenerator,\n  __asyncDelegator,\n  __asyncValues,\n  __makeTemplateObject,\n  __importStar,\n  __importDefault,\n  __classPrivateFieldGet,\n  __classPrivateFieldSet,\n  __classPrivateFieldIn,\n  __addDisposableResource,\n  __disposeResources,\n  __rewriteRelativeImportExtension,\n};\n","export const resolveFetch = (customFetch) => {\n    if (customFetch) {\n        return (...args) => customFetch(...args);\n    }\n    return (...args) => fetch(...args);\n};\n//# sourceMappingURL=helper.js.map","/**\n * Base error for Supabase Edge Function invocations.\n *\n * @example\n * ```ts\n * import { FunctionsError } from '@supabase/functions-js'\n *\n * throw new FunctionsError('Unexpected error invoking function', 'FunctionsError', {\n *   requestId: 'abc123',\n * })\n * ```\n */\nexport class FunctionsError extends Error {\n    constructor(message, name = 'FunctionsError', context) {\n        super(message);\n        this.name = name;\n        this.context = context;\n    }\n    toJSON() {\n        return {\n            name: this.name,\n            message: this.message,\n            context: this.context,\n        };\n    }\n}\n/**\n * Error thrown when the network request to an Edge Function fails.\n *\n * @example\n * ```ts\n * import { FunctionsFetchError } from '@supabase/functions-js'\n *\n * throw new FunctionsFetchError({ requestId: 'abc123' })\n * ```\n */\nexport class FunctionsFetchError extends FunctionsError {\n    constructor(context) {\n        super('Failed to send a request to the Edge Function', 'FunctionsFetchError', context);\n    }\n}\n/**\n * Error thrown when the Supabase relay cannot reach the Edge Function.\n *\n * @example\n * ```ts\n * import { FunctionsRelayError } from '@supabase/functions-js'\n *\n * throw new FunctionsRelayError({ region: 'us-east-1' })\n * ```\n */\nexport class FunctionsRelayError extends FunctionsError {\n    constructor(context) {\n        super('Relay Error invoking the Edge Function', 'FunctionsRelayError', context);\n    }\n}\n/**\n * Error thrown when the Edge Function returns a non-2xx status code.\n *\n * @example\n * ```ts\n * import { FunctionsHttpError } from '@supabase/functions-js'\n *\n * throw new FunctionsHttpError({ status: 500 })\n * ```\n */\nexport class FunctionsHttpError extends FunctionsError {\n    constructor(context) {\n        super('Edge Function returned a non-2xx status code', 'FunctionsHttpError', context);\n    }\n}\n// Define the enum for the 'region' property\nexport var FunctionRegion;\n(function (FunctionRegion) {\n    FunctionRegion[\"Any\"] = \"any\";\n    FunctionRegion[\"ApNortheast1\"] = \"ap-northeast-1\";\n    FunctionRegion[\"ApNortheast2\"] = \"ap-northeast-2\";\n    FunctionRegion[\"ApSouth1\"] = \"ap-south-1\";\n    FunctionRegion[\"ApSoutheast1\"] = \"ap-southeast-1\";\n    FunctionRegion[\"ApSoutheast2\"] = \"ap-southeast-2\";\n    FunctionRegion[\"CaCentral1\"] = \"ca-central-1\";\n    FunctionRegion[\"EuCentral1\"] = \"eu-central-1\";\n    FunctionRegion[\"EuWest1\"] = \"eu-west-1\";\n    FunctionRegion[\"EuWest2\"] = \"eu-west-2\";\n    FunctionRegion[\"EuWest3\"] = \"eu-west-3\";\n    FunctionRegion[\"SaEast1\"] = \"sa-east-1\";\n    FunctionRegion[\"UsEast1\"] = \"us-east-1\";\n    FunctionRegion[\"UsWest1\"] = \"us-west-1\";\n    FunctionRegion[\"UsWest2\"] = \"us-west-2\";\n})(FunctionRegion || (FunctionRegion = {}));\n//# sourceMappingURL=types.js.map","import { __awaiter } from \"tslib\";\nimport { resolveFetch } from './helper';\nimport { FunctionRegion, FunctionsFetchError, FunctionsHttpError, FunctionsRelayError, } from './types';\n/**\n * Client for invoking Supabase Edge Functions.\n */\nexport class FunctionsClient {\n    /**\n     * Creates a new Functions client bound to an Edge Functions URL.\n     *\n     * @example Using supabase-js (recommended)\n     * ```ts\n     * import { createClient } from '@supabase/supabase-js'\n     *\n     * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n     * const { data, error } = await supabase.functions.invoke('hello-world')\n     * ```\n     *\n     * @category Edge Functions\n     *\n     * @example Standalone import for bundle-sensitive environments\n     * ```ts\n     * import { FunctionsClient, FunctionRegion } from '@supabase/functions-js'\n     *\n     * const functions = new FunctionsClient('https://xyzcompany.supabase.co/functions/v1', {\n     *   headers: { apikey: 'your-publishable-key' },\n     *   region: FunctionRegion.UsEast1,\n     * })\n     * ```\n     */\n    constructor(url, { headers = {}, customFetch, region = FunctionRegion.Any, } = {}) {\n        this.url = url;\n        this.headers = headers;\n        this.region = region;\n        this.fetch = resolveFetch(customFetch);\n    }\n    /**\n     * Updates the authorization header\n     * @param token - the new jwt token sent in the authorisation header\n     *\n     * @category Edge Functions\n     *\n     * @example Setting the authorization header\n     * ```ts\n     * functions.setAuth(session.access_token)\n     * ```\n     */\n    setAuth(token) {\n        this.headers.Authorization = `Bearer ${token}`;\n    }\n    /**\n     * Invokes a function\n     * @param functionName - The name of the Function to invoke.\n     * @param options - Options for invoking the Function.\n     * @example\n     * ```ts\n     * const { data, error } = await functions.invoke('hello-world', {\n     *   body: { name: 'Ada' },\n     * })\n     * ```\n     *\n     * @category Edge Functions\n     *\n     * @remarks\n     * - The API key is sent in the `apikey` header. The `Authorization` header is reserved\n     *   for the signed-in user's JWT (or a custom auth token) — when there is no session, a\n     *   new-format API key (`sb_publishable_…` / `sb_secret_…`) is not sent as a Bearer token.\n     * - Invoke params generally match the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) spec.\n     * - When you pass in a body to your function, we automatically attach the Content-Type header for `Blob`, `ArrayBuffer`, `File`, `FormData` and `String`. If it doesn't match any of these types we assume the payload is `json`, serialize it and attach the `Content-Type` header as `application/json`. You can override this behavior by passing in a `Content-Type` header of your own.\n     * - Responses are automatically parsed as `json`, `blob` and `form-data` depending on the `Content-Type` header sent by your function. Responses are parsed as `text` by default.\n     *\n     * @example Basic invocation\n     * ```js\n     * const { data, error } = await supabase.functions.invoke('hello', {\n     *   body: { foo: 'bar' }\n     * })\n     * ```\n     *\n     * @exampleDescription Error handling\n     * A `FunctionsHttpError` error is returned if your function throws an error, `FunctionsRelayError` if the Supabase Relay has an error processing your function and `FunctionsFetchError` if there is a network error in calling your function. Log the full error object so fields like `name`, `context`, and any structured body aren't hidden.\n     *\n     * @example Error handling\n     * ```js\n     * import { FunctionsHttpError, FunctionsRelayError, FunctionsFetchError } from \"@supabase/supabase-js\";\n     *\n     * const { data, error } = await supabase.functions.invoke('hello', {\n     *   headers: {\n     *     \"my-custom-header\": 'my-custom-header-value'\n     *   },\n     *   body: { foo: 'bar' }\n     * })\n     *\n     * if (error instanceof FunctionsHttpError) {\n     *   const errorMessage = await error.context.json()\n     *   console.error('Function returned an error', errorMessage)\n     * } else if (error instanceof FunctionsRelayError) {\n     *   console.error('Relay error:', error)\n     * } else if (error instanceof FunctionsFetchError) {\n     *   console.error('Fetch error:', error)\n     * }\n     * ```\n     *\n     * @exampleDescription Passing custom headers\n     * You can pass custom headers to your function. Note: supabase-js automatically passes the `Authorization` header with the signed in user's JWT.\n     *\n     * @example Passing custom headers\n     * ```js\n     * const { data, error } = await supabase.functions.invoke('hello', {\n     *   headers: {\n     *     \"my-custom-header\": 'my-custom-header-value'\n     *   },\n     *   body: { foo: 'bar' }\n     * })\n     * ```\n     *\n     * @exampleDescription Calling with DELETE HTTP verb\n     * You can also set the HTTP verb to `DELETE` when calling your Edge Function.\n     *\n     * @example Calling with DELETE HTTP verb\n     * ```js\n     * const { data, error } = await supabase.functions.invoke('hello', {\n     *   headers: {\n     *     \"my-custom-header\": 'my-custom-header-value'\n     *   },\n     *   body: { foo: 'bar' },\n     *   method: 'DELETE'\n     * })\n     * ```\n     *\n     * @exampleDescription Invoking a Function in the UsEast1 region\n     * Here are the available regions:\n     * - `FunctionRegion.Any`\n     * - `FunctionRegion.ApNortheast1`\n     * - `FunctionRegion.ApNortheast2`\n     * - `FunctionRegion.ApSouth1`\n     * - `FunctionRegion.ApSoutheast1`\n     * - `FunctionRegion.ApSoutheast2`\n     * - `FunctionRegion.CaCentral1`\n     * - `FunctionRegion.EuCentral1`\n     * - `FunctionRegion.EuWest1`\n     * - `FunctionRegion.EuWest2`\n     * - `FunctionRegion.EuWest3`\n     * - `FunctionRegion.SaEast1`\n     * - `FunctionRegion.UsEast1`\n     * - `FunctionRegion.UsWest1`\n     * - `FunctionRegion.UsWest2`\n     *\n     * @example Invoking a Function in the UsEast1 region\n     * ```js\n     * import { createClient, FunctionRegion } from '@supabase/supabase-js'\n     *\n     * const { data, error } = await supabase.functions.invoke('hello', {\n     *   body: { foo: 'bar' },\n     *   region: FunctionRegion.UsEast1\n     * })\n     * ```\n     *\n     * @exampleDescription Calling with GET HTTP verb\n     * You can also set the HTTP verb to `GET` when calling your Edge Function.\n     *\n     * @example Calling with GET HTTP verb\n     * ```js\n     * const { data, error } = await supabase.functions.invoke('hello', {\n     *   headers: {\n     *     \"my-custom-header\": 'my-custom-header-value'\n     *   },\n     *   method: 'GET'\n     * })\n     * ```\n     *\n     * @example Standalone client invoke\n     * ```ts\n     * const { data, error } = await functions.invoke('hello-world', {\n     *   body: { name: 'Ada' },\n     * })\n     * ```\n     */\n    invoke(functionName_1) {\n        return __awaiter(this, arguments, void 0, function* (functionName, options = {}) {\n            var _a, _b;\n            let timeoutId;\n            let timeoutController;\n            let onAbort;\n            try {\n                const { headers, method, body: functionArgs, signal, timeout } = options;\n                let _headers = {};\n                let { region } = options;\n                if (!region) {\n                    region = this.region;\n                }\n                // Add region as query parameter using URL API\n                const url = new URL(`${this.url}/${functionName}`);\n                if (region && region !== 'any') {\n                    _headers['x-region'] = region;\n                    url.searchParams.set('forceFunctionRegion', region);\n                }\n                let body;\n                // HTTP header names are case-insensitive, so detect a caller-supplied Content-Type\n                // regardless of casing — otherwise the SDK injects a second, conflicting Content-Type.\n                const hasContentTypeHeader = !!headers && Object.keys(headers).some((key) => key.toLowerCase() === 'content-type');\n                if (functionArgs && !hasContentTypeHeader) {\n                    if ((typeof Blob !== 'undefined' && functionArgs instanceof Blob) ||\n                        functionArgs instanceof ArrayBuffer) {\n                        // will work for File as File inherits Blob\n                        // also works for ArrayBuffer as it is the same underlying structure as a Blob\n                        _headers['Content-Type'] = 'application/octet-stream';\n                        body = functionArgs;\n                    }\n                    else if (typeof functionArgs === 'string') {\n                        // plain string\n                        _headers['Content-Type'] = 'text/plain';\n                        body = functionArgs;\n                    }\n                    else if (typeof FormData !== 'undefined' && functionArgs instanceof FormData) {\n                        // don't set content-type headers\n                        // Request will automatically add the right boundary value\n                        body = functionArgs;\n                    }\n                    else {\n                        // default, assume this is JSON\n                        _headers['Content-Type'] = 'application/json';\n                        body = JSON.stringify(functionArgs);\n                    }\n                }\n                else {\n                    if (functionArgs &&\n                        typeof functionArgs !== 'string' &&\n                        !(typeof Blob !== 'undefined' && functionArgs instanceof Blob) &&\n                        !(functionArgs instanceof ArrayBuffer) &&\n                        !(typeof FormData !== 'undefined' && functionArgs instanceof FormData)) {\n                        body = JSON.stringify(functionArgs);\n                    }\n                    else {\n                        body = functionArgs;\n                    }\n                }\n                // Handle timeout by creating an AbortController\n                let effectiveSignal = signal;\n                if (timeout) {\n                    timeoutController = new AbortController();\n                    timeoutId = setTimeout(() => timeoutController.abort(), timeout);\n                    // If user provided their own signal, we need to respect both\n                    if (signal) {\n                        effectiveSignal = timeoutController.signal;\n                        // If the user's signal is aborted, abort our timeout controller too.\n                        // Store the listener so we can clean it up in finally.\n                        onAbort = () => timeoutController.abort();\n                        signal.addEventListener('abort', onAbort);\n                    }\n                    else {\n                        effectiveSignal = timeoutController.signal;\n                    }\n                }\n                const response = yield this.fetch(url.toString(), {\n                    method: method || 'POST',\n                    // headers priority is (high to low):\n                    // 1. invoke-level headers\n                    // 2. client-level headers\n                    // 3. default Content-Type header\n                    headers: Object.assign(Object.assign(Object.assign({}, _headers), this.headers), headers),\n                    body,\n                    signal: effectiveSignal,\n                }).catch((fetchError) => {\n                    throw new FunctionsFetchError(fetchError);\n                });\n                const isRelayError = response.headers.get('x-relay-error');\n                if (isRelayError && isRelayError === 'true') {\n                    throw new FunctionsRelayError(response);\n                }\n                if (!response.ok) {\n                    throw new FunctionsHttpError(response);\n                }\n                // HTTP media types are case-insensitive (RFC 9110), so normalize before\n                // matching — otherwise an \"Application/JSON\" response falls through to text.\n                let responseType = ((_a = response.headers.get('Content-Type')) !== null && _a !== void 0 ? _a : 'text/plain')\n                    .split(';')[0]\n                    .trim()\n                    .toLowerCase();\n                let data;\n                if (responseType === 'application/json') {\n                    data = yield response.json();\n                }\n                else if (responseType === 'application/octet-stream' ||\n                    responseType === 'application/pdf') {\n                    data = yield response.blob();\n                }\n                else if (responseType === 'text/event-stream') {\n                    data = response;\n                }\n                else if (responseType === 'multipart/form-data') {\n                    data = yield response.formData();\n                }\n                else {\n                    // default to text\n                    data = yield response.text();\n                }\n                return { data, error: null, response };\n            }\n            catch (error) {\n                return {\n                    data: null,\n                    error,\n                    response: error instanceof FunctionsHttpError || error instanceof FunctionsRelayError\n                        ? error.context\n                        : undefined,\n                };\n            }\n            finally {\n                // Clear the timeout if it was set\n                if (timeoutId) {\n                    clearTimeout(timeoutId);\n                }\n                // Remove the cross-signal listener to prevent memory leaks when the caller\n                // reuses the same AbortSignal across multiple invocations.\n                if (onAbort) {\n                    (_b = options.signal) === null || _b === void 0 ? void 0 : _b.removeEventListener('abort', onAbort);\n                }\n            }\n        });\n    }\n}\n//# sourceMappingURL=FunctionsClient.js.map","//#region src/types/common/common.ts\n/**\n* Default number of retry attempts.\n*/\nconst DEFAULT_MAX_RETRIES = 3;\n/**\n* Default exponential backoff delay function.\n* Delays: 1s, 2s, 4s, 8s, ... (max 30s)\n*\n* @param attemptIndex - Zero-based index of the retry attempt\n* @returns Delay in milliseconds before the next retry\n*/\nconst getRetryDelay = (attemptIndex) => Math.min(1e3 * 2 ** attemptIndex, 3e4);\n/**\n* Status codes that are safe to retry.\n* 520 = Cloudflare timeout/connection errors (transient)\n* 503 = PostgREST schema cache not yet loaded (transient, signals retry via Retry-After header)\n*/\nconst RETRYABLE_STATUS_CODES = [520, 503];\n/**\n* HTTP methods that are safe to retry (idempotent operations).\n*/\nconst RETRYABLE_METHODS = [\n\t\"GET\",\n\t\"HEAD\",\n\t\"OPTIONS\"\n];\n\n//#endregion\n//#region src/PostgrestError.ts\n/**\n* Error format\n*\n* Returned by every PostgREST request that fails. When something fails, the\n* single most useful field is usually `hint` — Postgres often returns the\n* actionable fix there, not in `message`. Always log the full object (e.g.\n* `console.error(error)`); logging only `error.message` hides the hint.\n*\n* Read the fields in roughly this order of usefulness:\n*\n* - `hint` — actionable guidance from the database when available. For\n*   permission-denied errors (`42501`), this is the literal SQL to fix the\n*   problem, e.g.\n*   `\"Grant the required privileges to the current role with: GRANT SELECT ON public.users TO anon;\"`.\n*   Missing column? `hint` suggests the column you probably meant. Whenever\n*   Postgres knows the fix, it puts it in `hint`.\n* - `code` — stable error code from PostgREST (e.g. `PGRST301`) or Postgres\n*   (e.g. `42501`). Branch on this rather than on `message` text.\n* - `details` — extra context, often the offending value, key, or row.\n* - `message` — human-readable summary. Useful in UI strings; less useful\n*   for debugging.\n*\n* {@link https://postgrest.org/en/stable/api.html?highlight=options#errors-and-http-status-codes}\n*/\nvar PostgrestError = class extends Error {\n\t/**\n\t* @example\n\t* ```ts\n\t* import PostgrestError from '@supabase/postgrest-js'\n\t*\n\t* throw new PostgrestError({\n\t*   message: 'Row level security prevented the request',\n\t*   details: 'RLS denied the insert',\n\t*   hint: 'Check your policies',\n\t*   code: 'PGRST301',\n\t* })\n\t* ```\n\t*/\n\tconstructor(context) {\n\t\tsuper(context.message);\n\t\tthis.name = \"PostgrestError\";\n\t\tthis.details = context.details;\n\t\tthis.hint = context.hint;\n\t\tthis.code = context.code;\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tmessage: this.message,\n\t\t\tdetails: this.details,\n\t\t\thint: this.hint,\n\t\t\tcode: this.code\n\t\t};\n\t}\n};\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/typeof.js\nfunction _typeof(o) {\n\t\"@babel/helpers - typeof\";\n\treturn _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o$1) {\n\t\treturn typeof o$1;\n\t} : function(o$1) {\n\t\treturn o$1 && \"function\" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? \"symbol\" : typeof o$1;\n\t}, _typeof(o);\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/toPrimitive.js\nfunction toPrimitive(t, r) {\n\tif (\"object\" != _typeof(t) || !t) return t;\n\tvar e = t[Symbol.toPrimitive];\n\tif (void 0 !== e) {\n\t\tvar i = e.call(t, r || \"default\");\n\t\tif (\"object\" != _typeof(i)) return i;\n\t\tthrow new TypeError(\"@@toPrimitive must return a primitive value.\");\n\t}\n\treturn (\"string\" === r ? String : Number)(t);\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/toPropertyKey.js\nfunction toPropertyKey(t) {\n\tvar i = toPrimitive(t, \"string\");\n\treturn \"symbol\" == _typeof(i) ? i : i + \"\";\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/defineProperty.js\nfunction _defineProperty(e, r, t) {\n\treturn (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n\t\tvalue: t,\n\t\tenumerable: !0,\n\t\tconfigurable: !0,\n\t\twritable: !0\n\t}) : e[r] = t, e;\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/objectSpread2.js\nfunction ownKeys(e, r) {\n\tvar t = Object.keys(e);\n\tif (Object.getOwnPropertySymbols) {\n\t\tvar o = Object.getOwnPropertySymbols(e);\n\t\tr && (o = o.filter(function(r$1) {\n\t\t\treturn Object.getOwnPropertyDescriptor(e, r$1).enumerable;\n\t\t})), t.push.apply(t, o);\n\t}\n\treturn t;\n}\nfunction _objectSpread2(e) {\n\tfor (var r = 1; r < arguments.length; r++) {\n\t\tvar t = null != arguments[r] ? arguments[r] : {};\n\t\tr % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) {\n\t\t\t_defineProperty(e, r$1, t[r$1]);\n\t\t}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) {\n\t\t\tObject.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1));\n\t\t});\n\t}\n\treturn e;\n}\n\n//#endregion\n//#region src/PostgrestBuilder.ts\n/**\n* Sleep for a given number of milliseconds.\n* If an AbortSignal is provided, the sleep resolves early when the signal is aborted.\n*/\nfunction sleep(ms, signal) {\n\treturn new Promise((resolve) => {\n\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\tresolve();\n\t\t\treturn;\n\t\t}\n\t\tconst id = setTimeout(() => {\n\t\t\tsignal === null || signal === void 0 || signal.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tfunction onAbort() {\n\t\t\tclearTimeout(id);\n\t\t\tresolve();\n\t\t}\n\t\tsignal === null || signal === void 0 || signal.addEventListener(\"abort\", onAbort);\n\t});\n}\n/**\n* Check if a request should be retried based on method and status code.\n*/\nfunction shouldRetry(method, status, attemptCount, retryEnabled) {\n\tif (!retryEnabled || attemptCount >= DEFAULT_MAX_RETRIES) return false;\n\tif (!RETRYABLE_METHODS.includes(method)) return false;\n\tif (!RETRYABLE_STATUS_CODES.includes(status)) return false;\n\treturn true;\n}\nvar PostgrestBuilder = class {\n\t/**\n\t* Creates a builder configured for a specific PostgREST request.\n\t*\n\t* @example Using supabase-js (recommended)\n\t* ```ts\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* const { data, error } = await supabase.from('users').select('*')\n\t* ```\n\t*\n\t* @category Database\n\t*\n\t* @example Standalone import for bundle-sensitive environments\n\t* ```ts\n\t* import { PostgrestQueryBuilder } from '@supabase/postgrest-js'\n\t*\n\t* const builder = new PostgrestQueryBuilder(\n\t*   new URL('https://xyzcompany.supabase.co/rest/v1/users'),\n\t*   { headers: new Headers({ apikey: 'your-publishable-key' }) }\n\t* )\n\t* ```\n\t*/\n\tconstructor(builder) {\n\t\tvar _builder$shouldThrowO, _builder$isMaybeSingl, _builder$shouldStripN, _builder$urlLengthLim, _builder$retry;\n\t\tthis.shouldThrowOnError = false;\n\t\tthis.retryEnabled = true;\n\t\tthis.method = builder.method;\n\t\tthis.url = builder.url;\n\t\tthis.headers = new Headers(builder.headers);\n\t\tthis.schema = builder.schema;\n\t\tthis.body = builder.body;\n\t\tthis.shouldThrowOnError = (_builder$shouldThrowO = builder.shouldThrowOnError) !== null && _builder$shouldThrowO !== void 0 ? _builder$shouldThrowO : false;\n\t\tthis.signal = builder.signal;\n\t\tthis.isMaybeSingle = (_builder$isMaybeSingl = builder.isMaybeSingle) !== null && _builder$isMaybeSingl !== void 0 ? _builder$isMaybeSingl : false;\n\t\tthis.shouldStripNulls = (_builder$shouldStripN = builder.shouldStripNulls) !== null && _builder$shouldStripN !== void 0 ? _builder$shouldStripN : false;\n\t\tthis.urlLengthLimit = (_builder$urlLengthLim = builder.urlLengthLimit) !== null && _builder$urlLengthLim !== void 0 ? _builder$urlLengthLim : 8e3;\n\t\tthis.retryEnabled = (_builder$retry = builder.retry) !== null && _builder$retry !== void 0 ? _builder$retry : true;\n\t\tif (builder.fetch) this.fetch = builder.fetch;\n\t\telse this.fetch = fetch;\n\t}\n\t/**\n\t* If there's an error with the query, throwOnError will reject the promise by\n\t* throwing the error instead of returning it as part of a successful response.\n\t*\n\t* {@link https://github.com/supabase/supabase-js/issues/92}\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*/\n\tthrowOnError() {\n\t\tthis.shouldThrowOnError = true;\n\t\treturn this;\n\t}\n\t/**\n\t* Strip null values from the response data. Properties with `null` values\n\t* will be omitted from the returned JSON objects.\n\t*\n\t* Requires PostgREST 11.2.0+.\n\t*\n\t* {@link https://docs.postgrest.org/en/stable/references/api/resource_representation.html#stripped-nulls}\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select()\n\t*   .stripNulls()\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text, bio text);\n\t*\n\t* insert into\n\t*   characters (id, name, bio)\n\t* values\n\t*   (1, 'Luke', null),\n\t*   (2, 'Leia', 'Princess of Alderaan');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 1,\n\t*       \"name\": \"Luke\"\n\t*     },\n\t*     {\n\t*       \"id\": 2,\n\t*       \"name\": \"Leia\",\n\t*       \"bio\": \"Princess of Alderaan\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tstripNulls() {\n\t\tif (this.headers.get(\"Accept\") === \"text/csv\") throw new Error(\"stripNulls() cannot be used with csv()\");\n\t\tthis.shouldStripNulls = true;\n\t\treturn this;\n\t}\n\t/**\n\t* Set an HTTP header on this single PostgREST request, overriding any header\n\t* with the same name set on the client.\n\t*\n\t* This is an advanced escape hatch for one-off needs (passing a custom\n\t* `Authorization` for a single query, attaching a tracing header, etc.).\n\t* Most callers do not need it: configure client-wide headers via the\n\t* `headers` option when constructing the client, and authentication via\n\t* Supabase Auth.\n\t*\n\t* @param name - HTTP header name\n\t* @param value - HTTP header value\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*/\n\tsetHeader(name, value) {\n\t\tthis.headers = new Headers(this.headers);\n\t\tthis.headers.set(name, value);\n\t\treturn this;\n\t}\n\t/**\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* Configure retry behavior for this request.\n\t*\n\t* By default, retries are enabled for idempotent requests (GET, HEAD, OPTIONS)\n\t* that fail with network errors or specific HTTP status codes (503, 520).\n\t* Retries use exponential backoff (1s, 2s, 4s) with a maximum of 3 attempts.\n\t*\n\t* @param enabled - Whether to enable retries for this request\n\t*\n\t* @example\n\t* ```ts\n\t* // Disable retries for a specific query\n\t* const { data, error } = await supabase\n\t*   .from('users')\n\t*   .select()\n\t*   .retry(false)\n\t* ```\n\t*/\n\tretry(enabled) {\n\t\tthis.retryEnabled = enabled;\n\t\treturn this;\n\t}\n\tthen(onfulfilled, onrejected) {\n\t\tvar _this = this;\n\t\tif (this.schema === void 0) {} else if ([\"GET\", \"HEAD\"].includes(this.method)) this.headers.set(\"Accept-Profile\", this.schema);\n\t\telse this.headers.set(\"Content-Profile\", this.schema);\n\t\tif (this.method !== \"GET\" && this.method !== \"HEAD\") this.headers.set(\"Content-Type\", \"application/json\");\n\t\tif (this.shouldStripNulls) {\n\t\t\tconst currentAccept = this.headers.get(\"Accept\");\n\t\t\tif (currentAccept === \"application/vnd.pgrst.object+json\") this.headers.set(\"Accept\", \"application/vnd.pgrst.object+json;nulls=stripped\");\n\t\t\telse if (!currentAccept || currentAccept === \"application/json\") this.headers.set(\"Accept\", \"application/vnd.pgrst.array+json;nulls=stripped\");\n\t\t}\n\t\tconst _fetch = this.fetch;\n\t\tconst executeWithRetry = async () => {\n\t\t\tlet attemptCount = 0;\n\t\t\twhile (true) {\n\t\t\t\tconst headers = {};\n\t\t\t\t_this.headers.forEach((value, key) => {\n\t\t\t\t\theaders[key] = value;\n\t\t\t\t});\n\t\t\t\tif (attemptCount > 0) headers[\"X-Retry-Count\"] = String(attemptCount);\n\t\t\t\tlet res$1;\n\t\t\t\ttry {\n\t\t\t\t\tres$1 = await _fetch(_this.url.toString(), {\n\t\t\t\t\t\tmethod: _this.method,\n\t\t\t\t\t\theaders,\n\t\t\t\t\t\tbody: JSON.stringify(_this.body, (_, value) => typeof value === \"bigint\" ? value.toString() : value),\n\t\t\t\t\t\tsignal: _this.signal\n\t\t\t\t\t});\n\t\t\t\t} catch (fetchError) {\n\t\t\t\t\tif ((fetchError === null || fetchError === void 0 ? void 0 : fetchError.name) === \"AbortError\" || (fetchError === null || fetchError === void 0 ? void 0 : fetchError.code) === \"ABORT_ERR\") throw fetchError;\n\t\t\t\t\tif (!RETRYABLE_METHODS.includes(_this.method)) throw fetchError;\n\t\t\t\t\tif (_this.retryEnabled && attemptCount < DEFAULT_MAX_RETRIES) {\n\t\t\t\t\t\tconst delay = getRetryDelay(attemptCount);\n\t\t\t\t\t\tattemptCount++;\n\t\t\t\t\t\tawait sleep(delay, _this.signal);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tthrow fetchError;\n\t\t\t\t}\n\t\t\t\tif (shouldRetry(_this.method, res$1.status, attemptCount, _this.retryEnabled)) {\n\t\t\t\t\tvar _res$headers$get, _res$headers;\n\t\t\t\t\tconst retryAfterHeader = (_res$headers$get = (_res$headers = res$1.headers) === null || _res$headers === void 0 ? void 0 : _res$headers.get(\"Retry-After\")) !== null && _res$headers$get !== void 0 ? _res$headers$get : null;\n\t\t\t\t\tconst delay = retryAfterHeader !== null ? Math.max(0, parseInt(retryAfterHeader, 10) || 0) * 1e3 : getRetryDelay(attemptCount);\n\t\t\t\t\tawait res$1.text();\n\t\t\t\t\tattemptCount++;\n\t\t\t\t\tawait sleep(delay, _this.signal);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\treturn await _this.processResponse(res$1);\n\t\t\t}\n\t\t};\n\t\tlet res = executeWithRetry();\n\t\tif (!this.shouldThrowOnError) res = res.catch((fetchError) => {\n\t\t\tvar _fetchError$name2;\n\t\t\tlet errorDetails = \"\";\n\t\t\tlet hint = \"\";\n\t\t\tlet code = \"\";\n\t\t\tconst cause = fetchError === null || fetchError === void 0 ? void 0 : fetchError.cause;\n\t\t\tif (cause) {\n\t\t\t\tvar _cause$message, _cause$code, _fetchError$name, _cause$name;\n\t\t\t\tconst causeMessage = (_cause$message = cause === null || cause === void 0 ? void 0 : cause.message) !== null && _cause$message !== void 0 ? _cause$message : \"\";\n\t\t\t\tconst causeCode = (_cause$code = cause === null || cause === void 0 ? void 0 : cause.code) !== null && _cause$code !== void 0 ? _cause$code : \"\";\n\t\t\t\terrorDetails = `${(_fetchError$name = fetchError === null || fetchError === void 0 ? void 0 : fetchError.name) !== null && _fetchError$name !== void 0 ? _fetchError$name : \"FetchError\"}: ${fetchError === null || fetchError === void 0 ? void 0 : fetchError.message}`;\n\t\t\t\terrorDetails += `\\n\\nCaused by: ${(_cause$name = cause === null || cause === void 0 ? void 0 : cause.name) !== null && _cause$name !== void 0 ? _cause$name : \"Error\"}: ${causeMessage}`;\n\t\t\t\tif (causeCode) errorDetails += ` (${causeCode})`;\n\t\t\t\tif (cause === null || cause === void 0 ? void 0 : cause.stack) errorDetails += `\\n${cause.stack}`;\n\t\t\t} else {\n\t\t\t\tvar _fetchError$stack;\n\t\t\t\terrorDetails = (_fetchError$stack = fetchError === null || fetchError === void 0 ? void 0 : fetchError.stack) !== null && _fetchError$stack !== void 0 ? _fetchError$stack : \"\";\n\t\t\t}\n\t\t\tconst urlLength = this.url.toString().length;\n\t\t\tif ((fetchError === null || fetchError === void 0 ? void 0 : fetchError.name) === \"AbortError\" || (fetchError === null || fetchError === void 0 ? void 0 : fetchError.code) === \"ABORT_ERR\") {\n\t\t\t\tcode = \"\";\n\t\t\t\thint = \"Request was aborted (timeout or manual cancellation)\";\n\t\t\t\tif (urlLength > this.urlLengthLimit) hint += `. Note: Your request URL is ${urlLength} characters, which may exceed server limits. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [many IDs])), consider using an RPC function to pass values server-side.`;\n\t\t\t} else if ((cause === null || cause === void 0 ? void 0 : cause.name) === \"HeadersOverflowError\" || (cause === null || cause === void 0 ? void 0 : cause.code) === \"UND_ERR_HEADERS_OVERFLOW\") {\n\t\t\t\tcode = \"\";\n\t\t\t\thint = \"HTTP headers exceeded server limits (typically 16KB)\";\n\t\t\t\tif (urlLength > this.urlLengthLimit) hint += `. Your request URL is ${urlLength} characters. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [200+ IDs])), consider using an RPC function instead.`;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tmessage: `${(_fetchError$name2 = fetchError === null || fetchError === void 0 ? void 0 : fetchError.name) !== null && _fetchError$name2 !== void 0 ? _fetchError$name2 : \"FetchError\"}: ${fetchError === null || fetchError === void 0 ? void 0 : fetchError.message}`,\n\t\t\t\t\tdetails: errorDetails,\n\t\t\t\t\thint,\n\t\t\t\t\tcode\n\t\t\t\t},\n\t\t\t\tdata: null,\n\t\t\t\tcount: null,\n\t\t\t\tstatus: 0,\n\t\t\t\tstatusText: \"\"\n\t\t\t};\n\t\t});\n\t\treturn res.then(onfulfilled, onrejected);\n\t}\n\t/**\n\t* Process a fetch response and return the standardized postgrest response.\n\t*/\n\tasync processResponse(res) {\n\t\tvar _this2 = this;\n\t\tlet error = null;\n\t\tlet data = null;\n\t\tlet count = null;\n\t\tlet status = res.status;\n\t\tlet statusText = res.statusText;\n\t\tif (res.ok) {\n\t\t\tvar _this$headers$get2, _res$headers$get2;\n\t\t\tif (_this2.method !== \"HEAD\") {\n\t\t\t\tvar _this$headers$get;\n\t\t\t\tconst body = await res.text();\n\t\t\t\tif (body === \"\") {} else if (_this2.headers.get(\"Accept\") === \"text/csv\") data = body;\n\t\t\t\telse if (_this2.headers.get(\"Accept\") && ((_this$headers$get = _this2.headers.get(\"Accept\")) === null || _this$headers$get === void 0 ? void 0 : _this$headers$get.includes(\"application/vnd.pgrst.plan+text\"))) data = body;\n\t\t\t\telse try {\n\t\t\t\t\tdata = JSON.parse(body);\n\t\t\t\t} catch (_unused) {\n\t\t\t\t\terror = { message: body };\n\t\t\t\t\tdata = null;\n\t\t\t\t\tif (_this2.shouldThrowOnError) throw new PostgrestError({\n\t\t\t\t\t\tmessage: body,\n\t\t\t\t\t\tdetails: \"\",\n\t\t\t\t\t\thint: \"\",\n\t\t\t\t\t\tcode: \"\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst countHeader = (_this$headers$get2 = _this2.headers.get(\"Prefer\")) === null || _this$headers$get2 === void 0 ? void 0 : _this$headers$get2.match(/count=(exact|planned|estimated)/);\n\t\t\tconst contentRange = (_res$headers$get2 = res.headers.get(\"content-range\")) === null || _res$headers$get2 === void 0 ? void 0 : _res$headers$get2.split(\"/\");\n\t\t\tif (countHeader && contentRange && contentRange.length > 1) count = parseInt(contentRange[1]);\n\t\t\tif (_this2.isMaybeSingle && Array.isArray(data)) if (data.length > 1) {\n\t\t\t\terror = {\n\t\t\t\t\tcode: \"PGRST116\",\n\t\t\t\t\tdetails: `Results contain ${data.length} rows, application/vnd.pgrst.object+json requires 1 row`,\n\t\t\t\t\thint: null,\n\t\t\t\t\tmessage: \"JSON object requested, multiple (or no) rows returned\"\n\t\t\t\t};\n\t\t\t\tdata = null;\n\t\t\t\tcount = null;\n\t\t\t\tstatus = 406;\n\t\t\t\tstatusText = \"Not Acceptable\";\n\t\t\t\tif (_this2.shouldThrowOnError) {\n\t\t\t\t\tvar _error$hint;\n\t\t\t\t\tthrow new PostgrestError(_objectSpread2(_objectSpread2({}, error), {}, { hint: (_error$hint = error.hint) !== null && _error$hint !== void 0 ? _error$hint : \"\" }));\n\t\t\t\t}\n\t\t\t} else if (data.length === 1) data = data[0];\n\t\t\telse data = null;\n\t\t} else {\n\t\t\tconst body = await res.text();\n\t\t\ttry {\n\t\t\t\terror = JSON.parse(body);\n\t\t\t\tif (Array.isArray(error) && res.status === 404) {\n\t\t\t\t\tdata = [];\n\t\t\t\t\terror = null;\n\t\t\t\t\tstatus = 200;\n\t\t\t\t\tstatusText = \"OK\";\n\t\t\t\t}\n\t\t\t} catch (_unused2) {\n\t\t\t\tif (res.status === 404 && body === \"\") {\n\t\t\t\t\tstatus = 204;\n\t\t\t\t\tstatusText = \"No Content\";\n\t\t\t\t} else error = { message: body };\n\t\t\t}\n\t\t\tif (error && _this2.shouldThrowOnError) throw new PostgrestError(error);\n\t\t}\n\t\treturn {\n\t\t\tsuccess: error === null,\n\t\t\terror,\n\t\t\tdata,\n\t\t\tcount,\n\t\t\tstatus,\n\t\t\tstatusText\n\t\t};\n\t}\n\t/**\n\t* Override the type of the returned `data`.\n\t*\n\t* @typeParam NewResult - The new result type to override with\n\t* @deprecated Use overrideTypes<yourType, { merge: false }>() method at the end of your call chain instead\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*/\n\treturns() {\n\t\t/* istanbul ignore next */\n\t\treturn this;\n\t}\n\t/**\n\t* Override the type of the returned `data` field in the response.\n\t*\n\t* @typeParam NewResult - The new type to cast the response data to\n\t* @typeParam Options - Optional type configuration (defaults to { merge: true })\n\t* @typeParam Options.merge - When true, merges the new type with existing return type. When false, replaces the existing types entirely (defaults to true)\n\t* @example\n\t* ```typescript\n\t* // Merge with existing types (default behavior)\n\t* const query = supabase\n\t*   .from('users')\n\t*   .select()\n\t*   .overrideTypes<{ custom_field: string }>()\n\t*\n\t* // Replace existing types completely\n\t* const replaceQuery = supabase\n\t*   .from('users')\n\t*   .select()\n\t*   .overrideTypes<{ id: number; name: string }, { merge: false }>()\n\t* ```\n\t* @returns A PostgrestBuilder instance with the new type\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example Complete Override type of successful response\n\t* ```ts\n\t* const { data } = await supabase\n\t*   .from('countries')\n\t*   .select()\n\t*   .overrideTypes<Array<MyType>, { merge: false }>()\n\t* ```\n\t*\n\t* @exampleResponse Complete Override type of successful response\n\t* ```ts\n\t* let x: typeof data // MyType[]\n\t* ```\n\t*\n\t* @example Complete Override type of object response\n\t* ```ts\n\t* const { data } = await supabase\n\t*   .from('countries')\n\t*   .select()\n\t*   .maybeSingle()\n\t*   .overrideTypes<MyType, { merge: false }>()\n\t* ```\n\t*\n\t* @exampleResponse Complete Override type of object response\n\t* ```ts\n\t* let x: typeof data // MyType | null\n\t* ```\n\t*\n\t* @example Partial Override type of successful response\n\t* ```ts\n\t* const { data } = await supabase\n\t*   .from('countries')\n\t*   .select()\n\t*   .overrideTypes<Array<{ status: \"A\" | \"B\" }>>()\n\t* ```\n\t*\n\t* @exampleResponse Partial Override type of successful response\n\t* ```ts\n\t* let x: typeof data // Array<CountryRowProperties & { status: \"A\" | \"B\" }>\n\t* ```\n\t*\n\t* @example Partial Override type of object response\n\t* ```ts\n\t* const { data } = await supabase\n\t*   .from('countries')\n\t*   .select()\n\t*   .maybeSingle()\n\t*   .overrideTypes<{ status: \"A\" | \"B\" }>()\n\t* ```\n\t*\n\t* @exampleResponse Partial Override type of object response\n\t* ```ts\n\t* let x: typeof data // CountryRowProperties & { status: \"A\" | \"B\" } | null\n\t* ```\n\t*\n\t* @example Merge vs replace existing types\n\t* ```typescript\n\t* // Merge with existing types (default behavior)\n\t* const query = supabase\n\t*   .from('users')\n\t*   .select()\n\t*   .overrideTypes<{ custom_field: string }>()\n\t*\n\t* // Replace existing types completely\n\t* const replaceQuery = supabase\n\t*   .from('users')\n\t*   .select()\n\t*   .overrideTypes<{ id: number; name: string }, { merge: false }>()\n\t* ```\n\t*/\n\toverrideTypes() {\n\t\treturn this;\n\t}\n};\n\n//#endregion\n//#region src/PostgrestTransformBuilder.ts\nvar PostgrestTransformBuilder = class extends PostgrestBuilder {\n\tthrowOnError() {\n\t\treturn super.throwOnError();\n\t}\n\t/**\n\t* Perform a SELECT on the query result.\n\t*\n\t* By default, `.insert()`, `.update()`, `.upsert()`, and `.delete()` do not\n\t* return modified rows. By calling this method, modified rows are returned in\n\t* `data`.\n\t*\n\t* @param columns - The columns to retrieve, separated by commas\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `upsert()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .upsert({ id: 1, name: 'Han Solo' })\n\t*   .select()\n\t* ```\n\t*\n\t* @exampleSql With `upsert()`\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `upsert()`\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 1,\n\t*       \"name\": \"Han Solo\"\n\t*     }\n\t*   ],\n\t*   \"status\": 201,\n\t*   \"statusText\": \"\"\n\t* }\n\t* ```\n\t*/\n\tselect(columns) {\n\t\tlet quoted = false;\n\t\tconst cleanedColumns = (columns !== null && columns !== void 0 ? columns : \"*\").split(\"\").map((c) => {\n\t\t\tif (/\\s/.test(c) && !quoted) return \"\";\n\t\t\tif (c === \"\\\"\") quoted = !quoted;\n\t\t\treturn c;\n\t\t}).join(\"\");\n\t\tthis.url.searchParams.set(\"select\", cleanedColumns);\n\t\tthis.headers.append(\"Prefer\", \"return=representation\");\n\t\treturn this;\n\t}\n\t/**\n\t* Order the query result by `column`.\n\t*\n\t* You can call this method multiple times to order by multiple columns.\n\t*\n\t* You can order referenced tables, but it only affects the ordering of the\n\t* parent table if you use `!inner` in the query.\n\t*\n\t* @param column - The column to order by\n\t* @param options - Named parameters\n\t* @param options.ascending - If `true`, the result will be in ascending order\n\t* @param options.nullsFirst - If `true`, `null`s appear first. If `false`,\n\t* `null`s appear last.\n\t* @param options.referencedTable - Set this to order a referenced table by\n\t* its columns\n\t* @param options.foreignTable - Deprecated, use `options.referencedTable`\n\t* instead\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select('id, name')\n\t*   .order('id', { ascending: false })\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 3,\n\t*       \"name\": \"Han\"\n\t*     },\n\t*     {\n\t*       \"id\": 2,\n\t*       \"name\": \"Leia\"\n\t*     },\n\t*     {\n\t*       \"id\": 1,\n\t*       \"name\": \"Luke\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription On a referenced table\n\t* Ordering with `referencedTable` doesn't affect the ordering of the\n\t* parent table.\n\t*\n\t* @example On a referenced table\n\t* ```ts\n\t*   const { data, error } = await supabase\n\t*     .from('orchestral_sections')\n\t*     .select(`\n\t*       name,\n\t*       instruments (\n\t*         name\n\t*       )\n\t*     `)\n\t*     .order('name', { referencedTable: 'instruments', ascending: false })\n\t*\n\t* ```\n\t*\n\t* @exampleSql On a referenced table\n\t* ```sql\n\t* create table\n\t*   orchestral_sections (id int8 primary key, name text);\n\t* create table\n\t*   instruments (\n\t*     id int8 primary key,\n\t*     section_id int8 not null references orchestral_sections,\n\t*     name text\n\t*   );\n\t*\n\t* insert into\n\t*   orchestral_sections (id, name)\n\t* values\n\t*   (1, 'strings'),\n\t*   (2, 'woodwinds');\n\t* insert into\n\t*   instruments (id, section_id, name)\n\t* values\n\t*   (1, 1, 'harp'),\n\t*   (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse On a referenced table\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"strings\",\n\t*       \"instruments\": [\n\t*         {\n\t*           \"name\": \"violin\"\n\t*         },\n\t*         {\n\t*           \"name\": \"harp\"\n\t*         }\n\t*       ]\n\t*     },\n\t*     {\n\t*       \"name\": \"woodwinds\",\n\t*       \"instruments\": []\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Order parent table by a referenced table\n\t* Ordering with `referenced_table(col)` affects the ordering of the\n\t* parent table.\n\t*\n\t* @example Order parent table by a referenced table\n\t* ```ts\n\t*   const { data, error } = await supabase\n\t*     .from('instruments')\n\t*     .select(`\n\t*       name,\n\t*       section:orchestral_sections (\n\t*         name\n\t*       )\n\t*     `)\n\t*     .order('section(name)', { ascending: true })\n\t*\n\t* ```\n\t*\n\t* @exampleSql Order parent table by a referenced table\n\t* ```sql\n\t* create table\n\t*   orchestral_sections (id int8 primary key, name text);\n\t* create table\n\t*   instruments (\n\t*     id int8 primary key,\n\t*     section_id int8 not null references orchestral_sections,\n\t*     name text\n\t*   );\n\t*\n\t* insert into\n\t*   orchestral_sections (id, name)\n\t* values\n\t*   (1, 'strings'),\n\t*   (2, 'woodwinds');\n\t* insert into\n\t*   instruments (id, section_id, name)\n\t* values\n\t*   (1, 2, 'flute'),\n\t*   (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse Order parent table by a referenced table\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"violin\",\n\t*       \"orchestral_sections\": {\"name\": \"strings\"}\n\t*     },\n\t*     {\n\t*       \"name\": \"flute\",\n\t*       \"orchestral_sections\": {\"name\": \"woodwinds\"}\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\torder(column, { ascending = true, nullsFirst, foreignTable, referencedTable = foreignTable } = {}) {\n\t\tconst key = referencedTable ? `${referencedTable}.order` : \"order\";\n\t\tconst existingOrder = this.url.searchParams.get(key);\n\t\tthis.url.searchParams.set(key, `${existingOrder ? `${existingOrder},` : \"\"}${column}.${ascending ? \"asc\" : \"desc\"}${nullsFirst === void 0 ? \"\" : nullsFirst ? \".nullsfirst\" : \".nullslast\"}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Limit the query result by `rows`.\n\t*\n\t* @param rows - The maximum number of rows to return\n\t* @param options - Named parameters\n\t* @param options.referencedTable - Set this to limit rows of referenced\n\t* tables instead of the parent table\n\t* @param options.foreignTable - Deprecated, use `options.referencedTable`\n\t* instead\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select('name')\n\t*   .limit(1)\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"Luke\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example On a referenced table\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('orchestral_sections')\n\t*   .select(`\n\t*     name,\n\t*     instruments (\n\t*       name\n\t*     )\n\t*   `)\n\t*   .limit(1, { referencedTable: 'instruments' })\n\t* ```\n\t*\n\t* @exampleSql On a referenced table\n\t* ```sql\n\t* create table\n\t*   orchestral_sections (id int8 primary key, name text);\n\t* create table\n\t*   instruments (\n\t*     id int8 primary key,\n\t*     section_id int8 not null references orchestral_sections,\n\t*     name text\n\t*   );\n\t*\n\t* insert into\n\t*   orchestral_sections (id, name)\n\t* values\n\t*   (1, 'strings');\n\t* insert into\n\t*   instruments (id, section_id, name)\n\t* values\n\t*   (1, 1, 'harp'),\n\t*   (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse On a referenced table\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"strings\",\n\t*       \"instruments\": [\n\t*         {\n\t*           \"name\": \"violin\"\n\t*         }\n\t*       ]\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tlimit(rows, { foreignTable, referencedTable = foreignTable } = {}) {\n\t\tconst key = typeof referencedTable === \"undefined\" ? \"limit\" : `${referencedTable}.limit`;\n\t\tthis.url.searchParams.set(key, `${rows}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Limit the query result by starting at an offset `from` and ending at the offset `to`.\n\t* Only records within this range are returned.\n\t* This respects the query order and if there is no order clause the range could behave unexpectedly.\n\t* The `from` and `to` values are 0-based and inclusive: `range(1, 3)` will include the second, third\n\t* and fourth rows of the query.\n\t*\n\t* @param from - The starting index from which to limit the result\n\t* @param to - The last index to which to limit the result\n\t* @param options - Named parameters\n\t* @param options.referencedTable - Set this to limit rows of referenced\n\t* tables instead of the parent table\n\t* @param options.foreignTable - Deprecated, use `options.referencedTable`\n\t* instead\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select('name')\n\t*   .range(0, 1)\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"Luke\"\n\t*     },\n\t*     {\n\t*       \"name\": \"Leia\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\trange(from, to, { foreignTable, referencedTable = foreignTable } = {}) {\n\t\tconst keyOffset = typeof referencedTable === \"undefined\" ? \"offset\" : `${referencedTable}.offset`;\n\t\tconst keyLimit = typeof referencedTable === \"undefined\" ? \"limit\" : `${referencedTable}.limit`;\n\t\tthis.url.searchParams.set(keyOffset, `${from}`);\n\t\tthis.url.searchParams.set(keyLimit, `${to - from + 1}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Set the AbortSignal for the fetch request.\n\t*\n\t* @param signal - The AbortSignal to use for the fetch request\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @remarks\n\t* You can use this to set a timeout for the request.\n\t*\n\t* @exampleDescription Aborting requests in-flight\n\t* You can use an [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) to abort requests.\n\t* Note that `status` and `statusText` don't mean anything for aborted requests as the request wasn't fulfilled.\n\t*\n\t* @example Aborting requests in-flight\n\t* ```ts\n\t* const ac = new AbortController()\n\t*\n\t* const { data, error } = await supabase\n\t*   .from('very_big_table')\n\t*   .select()\n\t*   .abortSignal(ac.signal)\n\t*\n\t* // Abort the request after 100 ms\n\t* setTimeout(() => ac.abort(), 100)\n\t* ```\n\t*\n\t* @exampleResponse Aborting requests in-flight\n\t* ```json\n\t*   {\n\t*     \"error\": {\n\t*       \"message\": \"AbortError: The user aborted a request.\",\n\t*       \"details\": \"\",\n\t*       \"hint\": \"The request was aborted locally via the provided AbortSignal.\",\n\t*       \"code\": \"\"\n\t*     },\n\t*     \"status\": 0,\n\t*     \"statusText\": \"\"\n\t*   }\n\t*\n\t* ```\n\t*\n\t* @example Set a timeout\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('very_big_table')\n\t*   .select()\n\t*   .abortSignal(AbortSignal.timeout(1000 /* ms *\\/))\n\t* ```\n\t*\n\t* @exampleResponse Set a timeout\n\t* ```json\n\t*   {\n\t*     \"error\": {\n\t*       \"message\": \"FetchError: The user aborted a request.\",\n\t*       \"details\": \"\",\n\t*       \"hint\": \"\",\n\t*       \"code\": \"\"\n\t*     },\n\t*     \"status\": 0,\n\t*     \"statusText\": \"\"\n\t*   }\n\t*\n\t* ```\n\t*/\n\tabortSignal(signal) {\n\t\tthis.signal = signal;\n\t\treturn this;\n\t}\n\t/**\n\t* Return `data` as a single object instead of an array of objects.\n\t*\n\t* Query result must be one row (e.g. using `.limit(1)`), otherwise this\n\t* returns an error.\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select('name')\n\t*   .limit(1)\n\t*   .single()\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"name\": \"Luke\"\n\t*   },\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tsingle() {\n\t\tthis.headers.set(\"Accept\", \"application/vnd.pgrst.object+json\");\n\t\treturn this;\n\t}\n\t/**\n\t* Return `data` as a single object instead of an array of objects.\n\t*\n\t* Query result must be zero or one row (e.g. using `.limit(1)`), otherwise\n\t* this returns an error.\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select()\n\t*   .eq('name', 'Katniss')\n\t*   .maybeSingle()\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tmaybeSingle() {\n\t\tthis.isMaybeSingle = true;\n\t\treturn this;\n\t}\n\t/**\n\t* Return `data` as a string in CSV format.\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @exampleDescription Return data as CSV\n\t* By default, the data is returned in JSON format, but can also be returned as Comma Separated Values.\n\t*\n\t* @example Return data as CSV\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select()\n\t*   .csv()\n\t* ```\n\t*\n\t* @exampleSql Return data as CSV\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse Return data as CSV\n\t* ```json\n\t* {\n\t*   \"data\": \"id,name\\n1,Luke\\n2,Leia\\n3,Han\",\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tcsv() {\n\t\tthis.headers.set(\"Accept\", \"text/csv\");\n\t\treturn this;\n\t}\n\t/**\n\t* Return `data` as an object in [GeoJSON](https://geojson.org) format.\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*/\n\tgeojson() {\n\t\tthis.headers.set(\"Accept\", \"application/geo+json\");\n\t\treturn this;\n\t}\n\t/**\n\t* Return `data` as the EXPLAIN plan for the query.\n\t*\n\t* You need to enable the\n\t* [db_plan_enabled](https://supabase.com/docs/guides/database/debugging-performance#enabling-explain)\n\t* setting before using this method.\n\t*\n\t* @param options - Named parameters\n\t*\n\t* @param options.analyze - If `true`, the query will be executed and the\n\t* actual run time will be returned\n\t*\n\t* @param options.verbose - If `true`, the query identifier will be returned\n\t* and `data` will include the output columns of the query\n\t*\n\t* @param options.settings - If `true`, include information on configuration\n\t* parameters that affect query planning\n\t*\n\t* @param options.buffers - If `true`, include information on buffer usage\n\t*\n\t* @param options.wal - If `true`, include information on WAL record generation\n\t*\n\t* @param options.format - The format of the output, can be `\"text\"` (default)\n\t* or `\"json\"`\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @exampleDescription Get the execution plan\n\t* By default, the data is returned in TEXT format, but can also be returned as JSON by using the `format` parameter.\n\t*\n\t* @example Get the execution plan\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select()\n\t*   .explain()\n\t* ```\n\t*\n\t* @exampleSql Get the execution plan\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse Get the execution plan\n\t* ```js\n\t* Aggregate  (cost=33.34..33.36 rows=1 width=112)\n\t*   ->  Limit  (cost=0.00..18.33 rows=1000 width=40)\n\t*         ->  Seq Scan on characters  (cost=0.00..22.00 rows=1200 width=40)\n\t* ```\n\t*\n\t* @exampleDescription Get the execution plan with analyze and verbose\n\t* By default, the data is returned in TEXT format, but can also be returned as JSON by using the `format` parameter.\n\t*\n\t* @example Get the execution plan with analyze and verbose\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select()\n\t*   .explain({analyze:true,verbose:true})\n\t* ```\n\t*\n\t* @exampleSql Get the execution plan with analyze and verbose\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse Get the execution plan with analyze and verbose\n\t* ```js\n\t* Aggregate  (cost=33.34..33.36 rows=1 width=112) (actual time=0.041..0.041 rows=1 loops=1)\n\t*   Output: NULL::bigint, count(ROW(characters.id, characters.name)), COALESCE(json_agg(ROW(characters.id, characters.name)), '[]'::json), NULLIF(current_setting('response.headers'::text, true), ''::text), NULLIF(current_setting('response.status'::text, true), ''::text)\n\t*   ->  Limit  (cost=0.00..18.33 rows=1000 width=40) (actual time=0.005..0.006 rows=3 loops=1)\n\t*         Output: characters.id, characters.name\n\t*         ->  Seq Scan on public.characters  (cost=0.00..22.00 rows=1200 width=40) (actual time=0.004..0.005 rows=3 loops=1)\n\t*               Output: characters.id, characters.name\n\t* Query Identifier: -4730654291623321173\n\t* Planning Time: 0.407 ms\n\t* Execution Time: 0.119 ms\n\t* ```\n\t*/\n\texplain({ analyze = false, verbose = false, settings = false, buffers = false, wal = false, format = \"text\" } = {}) {\n\t\tvar _this$headers$get;\n\t\tconst options = [\n\t\t\tanalyze ? \"analyze\" : null,\n\t\t\tverbose ? \"verbose\" : null,\n\t\t\tsettings ? \"settings\" : null,\n\t\t\tbuffers ? \"buffers\" : null,\n\t\t\twal ? \"wal\" : null\n\t\t].filter(Boolean).join(\"|\");\n\t\tconst forMediatype = (_this$headers$get = this.headers.get(\"Accept\")) !== null && _this$headers$get !== void 0 ? _this$headers$get : \"application/json\";\n\t\tthis.headers.set(\"Accept\", `application/vnd.pgrst.plan+${format}; for=\"${forMediatype}\"; options=${options};`);\n\t\tif (format === \"json\") return this;\n\t\telse return this;\n\t}\n\t/**\n\t* Dry-run this request: execute the query but discard the changes.\n\t*\n\t* Server-side, PostgREST runs the query inside a transaction and rolls it back\n\t* instead of committing. The response still contains the data that *would* have\n\t* been returned — `RETURNING` clauses execute and RLS, triggers, and constraints\n\t* are all evaluated — but no row is actually inserted, updated, or deleted.\n\t*\n\t* This affects only the single request it is chained to. The JS caller has no\n\t* handle on the transaction: supabase-js does not group multiple queries into\n\t* one transaction. For multi-statement transactional logic, use a database\n\t* function (`supabase.rpc(...)`).\n\t*\n\t* Sets the `Prefer: tx=rollback` header. See PostgREST's docs on transaction\n\t* preferences for the underlying mechanism.\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example Validate an insert without persisting\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('countries')\n\t*   .insert({ name: 'France' })\n\t*   .select()\n\t*   .rollback()\n\t* // `data` shows what would have been inserted; nothing is saved.\n\t* ```\n\t*/\n\trollback() {\n\t\tthis.headers.append(\"Prefer\", \"tx=rollback\");\n\t\treturn this;\n\t}\n\t/**\n\t* Override the type of the returned `data`.\n\t*\n\t* @typeParam NewResult - The new result type to override with\n\t* @deprecated Use overrideTypes<yourType, { merge: false }>() method at the end of your call chain instead\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @remarks\n\t* - Deprecated: use overrideTypes method instead\n\t*\n\t* @example Override type of successful response\n\t* ```ts\n\t* const { data } = await supabase\n\t*   .from('countries')\n\t*   .select()\n\t*   .returns<Array<MyType>>()\n\t* ```\n\t*\n\t* @exampleResponse Override type of successful response\n\t* ```js\n\t* let x: typeof data // MyType[]\n\t* ```\n\t*\n\t* @example Override type of object response\n\t* ```ts\n\t* const { data } = await supabase\n\t*   .from('countries')\n\t*   .select()\n\t*   .maybeSingle()\n\t*   .returns<MyType>()\n\t* ```\n\t*\n\t* @exampleResponse Override type of object response\n\t* ```js\n\t* let x: typeof data // MyType | null\n\t* ```\n\t*/\n\treturns() {\n\t\treturn this;\n\t}\n\t/**\n\t* Set the maximum number of rows that can be affected by the query.\n\t* Only available in PostgREST v13+ and only works with PATCH and DELETE methods.\n\t*\n\t* @param rows - The maximum number of rows that can be affected\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*/\n\tmaxAffected(rows) {\n\t\tthis.headers.append(\"Prefer\", \"handling=strict\");\n\t\tthis.headers.append(\"Prefer\", `max-affected=${rows}`);\n\t\treturn this;\n\t}\n};\n\n//#endregion\n//#region src/PostgrestFilterBuilder.ts\nconst PostgrestReservedCharsRegexp = /* @__PURE__ */ new RegExp(\"[,()]\");\nvar PostgrestFilterBuilder = class extends PostgrestTransformBuilder {\n\tthrowOnError() {\n\t\treturn super.throwOnError();\n\t}\n\t/**\n\t* Match only rows where `column` is equal to `value`.\n\t*\n\t* To check if the value of `column` is NULL, you should use `.is()` instead.\n\t*\n\t* @param column - The column to filter on\n\t* @param value - The value to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select()\n\t*   .eq('name', 'Leia')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 2,\n\t*       \"name\": \"Leia\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\teq(column, value) {\n\t\tthis.url.searchParams.append(column, `eq.${value}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` is not equal to `value`.\n\t*\n\t* This filter does not include rows where `column` is `NULL`. To match null\n\t* values, use `.is(column, null)` instead.\n\t*\n\t* @param column - The column to filter on\n\t* @param value - The value to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select()\n\t*   .neq('name', 'Leia')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 1,\n\t*       \"name\": \"Luke\"\n\t*     },\n\t*     {\n\t*       \"id\": 3,\n\t*       \"name\": \"Han\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tneq(column, value) {\n\t\tthis.url.searchParams.append(column, `neq.${value}`);\n\t\treturn this;\n\t}\n\tgt(column, value) {\n\t\tthis.url.searchParams.append(column, `gt.${value}`);\n\t\treturn this;\n\t}\n\tgte(column, value) {\n\t\tthis.url.searchParams.append(column, `gte.${value}`);\n\t\treturn this;\n\t}\n\tlt(column, value) {\n\t\tthis.url.searchParams.append(column, `lt.${value}`);\n\t\treturn this;\n\t}\n\tlte(column, value) {\n\t\tthis.url.searchParams.append(column, `lte.${value}`);\n\t\treturn this;\n\t}\n\tlike(column, pattern) {\n\t\tthis.url.searchParams.append(column, `like.${pattern}`);\n\t\treturn this;\n\t}\n\tlikeAllOf(column, patterns) {\n\t\tthis.url.searchParams.append(column, `like(all).{${patterns.join(\",\")}}`);\n\t\treturn this;\n\t}\n\tlikeAnyOf(column, patterns) {\n\t\tthis.url.searchParams.append(column, `like(any).{${patterns.join(\",\")}}`);\n\t\treturn this;\n\t}\n\tilike(column, pattern) {\n\t\tthis.url.searchParams.append(column, `ilike.${pattern}`);\n\t\treturn this;\n\t}\n\tilikeAllOf(column, patterns) {\n\t\tthis.url.searchParams.append(column, `ilike(all).{${patterns.join(\",\")}}`);\n\t\treturn this;\n\t}\n\tilikeAnyOf(column, patterns) {\n\t\tthis.url.searchParams.append(column, `ilike(any).{${patterns.join(\",\")}}`);\n\t\treturn this;\n\t}\n\tregexMatch(column, pattern) {\n\t\tthis.url.searchParams.append(column, `match.${pattern}`);\n\t\treturn this;\n\t}\n\tregexIMatch(column, pattern) {\n\t\tthis.url.searchParams.append(column, `imatch.${pattern}`);\n\t\treturn this;\n\t}\n\tis(column, value) {\n\t\tthis.url.searchParams.append(column, `is.${value}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` IS DISTINCT FROM `value`.\n\t*\n\t* Unlike `.neq()`, this treats `NULL` as a comparable value. Two `NULL` values\n\t* are considered equal (not distinct), and comparing `NULL` with any non-NULL\n\t* value returns true (distinct).\n\t*\n\t* @param column - The column to filter on\n\t* @param value - The value to filter with\n\t*/\n\tisDistinct(column, value) {\n\t\tthis.url.searchParams.append(column, `isdistinct.${value}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` is included in the `values` array.\n\t*\n\t* @param column - The column to filter on\n\t* @param values - The values array to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select()\n\t*   .in('name', ['Leia', 'Han'])\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 2,\n\t*       \"name\": \"Leia\"\n\t*     },\n\t*     {\n\t*       \"id\": 3,\n\t*       \"name\": \"Han\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tin(column, values) {\n\t\tconst cleanedValues = Array.from(new Set(values)).map((s) => {\n\t\t\tif (typeof s === \"string\" && PostgrestReservedCharsRegexp.test(s)) return `\"${s}\"`;\n\t\t\telse return `${s}`;\n\t\t}).join(\",\");\n\t\tthis.url.searchParams.append(column, `in.(${cleanedValues})`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` is NOT included in the `values` array.\n\t*\n\t* @param column - The column to filter on\n\t* @param values - The values array to filter with\n\t*/\n\tnotIn(column, values) {\n\t\tconst cleanedValues = Array.from(new Set(values)).map((s) => {\n\t\t\tif (typeof s === \"string\" && PostgrestReservedCharsRegexp.test(s)) return `\"${s}\"`;\n\t\t\telse return `${s}`;\n\t\t}).join(\",\");\n\t\tthis.url.searchParams.append(column, `not.in.(${cleanedValues})`);\n\t\treturn this;\n\t}\n\tcontains(column, value) {\n\t\tif (typeof value === \"string\") this.url.searchParams.append(column, `cs.${value}`);\n\t\telse if (Array.isArray(value)) this.url.searchParams.append(column, `cs.{${value.join(\",\")}}`);\n\t\telse this.url.searchParams.append(column, `cs.${JSON.stringify(value)}`);\n\t\treturn this;\n\t}\n\tcontainedBy(column, value) {\n\t\tif (typeof value === \"string\") this.url.searchParams.append(column, `cd.${value}`);\n\t\telse if (Array.isArray(value)) this.url.searchParams.append(column, `cd.{${value.join(\",\")}}`);\n\t\telse this.url.searchParams.append(column, `cd.${JSON.stringify(value)}`);\n\t\treturn this;\n\t}\n\trangeGt(column, range) {\n\t\tthis.url.searchParams.append(column, `sr.${range}`);\n\t\treturn this;\n\t}\n\trangeGte(column, range) {\n\t\tthis.url.searchParams.append(column, `nxl.${range}`);\n\t\treturn this;\n\t}\n\trangeLt(column, range) {\n\t\tthis.url.searchParams.append(column, `sl.${range}`);\n\t\treturn this;\n\t}\n\trangeLte(column, range) {\n\t\tthis.url.searchParams.append(column, `nxr.${range}`);\n\t\treturn this;\n\t}\n\trangeAdjacent(column, range) {\n\t\tthis.url.searchParams.append(column, `adj.${range}`);\n\t\treturn this;\n\t}\n\toverlaps(column, value) {\n\t\tif (typeof value === \"string\") this.url.searchParams.append(column, `ov.${value}`);\n\t\telse this.url.searchParams.append(column, `ov.{${value.join(\",\")}}`);\n\t\treturn this;\n\t}\n\ttextSearch(column, query, { config, type } = {}) {\n\t\tlet typePart = \"\";\n\t\tif (type === \"plain\") typePart = \"pl\";\n\t\telse if (type === \"phrase\") typePart = \"ph\";\n\t\telse if (type === \"websearch\") typePart = \"w\";\n\t\tconst configPart = config === void 0 ? \"\" : `(${config})`;\n\t\tthis.url.searchParams.append(column, `${typePart}fts${configPart}.${query}`);\n\t\treturn this;\n\t}\n\tmatch(query) {\n\t\tObject.entries(query).filter(([_, value]) => value !== void 0).forEach(([column, value]) => {\n\t\t\tthis.url.searchParams.append(column, `eq.${value}`);\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows which doesn't satisfy the filter.\n\t*\n\t* Unlike most filters, `opearator` and `value` are used as-is and need to\n\t* follow [PostgREST\n\t* syntax](https://postgrest.org/en/stable/api.html#operators). You also need\n\t* to make sure they are properly sanitized.\n\t*\n\t* @param column - The column to filter on\n\t* @param operator - The operator to be negated to filter with, following\n\t* PostgREST syntax\n\t* @param value - The value to filter with, following PostgREST syntax\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @remarks\n\t* not() expects you to use the raw PostgREST syntax for the filter values.\n\t*\n\t* ```ts\n\t* .not('id', 'in', '(5,6,7)')  // Use `()` for `in` filter\n\t* .not('arraycol', 'cs', '{\"a\",\"b\"}')  // Use `cs` for `contains()`, `{}` for array values\n\t* ```\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('countries')\n\t*   .select()\n\t*   .not('name', 'is', null)\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t*   countries (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   countries (id, name)\n\t* values\n\t*   (1, 'null'),\n\t*   (2, null);\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t*   {\n\t*     \"data\": [\n\t*       {\n\t*         \"id\": 1,\n\t*         \"name\": \"null\"\n\t*       }\n\t*     ],\n\t*     \"status\": 200,\n\t*     \"statusText\": \"OK\"\n\t*   }\n\t*\n\t* ```\n\t*/\n\tnot(column, operator, value) {\n\t\tthis.url.searchParams.append(column, `not.${operator}.${value}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows which satisfy at least one of the filters.\n\t*\n\t* Unlike most filters, `filters` is used as-is and needs to follow [PostgREST\n\t* syntax](https://postgrest.org/en/stable/api.html#operators). You also need\n\t* to make sure it's properly sanitized.\n\t*\n\t* It's currently not possible to do an `.or()` filter across multiple tables.\n\t*\n\t* @param filters - The filters to use, following PostgREST syntax\n\t* @param options - Named parameters\n\t* @param options.referencedTable - Set this to filter on referenced tables\n\t* instead of the parent table\n\t* @param options.foreignTable - Deprecated, use `referencedTable` instead\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @remarks\n\t* or() expects you to use the raw PostgREST syntax for the filter names and values.\n\t*\n\t* ```ts\n\t* .or('id.in.(5,6,7), arraycol.cs.{\"a\",\"b\"}')  // Use `()` for `in` filter, `{}` for array values and `cs` for `contains()`.\n\t* .or('id.in.(5,6,7), arraycol.cd.{\"a\",\"b\"}')  // Use `cd` for `containedBy()`\n\t* ```\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select('name')\n\t*   .or('id.eq.2,name.eq.Han')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"Leia\"\n\t*     },\n\t*     {\n\t*       \"name\": \"Han\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example Use `or` with `and`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select('name')\n\t*   .or('id.gt.3,and(id.eq.1,name.eq.Luke)')\n\t* ```\n\t*\n\t* @exampleSql Use `or` with `and`\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse Use `or` with `and`\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"Luke\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example Use `or` on referenced tables\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('orchestral_sections')\n\t*   .select(`\n\t*     name,\n\t*     instruments!inner (\n\t*       name\n\t*     )\n\t*   `)\n\t*   .or('section_id.eq.1,name.eq.guzheng', { referencedTable: 'instruments' })\n\t* ```\n\t*\n\t* @exampleSql Use `or` on referenced tables\n\t* ```sql\n\t* create table\n\t*   orchestral_sections (id int8 primary key, name text);\n\t* create table\n\t*   instruments (\n\t*     id int8 primary key,\n\t*     section_id int8 not null references orchestral_sections,\n\t*     name text\n\t*   );\n\t*\n\t* insert into\n\t*   orchestral_sections (id, name)\n\t* values\n\t*   (1, 'strings'),\n\t*   (2, 'woodwinds');\n\t* insert into\n\t*   instruments (id, section_id, name)\n\t* values\n\t*   (1, 2, 'flute'),\n\t*   (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse Use `or` on referenced tables\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"strings\",\n\t*       \"instruments\": [\n\t*         {\n\t*           \"name\": \"violin\"\n\t*         }\n\t*       ]\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tor(filters, { foreignTable, referencedTable = foreignTable } = {}) {\n\t\tconst key = referencedTable ? `${referencedTable}.or` : \"or\";\n\t\tthis.url.searchParams.append(key, `(${filters})`);\n\t\treturn this;\n\t}\n\tfilter(column, operator, value) {\n\t\tthis.url.searchParams.append(column, `${operator}.${value}`);\n\t\treturn this;\n\t}\n};\n\n//#endregion\n//#region src/PostgrestQueryBuilder.ts\nvar PostgrestQueryBuilder = class {\n\t/**\n\t* Creates a query builder scoped to a Postgres table or view.\n\t*\n\t* @category Database\n\t*\n\t* @param url - The URL for the query\n\t* @param options - Named parameters\n\t* @param options.headers - Custom headers\n\t* @param options.schema - Postgres schema to use\n\t* @param options.fetch - Custom fetch implementation\n\t* @param options.urlLengthLimit - Maximum URL length before warning\n\t* @param options.retry - Enable automatic retries for transient errors (default: true)\n\t*\n\t* @example Using supabase-js (recommended)\n\t* ```ts\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* const { data, error } = await supabase.from('users').select('*')\n\t* ```\n\t*\n\t* @example Standalone import for bundle-sensitive environments\n\t* ```ts\n\t* import { PostgrestQueryBuilder } from '@supabase/postgrest-js'\n\t*\n\t* const query = new PostgrestQueryBuilder(\n\t*   new URL('https://xyzcompany.supabase.co/rest/v1/users'),\n\t*   { headers: { apikey: 'your-publishable-key' }, retry: true }\n\t* )\n\t* ```\n\t*/\n\tconstructor(url, { headers = {}, schema, fetch: fetch$1, urlLengthLimit = 8e3, retry }) {\n\t\tthis.url = url;\n\t\tthis.headers = new Headers(headers);\n\t\tthis.schema = schema;\n\t\tthis.fetch = fetch$1;\n\t\tthis.urlLengthLimit = urlLengthLimit;\n\t\tthis.retry = retry;\n\t}\n\t/**\n\t* Clone URL and headers to prevent shared state between operations.\n\t*/\n\tcloneRequestState() {\n\t\treturn {\n\t\t\turl: new URL(this.url.toString()),\n\t\t\theaders: new Headers(this.headers)\n\t\t};\n\t}\n\t/**\n\t* Perform a SELECT query on the table or view.\n\t*\n\t* @param columns - The columns to retrieve, separated by commas. Columns can be renamed when returned with `customName:columnName`\n\t*\n\t* @param options - Named parameters\n\t*\n\t* @param options.head - When set to `true`, `data` will not be returned.\n\t* Useful if you only need the count.\n\t*\n\t* @param options.count - Count algorithm to use to count rows in the table or view.\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*\n\t* @remarks\n\t* When using `count` with `.range()` or `.limit()`, the returned `count` is the total number of rows\n\t* that match your filters, not the number of rows in the current page. Use this to build pagination UI.\n\t\n\t* - By default, Supabase projects return a maximum of 1,000 rows. This setting can be changed in your project's [API settings](/dashboard/project/_/settings/api). It's recommended that you keep it low to limit the payload size of accidental or malicious requests. You can use `range()` queries to paginate through your data.\n\t* - `select()` can be combined with [Filters](/docs/reference/javascript/using-filters)\n\t* - `select()` can be combined with [Modifiers](/docs/reference/javascript/using-modifiers)\n\t* - `apikey` is a reserved keyword if you're using the [Supabase Platform](/docs/guides/platform) and [should be avoided as a column name](https://github.com/supabase/supabase/issues/5465). *\n\t* @category Database\n\t*\n\t* @example Getting your data\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select()\n\t* ```\n\t*\n\t* @exampleSql Getting your data\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Harry'),\n\t*   (2, 'Frodo'),\n\t*   (3, 'Katniss');\n\t* ```\n\t*\n\t* @exampleResponse Getting your data\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 1,\n\t*       \"name\": \"Harry\"\n\t*     },\n\t*     {\n\t*       \"id\": 2,\n\t*       \"name\": \"Frodo\"\n\t*     },\n\t*     {\n\t*       \"id\": 3,\n\t*       \"name\": \"Katniss\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Handling errors\n\t* The most useful field on a Postgres error is usually `hint` — when the database knows the fix, it puts the literal SQL there. For example, a permission-denied error (`code: '42501'`) arrives with a `hint` like `\"Grant the required privileges to the current role with: GRANT SELECT ON public.characters TO anon;\"`. Log the full `error` object so the hint isn't hidden behind `error.message`.\n\t*\n\t* @example Handling errors\n\t* ```js\n\t* const { data, error } = await supabase.from('characters').select()\n\t* if (error) {\n\t*   // Logs the full error: message, code, details, and hint.\n\t*   console.error(error)\n\t*   return\n\t* }\n\t* ```\n\t*\n\t* @exampleResponse Handling errors\n\t* ```json\n\t* {\n\t*   \"error\": {\n\t*     \"code\": \"42501\",\n\t*     \"details\": null,\n\t*     \"hint\": \"Grant the required privileges to the current role with: GRANT SELECT ON public.characters TO anon;\",\n\t*     \"message\": \"permission denied for table characters\"\n\t*   },\n\t*   \"status\": 401,\n\t*   \"statusText\": \"\"\n\t* }\n\t* ```\n\t*\n\t* @example Selecting specific columns\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .from('characters')\n\t*   .select('name')\n\t* ```\n\t*\n\t* @exampleSql Selecting specific columns\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Frodo'),\n\t*   (2, 'Harry'),\n\t*   (3, 'Katniss');\n\t* ```\n\t*\n\t* @exampleResponse Selecting specific columns\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"Frodo\"\n\t*     },\n\t*     {\n\t*       \"name\": \"Harry\"\n\t*     },\n\t*     {\n\t*       \"name\": \"Katniss\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Query referenced tables\n\t* If your database has foreign key relationships, you can query related tables too.\n\t*\n\t* @example Query referenced tables\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .from('orchestral_sections')\n\t*   .select(`\n\t*     name,\n\t*     instruments (\n\t*       name\n\t*     )\n\t*   `)\n\t* ```\n\t*\n\t* @exampleSql Query referenced tables\n\t* ```sql\n\t* create table\n\t*   orchestral_sections (id int8 primary key, name text);\n\t* create table\n\t*   instruments (\n\t*     id int8 primary key,\n\t*     section_id int8 not null references orchestral_sections,\n\t*     name text\n\t*   );\n\t*\n\t* insert into\n\t*   orchestral_sections (id, name)\n\t* values\n\t*   (1, 'strings'),\n\t*   (2, 'woodwinds');\n\t* insert into\n\t*   instruments (id, section_id, name)\n\t* values\n\t*   (1, 2, 'flute'),\n\t*   (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse Query referenced tables\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"strings\",\n\t*       \"instruments\": [\n\t*         {\n\t*           \"name\": \"violin\"\n\t*         }\n\t*       ]\n\t*     },\n\t*     {\n\t*       \"name\": \"woodwinds\",\n\t*       \"instruments\": [\n\t*         {\n\t*           \"name\": \"flute\"\n\t*         }\n\t*       ]\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Query referenced tables with spaces in their names\n\t* If your table name contains spaces, you must use double quotes in the `select` statement to reference the table.\n\t*\n\t* @example Query referenced tables with spaces in their names\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .from('orchestral sections')\n\t*   .select(`\n\t*     name,\n\t*     \"musical instruments\" (\n\t*       name\n\t*     )\n\t*   `)\n\t* ```\n\t*\n\t* @exampleSql Query referenced tables with spaces in their names\n\t* ```sql\n\t* create table\n\t*   \"orchestral sections\" (id int8 primary key, name text);\n\t* create table\n\t*   \"musical instruments\" (\n\t*     id int8 primary key,\n\t*     section_id int8 not null references \"orchestral sections\",\n\t*     name text\n\t*   );\n\t*\n\t* insert into\n\t*   \"orchestral sections\" (id, name)\n\t* values\n\t*   (1, 'strings'),\n\t*   (2, 'woodwinds');\n\t* insert into\n\t*   \"musical instruments\" (id, section_id, name)\n\t* values\n\t*   (1, 2, 'flute'),\n\t*   (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse Query referenced tables with spaces in their names\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"strings\",\n\t*       \"musical instruments\": [\n\t*         {\n\t*           \"name\": \"violin\"\n\t*         }\n\t*       ]\n\t*     },\n\t*     {\n\t*       \"name\": \"woodwinds\",\n\t*       \"musical instruments\": [\n\t*         {\n\t*           \"name\": \"flute\"\n\t*         }\n\t*       ]\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Query referenced tables through a join table\n\t* If you're in a situation where your tables are **NOT** directly\n\t* related, but instead are joined by a _join table_, you can still use\n\t* the `select()` method to query the related data. The join table needs\n\t* to have the foreign keys as part of its composite primary key.\n\t*\n\t* @example Query referenced tables through a join table\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('users')\n\t*   .select(`\n\t*     name,\n\t*     teams (\n\t*       name\n\t*     )\n\t*   `)\n\t*   \n\t* ```\n\t*\n\t* @exampleSql Query referenced tables through a join table\n\t* ```sql\n\t* create table\n\t*   users (\n\t*     id int8 primary key,\n\t*     name text\n\t*   );\n\t* create table\n\t*   teams (\n\t*     id int8 primary key,\n\t*     name text\n\t*   );\n\t* -- join table\n\t* create table\n\t*   users_teams (\n\t*     user_id int8 not null references users,\n\t*     team_id int8 not null references teams,\n\t*     -- both foreign keys must be part of a composite primary key\n\t*     primary key (user_id, team_id)\n\t*   );\n\t*\n\t* insert into\n\t*   users (id, name)\n\t* values\n\t*   (1, 'Kiran'),\n\t*   (2, 'Evan');\n\t* insert into\n\t*   teams (id, name)\n\t* values\n\t*   (1, 'Green'),\n\t*   (2, 'Blue');\n\t* insert into\n\t*   users_teams (user_id, team_id)\n\t* values\n\t*   (1, 1),\n\t*   (1, 2),\n\t*   (2, 2);\n\t* ```\n\t*\n\t* @exampleResponse Query referenced tables through a join table\n\t* ```json\n\t*   {\n\t*     \"data\": [\n\t*       {\n\t*         \"name\": \"Kiran\",\n\t*         \"teams\": [\n\t*           {\n\t*             \"name\": \"Green\"\n\t*           },\n\t*           {\n\t*             \"name\": \"Blue\"\n\t*           }\n\t*         ]\n\t*       },\n\t*       {\n\t*         \"name\": \"Evan\",\n\t*         \"teams\": [\n\t*           {\n\t*             \"name\": \"Blue\"\n\t*           }\n\t*         ]\n\t*       }\n\t*     ],\n\t*     \"status\": 200,\n\t*     \"statusText\": \"OK\"\n\t*   }\n\t*   \n\t* ```\n\t*\n\t* @exampleDescription Query the same referenced table multiple times\n\t* If you need to query the same referenced table twice, use the name of the\n\t* joined column to identify which join to use. You can also give each\n\t* column an alias.\n\t*\n\t* @example Query the same referenced table multiple times\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('messages')\n\t*   .select(`\n\t*     content,\n\t*     from:sender_id(name),\n\t*     to:receiver_id(name)\n\t*   `)\n\t*\n\t* // To infer types, use the name of the table (in this case `users`) and\n\t* // the name of the foreign key constraint.\n\t* const { data, error } = await supabase\n\t*   .from('messages')\n\t*   .select(`\n\t*     content,\n\t*     from:users!messages_sender_id_fkey(name),\n\t*     to:users!messages_receiver_id_fkey(name)\n\t*   `)\n\t* ```\n\t*\n\t* @exampleSql Query the same referenced table multiple times\n\t* ```sql\n\t*  create table\n\t*  users (id int8 primary key, name text);\n\t*\n\t*  create table\n\t*    messages (\n\t*      sender_id int8 not null references users,\n\t*      receiver_id int8 not null references users,\n\t*      content text\n\t*    );\n\t*\n\t*  insert into\n\t*    users (id, name)\n\t*  values\n\t*    (1, 'Kiran'),\n\t*    (2, 'Evan');\n\t*\n\t*  insert into\n\t*    messages (sender_id, receiver_id, content)\n\t*  values\n\t*    (1, 2, '👋');\n\t*  ```\n\t* ```\n\t*\n\t* @exampleResponse Query the same referenced table multiple times\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"content\": \"👋\",\n\t*       \"from\": {\n\t*         \"name\": \"Kiran\"\n\t*       },\n\t*       \"to\": {\n\t*         \"name\": \"Evan\"\n\t*       }\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Query nested foreign tables through a join table\n\t* You can use the result of a joined table to gather data in\n\t* another foreign table. With multiple references to the same foreign\n\t* table you must specify the column on which to conduct the join.\n\t*\n\t* @example Query nested foreign tables through a join table\n\t* ```ts\n\t*   const { data, error } = await supabase\n\t*     .from('games')\n\t*     .select(`\n\t*       game_id:id,\n\t*       away_team:teams!games_away_team_fkey (\n\t*         users (\n\t*           id,\n\t*           name\n\t*         )\n\t*       )\n\t*     `)\n\t*   \n\t* ```\n\t*\n\t* @exampleSql Query nested foreign tables through a join table\n\t* ```sql\n\t* ```sql\n\t* create table\n\t*   users (\n\t*     id int8 primary key,\n\t*     name text\n\t*   );\n\t* create table\n\t*   teams (\n\t*     id int8 primary key,\n\t*     name text\n\t*   );\n\t* -- join table\n\t* create table\n\t*   users_teams (\n\t*     user_id int8 not null references users,\n\t*     team_id int8 not null references teams,\n\t*\n\t*     primary key (user_id, team_id)\n\t*   );\n\t* create table\n\t*   games (\n\t*     id int8 primary key,\n\t*     home_team int8 not null references teams,\n\t*     away_team int8 not null references teams,\n\t*     name text\n\t*   );\n\t*\n\t* insert into users (id, name)\n\t* values\n\t*   (1, 'Kiran'),\n\t*   (2, 'Evan');\n\t* insert into\n\t*   teams (id, name)\n\t* values\n\t*   (1, 'Green'),\n\t*   (2, 'Blue');\n\t* insert into\n\t*   users_teams (user_id, team_id)\n\t* values\n\t*   (1, 1),\n\t*   (1, 2),\n\t*   (2, 2);\n\t* insert into\n\t*   games (id, home_team, away_team, name)\n\t* values\n\t*   (1, 1, 2, 'Green vs Blue'),\n\t*   (2, 2, 1, 'Blue vs Green');\n\t* ```\n\t*\n\t* @exampleResponse Query nested foreign tables through a join table\n\t* ```json\n\t*   {\n\t*     \"data\": [\n\t*       {\n\t*         \"game_id\": 1,\n\t*         \"away_team\": {\n\t*           \"users\": [\n\t*             {\n\t*               \"id\": 1,\n\t*               \"name\": \"Kiran\"\n\t*             },\n\t*             {\n\t*               \"id\": 2,\n\t*               \"name\": \"Evan\"\n\t*             }\n\t*           ]\n\t*         }\n\t*       },\n\t*       {\n\t*         \"game_id\": 2,\n\t*         \"away_team\": {\n\t*           \"users\": [\n\t*             {\n\t*               \"id\": 1,\n\t*               \"name\": \"Kiran\"\n\t*             }\n\t*           ]\n\t*         }\n\t*       }\n\t*     ],\n\t*     \"status\": 200,\n\t*     \"statusText\": \"OK\"\n\t*   }\n\t*   \n\t* ```\n\t*\n\t* @exampleDescription Filtering through referenced tables\n\t* If the filter on a referenced table's column is not satisfied, the referenced\n\t* table returns `[]` or `null` but the parent table is not filtered out.\n\t* If you want to filter out the parent table rows, use the `!inner` hint\n\t*\n\t* @example Filtering through referenced tables\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('instruments')\n\t*   .select('name, orchestral_sections(*)')\n\t*   .eq('orchestral_sections.name', 'percussion')\n\t* ```\n\t*\n\t* @exampleSql Filtering through referenced tables\n\t* ```sql\n\t* create table\n\t*   orchestral_sections (id int8 primary key, name text);\n\t* create table\n\t*   instruments (\n\t*     id int8 primary key,\n\t*     section_id int8 not null references orchestral_sections,\n\t*     name text\n\t*   );\n\t*\n\t* insert into\n\t*   orchestral_sections (id, name)\n\t* values\n\t*   (1, 'strings'),\n\t*   (2, 'woodwinds');\n\t* insert into\n\t*   instruments (id, section_id, name)\n\t* values\n\t*   (1, 2, 'flute'),\n\t*   (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse Filtering through referenced tables\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"flute\",\n\t*       \"orchestral_sections\": null\n\t*     },\n\t*     {\n\t*       \"name\": \"violin\",\n\t*       \"orchestral_sections\": null\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Querying referenced table with count\n\t* You can get the number of rows in a related table by using the\n\t* **count** property.\n\t*\n\t* @example Querying referenced table with count\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('orchestral_sections')\n\t*   .select(`*, instruments(count)`)\n\t* ```\n\t*\n\t* @exampleSql Querying referenced table with count\n\t* ```sql\n\t* create table orchestral_sections (\n\t*   \"id\" \"uuid\" primary key default \"extensions\".\"uuid_generate_v4\"() not null,\n\t*   \"name\" text\n\t* );\n\t*\n\t* create table characters (\n\t*   \"id\" \"uuid\" primary key default \"extensions\".\"uuid_generate_v4\"() not null,\n\t*   \"name\" text,\n\t*   \"section_id\" \"uuid\" references public.orchestral_sections on delete cascade\n\t* );\n\t*\n\t* with section as (\n\t*   insert into orchestral_sections (name)\n\t*   values ('strings') returning id\n\t* )\n\t* insert into instruments (name, section_id) values\n\t* ('violin', (select id from section)),\n\t* ('viola', (select id from section)),\n\t* ('cello', (select id from section)),\n\t* ('double bass', (select id from section));\n\t* ```\n\t*\n\t* @exampleResponse Querying referenced table with count\n\t* ```json\n\t* [\n\t*   {\n\t*     \"id\": \"693694e7-d993-4360-a6d7-6294e325d9b6\",\n\t*     \"name\": \"strings\",\n\t*     \"instruments\": [\n\t*       {\n\t*         \"count\": 4\n\t*       }\n\t*     ]\n\t*   }\n\t* ]\n\t* ```\n\t*\n\t* @exampleDescription Querying with count option\n\t* You can get the number of rows by using the\n\t* [count](/docs/reference/javascript/select#parameters) option.\n\t*\n\t* @example Querying with count option\n\t* ```ts\n\t* const { count, error } = await supabase\n\t*   .from('characters')\n\t*   .select('*', { count: 'exact', head: true })\n\t* ```\n\t*\n\t* @exampleSql Querying with count option\n\t* ```sql\n\t* create table\n\t*   characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   characters (id, name)\n\t* values\n\t*   (1, 'Luke'),\n\t*   (2, 'Leia'),\n\t*   (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse Querying with count option\n\t* ```json\n\t* {\n\t*   \"count\": 3,\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Querying JSON data\n\t* You can select and filter data inside of\n\t* [JSON](/docs/guides/database/json) columns. Postgres offers some\n\t* [operators](/docs/guides/database/json#query-the-jsonb-data) for\n\t* querying JSON data.\n\t*\n\t* @example Querying JSON data\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('users')\n\t*   .select(`\n\t*     id, name,\n\t*     address->city\n\t*   `)\n\t* ```\n\t*\n\t* @exampleSql Querying JSON data\n\t* ```sql\n\t* create table\n\t*   users (\n\t*     id int8 primary key,\n\t*     name text,\n\t*     address jsonb\n\t*   );\n\t*\n\t* insert into\n\t*   users (id, name, address)\n\t* values\n\t*   (1, 'Frodo', '{\"city\":\"Hobbiton\"}');\n\t* ```\n\t*\n\t* @exampleResponse Querying JSON data\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 1,\n\t*       \"name\": \"Frodo\",\n\t*       \"city\": \"Hobbiton\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Querying referenced table with inner join\n\t* If you don't want to return the referenced table contents, you can leave the parenthesis empty.\n\t* Like `.select('name, orchestral_sections!inner()')`.\n\t*\n\t* @example Querying referenced table with inner join\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('instruments')\n\t*   .select('name, orchestral_sections!inner(name)')\n\t*   .eq('orchestral_sections.name', 'woodwinds')\n\t*   .limit(1)\n\t* ```\n\t*\n\t* @exampleSql Querying referenced table with inner join\n\t* ```sql\n\t* create table orchestral_sections (\n\t*   \"id\" \"uuid\" primary key default \"extensions\".\"uuid_generate_v4\"() not null,\n\t*   \"name\" text\n\t* );\n\t*\n\t* create table instruments (\n\t*   \"id\" \"uuid\" primary key default \"extensions\".\"uuid_generate_v4\"() not null,\n\t*   \"name\" text,\n\t*   \"section_id\" \"uuid\" references public.orchestral_sections on delete cascade\n\t* );\n\t*\n\t* with section as (\n\t*   insert into orchestral_sections (name)\n\t*   values ('woodwinds') returning id\n\t* )\n\t* insert into instruments (name, section_id) values\n\t* ('flute', (select id from section)),\n\t* ('clarinet', (select id from section)),\n\t* ('bassoon', (select id from section)),\n\t* ('piccolo', (select id from section));\n\t* ```\n\t*\n\t* @exampleResponse Querying referenced table with inner join\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"flute\",\n\t*       \"orchestral_sections\": {\"name\": \"woodwinds\"}\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Switching schemas per query\n\t* In addition to setting the schema during initialization, you can also switch schemas on a per-query basis.\n\t* Make sure you've set up your [database privileges and API settings](/docs/guides/api/using-custom-schemas).\n\t*\n\t* @example Switching schemas per query\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .schema('myschema')\n\t*   .from('mytable')\n\t*   .select()\n\t* ```\n\t*\n\t* @exampleSql Switching schemas per query\n\t* ```sql\n\t* create schema myschema;\n\t*\n\t* create table myschema.mytable (\n\t*   id uuid primary key default gen_random_uuid(),\n\t*   data text\n\t* );\n\t*\n\t* insert into myschema.mytable (data) values ('mydata');\n\t* ```\n\t*\n\t* @exampleResponse Switching schemas per query\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": \"4162e008-27b0-4c0f-82dc-ccaeee9a624d\",\n\t*       \"data\": \"mydata\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tselect(columns, options) {\n\t\tconst { head = false, count } = options !== null && options !== void 0 ? options : {};\n\t\tconst method = head ? \"HEAD\" : \"GET\";\n\t\tlet quoted = false;\n\t\tconst cleanedColumns = (columns !== null && columns !== void 0 ? columns : \"*\").split(\"\").map((c) => {\n\t\t\tif (/\\s/.test(c) && !quoted) return \"\";\n\t\t\tif (c === \"\\\"\") quoted = !quoted;\n\t\t\treturn c;\n\t\t}).join(\"\");\n\t\tconst { url, headers } = this.cloneRequestState();\n\t\turl.searchParams.set(\"select\", cleanedColumns);\n\t\tif (count) headers.append(\"Prefer\", `count=${count}`);\n\t\treturn new PostgrestFilterBuilder({\n\t\t\tmethod,\n\t\t\turl,\n\t\t\theaders,\n\t\t\tschema: this.schema,\n\t\t\tfetch: this.fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n\t/**\n\t* Perform an INSERT into the table or view.\n\t*\n\t* By default, inserted rows are not returned. To return it, chain the call\n\t* with `.select()`.\n\t*\n\t* @param values - The values to insert. Pass an object to insert a single row\n\t* or an array to insert multiple rows.\n\t*\n\t* @param options - Named parameters\n\t*\n\t* @param options.count - Count algorithm to use to count inserted rows.\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*\n\t* @param options.defaultToNull - Make missing fields default to `null`.\n\t* Otherwise, use the default value for the column. Only applies for bulk\n\t* inserts.\n\t*\n\t* @category Database\n\t*\n\t* @example Create a record\n\t* ```ts\n\t* const { error } = await supabase\n\t*   .from('countries')\n\t*   .insert({ id: 1, name: 'Mordor' })\n\t* ```\n\t*\n\t* @exampleSql Create a record\n\t* ```sql\n\t* create table\n\t*   countries (id int8 primary key, name text);\n\t* ```\n\t*\n\t* @exampleResponse Create a record\n\t* ```json\n\t* {\n\t*   \"status\": 201,\n\t*   \"statusText\": \"\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Handling errors\n\t* `error.hint` from Postgres often contains the actionable fix (e.g. `\"Grant the required privileges to the current role with: GRANT INSERT ON public.countries TO anon;\"` for a `42501` permission-denied error). Log the full `error` object so it isn't hidden behind `error.message`.\n\t*\n\t* @example Handling errors\n\t* ```js\n\t* const { error } = await supabase.from('countries').insert({ id: 1, name: 'Mordor' })\n\t* if (error) console.error(error)\n\t* ```\n\t*\n\t* @example Create a record and return it\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('countries')\n\t*   .insert({ id: 1, name: 'Mordor' })\n\t*   .select()\n\t* ```\n\t*\n\t* @exampleSql Create a record and return it\n\t* ```sql\n\t* create table\n\t*   countries (id int8 primary key, name text);\n\t* ```\n\t*\n\t* @exampleResponse Create a record and return it\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 1,\n\t*       \"name\": \"Mordor\"\n\t*     }\n\t*   ],\n\t*   \"status\": 201,\n\t*   \"statusText\": \"\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Bulk create\n\t* A bulk create operation is handled in a single transaction.\n\t* If any of the inserts fail, none of the rows are inserted.\n\t*\n\t* @example Bulk create\n\t* ```ts\n\t* const { error } = await supabase\n\t*   .from('countries')\n\t*   .insert([\n\t*     { id: 1, name: 'Mordor' },\n\t*     { id: 1, name: 'The Shire' },\n\t*   ])\n\t* ```\n\t*\n\t* @exampleSql Bulk create\n\t* ```sql\n\t* create table\n\t*   countries (id int8 primary key, name text);\n\t* ```\n\t*\n\t* @exampleResponse Bulk create\n\t* ```json\n\t* {\n\t*   \"error\": {\n\t*     \"code\": \"23505\",\n\t*     \"details\": \"Key (id)=(1) already exists.\",\n\t*     \"hint\": null,\n\t*     \"message\": \"duplicate key value violates unique constraint \\\"countries_pkey\\\"\"\n\t*   },\n\t*   \"status\": 409,\n\t*   \"statusText\": \"\"\n\t* }\n\t* ```\n\t*/\n\tinsert(values, { count, defaultToNull = true } = {}) {\n\t\tvar _this$fetch;\n\t\tconst method = \"POST\";\n\t\tconst { url, headers } = this.cloneRequestState();\n\t\tif (count) headers.append(\"Prefer\", `count=${count}`);\n\t\tif (!defaultToNull) headers.append(\"Prefer\", `missing=default`);\n\t\tif (Array.isArray(values)) {\n\t\t\tconst columns = values.reduce((acc, x) => acc.concat(Object.keys(x)), []);\n\t\t\tif (columns.length > 0) {\n\t\t\t\tconst uniqueColumns = [...new Set(columns)].map((column) => `\"${column}\"`);\n\t\t\t\turl.searchParams.set(\"columns\", uniqueColumns.join(\",\"));\n\t\t\t}\n\t\t}\n\t\treturn new PostgrestFilterBuilder({\n\t\t\tmethod,\n\t\t\turl,\n\t\t\theaders,\n\t\t\tschema: this.schema,\n\t\t\tbody: values,\n\t\t\tfetch: (_this$fetch = this.fetch) !== null && _this$fetch !== void 0 ? _this$fetch : fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n\t/**\n\t* Perform an UPSERT on the table or view. Depending on the column(s) passed\n\t* to `onConflict`, `.upsert()` allows you to perform the equivalent of\n\t* `.insert()` if a row with the corresponding `onConflict` columns doesn't\n\t* exist, or if it does exist, perform an alternative action depending on\n\t* `ignoreDuplicates`.\n\t*\n\t* By default, upserted rows are not returned. To return it, chain the call\n\t* with `.select()`.\n\t*\n\t* @param values - The values to upsert with. Pass an object to upsert a\n\t* single row or an array to upsert multiple rows.\n\t*\n\t* @param options - Named parameters\n\t*\n\t* @param options.onConflict - Comma-separated UNIQUE column(s) to specify how\n\t* duplicate rows are determined. Two rows are duplicates if all the\n\t* `onConflict` columns are equal.\n\t*\n\t* @param options.ignoreDuplicates - If `true`, duplicate rows are ignored. If\n\t* `false`, duplicate rows are merged with existing rows.\n\t*\n\t* @param options.count - Count algorithm to use to count upserted rows.\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*\n\t* @param options.defaultToNull - Make missing fields default to `null`.\n\t* Otherwise, use the default value for the column. This only applies when\n\t* inserting new rows, not when merging with existing rows under\n\t* `ignoreDuplicates: false`. This also only applies when doing bulk upserts.\n\t*\n\t* @example Upsert a single row using a unique key\n\t* ```ts\n\t* // Upserting a single row, overwriting based on the 'username' unique column\n\t* const { data, error } = await supabase\n\t*   .from('users')\n\t*   .upsert({ username: 'supabot' }, { onConflict: 'username' })\n\t*\n\t* // Example response:\n\t* // {\n\t* //   data: [\n\t* //     { id: 4, message: 'bar', username: 'supabot' }\n\t* //   ],\n\t* //   error: null\n\t* // }\n\t* ```\n\t*\n\t* @example Upsert with conflict resolution and exact row counting\n\t* ```ts\n\t* // Upserting and returning exact count\n\t* const { data, error, count } = await supabase\n\t*   .from('users')\n\t*   .upsert(\n\t*     {\n\t*       id: 3,\n\t*       message: 'foo',\n\t*       username: 'supabot'\n\t*     },\n\t*     {\n\t*       onConflict: 'username',\n\t*       count: 'exact'\n\t*     }\n\t*   )\n\t*\n\t* // Example response:\n\t* // {\n\t* //   data: [\n\t* //     {\n\t* //       id: 42,\n\t* //       handle: \"saoirse\",\n\t* //       display_name: \"Saoirse\"\n\t* //     }\n\t* //   ],\n\t* //   count: 1,\n\t* //   error: null\n\t* // }\n\t* ```\n\t*\n\t* @category Database\n\t*\n\t* @remarks\n\t* - Primary keys must be included in `values` to use upsert.\n\t*\n\t* @example Upsert your data\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('instruments')\n\t*   .upsert({ id: 1, name: 'piano' })\n\t*   .select()\n\t* ```\n\t*\n\t* @exampleSql Upsert your data\n\t* ```sql\n\t* create table\n\t*   instruments (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   instruments (id, name)\n\t* values\n\t*   (1, 'harpsichord');\n\t* ```\n\t*\n\t* @exampleResponse Upsert your data\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 1,\n\t*       \"name\": \"piano\"\n\t*     }\n\t*   ],\n\t*   \"status\": 201,\n\t*   \"statusText\": \"\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Handling errors\n\t* `error.hint` from Postgres often contains the actionable fix (e.g. `\"Grant the required privileges to the current role with: GRANT INSERT, UPDATE ON public.instruments TO anon;\"` for a `42501` permission-denied error). Log the full `error` object so it isn't hidden behind `error.message`.\n\t*\n\t* @example Handling errors\n\t* ```js\n\t* const { data, error } = await supabase.from('instruments').upsert({ id: 1, name: 'piano' }).select()\n\t* if (error) console.error(error)\n\t* ```\n\t*\n\t* @example Bulk Upsert your data\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('instruments')\n\t*   .upsert([\n\t*     { id: 1, name: 'piano' },\n\t*     { id: 2, name: 'harp' },\n\t*   ])\n\t*   .select()\n\t* ```\n\t*\n\t* @exampleSql Bulk Upsert your data\n\t* ```sql\n\t* create table\n\t*   instruments (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   instruments (id, name)\n\t* values\n\t*   (1, 'harpsichord');\n\t* ```\n\t*\n\t* @exampleResponse Bulk Upsert your data\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 1,\n\t*       \"name\": \"piano\"\n\t*     },\n\t*     {\n\t*       \"id\": 2,\n\t*       \"name\": \"harp\"\n\t*     }\n\t*   ],\n\t*   \"status\": 201,\n\t*   \"statusText\": \"\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Upserting into tables with constraints\n\t* In the following query, `upsert()` implicitly uses the `id`\n\t* (primary key) column to determine conflicts. If there is no existing\n\t* row with the same `id`, `upsert()` inserts a new row, which\n\t* will fail in this case as there is already a row with `handle` `\"saoirse\"`.\n\t* Using the `onConflict` option, you can instruct `upsert()` to use\n\t* another column with a unique constraint to determine conflicts.\n\t*\n\t* @example Upserting into tables with constraints\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('users')\n\t*   .upsert({ id: 42, handle: 'saoirse', display_name: 'Saoirse' })\n\t*   .select()\n\t* ```\n\t*\n\t* @exampleSql Upserting into tables with constraints\n\t* ```sql\n\t* create table\n\t*   users (\n\t*     id int8 generated by default as identity primary key,\n\t*     handle text not null unique,\n\t*     display_name text\n\t*   );\n\t*\n\t* insert into\n\t*   users (id, handle, display_name)\n\t* values\n\t*   (1, 'saoirse', null);\n\t* ```\n\t*\n\t* @exampleResponse Upserting into tables with constraints\n\t* ```json\n\t* {\n\t*   \"error\": {\n\t*     \"code\": \"23505\",\n\t*     \"details\": \"Key (handle)=(saoirse) already exists.\",\n\t*     \"hint\": null,\n\t*     \"message\": \"duplicate key value violates unique constraint \\\"users_handle_key\\\"\"\n\t*   },\n\t*   \"status\": 409,\n\t*   \"statusText\": \"\"\n\t* }\n\t* ```\n\t*/\n\tupsert(values, { onConflict, ignoreDuplicates = false, count, defaultToNull = true } = {}) {\n\t\tvar _this$fetch2;\n\t\tconst method = \"POST\";\n\t\tconst { url, headers } = this.cloneRequestState();\n\t\theaders.append(\"Prefer\", `resolution=${ignoreDuplicates ? \"ignore\" : \"merge\"}-duplicates`);\n\t\tif (onConflict !== void 0) url.searchParams.set(\"on_conflict\", onConflict);\n\t\tif (count) headers.append(\"Prefer\", `count=${count}`);\n\t\tif (!defaultToNull) headers.append(\"Prefer\", \"missing=default\");\n\t\tif (Array.isArray(values)) {\n\t\t\tconst columns = values.reduce((acc, x) => acc.concat(Object.keys(x)), []);\n\t\t\tif (columns.length > 0) {\n\t\t\t\tconst uniqueColumns = [...new Set(columns)].map((column) => `\"${column}\"`);\n\t\t\t\turl.searchParams.set(\"columns\", uniqueColumns.join(\",\"));\n\t\t\t}\n\t\t}\n\t\treturn new PostgrestFilterBuilder({\n\t\t\tmethod,\n\t\t\turl,\n\t\t\theaders,\n\t\t\tschema: this.schema,\n\t\t\tbody: values,\n\t\t\tfetch: (_this$fetch2 = this.fetch) !== null && _this$fetch2 !== void 0 ? _this$fetch2 : fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n\t/**\n\t* Perform an UPDATE on the table or view.\n\t*\n\t* By default, updated rows are not returned. To return it, chain the call\n\t* with `.select()` after filters.\n\t*\n\t* @param values - The values to update with\n\t*\n\t* @param options - Named parameters\n\t*\n\t* @param options.count - Count algorithm to use to count updated rows.\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*\n\t* @category Database\n\t*\n\t* @remarks\n\t* - `update()` should always be combined with [Filters](/docs/reference/javascript/using-filters) to target the item(s) you wish to update.\n\t*\n\t* @example Updating your data\n\t* ```ts\n\t* const { error } = await supabase\n\t*   .from('instruments')\n\t*   .update({ name: 'piano' })\n\t*   .eq('id', 1)\n\t* ```\n\t*\n\t* @exampleSql Updating your data\n\t* ```sql\n\t* create table\n\t*   instruments (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   instruments (id, name)\n\t* values\n\t*   (1, 'harpsichord');\n\t* ```\n\t*\n\t* @exampleResponse Updating your data\n\t* ```json\n\t* {\n\t*   \"status\": 204,\n\t*   \"statusText\": \"\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Handling errors\n\t* `error.hint` from Postgres often contains the actionable fix (e.g. `\"Grant the required privileges to the current role with: GRANT UPDATE ON public.instruments TO anon;\"` for a `42501` permission-denied error). Log the full `error` object so it isn't hidden behind `error.message`.\n\t*\n\t* @example Handling errors\n\t* ```js\n\t* const { error } = await supabase.from('instruments').update({ name: 'piano' }).eq('id', 1)\n\t* if (error) console.error(error)\n\t* ```\n\t*\n\t* @example Update a record and return it\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('instruments')\n\t*   .update({ name: 'piano' })\n\t*   .eq('id', 1)\n\t*   .select()\n\t* ```\n\t*\n\t* @exampleSql Update a record and return it\n\t* ```sql\n\t* create table\n\t*   instruments (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   instruments (id, name)\n\t* values\n\t*   (1, 'harpsichord');\n\t* ```\n\t*\n\t* @exampleResponse Update a record and return it\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 1,\n\t*       \"name\": \"piano\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Updating JSON data\n\t* Postgres offers some\n\t* [operators](/docs/guides/database/json#query-the-jsonb-data) for\n\t* working with JSON data. Currently, it is only possible to update the entire JSON document.\n\t*\n\t* @example Updating JSON data\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('users')\n\t*   .update({\n\t*     address: {\n\t*       street: 'Melrose Place',\n\t*       postcode: 90210\n\t*     }\n\t*   })\n\t*   .eq('address->postcode', 90210)\n\t*   .select()\n\t* ```\n\t*\n\t* @exampleSql Updating JSON data\n\t* ```sql\n\t* create table\n\t*   users (\n\t*     id int8 primary key,\n\t*     name text,\n\t*     address jsonb\n\t*   );\n\t*\n\t* insert into\n\t*   users (id, name, address)\n\t* values\n\t*   (1, 'Michael', '{ \"postcode\": 90210 }');\n\t* ```\n\t*\n\t* @exampleResponse Updating JSON data\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 1,\n\t*       \"name\": \"Michael\",\n\t*       \"address\": {\n\t*         \"street\": \"Melrose Place\",\n\t*         \"postcode\": 90210\n\t*       }\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tupdate(values, { count } = {}) {\n\t\tvar _this$fetch3;\n\t\tconst method = \"PATCH\";\n\t\tconst { url, headers } = this.cloneRequestState();\n\t\tif (count) headers.append(\"Prefer\", `count=${count}`);\n\t\treturn new PostgrestFilterBuilder({\n\t\t\tmethod,\n\t\t\turl,\n\t\t\theaders,\n\t\t\tschema: this.schema,\n\t\t\tbody: values,\n\t\t\tfetch: (_this$fetch3 = this.fetch) !== null && _this$fetch3 !== void 0 ? _this$fetch3 : fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n\t/**\n\t* Perform a DELETE on the table or view.\n\t*\n\t* By default, deleted rows are not returned. To return it, chain the call\n\t* with `.select()` after filters.\n\t*\n\t* @param options - Named parameters\n\t*\n\t* @param options.count - Count algorithm to use to count deleted rows.\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*\n\t* @category Database\n\t*\n\t* @remarks\n\t* - `delete()` should always be combined with [filters](/docs/reference/javascript/using-filters) to target the item(s) you wish to delete.\n\t* - If you use `delete()` with filters and you have\n\t*   [RLS](/docs/learn/auth-deep-dive/auth-row-level-security) enabled, only\n\t*   rows visible through `SELECT` policies are deleted. Note that by default\n\t*   no rows are visible, so you need at least one `SELECT`/`ALL` policy that\n\t*   makes the rows visible.\n\t* - When using `delete().in()`, specify an array of values to target multiple rows with a single query. This is particularly useful for batch deleting entries that share common criteria, such as deleting users by their IDs. Ensure that the array you provide accurately represents all records you intend to delete to avoid unintended data removal.\n\t*\n\t* @example Delete a single record\n\t* ```ts\n\t* const response = await supabase\n\t*   .from('countries')\n\t*   .delete()\n\t*   .eq('id', 1)\n\t* ```\n\t*\n\t* @exampleSql Delete a single record\n\t* ```sql\n\t* create table\n\t*   countries (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   countries (id, name)\n\t* values\n\t*   (1, 'Mordor');\n\t* ```\n\t*\n\t* @exampleResponse Delete a single record\n\t* ```json\n\t* {\n\t*   \"status\": 204,\n\t*   \"statusText\": \"\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Handling errors\n\t* `error.hint` from Postgres often contains the actionable fix (e.g. `\"Grant the required privileges to the current role with: GRANT DELETE ON public.countries TO anon;\"` for a `42501` permission-denied error). Log the full `error` object so it isn't hidden behind `error.message`.\n\t*\n\t* @example Handling errors\n\t* ```js\n\t* const { error } = await supabase.from('countries').delete().eq('id', 1)\n\t* if (error) console.error(error)\n\t* ```\n\t*\n\t* @example Delete a record and return it\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .from('countries')\n\t*   .delete()\n\t*   .eq('id', 1)\n\t*   .select()\n\t* ```\n\t*\n\t* @exampleSql Delete a record and return it\n\t* ```sql\n\t* create table\n\t*   countries (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   countries (id, name)\n\t* values\n\t*   (1, 'Mordor');\n\t* ```\n\t*\n\t* @exampleResponse Delete a record and return it\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"id\": 1,\n\t*       \"name\": \"Mordor\"\n\t*     }\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example Delete multiple records\n\t* ```ts\n\t* const response = await supabase\n\t*   .from('countries')\n\t*   .delete()\n\t*   .in('id', [1, 2, 3])\n\t* ```\n\t*\n\t* @exampleSql Delete multiple records\n\t* ```sql\n\t* create table\n\t*   countries (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   countries (id, name)\n\t* values\n\t*   (1, 'Rohan'), (2, 'The Shire'), (3, 'Mordor');\n\t* ```\n\t*\n\t* @exampleResponse Delete multiple records\n\t* ```json\n\t* {\n\t*   \"status\": 204,\n\t*   \"statusText\": \"\"\n\t* }\n\t* ```\n\t*/\n\tdelete({ count } = {}) {\n\t\tvar _this$fetch4;\n\t\tconst method = \"DELETE\";\n\t\tconst { url, headers } = this.cloneRequestState();\n\t\tif (count) headers.append(\"Prefer\", `count=${count}`);\n\t\treturn new PostgrestFilterBuilder({\n\t\t\tmethod,\n\t\t\turl,\n\t\t\theaders,\n\t\t\tschema: this.schema,\n\t\t\tfetch: (_this$fetch4 = this.fetch) !== null && _this$fetch4 !== void 0 ? _this$fetch4 : fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/PostgrestClient.ts\n/**\n* PostgREST client.\n*\n* @typeParam Database - Types for the schema from the [type\n* generator](https://supabase.com/docs/reference/javascript/next/typescript-support)\n*\n* @typeParam SchemaName - Postgres schema to switch to. Must be a string\n* literal, the same one passed to the constructor. If the schema is not\n* `\"public\"`, this must be supplied manually.\n*/\nvar PostgrestClient = class PostgrestClient {\n\t/**\n\t* Creates a PostgREST client.\n\t*\n\t* @param url - URL of the PostgREST endpoint\n\t* @param options - Named parameters\n\t* @param options.headers - Custom headers\n\t* @param options.schema - Postgres schema to switch to\n\t* @param options.fetch - Custom fetch\n\t* @param options.timeout - Optional timeout in milliseconds for all requests. When set, requests will automatically abort after this duration to prevent indefinite hangs.\n\t* @param options.urlLengthLimit - Maximum URL length in characters before warnings/errors are triggered. Defaults to 8000.\n\t* @param options.retry - Enable or disable automatic retries for transient errors.\n\t*   When enabled, idempotent requests (GET, HEAD, OPTIONS) that fail with network\n\t*   errors or HTTP 503/520 responses will be automatically retried up to 3 times\n\t*   with exponential backoff (1s, 2s, 4s). Defaults to `true`.\n\t* @example Using supabase-js (recommended)\n\t* ```ts\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* const { data, error } = await supabase.from('profiles').select('*')\n\t* ```\n\t*\n\t* @category Database\n\t*\n\t* @remarks\n\t* - A `timeout` option (in milliseconds) can be set to automatically abort requests that take too long.\n\t* - A `urlLengthLimit` option (default: 8000) can be set to control when URL length warnings are included in error messages for aborted requests.\n\t*\n\t* @example Standalone import for bundle-sensitive environments\n\t* ```ts\n\t* import { PostgrestClient } from '@supabase/postgrest-js'\n\t*\n\t* const postgrest = new PostgrestClient('https://xyzcompany.supabase.co/rest/v1', {\n\t*   headers: { apikey: 'your-publishable-key' },\n\t*   schema: 'public',\n\t*   timeout: 30000, // 30 second timeout\n\t* })\n\t* ```\n\t*/\n\tconstructor(url, { headers = {}, schema, fetch: fetch$1, timeout, urlLengthLimit = 8e3, retry } = {}) {\n\t\tthis.url = url;\n\t\tthis.headers = new Headers(headers);\n\t\tthis.schemaName = schema;\n\t\tthis.urlLengthLimit = urlLengthLimit;\n\t\tconst originalFetch = fetch$1 !== null && fetch$1 !== void 0 ? fetch$1 : globalThis.fetch;\n\t\tif (timeout !== void 0 && timeout > 0) this.fetch = (input, init) => {\n\t\t\tconst controller = new AbortController();\n\t\t\tconst timeoutId = setTimeout(() => controller.abort(), timeout);\n\t\t\tconst existingSignal = init === null || init === void 0 ? void 0 : init.signal;\n\t\t\tif (existingSignal) {\n\t\t\t\tif (existingSignal.aborted) {\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\treturn originalFetch(input, init);\n\t\t\t\t}\n\t\t\t\tconst abortHandler = () => {\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\tcontroller.abort();\n\t\t\t\t};\n\t\t\t\texistingSignal.addEventListener(\"abort\", abortHandler, { once: true });\n\t\t\t\treturn originalFetch(input, _objectSpread2(_objectSpread2({}, init), {}, { signal: controller.signal })).finally(() => {\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\texistingSignal.removeEventListener(\"abort\", abortHandler);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn originalFetch(input, _objectSpread2(_objectSpread2({}, init), {}, { signal: controller.signal })).finally(() => clearTimeout(timeoutId));\n\t\t};\n\t\telse this.fetch = originalFetch;\n\t\tthis.retry = retry;\n\t}\n\tfrom(relation) {\n\t\tif (!relation || typeof relation !== \"string\" || relation.trim() === \"\") throw new Error(\"Invalid relation name: relation must be a non-empty string.\");\n\t\treturn new PostgrestQueryBuilder(new URL(`${this.url}/${relation}`), {\n\t\t\theaders: new Headers(this.headers),\n\t\t\tschema: this.schemaName,\n\t\t\tfetch: this.fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n\t/**\n\t* Select a schema to query or perform an function (rpc) call.\n\t*\n\t* The schema needs to be on the list of exposed schemas inside Supabase.\n\t*\n\t* @param schema - The schema to query\n\t*\n\t* @category Database\n\t*/\n\tschema(schema) {\n\t\treturn new PostgrestClient(this.url, {\n\t\t\theaders: this.headers,\n\t\t\tschema,\n\t\t\tfetch: this.fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n\t/**\n\t* Perform a function call.\n\t*\n\t* @param fn - The function name to call\n\t* @param args - The arguments to pass to the function call\n\t* @param options - Named parameters\n\t* @param options.head - When set to `true`, `data` will not be returned.\n\t* Useful if you only need the count.\n\t* @param options.get - When set to `true`, the function will be called with\n\t* read-only access mode.\n\t* @param options.count - Count algorithm to use to count rows returned by the\n\t* function. Only applicable for [set-returning\n\t* functions](https://www.postgresql.org/docs/current/functions-srf.html).\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*\n\t* @example\n\t* ```ts\n\t* // For cross-schema functions where type inference fails, use overrideTypes:\n\t* const { data } = await supabase\n\t*   .schema('schema_b')\n\t*   .rpc('function_a', {})\n\t*   .overrideTypes<{ id: string; user_id: string }[]>()\n\t* ```\n\t*\n\t* @category Database\n\t*\n\t* @example Call a Postgres function without arguments\n\t* ```ts\n\t* const { data, error } = await supabase.rpc('hello_world')\n\t* ```\n\t*\n\t* @exampleSql Call a Postgres function without arguments\n\t* ```sql\n\t* create function hello_world() returns text as $$\n\t*   select 'Hello world';\n\t* $$ language sql;\n\t* ```\n\t*\n\t* @exampleResponse Call a Postgres function without arguments\n\t* ```json\n\t* {\n\t*   \"data\": \"Hello world\",\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example Call a Postgres function with arguments\n\t* ```ts\n\t* const { data, error } = await supabase.rpc('echo', { say: '👋' })\n\t* ```\n\t*\n\t* @exampleSql Call a Postgres function with arguments\n\t* ```sql\n\t* create function echo(say text) returns text as $$\n\t*   select say;\n\t* $$ language sql;\n\t* ```\n\t*\n\t* @exampleResponse Call a Postgres function with arguments\n\t* ```json\n\t*   {\n\t*     \"data\": \"👋\",\n\t*     \"status\": 200,\n\t*     \"statusText\": \"OK\"\n\t*   }\n\t*\n\t* ```\n\t*\n\t* @exampleDescription Bulk processing\n\t* You can process large payloads by passing in an array as an argument.\n\t*\n\t* @example Bulk processing\n\t* ```ts\n\t* const { data, error } = await supabase.rpc('add_one_each', { arr: [1, 2, 3] })\n\t* ```\n\t*\n\t* @exampleSql Bulk processing\n\t* ```sql\n\t* create function add_one_each(arr int[]) returns int[] as $$\n\t*   select array_agg(n + 1) from unnest(arr) as n;\n\t* $$ language sql;\n\t* ```\n\t*\n\t* @exampleResponse Bulk processing\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     2,\n\t*     3,\n\t*     4\n\t*   ],\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Call a Postgres function with filters\n\t* Postgres functions that return tables can also be combined with [Filters](/docs/reference/javascript/using-filters) and [Modifiers](/docs/reference/javascript/using-modifiers).\n\t*\n\t* @example Call a Postgres function with filters\n\t* ```ts\n\t* const { data, error } = await supabase\n\t*   .rpc('list_stored_countries')\n\t*   .eq('id', 1)\n\t*   .single()\n\t* ```\n\t*\n\t* @exampleSql Call a Postgres function with filters\n\t* ```sql\n\t* create table\n\t*   countries (id int8 primary key, name text);\n\t*\n\t* insert into\n\t*   countries (id, name)\n\t* values\n\t*   (1, 'Rohan'),\n\t*   (2, 'The Shire');\n\t*\n\t* create function list_stored_countries() returns setof countries as $$\n\t*   select * from countries;\n\t* $$ language sql;\n\t* ```\n\t*\n\t* @exampleResponse Call a Postgres function with filters\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"id\": 1,\n\t*     \"name\": \"Rohan\"\n\t*   },\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example Call a read-only Postgres function\n\t* ```ts\n\t* const { data, error } = await supabase.rpc('hello_world', undefined, { get: true })\n\t* ```\n\t*\n\t* @exampleSql Call a read-only Postgres function\n\t* ```sql\n\t* create function hello_world() returns text as $$\n\t*   select 'Hello world';\n\t* $$ language sql;\n\t* ```\n\t*\n\t* @exampleResponse Call a read-only Postgres function\n\t* ```json\n\t* {\n\t*   \"data\": \"Hello world\",\n\t*   \"status\": 200,\n\t*   \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\trpc(fn, args = {}, { head = false, get = false, count } = {}) {\n\t\tvar _this$fetch;\n\t\tlet method;\n\t\tconst url = new URL(`${this.url}/rpc/${fn}`);\n\t\tlet body;\n\t\tconst _isObject = (v) => v !== null && typeof v === \"object\" && (!Array.isArray(v) || v.some(_isObject));\n\t\tconst _hasObjectArg = head && Object.values(args).some(_isObject);\n\t\tif (_hasObjectArg) {\n\t\t\tmethod = \"POST\";\n\t\t\tbody = args;\n\t\t} else if (head || get) {\n\t\t\tmethod = head ? \"HEAD\" : \"GET\";\n\t\t\tObject.entries(args).filter(([_, value]) => value !== void 0).map(([name, value]) => [name, Array.isArray(value) ? `{${value.join(\",\")}}` : `${value}`]).forEach(([name, value]) => {\n\t\t\t\turl.searchParams.append(name, value);\n\t\t\t});\n\t\t} else {\n\t\t\tmethod = \"POST\";\n\t\t\tbody = args;\n\t\t}\n\t\tconst headers = new Headers(this.headers);\n\t\tif (_hasObjectArg) headers.set(\"Prefer\", count ? `count=${count},return=minimal` : \"return=minimal\");\n\t\telse if (count) headers.set(\"Prefer\", `count=${count}`);\n\t\treturn new PostgrestFilterBuilder({\n\t\t\tmethod,\n\t\t\turl,\n\t\t\theaders,\n\t\t\tschema: this.schemaName,\n\t\t\tbody,\n\t\t\tfetch: (_this$fetch = this.fetch) !== null && _this$fetch !== void 0 ? _this$fetch : fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/index.ts\nvar src_default = {\n\tPostgrestClient,\n\tPostgrestQueryBuilder,\n\tPostgrestFilterBuilder,\n\tPostgrestTransformBuilder,\n\tPostgrestBuilder,\n\tPostgrestError\n};\n\n//#endregion\nexport { PostgrestBuilder, PostgrestClient, PostgrestError, PostgrestFilterBuilder, PostgrestQueryBuilder, PostgrestTransformBuilder, src_default as default };\n//# sourceMappingURL=index.mjs.map","/**\n * Utilities for creating WebSocket instances across runtimes.\n */\nexport class WebSocketFactory {\n    /**\n     * Static-only utility – prevent instantiation.\n     */\n    constructor() { }\n    static detectEnvironment() {\n        var _a;\n        if (typeof WebSocket !== 'undefined') {\n            return { type: 'native', wsConstructor: WebSocket };\n        }\n        const gt = globalThis;\n        if (typeof globalThis !== 'undefined' && typeof gt.WebSocket !== 'undefined') {\n            return { type: 'native', wsConstructor: gt.WebSocket };\n        }\n        const gl = typeof global !== 'undefined' ? global : undefined;\n        if (gl && typeof gl.WebSocket !== 'undefined') {\n            return { type: 'native', wsConstructor: gl.WebSocket };\n        }\n        if (typeof globalThis !== 'undefined' &&\n            typeof gt.WebSocketPair !== 'undefined' &&\n            typeof globalThis.WebSocket === 'undefined') {\n            return {\n                type: 'cloudflare',\n                error: 'Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.',\n                workaround: 'Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime.',\n            };\n        }\n        if ((typeof globalThis !== 'undefined' && gt.EdgeRuntime) ||\n            (typeof navigator !== 'undefined' && ((_a = navigator.userAgent) === null || _a === void 0 ? void 0 : _a.includes('Vercel-Edge')))) {\n            return {\n                type: 'unsupported',\n                error: 'Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.',\n                workaround: 'Use serverless functions or a different deployment target for WebSocket functionality.',\n            };\n        }\n        // Use dynamic property access to avoid Next.js Edge Runtime static analysis warnings\n        const _process = globalThis['process'];\n        if (_process) {\n            const processVersions = _process['versions'];\n            if (processVersions && processVersions['node']) {\n                // Reaching here means an earlier check did not find a native WebSocket,\n                // so this Node.js process is missing the global WebSocket (Node.js 22+).\n                return {\n                    type: 'unsupported',\n                    error: 'Node.js detected but native WebSocket not found.',\n                    workaround: 'Ensure you are running Node.js 22+ or provide a WebSocket implementation via the transport option.',\n                };\n            }\n        }\n        return {\n            type: 'unsupported',\n            error: 'Unknown JavaScript runtime without WebSocket support.',\n            workaround: \"Ensure you're running in a supported environment (browser, Node.js, Deno) or provide a custom WebSocket implementation.\",\n        };\n    }\n    /**\n     * Returns the best available WebSocket constructor for the current runtime.\n     *\n     * @category Realtime\n     *\n     * @example Example with error handling\n     * ```ts\n     * try {\n     *   const WS = WebSocketFactory.getWebSocketConstructor()\n     *   const socket = new WS('wss://example.com/socket')\n     * } catch (error) {\n     *   console.error('WebSocket not available in this environment.', error)\n     * }\n     * ```\n     */\n    static getWebSocketConstructor() {\n        const env = this.detectEnvironment();\n        if (env.wsConstructor) {\n            return env.wsConstructor;\n        }\n        let errorMessage = env.error || 'WebSocket not supported in this environment.';\n        if (env.workaround) {\n            errorMessage += `\\n\\nSuggested solution: ${env.workaround}`;\n        }\n        throw new Error(errorMessage);\n    }\n    /**\n     * Detects whether the runtime can establish WebSocket connections.\n     *\n     * @category Realtime\n     *\n     * @example Example in a Node.js script\n     * ```ts\n     * if (!WebSocketFactory.isWebSocketSupported()) {\n     *   console.error('WebSockets are required for this script.')\n     *   process.exitCode = 1\n     * }\n     * ```\n     */\n    static isWebSocketSupported() {\n        try {\n            const env = this.detectEnvironment();\n            return env.type === 'native';\n        }\n        catch (_a) {\n            return false;\n        }\n    }\n}\nexport default WebSocketFactory;\n//# sourceMappingURL=websocket-factory.js.map","// Generated automatically during releases by scripts/update-version-files.ts\n// This file provides runtime access to the package version for:\n// - HTTP request headers (e.g., X-Client-Info header for API requests)\n// - Debugging and support (identifying which version is running)\n// - Telemetry and logging (version reporting in errors/analytics)\n// - Ensuring build artifacts match the published package version\nexport const version = '2.112.3';\n//# sourceMappingURL=version.js.map","import { version } from './version';\nexport const DEFAULT_VERSION = `realtime-js/${version}`;\nexport const VSN_1_0_0 = '1.0.0';\nexport const VSN_2_0_0 = '2.0.0';\nexport const DEFAULT_VSN = VSN_2_0_0;\nexport const VERSION = version;\nexport const DEFAULT_TIMEOUT = 10000;\nexport const WS_CLOSE_NORMAL = 1000;\nexport const MAX_PUSH_BUFFER_SIZE = 100;\nexport const SOCKET_STATES = {\n    connecting: 0,\n    open: 1,\n    closing: 2,\n    closed: 3,\n};\nexport const CHANNEL_STATES = {\n    closed: 'closed',\n    errored: 'errored',\n    joined: 'joined',\n    joining: 'joining',\n    leaving: 'leaving',\n};\nexport const CHANNEL_EVENTS = {\n    close: 'phx_close',\n    error: 'phx_error',\n    join: 'phx_join',\n    reply: 'phx_reply',\n    leave: 'phx_leave',\n    access_token: 'access_token',\n};\nexport const TRANSPORTS = {\n    websocket: 'websocket',\n};\nexport const CONNECTION_STATE = {\n    connecting: 'connecting',\n    open: 'open',\n    closing: 'closing',\n    closed: 'closed',\n};\n//# sourceMappingURL=constants.js.map","export default class Serializer {\n    constructor(allowedMetadataKeys) {\n        this.HEADER_LENGTH = 1;\n        this.USER_BROADCAST_PUSH_META_LENGTH = 6;\n        this.KINDS = { userBroadcastPush: 3, userBroadcast: 4 };\n        this.BINARY_ENCODING = 0;\n        this.JSON_ENCODING = 1;\n        this.BROADCAST_EVENT = 'broadcast';\n        this.allowedMetadataKeys = [];\n        this.allowedMetadataKeys = allowedMetadataKeys !== null && allowedMetadataKeys !== void 0 ? allowedMetadataKeys : [];\n    }\n    encode(msg, callback) {\n        if (msg.event === this.BROADCAST_EVENT &&\n            !(msg.payload instanceof ArrayBuffer) &&\n            typeof msg.payload.event === 'string') {\n            return callback(this._binaryEncodeUserBroadcastPush(msg));\n        }\n        let payload = [msg.join_ref, msg.ref, msg.topic, msg.event, msg.payload];\n        return callback(JSON.stringify(payload));\n    }\n    _binaryEncodeUserBroadcastPush(message) {\n        var _a;\n        if (this._isArrayBuffer((_a = message.payload) === null || _a === void 0 ? void 0 : _a.payload)) {\n            return this._encodeBinaryUserBroadcastPush(message);\n        }\n        else {\n            return this._encodeJsonUserBroadcastPush(message);\n        }\n    }\n    _encodeBinaryUserBroadcastPush(message) {\n        var _a, _b;\n        const userPayload = (_b = (_a = message.payload) === null || _a === void 0 ? void 0 : _a.payload) !== null && _b !== void 0 ? _b : new ArrayBuffer(0);\n        return this._encodeUserBroadcastPush(message, this.BINARY_ENCODING, userPayload);\n    }\n    _encodeJsonUserBroadcastPush(message) {\n        var _a, _b;\n        const userPayload = (_b = (_a = message.payload) === null || _a === void 0 ? void 0 : _a.payload) !== null && _b !== void 0 ? _b : {};\n        const encoder = new TextEncoder();\n        const encodedUserPayload = encoder.encode(JSON.stringify(userPayload)).buffer;\n        return this._encodeUserBroadcastPush(message, this.JSON_ENCODING, encodedUserPayload);\n    }\n    _encodeUserBroadcastPush(message, encodingType, encodedPayload) {\n        var _a, _b;\n        // Encode each header field as UTF-8. The length prefixes are byte counts and\n        // the decode side uses TextDecoder (UTF-8), so measuring with String.length\n        // and writing with charCodeAt would corrupt any multi-byte character (e.g.\n        // accents or emoji) and desynchronize the buffer.\n        const encoder = new TextEncoder();\n        const topic = encoder.encode(message.topic);\n        const ref = encoder.encode((_a = message.ref) !== null && _a !== void 0 ? _a : '');\n        const joinRef = encoder.encode((_b = message.join_ref) !== null && _b !== void 0 ? _b : '');\n        const userEvent = encoder.encode(message.payload.event);\n        // Filter metadata based on allowed keys\n        const rest = this.allowedMetadataKeys\n            ? this._pick(message.payload, this.allowedMetadataKeys)\n            : {};\n        const metadata = encoder.encode(Object.keys(rest).length === 0 ? '' : JSON.stringify(rest));\n        // Validate byte lengths don't exceed uint8 max value (255)\n        if (joinRef.length > 255) {\n            throw new Error(`joinRef length ${joinRef.length} exceeds maximum of 255`);\n        }\n        if (ref.length > 255) {\n            throw new Error(`ref length ${ref.length} exceeds maximum of 255`);\n        }\n        if (topic.length > 255) {\n            throw new Error(`topic length ${topic.length} exceeds maximum of 255`);\n        }\n        if (userEvent.length > 255) {\n            throw new Error(`userEvent length ${userEvent.length} exceeds maximum of 255`);\n        }\n        if (metadata.length > 255) {\n            throw new Error(`metadata length ${metadata.length} exceeds maximum of 255`);\n        }\n        const metaLength = this.USER_BROADCAST_PUSH_META_LENGTH +\n            joinRef.length +\n            ref.length +\n            topic.length +\n            userEvent.length +\n            metadata.length;\n        const header = new ArrayBuffer(this.HEADER_LENGTH + metaLength);\n        const view = new DataView(header);\n        const bytes = new Uint8Array(header);\n        let offset = 0;\n        view.setUint8(offset++, this.KINDS.userBroadcastPush); // kind\n        view.setUint8(offset++, joinRef.length);\n        view.setUint8(offset++, ref.length);\n        view.setUint8(offset++, topic.length);\n        view.setUint8(offset++, userEvent.length);\n        view.setUint8(offset++, metadata.length);\n        view.setUint8(offset++, encodingType);\n        bytes.set(joinRef, offset);\n        offset += joinRef.length;\n        bytes.set(ref, offset);\n        offset += ref.length;\n        bytes.set(topic, offset);\n        offset += topic.length;\n        bytes.set(userEvent, offset);\n        offset += userEvent.length;\n        bytes.set(metadata, offset);\n        offset += metadata.length;\n        var combined = new Uint8Array(header.byteLength + encodedPayload.byteLength);\n        combined.set(new Uint8Array(header), 0);\n        combined.set(new Uint8Array(encodedPayload), header.byteLength);\n        return combined.buffer;\n    }\n    decode(rawPayload, callback) {\n        if (this._isArrayBuffer(rawPayload)) {\n            let result = this._binaryDecode(rawPayload);\n            return callback(result);\n        }\n        if (typeof rawPayload === 'string') {\n            const jsonPayload = JSON.parse(rawPayload);\n            const [join_ref, ref, topic, event, payload] = jsonPayload;\n            return callback({ join_ref, ref, topic, event, payload });\n        }\n        return callback({});\n    }\n    _binaryDecode(buffer) {\n        const view = new DataView(buffer);\n        const kind = view.getUint8(0);\n        const decoder = new TextDecoder();\n        switch (kind) {\n            case this.KINDS.userBroadcast:\n                return this._decodeUserBroadcast(buffer, view, decoder);\n        }\n    }\n    _decodeUserBroadcast(buffer, view, decoder) {\n        const topicSize = view.getUint8(1);\n        const userEventSize = view.getUint8(2);\n        const metadataSize = view.getUint8(3);\n        const payloadEncoding = view.getUint8(4);\n        let offset = this.HEADER_LENGTH + 4;\n        const topic = decoder.decode(buffer.slice(offset, offset + topicSize));\n        offset = offset + topicSize;\n        const userEvent = decoder.decode(buffer.slice(offset, offset + userEventSize));\n        offset = offset + userEventSize;\n        const metadata = decoder.decode(buffer.slice(offset, offset + metadataSize));\n        offset = offset + metadataSize;\n        const payload = buffer.slice(offset, buffer.byteLength);\n        const parsedPayload = payloadEncoding === this.JSON_ENCODING ? JSON.parse(decoder.decode(payload)) : payload;\n        const data = {\n            type: this.BROADCAST_EVENT,\n            event: userEvent,\n            payload: parsedPayload,\n        };\n        // Metadata is optional and always JSON encoded\n        if (metadataSize > 0) {\n            data['meta'] = JSON.parse(metadata);\n        }\n        return { join_ref: null, ref: null, topic: topic, event: this.BROADCAST_EVENT, payload: data };\n    }\n    _isArrayBuffer(buffer) {\n        var _a;\n        return buffer instanceof ArrayBuffer || ((_a = buffer === null || buffer === void 0 ? void 0 : buffer.constructor) === null || _a === void 0 ? void 0 : _a.name) === 'ArrayBuffer';\n    }\n    _pick(obj, keys) {\n        if (!obj || typeof obj !== 'object') {\n            return {};\n        }\n        return Object.fromEntries(Object.entries(obj).filter(([key]) => keys.includes(key)));\n    }\n}\n//# sourceMappingURL=serializer.js.map","/**\n * Helpers to convert the change Payload into native JS types.\n */\n// Adapted from epgsql (src/epgsql_binary.erl), this module licensed under\n// 3-clause BSD found here: https://raw.githubusercontent.com/epgsql/epgsql/devel/LICENSE\nexport var PostgresTypes;\n(function (PostgresTypes) {\n    PostgresTypes[\"abstime\"] = \"abstime\";\n    PostgresTypes[\"bool\"] = \"bool\";\n    PostgresTypes[\"date\"] = \"date\";\n    PostgresTypes[\"daterange\"] = \"daterange\";\n    PostgresTypes[\"float4\"] = \"float4\";\n    PostgresTypes[\"float8\"] = \"float8\";\n    PostgresTypes[\"int2\"] = \"int2\";\n    PostgresTypes[\"int4\"] = \"int4\";\n    PostgresTypes[\"int4range\"] = \"int4range\";\n    PostgresTypes[\"int8\"] = \"int8\";\n    PostgresTypes[\"int8range\"] = \"int8range\";\n    PostgresTypes[\"json\"] = \"json\";\n    PostgresTypes[\"jsonb\"] = \"jsonb\";\n    PostgresTypes[\"money\"] = \"money\";\n    PostgresTypes[\"numeric\"] = \"numeric\";\n    PostgresTypes[\"oid\"] = \"oid\";\n    PostgresTypes[\"reltime\"] = \"reltime\";\n    PostgresTypes[\"text\"] = \"text\";\n    PostgresTypes[\"time\"] = \"time\";\n    PostgresTypes[\"timestamp\"] = \"timestamp\";\n    PostgresTypes[\"timestamptz\"] = \"timestamptz\";\n    PostgresTypes[\"timetz\"] = \"timetz\";\n    PostgresTypes[\"tsrange\"] = \"tsrange\";\n    PostgresTypes[\"tstzrange\"] = \"tstzrange\";\n})(PostgresTypes || (PostgresTypes = {}));\n/**\n * Takes an array of columns and an object of string values then converts each string value\n * to its mapped type.\n *\n * @param {{name: String, type: String}[]} columns\n * @param {Object} record\n * @param {Object} options The map of various options that can be applied to the mapper\n * @param {Array} options.skipTypes The array of types that should not be converted\n *\n * @example convertChangeData([{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age:'33'}, {})\n * //=>{ first_name: 'Paul', age: 33 }\n */\nexport const convertChangeData = (columns, record, options = {}) => {\n    var _a;\n    const skipTypes = (_a = options.skipTypes) !== null && _a !== void 0 ? _a : [];\n    if (!record) {\n        return {};\n    }\n    return Object.keys(record).reduce((acc, rec_key) => {\n        acc[rec_key] = convertColumn(rec_key, columns, record, skipTypes);\n        return acc;\n    }, {});\n};\n/**\n * Converts the value of an individual column.\n *\n * @param {String} columnName The column that you want to convert\n * @param {{name: String, type: String}[]} columns All of the columns\n * @param {Object} record The map of string values\n * @param {Array} skipTypes An array of types that should not be converted\n * @return {object} Useless information\n *\n * @example convertColumn('age', [{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age: '33'}, [])\n * //=> 33\n * @example convertColumn('age', [{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age: '33'}, ['int4'])\n * //=> \"33\"\n */\nexport const convertColumn = (columnName, columns, record, skipTypes) => {\n    const column = columns.find((x) => x.name === columnName);\n    const colType = column === null || column === void 0 ? void 0 : column.type;\n    const value = record[columnName];\n    if (colType && !skipTypes.includes(colType)) {\n        return convertCell(colType, value);\n    }\n    return noop(value);\n};\n/**\n * If the value of the cell is `null`, returns null.\n * Otherwise converts the string value to the correct type.\n * @param {String} type A postgres column type\n * @param {String} value The cell value\n *\n * @example convertCell('bool', 't')\n * //=> true\n * @example convertCell('int8', '10')\n * //=> 10\n * @example convertCell('_int4', '{1,2,3,4}')\n * //=> [1,2,3,4]\n */\nexport const convertCell = (type, value) => {\n    // if data type is an array\n    if (type.charAt(0) === '_') {\n        const dataType = type.slice(1, type.length);\n        return toArray(value, dataType);\n    }\n    // If not null, convert to correct type.\n    switch (type) {\n        case PostgresTypes.bool:\n            return toBoolean(value);\n        case PostgresTypes.float4:\n        case PostgresTypes.float8:\n        case PostgresTypes.int2:\n        case PostgresTypes.int4:\n        case PostgresTypes.int8:\n        case PostgresTypes.numeric:\n        case PostgresTypes.oid:\n            return toNumber(value);\n        case PostgresTypes.json:\n        case PostgresTypes.jsonb:\n            return toJson(value);\n        case PostgresTypes.timestamp:\n            return toTimestampString(value); // Format to be consistent with PostgREST\n        case PostgresTypes.abstime: // To allow users to cast it based on Timezone\n        case PostgresTypes.date: // To allow users to cast it based on Timezone\n        case PostgresTypes.daterange:\n        case PostgresTypes.int4range:\n        case PostgresTypes.int8range:\n        case PostgresTypes.money:\n        case PostgresTypes.reltime: // To allow users to cast it based on Timezone\n        case PostgresTypes.text:\n        case PostgresTypes.time: // To allow users to cast it based on Timezone\n        case PostgresTypes.timestamptz: // To allow users to cast it based on Timezone\n        case PostgresTypes.timetz: // To allow users to cast it based on Timezone\n        case PostgresTypes.tsrange:\n        case PostgresTypes.tstzrange:\n            return noop(value);\n        default:\n            // Return the value for remaining types\n            return noop(value);\n    }\n};\nconst noop = (value) => {\n    return value;\n};\nexport const toBoolean = (value) => {\n    switch (value) {\n        case 't':\n            return true;\n        case 'f':\n            return false;\n        default:\n            return value;\n    }\n};\nexport const toNumber = (value) => {\n    if (typeof value === 'string') {\n        const parsedValue = parseFloat(value);\n        if (!Number.isNaN(parsedValue)) {\n            return parsedValue;\n        }\n    }\n    return value;\n};\nexport const toJson = (value) => {\n    if (typeof value === 'string') {\n        try {\n            return JSON.parse(value);\n        }\n        catch (_a) {\n            return value;\n        }\n    }\n    return value;\n};\n/**\n * Converts a Postgres Array into a native JS array\n *\n * @example toArray('{}', 'int4')\n * //=> []\n * @example toArray('{\"[2021-01-01,2021-12-31)\",\"(2021-01-01,2021-12-32]\"}', 'daterange')\n * //=> ['[2021-01-01,2021-12-31)', '(2021-01-01,2021-12-32]']\n * @example toArray([1,2,3,4], 'int4')\n * //=> [1,2,3,4]\n */\nexport const toArray = (value, type) => {\n    if (typeof value !== 'string') {\n        return value;\n    }\n    const lastIdx = value.length - 1;\n    const closeBrace = value[lastIdx];\n    const openBrace = value[0];\n    // Confirm value is a Postgres array by checking curly brackets\n    if (openBrace === '{' && closeBrace === '}') {\n        let arr;\n        const valTrim = value.slice(1, lastIdx);\n        // TODO: find a better solution to separate Postgres array data\n        try {\n            arr = JSON.parse('[' + valTrim + ']');\n        }\n        catch (_) {\n            // WARNING: splitting on comma does not cover all edge cases\n            arr = valTrim ? valTrim.split(',') : [];\n        }\n        return arr.map((val) => convertCell(type, val));\n    }\n    return value;\n};\n/**\n * Fixes timestamp to be ISO-8601. Swaps the space between the date and time for a 'T'\n * See https://github.com/supabase/supabase/issues/18\n *\n * @example toTimestampString('2019-09-10 00:00:00')\n * //=> '2019-09-10T00:00:00'\n */\nexport const toTimestampString = (value) => {\n    if (typeof value === 'string') {\n        return value.replace(' ', 'T');\n    }\n    return value;\n};\nexport const httpEndpointURL = (socketUrl) => {\n    const wsUrl = new URL(socketUrl);\n    wsUrl.protocol = wsUrl.protocol.replace(/^ws/i, 'http');\n    wsUrl.pathname = wsUrl.pathname\n        .replace(/\\/+$/, '') // remove all trailing slashes\n        .replace(/\\/socket\\/websocket$/i, '') // remove the socket/websocket path\n        .replace(/\\/socket$/i, '') // remove the socket path\n        .replace(/\\/websocket$/i, ''); // remove the websocket path\n    if (wsUrl.pathname === '' || wsUrl.pathname === '/') {\n        wsUrl.pathname = '/api/broadcast';\n    }\n    else {\n        wsUrl.pathname = wsUrl.pathname + '/api/broadcast';\n    }\n    return wsUrl.href;\n};\n//# sourceMappingURL=transformers.js.map","// js/phoenix/utils.js\nvar closure = (value) => {\n  if (typeof value === \"function\") {\n    return (\n      /** @type {() => T} */\n      value\n    );\n  } else {\n    let closure2 = function() {\n      return value;\n    };\n    return closure2;\n  }\n};\n\n// js/phoenix/constants.js\nvar globalSelf = typeof self !== \"undefined\" ? self : null;\nvar phxWindow = typeof window !== \"undefined\" ? window : null;\nvar global = globalSelf || phxWindow || globalThis;\nvar DEFAULT_VSN = \"2.0.0\";\nvar DEFAULT_TIMEOUT = 1e4;\nvar WS_CLOSE_NORMAL = 1e3;\nvar MAX_LONGPOLL_BATCH_SIZE = 100;\nvar SOCKET_STATES = (\n  /** @type {const} */\n  { connecting: 0, open: 1, closing: 2, closed: 3 }\n);\nvar CHANNEL_STATES = (\n  /** @type {const} */\n  {\n    closed: \"closed\",\n    errored: \"errored\",\n    joined: \"joined\",\n    joining: \"joining\",\n    leaving: \"leaving\"\n  }\n);\nvar CHANNEL_EVENTS = (\n  /** @type {const} */\n  {\n    close: \"phx_close\",\n    error: \"phx_error\",\n    join: \"phx_join\",\n    reply: \"phx_reply\",\n    leave: \"phx_leave\"\n  }\n);\nvar TRANSPORTS = (\n  /** @type {const} */\n  {\n    longpoll: \"longpoll\",\n    websocket: \"websocket\"\n  }\n);\nvar XHR_STATES = (\n  /** @type {const} */\n  {\n    complete: 4\n  }\n);\nvar AUTH_TOKEN_PREFIX = \"base64url.bearer.phx.\";\n\n// js/phoenix/push.js\nvar Push = class {\n  /**\n   * Initializes the Push\n   * @param {Channel} channel - The Channel\n   * @param {ChannelEvent} event - The event, for example `\"phx_join\"`\n   * @param {() => Record<string, unknown>} payload - The payload, for example `{user_id: 123}`\n   * @param {number} timeout - The push timeout in milliseconds\n   */\n  constructor(channel, event, payload, timeout) {\n    this.channel = channel;\n    this.event = event;\n    this.payload = payload || function() {\n      return {};\n    };\n    this.receivedResp = null;\n    this.timeout = timeout;\n    this.timeoutTimer = null;\n    this.recHooks = [];\n    this.sent = false;\n    this.ref = void 0;\n  }\n  /**\n   *\n   * @param {number} timeout\n   */\n  resend(timeout) {\n    this.timeout = timeout;\n    this.reset();\n    this.send();\n  }\n  /**\n   *\n   */\n  send() {\n    if (this.hasReceived(\"timeout\")) {\n      return;\n    }\n    this.startTimeout();\n    this.sent = true;\n    this.channel.socket.push({\n      topic: this.channel.topic,\n      event: this.event,\n      payload: this.payload(),\n      ref: this.ref,\n      join_ref: this.channel.joinRef()\n    });\n  }\n  /**\n   *\n   * @param {string} status\n   * @param {(response: any) => void} callback\n   */\n  receive(status, callback) {\n    if (this.hasReceived(status)) {\n      callback(this.receivedResp.response);\n    }\n    this.recHooks.push({ status, callback });\n    return this;\n  }\n  reset() {\n    this.cancelRefEvent();\n    this.ref = null;\n    this.refEvent = null;\n    this.receivedResp = null;\n    this.sent = false;\n  }\n  destroy() {\n    this.cancelRefEvent();\n    this.cancelTimeout();\n  }\n  /**\n   * @private\n   */\n  matchReceive({ status, response, _ref }) {\n    this.recHooks.filter((h) => h.status === status).forEach((h) => h.callback(response));\n  }\n  /**\n   * @private\n   */\n  cancelRefEvent() {\n    if (!this.refEvent) {\n      return;\n    }\n    this.channel.off(this.refEvent);\n  }\n  cancelTimeout() {\n    clearTimeout(this.timeoutTimer);\n    this.timeoutTimer = null;\n  }\n  startTimeout() {\n    if (this.timeoutTimer) {\n      this.cancelTimeout();\n    }\n    this.ref = this.channel.socket.makeRef();\n    this.refEvent = this.channel.replyEventName(this.ref);\n    this.channel.on(this.refEvent, (payload) => {\n      this.cancelRefEvent();\n      this.cancelTimeout();\n      this.receivedResp = payload;\n      this.matchReceive(payload);\n    });\n    this.timeoutTimer = setTimeout(() => {\n      this.trigger(\"timeout\", {});\n    }, this.timeout);\n  }\n  /**\n   * @private\n   */\n  hasReceived(status) {\n    return this.receivedResp && this.receivedResp.status === status;\n  }\n  trigger(status, response) {\n    this.channel.trigger(this.refEvent, { status, response });\n  }\n};\n\n// js/phoenix/timer.js\nvar Timer = class {\n  /**\n  * @param {() => void} callback\n  * @param {(tries: number) => number} timerCalc\n  */\n  constructor(callback, timerCalc) {\n    this.callback = callback;\n    this.timerCalc = timerCalc;\n    this.timer = void 0;\n    this.tries = 0;\n  }\n  reset() {\n    this.tries = 0;\n    clearTimeout(this.timer);\n  }\n  /**\n   * Cancels any previous scheduleTimeout and schedules callback\n   */\n  scheduleTimeout() {\n    clearTimeout(this.timer);\n    this.timer = setTimeout(() => {\n      this.tries = this.tries + 1;\n      this.callback();\n    }, this.timerCalc(this.tries + 1));\n  }\n};\n\n// js/phoenix/channel.js\nvar Channel = class {\n  /**\n   * @param {string} topic\n   * @param {Params | (() => Params)} params\n   * @param {Socket} socket\n   */\n  constructor(topic, params, socket) {\n    this.state = CHANNEL_STATES.closed;\n    this.topic = topic;\n    this.params = closure(params || {});\n    this.socket = socket;\n    this.bindings = [];\n    this.bindingRef = 0;\n    this.timeout = this.socket.timeout;\n    this.joinedOnce = false;\n    this.joinPush = new Push(this, CHANNEL_EVENTS.join, this.params, this.timeout);\n    this.pushBuffer = [];\n    this.stateChangeRefs = [];\n    this.rejoinTimer = new Timer(() => {\n      if (this.socket.isConnected()) {\n        this.rejoin();\n      }\n    }, this.socket.rejoinAfterMs);\n    this.stateChangeRefs.push(this.socket.onError(() => this.rejoinTimer.reset()));\n    this.stateChangeRefs.push(\n      this.socket.onOpen(() => {\n        this.rejoinTimer.reset();\n        if (this.isErrored()) {\n          this.rejoin();\n        }\n      })\n    );\n    this.joinPush.receive(\"ok\", () => {\n      this.state = CHANNEL_STATES.joined;\n      this.rejoinTimer.reset();\n      this.pushBuffer.forEach((pushEvent) => pushEvent.send());\n      this.pushBuffer = [];\n    });\n    this.joinPush.receive(\"error\", (reason) => {\n      this.state = CHANNEL_STATES.errored;\n      if (this.socket.hasLogger()) this.socket.log(\"channel\", `error ${this.topic}`, reason);\n      if (this.socket.isConnected()) {\n        this.rejoinTimer.scheduleTimeout();\n      }\n    });\n    this.onClose(() => {\n      this.rejoinTimer.reset();\n      if (this.socket.hasLogger()) this.socket.log(\"channel\", `close ${this.topic}`);\n      this.state = CHANNEL_STATES.closed;\n      this.socket.remove(this);\n    });\n    this.onError((reason) => {\n      if (this.socket.hasLogger()) this.socket.log(\"channel\", `error ${this.topic}`, reason);\n      if (this.isJoining()) {\n        this.joinPush.reset();\n      }\n      this.state = CHANNEL_STATES.errored;\n      if (this.socket.isConnected()) {\n        this.rejoinTimer.scheduleTimeout();\n      }\n    });\n    this.joinPush.receive(\"timeout\", () => {\n      if (this.socket.hasLogger()) this.socket.log(\"channel\", `timeout ${this.topic}`, this.joinPush.timeout);\n      let leavePush = new Push(this, CHANNEL_EVENTS.leave, closure({}), this.timeout);\n      leavePush.send();\n      this.state = CHANNEL_STATES.errored;\n      this.joinPush.reset();\n      if (this.socket.isConnected()) {\n        this.rejoinTimer.scheduleTimeout();\n      }\n    });\n    this.on(CHANNEL_EVENTS.reply, (payload, ref) => {\n      this.trigger(this.replyEventName(ref), payload);\n    });\n  }\n  /**\n   * Join the channel\n   * @param {number} timeout\n   * @returns {Push}\n   */\n  join(timeout = this.timeout) {\n    if (this.joinedOnce) {\n      throw new Error(\"tried to join multiple times. 'join' can only be called a single time per channel instance\");\n    } else {\n      this.timeout = timeout;\n      this.joinedOnce = true;\n      this.rejoin();\n      return this.joinPush;\n    }\n  }\n  /**\n   * Teardown the channel.\n   *\n   * Destroys and stops related timers.\n   */\n  teardown() {\n    this.pushBuffer.forEach((push) => push.destroy());\n    this.pushBuffer = [];\n    this.rejoinTimer.reset();\n    this.joinPush.destroy();\n    this.state = CHANNEL_STATES.closed;\n    this.bindings = [];\n  }\n  /**\n   * Hook into channel close\n   * @param {ChannelBindingCallback} callback\n   */\n  onClose(callback) {\n    this.on(CHANNEL_EVENTS.close, callback);\n  }\n  /**\n   * Hook into channel errors\n   * @param {ChannelOnErrorCallback} callback\n   * @return {number}\n   */\n  onError(callback) {\n    return this.on(CHANNEL_EVENTS.error, (reason) => callback(reason));\n  }\n  /**\n   * Subscribes on channel events\n   *\n   * Subscription returns a ref counter, which can be used later to\n   * unsubscribe the exact event listener\n   *\n   * @example\n   * const ref1 = channel.on(\"event\", do_stuff)\n   * const ref2 = channel.on(\"event\", do_other_stuff)\n   * channel.off(\"event\", ref1)\n   * // Since unsubscription, do_stuff won't fire,\n   * // while do_other_stuff will keep firing on the \"event\"\n   *\n   * @param {string} event\n   * @param {ChannelBindingCallback} callback\n   * @returns {number} ref\n   */\n  on(event, callback) {\n    let ref = this.bindingRef++;\n    this.bindings.push({ event, ref, callback });\n    return ref;\n  }\n  /**\n   * Unsubscribes off of channel events\n   *\n   * Use the ref returned from a channel.on() to unsubscribe one\n   * handler, or pass nothing for the ref to unsubscribe all\n   * handlers for the given event.\n   *\n   * @example\n   * // Unsubscribe the do_stuff handler\n   * const ref1 = channel.on(\"event\", do_stuff)\n   * channel.off(\"event\", ref1)\n   *\n   * // Unsubscribe all handlers from event\n   * channel.off(\"event\")\n   *\n   * @param {string} event\n   * @param {number} [ref]\n   */\n  off(event, ref) {\n    this.bindings = this.bindings.filter((bind) => {\n      return !(bind.event === event && (typeof ref === \"undefined\" || ref === bind.ref));\n    });\n  }\n  /**\n   * @private\n   */\n  canPush() {\n    return this.socket.isConnected() && this.isJoined();\n  }\n  /**\n   * Sends a message `event` to phoenix with the payload `payload`.\n   * Phoenix receives this in the `handle_in(event, payload, socket)`\n   * function. if phoenix replies or it times out (default 10000ms),\n   * then optionally the reply can be received.\n   *\n   * @example\n   * channel.push(\"event\")\n   *   .receive(\"ok\", payload => console.log(\"phoenix replied:\", payload))\n   *   .receive(\"error\", err => console.log(\"phoenix errored\", err))\n   *   .receive(\"timeout\", () => console.log(\"timed out pushing\"))\n   * @param {string} event\n   * @param {Object} payload\n   * @param {number} [timeout]\n   * @returns {Push}\n   */\n  push(event, payload, timeout = this.timeout) {\n    payload = payload || {};\n    if (!this.joinedOnce) {\n      throw new Error(`tried to push '${event}' to '${this.topic}' before joining. Use channel.join() before pushing events`);\n    }\n    let pushEvent = new Push(this, event, function() {\n      return payload;\n    }, timeout);\n    if (this.canPush()) {\n      pushEvent.send();\n    } else {\n      pushEvent.startTimeout();\n      this.pushBuffer.push(pushEvent);\n    }\n    return pushEvent;\n  }\n  /** Leaves the channel\n   *\n   * Unsubscribes from server events, and\n   * instructs channel to terminate on server\n   *\n   * Triggers onClose() hooks\n   *\n   * To receive leave acknowledgements, use the `receive`\n   * hook to bind to the server ack, ie:\n   *\n   * @example\n   * channel.leave().receive(\"ok\", () => alert(\"left!\") )\n   *\n   * @param {number} timeout\n   * @returns {Push}\n   */\n  leave(timeout = this.timeout) {\n    this.rejoinTimer.reset();\n    this.joinPush.cancelTimeout();\n    this.state = CHANNEL_STATES.leaving;\n    let onClose = () => {\n      if (this.socket.hasLogger()) this.socket.log(\"channel\", `leave ${this.topic}`);\n      this.trigger(CHANNEL_EVENTS.close, \"leave\");\n    };\n    let leavePush = new Push(this, CHANNEL_EVENTS.leave, closure({}), timeout);\n    leavePush.receive(\"ok\", () => onClose()).receive(\"timeout\", () => onClose());\n    leavePush.send();\n    if (!this.canPush()) {\n      leavePush.trigger(\"ok\", {});\n    }\n    return leavePush;\n  }\n  /**\n   * Overridable message hook\n   *\n   * Receives all events for specialized message handling\n   * before dispatching to the channel callbacks.\n   *\n   * Must return the payload, modified or unmodified\n   * @type{ChannelOnMessage}\n   */\n  onMessage(_event, payload, _ref) {\n    return payload;\n  }\n  /**\n   * Overridable filter hook\n   *\n   * If this function returns `true`, `binding`'s callback will be called.\n   *\n   * @type{ChannelFilterBindings}\n   */\n  filterBindings(_binding, _payload, _ref) {\n    return true;\n  }\n  isMember(topic, event, payload, joinRef) {\n    if (this.topic !== topic) {\n      return false;\n    }\n    if (joinRef && joinRef !== this.joinRef()) {\n      if (this.socket.hasLogger()) this.socket.log(\"channel\", \"dropping outdated message\", { topic, event, payload, joinRef });\n      return false;\n    } else {\n      return true;\n    }\n  }\n  joinRef() {\n    return this.joinPush.ref;\n  }\n  /**\n   * @private\n   */\n  rejoin(timeout = this.timeout) {\n    if (this.isLeaving()) {\n      return;\n    }\n    this.socket.leaveOpenTopic(this.topic);\n    this.state = CHANNEL_STATES.joining;\n    this.joinPush.resend(timeout);\n  }\n  /**\n   * @param {string} event\n   * @param {unknown} [payload]\n   * @param {?string} [ref]\n   * @param {?string} [joinRef]\n   */\n  trigger(event, payload, ref, joinRef) {\n    let handledPayload = this.onMessage(event, payload, ref, joinRef);\n    if (payload && !handledPayload) {\n      throw new Error(\"channel onMessage callbacks must return the payload, modified or unmodified\");\n    }\n    let eventBindings = this.bindings.filter((bind) => bind.event === event && this.filterBindings(bind, payload, ref));\n    for (let i = 0; i < eventBindings.length; i++) {\n      let bind = eventBindings[i];\n      bind.callback(handledPayload, ref, joinRef || this.joinRef());\n    }\n  }\n  /**\n  * @param {string} ref\n  */\n  replyEventName(ref) {\n    return `chan_reply_${ref}`;\n  }\n  isClosed() {\n    return this.state === CHANNEL_STATES.closed;\n  }\n  isErrored() {\n    return this.state === CHANNEL_STATES.errored;\n  }\n  isJoined() {\n    return this.state === CHANNEL_STATES.joined;\n  }\n  isJoining() {\n    return this.state === CHANNEL_STATES.joining;\n  }\n  isLeaving() {\n    return this.state === CHANNEL_STATES.leaving;\n  }\n};\n\n// js/phoenix/ajax.js\nvar Ajax = class {\n  static request(method, endPoint, headers, body, timeout, ontimeout, callback) {\n    if (global.XDomainRequest) {\n      let req = new global.XDomainRequest();\n      return this.xdomainRequest(req, method, endPoint, body, timeout, ontimeout, callback);\n    } else if (global.XMLHttpRequest) {\n      let req = new global.XMLHttpRequest();\n      return this.xhrRequest(req, method, endPoint, headers, body, timeout, ontimeout, callback);\n    } else if (global.fetch && global.AbortController) {\n      return this.fetchRequest(method, endPoint, headers, body, timeout, ontimeout, callback);\n    } else {\n      throw new Error(\"No suitable XMLHttpRequest implementation found\");\n    }\n  }\n  static fetchRequest(method, endPoint, headers, body, timeout, ontimeout, callback) {\n    let options = {\n      method,\n      headers,\n      body\n    };\n    let controller = null;\n    if (timeout) {\n      controller = new AbortController();\n      const _timeoutId = setTimeout(() => controller.abort(), timeout);\n      options.signal = controller.signal;\n    }\n    global.fetch(endPoint, options).then((response) => response.text()).then((data) => this.parseJSON(data)).then((data) => callback && callback(data)).catch((err) => {\n      if (err.name === \"AbortError\" && ontimeout) {\n        ontimeout();\n      } else {\n        callback && callback(null);\n      }\n    });\n    return controller;\n  }\n  static xdomainRequest(req, method, endPoint, body, timeout, ontimeout, callback) {\n    req.timeout = timeout;\n    req.open(method, endPoint);\n    req.onload = () => {\n      let response = this.parseJSON(req.responseText);\n      callback && callback(response);\n    };\n    if (ontimeout) {\n      req.ontimeout = ontimeout;\n    }\n    req.onprogress = () => {\n    };\n    req.send(body);\n    return req;\n  }\n  static xhrRequest(req, method, endPoint, headers, body, timeout, ontimeout, callback) {\n    req.open(method, endPoint, true);\n    req.timeout = timeout;\n    for (let [key, value] of Object.entries(headers)) {\n      req.setRequestHeader(key, value);\n    }\n    req.onerror = () => callback && callback(null);\n    req.onreadystatechange = () => {\n      if (req.readyState === XHR_STATES.complete && callback) {\n        let response = this.parseJSON(req.responseText);\n        callback(response);\n      }\n    };\n    if (ontimeout) {\n      req.ontimeout = ontimeout;\n    }\n    req.send(body);\n    return req;\n  }\n  static parseJSON(resp) {\n    if (!resp || resp === \"\") {\n      return null;\n    }\n    try {\n      return JSON.parse(resp);\n    } catch {\n      console && console.log(\"failed to parse JSON response\", resp);\n      return null;\n    }\n  }\n  static serialize(obj, parentKey) {\n    let queryStr = [];\n    for (var key in obj) {\n      if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n        continue;\n      }\n      let paramKey = parentKey ? `${parentKey}[${key}]` : key;\n      let paramVal = obj[key];\n      if (typeof paramVal === \"object\") {\n        queryStr.push(this.serialize(paramVal, paramKey));\n      } else {\n        queryStr.push(encodeURIComponent(paramKey) + \"=\" + encodeURIComponent(paramVal));\n      }\n    }\n    return queryStr.join(\"&\");\n  }\n  static appendParams(url, params) {\n    if (Object.keys(params).length === 0) {\n      return url;\n    }\n    let prefix = url.match(/\\?/) ? \"&\" : \"?\";\n    return `${url}${prefix}${this.serialize(params)}`;\n  }\n};\n\n// js/phoenix/longpoll.js\nvar arrayBufferToBase64 = (buffer) => {\n  let binary = \"\";\n  let bytes = new Uint8Array(buffer);\n  let len = bytes.byteLength;\n  for (let i = 0; i < len; i++) {\n    binary += String.fromCharCode(bytes[i]);\n  }\n  return btoa(binary);\n};\nvar LongPoll = class {\n  constructor(endPoint, protocols) {\n    if (protocols && protocols.length === 2 && protocols[1].startsWith(AUTH_TOKEN_PREFIX)) {\n      this.authToken = atob(protocols[1].slice(AUTH_TOKEN_PREFIX.length));\n    }\n    this.endPoint = null;\n    this.token = null;\n    this.skipHeartbeat = true;\n    this.reqs = /* @__PURE__ */ new Set();\n    this.awaitingBatchAck = false;\n    this.currentBatch = null;\n    this.currentBatchTimer = null;\n    this.batchBuffer = [];\n    this.onopen = function() {\n    };\n    this.onerror = function() {\n    };\n    this.onmessage = function() {\n    };\n    this.onclose = function() {\n    };\n    this.pollEndpoint = this.normalizeEndpoint(endPoint);\n    this.readyState = SOCKET_STATES.connecting;\n    setTimeout(() => this.poll(), 0);\n  }\n  normalizeEndpoint(endPoint) {\n    return endPoint.replace(\"ws://\", \"http://\").replace(\"wss://\", \"https://\").replace(new RegExp(\"(.*)/\" + TRANSPORTS.websocket), \"$1/\" + TRANSPORTS.longpoll);\n  }\n  endpointURL() {\n    return Ajax.appendParams(this.pollEndpoint, { token: this.token });\n  }\n  closeAndRetry(code, reason, wasClean) {\n    this.close(code, reason, wasClean);\n    this.readyState = SOCKET_STATES.connecting;\n  }\n  ontimeout() {\n    this.onerror(\"timeout\");\n    this.closeAndRetry(1005, \"timeout\", false);\n  }\n  isActive() {\n    return this.readyState === SOCKET_STATES.open || this.readyState === SOCKET_STATES.connecting;\n  }\n  poll() {\n    const headers = { \"Accept\": \"application/json\" };\n    if (this.authToken) {\n      headers[\"X-Phoenix-AuthToken\"] = this.authToken;\n    }\n    this.ajax(\"GET\", headers, null, () => this.ontimeout(), (resp) => {\n      if (resp) {\n        var { status, token, messages } = resp;\n        if (status === 410 && this.token !== null) {\n          this.onerror(410);\n          this.closeAndRetry(3410, \"session_gone\", false);\n          return;\n        }\n        this.token = token;\n      } else {\n        status = 0;\n      }\n      switch (status) {\n        case 200:\n          messages.forEach((msg) => {\n            setTimeout(() => this.onmessage({ data: msg }), 0);\n          });\n          this.poll();\n          break;\n        case 204:\n          this.poll();\n          break;\n        case 410:\n          this.readyState = SOCKET_STATES.open;\n          this.onopen({});\n          this.poll();\n          break;\n        case 403:\n          this.onerror(403);\n          this.close(1008, \"forbidden\", false);\n          break;\n        case 0:\n        case 500:\n          this.onerror(500);\n          this.closeAndRetry(1011, \"internal server error\", 500);\n          break;\n        default:\n          throw new Error(`unhandled poll status ${status}`);\n      }\n    });\n  }\n  // we collect all pushes within the current event loop by\n  // setTimeout 0, which optimizes back-to-back procedural\n  // pushes against an empty buffer\n  send(body) {\n    if (typeof body !== \"string\") {\n      body = arrayBufferToBase64(body);\n    }\n    if (this.currentBatch) {\n      this.currentBatch.push(body);\n    } else if (this.awaitingBatchAck) {\n      this.batchBuffer.push(body);\n    } else {\n      this.currentBatch = [body];\n      this.currentBatchTimer = setTimeout(() => {\n        this.batchSend(this.currentBatch);\n        this.currentBatch = null;\n      }, 0);\n    }\n  }\n  batchSend(messages, offset = 0) {\n    this.awaitingBatchAck = true;\n    const next = offset + MAX_LONGPOLL_BATCH_SIZE;\n    const batch = messages.slice(offset, next);\n    this.ajax(\"POST\", { \"Content-Type\": \"application/x-ndjson\" }, batch.join(\"\\n\"), () => this.onerror(\"timeout\"), (resp) => {\n      if (!resp || resp.status !== 200) {\n        this.awaitingBatchAck = false;\n        this.onerror(resp && resp.status);\n        this.closeAndRetry(1011, \"internal server error\", false);\n      } else if (next < messages.length) {\n        this.batchSend(messages, next);\n      } else if (this.batchBuffer.length > 0) {\n        this.batchSend(this.batchBuffer);\n        this.batchBuffer = [];\n      } else {\n        this.awaitingBatchAck = false;\n      }\n    });\n  }\n  close(code, reason, wasClean) {\n    for (let req of this.reqs) {\n      req.abort();\n    }\n    this.readyState = SOCKET_STATES.closed;\n    let opts = Object.assign({ code: 1e3, reason: void 0, wasClean: true }, { code, reason, wasClean });\n    this.batchBuffer = [];\n    clearTimeout(this.currentBatchTimer);\n    this.currentBatchTimer = null;\n    if (typeof CloseEvent !== \"undefined\") {\n      this.onclose(new CloseEvent(\"close\", opts));\n    } else {\n      this.onclose(opts);\n    }\n  }\n  ajax(method, headers, body, onCallerTimeout, callback) {\n    let req;\n    let ontimeout = () => {\n      this.reqs.delete(req);\n      onCallerTimeout();\n    };\n    req = Ajax.request(method, this.endpointURL(), headers, body, this.timeout, ontimeout, (resp) => {\n      this.reqs.delete(req);\n      if (this.isActive()) {\n        callback(resp);\n      }\n    });\n    this.reqs.add(req);\n  }\n};\n\n// js/phoenix/presence.js\nvar Presence = class _Presence {\n  /**\n   * Initializes the Presence\n   * @param {Channel} channel - The Channel\n   * @param {PresenceOptions} [opts] - The options, for example `{events: {state: \"state\", diff: \"diff\"}}`\n   */\n  constructor(channel, opts = {}) {\n    let events = opts.events || /** @type {PresenceEvents} */\n    { state: \"presence_state\", diff: \"presence_diff\" };\n    this.state = /* @__PURE__ */ Object.create(null);\n    this.pendingDiffs = [];\n    this.channel = channel;\n    this.joinRef = null;\n    this.caller = {\n      onJoin: function() {\n      },\n      onLeave: function() {\n      },\n      onSync: function() {\n      }\n    };\n    this.channel.on(events.state, (newState) => {\n      let { onJoin, onLeave, onSync } = this.caller;\n      this.joinRef = this.channel.joinRef();\n      this.state = _Presence.syncState(this.state, newState, onJoin, onLeave);\n      this.pendingDiffs.forEach((diff) => {\n        this.state = _Presence.syncDiff(this.state, diff, onJoin, onLeave);\n      });\n      this.pendingDiffs = [];\n      onSync();\n    });\n    this.channel.on(events.diff, (diff) => {\n      let { onJoin, onLeave, onSync } = this.caller;\n      if (this.inPendingSyncState()) {\n        this.pendingDiffs.push(diff);\n      } else {\n        this.state = _Presence.syncDiff(this.state, diff, onJoin, onLeave);\n        onSync();\n      }\n    });\n  }\n  /**\n   * @param {PresenceOnJoin} callback\n   */\n  onJoin(callback) {\n    this.caller.onJoin = callback;\n  }\n  /**\n   * @param {PresenceOnLeave} callback\n   */\n  onLeave(callback) {\n    this.caller.onLeave = callback;\n  }\n  /**\n   * @param {PresenceOnSync} callback\n   */\n  onSync(callback) {\n    this.caller.onSync = callback;\n  }\n  /**\n   * Returns the array of presences, with selected metadata.\n   *\n   * @template [T=PresenceState]\n   * @param {((key: string, obj: PresenceState) => T)} [by]\n   *\n   * @returns {T[]}\n   */\n  list(by) {\n    return _Presence.list(this.state, by);\n  }\n  inPendingSyncState() {\n    return !this.joinRef || this.joinRef !== this.channel.joinRef();\n  }\n  // lower-level public static API\n  /**\n   * Used to sync the list of presences on the server\n   * with the client's state. An optional `onJoin` and `onLeave` callback can\n   * be provided to react to changes in the client's local presences across\n   * disconnects and reconnects with the server.\n   *\n   * @param {Record<string, PresenceState>} currentState\n   * @param {Record<string, PresenceState>} newState\n   * @param {PresenceOnJoin} onJoin\n   * @param {PresenceOnLeave} onLeave\n   *\n   * @returns {Record<string, PresenceState>}\n   */\n  static syncState(currentState, newState, onJoin, onLeave) {\n    let state = this.toNullProtoObj(this.clone(currentState));\n    newState = this.toNullProtoObj(newState);\n    let joins = /* @__PURE__ */ Object.create(null);\n    let leaves = /* @__PURE__ */ Object.create(null);\n    this.map(state, (key, presence) => {\n      if (!newState[key]) {\n        leaves[key] = presence;\n      }\n    });\n    this.map(newState, (key, newPresence) => {\n      let currentPresence = state[key];\n      if (currentPresence) {\n        let newRefs = newPresence.metas.map((m) => m.phx_ref);\n        let curRefs = currentPresence.metas.map((m) => m.phx_ref);\n        let joinedMetas = newPresence.metas.filter((m) => curRefs.indexOf(m.phx_ref) < 0);\n        let leftMetas = currentPresence.metas.filter((m) => newRefs.indexOf(m.phx_ref) < 0);\n        if (joinedMetas.length > 0) {\n          joins[key] = newPresence;\n          joins[key].metas = joinedMetas;\n        }\n        if (leftMetas.length > 0) {\n          leaves[key] = this.clone(currentPresence);\n          leaves[key].metas = leftMetas;\n        }\n      } else {\n        joins[key] = newPresence;\n      }\n    });\n    return this.syncDiff(state, { joins, leaves }, onJoin, onLeave);\n  }\n  /**\n   *\n   * Used to sync a diff of presence join and leave\n   * events from the server, as they happen. Like `syncState`, `syncDiff`\n   * accepts optional `onJoin` and `onLeave` callbacks to react to a user\n   * joining or leaving from a device.\n   *\n   * @param {Record<string, PresenceState>} state\n   * @param {PresenceDiff} diff\n   * @param {PresenceOnJoin} onJoin\n   * @param {PresenceOnLeave} onLeave\n   *\n   * @returns {Record<string, PresenceState>}\n   */\n  static syncDiff(state, diff, onJoin, onLeave) {\n    state = this.toNullProtoObj(state);\n    let { joins, leaves } = this.clone(diff);\n    if (!onJoin) {\n      onJoin = function() {\n      };\n    }\n    if (!onLeave) {\n      onLeave = function() {\n      };\n    }\n    this.map(joins, (key, newPresence) => {\n      let currentPresence = state[key];\n      state[key] = this.clone(newPresence);\n      if (currentPresence) {\n        let joinedRefs = state[key].metas.map((m) => m.phx_ref);\n        let curMetas = currentPresence.metas.filter((m) => joinedRefs.indexOf(m.phx_ref) < 0);\n        state[key].metas.unshift(...curMetas);\n      }\n      onJoin(key, currentPresence, newPresence);\n    });\n    this.map(leaves, (key, leftPresence) => {\n      let currentPresence = state[key];\n      if (!currentPresence) {\n        return;\n      }\n      let refsToRemove = leftPresence.metas.map((m) => m.phx_ref);\n      currentPresence.metas = currentPresence.metas.filter((p) => {\n        return refsToRemove.indexOf(p.phx_ref) < 0;\n      });\n      onLeave(key, currentPresence, leftPresence);\n      if (currentPresence.metas.length === 0) {\n        delete state[key];\n      }\n    });\n    return state;\n  }\n  /**\n   * Returns the array of presences, with selected metadata.\n   *\n   * @template [T=PresenceState]\n   * @param {Record<string, PresenceState>} presences\n   * @param {((key: string, obj: PresenceState) => T)} [chooser]\n   *\n   * @returns {T[]}\n   */\n  static list(presences, chooser) {\n    if (!chooser) {\n      chooser = function(key, pres) {\n        return pres;\n      };\n    }\n    return this.map(presences, (key, presence) => {\n      return chooser(key, presence);\n    });\n  }\n  // private\n  /**\n  * @template T\n  * @param {Record<string, PresenceState>} obj\n  * @param {(key: string, obj: PresenceState) => T} func\n  */\n  static map(obj, func) {\n    return Object.getOwnPropertyNames(obj).map((key) => func(key, obj[key]));\n  }\n  // Presence keys are chosen on the server and may collide with\n  // Object.prototype properties (\"__proto__\", \"constructor\", ...), so any\n  // object indexed by presence key must not have a prototype chain\n  //\n  // TODO: replace the null-prototype objects with Maps in Phoenix 2.0\n  // (breaking change for the lower-level static API)\n  static toNullProtoObj(obj) {\n    if (Object.getPrototypeOf(obj) === null) {\n      return obj;\n    }\n    let cleaned = /* @__PURE__ */ Object.create(null);\n    Object.getOwnPropertyNames(obj).forEach((key) => {\n      cleaned[key] = obj[key];\n    });\n    return cleaned;\n  }\n  /**\n  * @template T\n  * @param {T} obj\n  * @returns {T}\n  */\n  static clone(obj) {\n    return JSON.parse(JSON.stringify(obj));\n  }\n};\n\n// js/phoenix/serializer.js\nvar serializer_default = {\n  HEADER_LENGTH: 1,\n  META_LENGTH: 4,\n  KINDS: { push: 0, reply: 1, broadcast: 2 },\n  /**\n  * @template T\n  * @param {Message<Record<string, any>>} msg\n  * @param {(msg: ArrayBuffer | string) => T} callback\n  * @returns {T}\n  */\n  encode(msg, callback) {\n    if (msg.payload.constructor === ArrayBuffer) {\n      return callback(this.binaryEncode(msg));\n    } else {\n      let payload = [msg.join_ref, msg.ref, msg.topic, msg.event, msg.payload];\n      return callback(JSON.stringify(payload));\n    }\n  },\n  /**\n  * @template T\n  * @param {ArrayBuffer | string} rawPayload\n  * @param {(msg: Message<unknown>) => T} callback\n  * @returns {T}\n  */\n  decode(rawPayload, callback) {\n    if (rawPayload.constructor === ArrayBuffer) {\n      return callback(this.binaryDecode(rawPayload));\n    } else {\n      let [join_ref, ref, topic, event, payload] = JSON.parse(rawPayload);\n      return callback({ join_ref, ref, topic, event, payload });\n    }\n  },\n  /** @private */\n  binaryEncode(message) {\n    let { join_ref, ref, event, topic, payload } = message;\n    let encoder = new TextEncoder();\n    let joinRefBytes = encoder.encode(join_ref);\n    let refBytes = encoder.encode(ref);\n    let topicBytes = encoder.encode(topic);\n    let eventBytes = encoder.encode(event);\n    this.assertFieldSize(joinRefBytes.byteLength, \"join_ref\");\n    this.assertFieldSize(refBytes.byteLength, \"ref\");\n    this.assertFieldSize(topicBytes.byteLength, \"topic\");\n    this.assertFieldSize(eventBytes.byteLength, \"event\");\n    let metaLength = this.META_LENGTH + joinRefBytes.byteLength + refBytes.byteLength + topicBytes.byteLength + eventBytes.byteLength;\n    let header = new ArrayBuffer(this.HEADER_LENGTH + metaLength);\n    let headerBytes = new Uint8Array(header);\n    let view = new DataView(header);\n    let offset = 0;\n    view.setUint8(offset++, this.KINDS.push);\n    view.setUint8(offset++, joinRefBytes.byteLength);\n    view.setUint8(offset++, refBytes.byteLength);\n    view.setUint8(offset++, topicBytes.byteLength);\n    view.setUint8(offset++, eventBytes.byteLength);\n    headerBytes.set(joinRefBytes, offset);\n    offset += joinRefBytes.byteLength;\n    headerBytes.set(refBytes, offset);\n    offset += refBytes.byteLength;\n    headerBytes.set(topicBytes, offset);\n    offset += topicBytes.byteLength;\n    headerBytes.set(eventBytes, offset);\n    offset += eventBytes.byteLength;\n    var combined = new Uint8Array(header.byteLength + payload.byteLength);\n    combined.set(headerBytes, 0);\n    combined.set(new Uint8Array(payload), header.byteLength);\n    return combined.buffer;\n  },\n  assertFieldSize(size, name) {\n    if (size > 255) {\n      throw new Error(`unable to convert ${name} to binary: must be less than or equal to 255 bytes, but is ${size} bytes`);\n    }\n  },\n  /**\n  * @private\n  */\n  binaryDecode(buffer) {\n    let view = new DataView(buffer);\n    let kind = view.getUint8(0);\n    let decoder = new TextDecoder();\n    switch (kind) {\n      case this.KINDS.push:\n        return this.decodePush(buffer, view, decoder);\n      case this.KINDS.reply:\n        return this.decodeReply(buffer, view, decoder);\n      case this.KINDS.broadcast:\n        return this.decodeBroadcast(buffer, view, decoder);\n    }\n  },\n  /** @private */\n  decodePush(buffer, view, decoder) {\n    let joinRefSize = view.getUint8(1);\n    let topicSize = view.getUint8(2);\n    let eventSize = view.getUint8(3);\n    let offset = this.HEADER_LENGTH + this.META_LENGTH - 1;\n    let joinRef = decoder.decode(buffer.slice(offset, offset + joinRefSize));\n    offset = offset + joinRefSize;\n    let topic = decoder.decode(buffer.slice(offset, offset + topicSize));\n    offset = offset + topicSize;\n    let event = decoder.decode(buffer.slice(offset, offset + eventSize));\n    offset = offset + eventSize;\n    let data = buffer.slice(offset, buffer.byteLength);\n    return { join_ref: joinRef, ref: null, topic, event, payload: data };\n  },\n  /** @private */\n  decodeReply(buffer, view, decoder) {\n    let joinRefSize = view.getUint8(1);\n    let refSize = view.getUint8(2);\n    let topicSize = view.getUint8(3);\n    let eventSize = view.getUint8(4);\n    let offset = this.HEADER_LENGTH + this.META_LENGTH;\n    let joinRef = decoder.decode(buffer.slice(offset, offset + joinRefSize));\n    offset = offset + joinRefSize;\n    let ref = decoder.decode(buffer.slice(offset, offset + refSize));\n    offset = offset + refSize;\n    let topic = decoder.decode(buffer.slice(offset, offset + topicSize));\n    offset = offset + topicSize;\n    let event = decoder.decode(buffer.slice(offset, offset + eventSize));\n    offset = offset + eventSize;\n    let data = buffer.slice(offset, buffer.byteLength);\n    let payload = { status: event, response: data };\n    return { join_ref: joinRef, ref, topic, event: CHANNEL_EVENTS.reply, payload };\n  },\n  /** @private */\n  decodeBroadcast(buffer, view, decoder) {\n    let topicSize = view.getUint8(1);\n    let eventSize = view.getUint8(2);\n    let offset = this.HEADER_LENGTH + 2;\n    let topic = decoder.decode(buffer.slice(offset, offset + topicSize));\n    offset = offset + topicSize;\n    let event = decoder.decode(buffer.slice(offset, offset + eventSize));\n    offset = offset + eventSize;\n    let data = buffer.slice(offset, buffer.byteLength);\n    return { join_ref: null, ref: null, topic, event, payload: data };\n  }\n};\n\n// js/phoenix/socket.js\nvar Socket = class {\n  /** Initializes the Socket *\n   *\n   * For IE8 support use an ES5-shim (https://github.com/es-shims/es5-shim)\n   *\n   * @constructor\n   * @param {string} endPoint - The string WebSocket endpoint, ie, `\"ws://example.com/socket\"`,\n   *                                               `\"wss://example.com\"`\n   *                                               `\"/socket\"` (inherited host & protocol)\n   * @param {SocketOptions} [opts] - Optional configuration\n   */\n  constructor(endPoint, opts = {}) {\n    this.stateChangeCallbacks = { open: [], close: [], error: [], message: [] };\n    this.channels = [];\n    this.sendBuffer = [];\n    this.ref = 0;\n    this.fallbackRef = null;\n    this.timeout = opts.timeout || DEFAULT_TIMEOUT;\n    this.transport = opts.transport || global.WebSocket || LongPoll;\n    this.conn = void 0;\n    this.primaryPassedHealthCheck = false;\n    this.longPollFallbackMs = opts.longPollFallbackMs;\n    this.fallbackTimer = null;\n    let envSessionStorage = null;\n    try {\n      envSessionStorage = global && global.sessionStorage;\n    } catch {\n    }\n    this.sessionStore = opts.sessionStorage || envSessionStorage;\n    this.establishedConnections = 0;\n    this.defaultEncoder = serializer_default.encode.bind(serializer_default);\n    this.defaultDecoder = serializer_default.decode.bind(serializer_default);\n    this.closeWasClean = true;\n    this.disconnecting = false;\n    this.binaryType = opts.binaryType || \"arraybuffer\";\n    this.connectClock = 1;\n    this.pageHidden = false;\n    this.encode = void 0;\n    this.decode = void 0;\n    if (this.transport !== LongPoll) {\n      this.encode = opts.encode || this.defaultEncoder;\n      this.decode = opts.decode || this.defaultDecoder;\n    } else {\n      this.encode = this.defaultEncoder;\n      this.decode = this.defaultDecoder;\n    }\n    let awaitingConnectionOnPageShow = null;\n    if (phxWindow && phxWindow.addEventListener) {\n      phxWindow.addEventListener(\"pagehide\", (_e) => {\n        if (this.conn) {\n          this.disconnect();\n          awaitingConnectionOnPageShow = this.connectClock;\n        }\n      });\n      phxWindow.addEventListener(\"pageshow\", (_e) => {\n        if (awaitingConnectionOnPageShow === this.connectClock) {\n          awaitingConnectionOnPageShow = null;\n          this.connect();\n        }\n      });\n      phxWindow.addEventListener(\"visibilitychange\", () => {\n        if (document.visibilityState === \"hidden\") {\n          this.pageHidden = true;\n        } else {\n          this.pageHidden = false;\n          if (!this.isConnected() && !this.closeWasClean) {\n            this.teardown(() => this.connect());\n          }\n        }\n      });\n    }\n    this.heartbeatIntervalMs = opts.heartbeatIntervalMs || 3e4;\n    this.autoSendHeartbeat = opts.autoSendHeartbeat ?? true;\n    this.heartbeatCallback = opts.heartbeatCallback ?? (() => {\n    });\n    this.rejoinAfterMs = (tries) => {\n      if (opts.rejoinAfterMs) {\n        return opts.rejoinAfterMs(tries);\n      } else {\n        return [1e3, 2e3, 5e3][tries - 1] || 1e4;\n      }\n    };\n    this.reconnectAfterMs = (tries) => {\n      if (opts.reconnectAfterMs) {\n        return opts.reconnectAfterMs(tries);\n      } else {\n        return [10, 50, 100, 150, 200, 250, 500, 1e3, 2e3][tries - 1] || 5e3;\n      }\n    };\n    this.logger = opts.logger || null;\n    if (!this.logger && opts.debug) {\n      this.logger = (kind, msg, data) => {\n        console.log(`${kind}: ${msg}`, data);\n      };\n    }\n    this.longpollerTimeout = opts.longpollerTimeout || 2e4;\n    this.params = closure(opts.params || {});\n    this.endPoint = `${endPoint}/${TRANSPORTS.websocket}`;\n    this.vsn = opts.vsn || DEFAULT_VSN;\n    this.heartbeatTimeoutTimer = null;\n    this.heartbeatTimer = null;\n    this.heartbeatSentAt = null;\n    this.pendingHeartbeatRef = null;\n    this.reconnectTimer = new Timer(() => {\n      if (this.pageHidden) {\n        this.log(\"Not reconnecting as page is hidden!\");\n        this.teardown();\n        return;\n      }\n      this.teardown(async () => {\n        if (opts.beforeReconnect) await opts.beforeReconnect();\n        this.connect();\n      });\n    }, this.reconnectAfterMs);\n    this.authToken = opts.authToken && closure(opts.authToken);\n  }\n  /**\n   * Returns the LongPoll transport reference\n   */\n  getLongPollTransport() {\n    return LongPoll;\n  }\n  /**\n   * Disconnects and replaces the active transport\n   *\n   * @param {SocketTransport} newTransport - The new transport class to instantiate\n   *\n   */\n  replaceTransport(newTransport) {\n    this.connectClock++;\n    this.closeWasClean = true;\n    clearTimeout(this.fallbackTimer);\n    this.reconnectTimer.reset();\n    if (this.conn) {\n      this.conn.close();\n      this.conn = null;\n    }\n    this.transport = newTransport;\n  }\n  /**\n   * Returns the socket protocol\n   *\n   * @returns {\"wss\" | \"ws\"}\n   */\n  protocol() {\n    return location.protocol.match(/^https/) ? \"wss\" : \"ws\";\n  }\n  /**\n   * The fully qualified socket url\n   *\n   * @returns {string}\n   */\n  endPointURL() {\n    let uri = Ajax.appendParams(\n      Ajax.appendParams(this.endPoint, this.params()),\n      { vsn: this.vsn }\n    );\n    if (uri.charAt(0) !== \"/\") {\n      return uri;\n    }\n    if (uri.charAt(1) === \"/\") {\n      return `${this.protocol()}:${uri}`;\n    }\n    return `${this.protocol()}://${location.host}${uri}`;\n  }\n  /**\n   * Disconnects the socket\n   *\n   * See https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes for valid status codes.\n   *\n   * @param {() => void} [callback] - Optional callback which is called after socket is disconnected.\n   * @param {number} [code] - A status code for disconnection (Optional).\n   * @param {string} [reason] - A textual description of the reason to disconnect. (Optional)\n   */\n  disconnect(callback, code, reason) {\n    this.connectClock++;\n    this.disconnecting = true;\n    this.closeWasClean = true;\n    clearTimeout(this.fallbackTimer);\n    this.reconnectTimer.reset();\n    this.teardown(() => {\n      this.disconnecting = false;\n      callback && callback();\n    }, code, reason);\n  }\n  /**\n   * @param {Params} [params] - [DEPRECATED] The params to send when connecting, for example `{user_id: userToken}`\n   *\n   * Passing params to connect is deprecated; pass them in the Socket constructor instead:\n   * `new Socket(\"/socket\", {params: {user_id: userToken}})`.\n   */\n  connect(params) {\n    if (params) {\n      console && console.log(\"passing params to connect is deprecated. Instead pass :params to the Socket constructor\");\n      this.params = closure(params);\n    }\n    if (this.conn && !this.disconnecting) {\n      return;\n    }\n    if (this.longPollFallbackMs && this.transport !== LongPoll) {\n      this.connectWithFallback(LongPoll, this.longPollFallbackMs);\n    } else {\n      this.transportConnect();\n    }\n  }\n  /**\n   * Logs the message. Override `this.logger` for specialized logging. noops by default\n   * @param {string} kind\n   * @param {string} msg\n   * @param {Object} data\n   */\n  log(kind, msg, data) {\n    this.logger && this.logger(kind, msg, data);\n  }\n  /**\n   * Returns true if a logger has been set on this socket.\n   */\n  hasLogger() {\n    return this.logger !== null;\n  }\n  /**\n   * Registers callbacks for connection open events\n   *\n   * @example socket.onOpen(function(){ console.info(\"the socket was opened\") })\n   *\n   * @param {SocketOnOpen} callback\n   */\n  onOpen(callback) {\n    let ref = this.makeRef();\n    this.stateChangeCallbacks.open.push([ref, callback]);\n    return ref;\n  }\n  /**\n   * Registers callbacks for connection close events\n   * @param {SocketOnClose} callback\n   * @returns {string}\n   */\n  onClose(callback) {\n    let ref = this.makeRef();\n    this.stateChangeCallbacks.close.push([ref, callback]);\n    return ref;\n  }\n  /**\n   * Registers callbacks for connection error events\n   *\n   * @example socket.onError(function(error){ alert(\"An error occurred\") })\n   *\n   * @param {SocketOnError} callback\n   * @returns {string}\n   */\n  onError(callback) {\n    let ref = this.makeRef();\n    this.stateChangeCallbacks.error.push([ref, callback]);\n    return ref;\n  }\n  /**\n   * Registers callbacks for connection message events\n   * @param {SocketOnMessage} callback\n   * @returns {string}\n   */\n  onMessage(callback) {\n    let ref = this.makeRef();\n    this.stateChangeCallbacks.message.push([ref, callback]);\n    return ref;\n  }\n  /**\n   * Sets a callback that receives lifecycle events for internal heartbeat messages.\n   * Useful for instrumenting connection health (e.g. sent/ok/timeout/disconnected).\n   * @param {HeartbeatCallback} callback\n   */\n  onHeartbeat(callback) {\n    this.heartbeatCallback = callback;\n  }\n  /**\n   * Pings the server and invokes the callback with the RTT in milliseconds\n   * @param {(timeDelta: number) => void} callback\n   *\n   * Returns true if the ping was pushed or false if unable to be pushed.\n   */\n  ping(callback) {\n    if (!this.isConnected()) {\n      return false;\n    }\n    let ref = this.makeRef();\n    let startTime = Date.now();\n    this.push({ topic: \"phoenix\", event: \"heartbeat\", payload: {}, ref });\n    let onMsgRef = this.onMessage((msg) => {\n      if (msg.ref === ref) {\n        this.off([onMsgRef]);\n        callback(Date.now() - startTime);\n      }\n    });\n    return true;\n  }\n  /**\n   * @private\n   *\n   * @param {Function}\n   */\n  transportName(transport) {\n    switch (transport) {\n      case LongPoll:\n        return \"LongPoll\";\n      default:\n        return transport.name;\n    }\n  }\n  /**\n   * @private\n   */\n  transportConnect() {\n    this.connectClock++;\n    this.closeWasClean = false;\n    let protocols = void 0;\n    if (this.authToken) {\n      protocols = [\"phoenix\", `${AUTH_TOKEN_PREFIX}${btoa(this.authToken()).replace(/=/g, \"\")}`];\n    }\n    this.conn = new this.transport(this.endPointURL(), protocols);\n    this.conn.binaryType = this.binaryType;\n    this.conn.timeout = this.longpollerTimeout;\n    this.conn.onopen = () => this.onConnOpen();\n    this.conn.onerror = (error) => this.onConnError(error);\n    this.conn.onmessage = (event) => this.onConnMessage(event);\n    this.conn.onclose = (event) => this.onConnClose(event);\n  }\n  getSession(key) {\n    return this.sessionStore && this.sessionStore.getItem(key);\n  }\n  storeSession(key, val) {\n    this.sessionStore && this.sessionStore.setItem(key, val);\n  }\n  connectWithFallback(fallbackTransport, fallbackThreshold = 2500) {\n    clearTimeout(this.fallbackTimer);\n    let established = false;\n    let primaryTransport = true;\n    let openRef, errorRef;\n    let fallbackTransportName = this.transportName(fallbackTransport);\n    let fallback = (reason) => {\n      this.log(\"transport\", `falling back to ${fallbackTransportName}...`, reason);\n      this.off([openRef, errorRef]);\n      primaryTransport = false;\n      this.replaceTransport(fallbackTransport);\n      this.transportConnect();\n    };\n    if (this.getSession(`phx:fallback:${fallbackTransportName}`)) {\n      return fallback(\"memorized\");\n    }\n    this.fallbackTimer = setTimeout(fallback, fallbackThreshold);\n    errorRef = this.onError((reason) => {\n      this.log(\"transport\", \"error\", reason);\n      if (primaryTransport && !established) {\n        clearTimeout(this.fallbackTimer);\n        fallback(reason);\n      }\n    });\n    if (this.fallbackRef) {\n      this.off([this.fallbackRef]);\n    }\n    this.fallbackRef = this.onOpen(() => {\n      established = true;\n      if (!primaryTransport) {\n        let fallbackTransportName2 = this.transportName(fallbackTransport);\n        if (!this.primaryPassedHealthCheck) {\n          this.storeSession(`phx:fallback:${fallbackTransportName2}`, \"true\");\n        }\n        return this.log(\"transport\", `established ${fallbackTransportName2} fallback`);\n      }\n      clearTimeout(this.fallbackTimer);\n      this.fallbackTimer = setTimeout(fallback, fallbackThreshold);\n      this.ping((rtt) => {\n        this.log(\"transport\", \"connected to primary after\", rtt);\n        this.primaryPassedHealthCheck = true;\n        clearTimeout(this.fallbackTimer);\n      });\n    });\n    this.transportConnect();\n  }\n  clearHeartbeats() {\n    clearTimeout(this.heartbeatTimer);\n    clearTimeout(this.heartbeatTimeoutTimer);\n  }\n  onConnOpen() {\n    if (this.hasLogger()) this.log(\"transport\", `connected to ${this.endPointURL()}`);\n    this.closeWasClean = false;\n    this.disconnecting = false;\n    this.establishedConnections++;\n    this.flushSendBuffer();\n    this.reconnectTimer.reset();\n    if (this.autoSendHeartbeat) {\n      this.resetHeartbeat();\n    }\n    this.triggerStateCallbacks(\"open\");\n  }\n  /**\n   * @private\n   */\n  heartbeatTimeout() {\n    if (this.pendingHeartbeatRef) {\n      this.pendingHeartbeatRef = null;\n      this.heartbeatSentAt = null;\n      if (this.hasLogger()) {\n        this.log(\"transport\", \"heartbeat timeout. Attempting to re-establish connection\");\n      }\n      try {\n        this.heartbeatCallback(\"timeout\");\n      } catch (e) {\n        this.log(\"error\", \"error in heartbeat callback\", e);\n      }\n      this.triggerChanError(new Error(\"heartbeat timeout\"));\n      this.closeWasClean = false;\n      this.teardown(() => this.reconnectTimer.scheduleTimeout(), WS_CLOSE_NORMAL, \"heartbeat timeout\");\n    }\n  }\n  resetHeartbeat() {\n    if (this.conn && this.conn.skipHeartbeat) {\n      return;\n    }\n    this.pendingHeartbeatRef = null;\n    this.clearHeartbeats();\n    this.heartbeatTimer = setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs);\n  }\n  teardown(callback, code, reason) {\n    if (!this.conn) {\n      return callback && callback();\n    }\n    const connToClose = this.conn;\n    this.waitForBufferDone(connToClose, () => {\n      if (code) {\n        connToClose.close(code, reason || \"\");\n      } else {\n        connToClose.close();\n      }\n      this.waitForSocketClosed(connToClose, () => {\n        if (this.conn === connToClose) {\n          this.conn.onopen = function() {\n          };\n          this.conn.onerror = function() {\n          };\n          this.conn.onmessage = function() {\n          };\n          this.conn.onclose = function() {\n          };\n          this.conn = null;\n        }\n        callback && callback();\n      });\n    });\n  }\n  waitForBufferDone(conn, callback, tries = 1) {\n    if (tries === 5 || !conn.bufferedAmount) {\n      callback();\n      return;\n    }\n    setTimeout(() => {\n      this.waitForBufferDone(conn, callback, tries + 1);\n    }, 150 * tries);\n  }\n  waitForSocketClosed(conn, callback, tries = 1) {\n    if (tries === 5 || conn.readyState === SOCKET_STATES.closed) {\n      callback();\n      return;\n    }\n    setTimeout(() => {\n      this.waitForSocketClosed(conn, callback, tries + 1);\n    }, 150 * tries);\n  }\n  /**\n  * @param {CloseEvent} event\n  */\n  onConnClose(event) {\n    if (this.conn) this.conn.onclose = () => {\n    };\n    if (this.hasLogger()) this.log(\"transport\", \"close\", event);\n    this.triggerChanError(event);\n    this.clearHeartbeats();\n    if (!this.closeWasClean) {\n      this.reconnectTimer.scheduleTimeout();\n    }\n    this.triggerStateCallbacks(\"close\", event);\n  }\n  /**\n   * @private\n   * @param {Event} error\n   */\n  onConnError(error) {\n    if (this.hasLogger()) this.log(\"transport\", \"error\", error);\n    let transportBefore = this.transport;\n    let establishedBefore = this.establishedConnections;\n    this.triggerStateCallbacks(\"error\", error, transportBefore, establishedBefore);\n    if (transportBefore === this.transport || establishedBefore > 0) {\n      this.triggerChanError(error);\n    }\n  }\n  /**\n   * @private\n   * @param {unknown} [reason] underlying close/error event forwarded to channel error listeners\n   */\n  triggerChanError(reason) {\n    this.channels.forEach((channel) => {\n      if (!(channel.isErrored() || channel.isLeaving() || channel.isClosed())) {\n        channel.trigger(CHANNEL_EVENTS.error, reason);\n      }\n    });\n  }\n  /**\n   * @returns {string}\n   */\n  connectionState() {\n    switch (this.conn && this.conn.readyState) {\n      case SOCKET_STATES.connecting:\n        return \"connecting\";\n      case SOCKET_STATES.open:\n        return \"open\";\n      case SOCKET_STATES.closing:\n        return \"closing\";\n      default:\n        return \"closed\";\n    }\n  }\n  /**\n   * @returns {boolean}\n   */\n  isConnected() {\n    return this.connectionState() === \"open\";\n  }\n  /**\n   *\n   * @param {Channel} channel\n   */\n  remove(channel) {\n    this.off(channel.stateChangeRefs);\n    this.channels = this.channels.filter((c) => c !== channel);\n  }\n  /**\n   * Removes `onOpen`, `onClose`, `onError,` and `onMessage` registrations.\n   *\n   * @param {string[]} refs - list of refs returned by calls to\n   *                 `onOpen`, `onClose`, `onError,` and `onMessage`\n   */\n  off(refs) {\n    for (let key in this.stateChangeCallbacks) {\n      this.stateChangeCallbacks[key] = this.stateChangeCallbacks[key].filter(([ref]) => {\n        return refs.indexOf(ref) === -1;\n      });\n    }\n  }\n  /**\n   * Initiates a new channel for the given topic\n   *\n   * @param {string} topic\n   * @param {Params | (() => Params)} [chanParams]- Parameters for the channel\n   * @returns {Channel}\n   */\n  channel(topic, chanParams = {}) {\n    let chan = new Channel(topic, chanParams, this);\n    this.channels.push(chan);\n    return chan;\n  }\n  /**\n   * @param {Message<Record<string, any>>} data\n   */\n  push(data) {\n    if (this.hasLogger()) {\n      let { topic, event, payload, ref, join_ref } = data;\n      this.log(\"push\", `${topic} ${event} (${join_ref}, ${ref})`, payload);\n    }\n    if (this.isConnected()) {\n      this.encode(data, (result) => this.conn.send(result));\n    } else {\n      this.sendBuffer.push(() => this.encode(data, (result) => this.conn.send(result)));\n    }\n  }\n  /**\n   * Return the next message ref, accounting for overflows\n   * @returns {string}\n   */\n  makeRef() {\n    let newRef = this.ref + 1;\n    if (newRef === this.ref) {\n      this.ref = 0;\n    } else {\n      this.ref = newRef;\n    }\n    return this.ref.toString();\n  }\n  sendHeartbeat() {\n    if (!this.isConnected()) {\n      try {\n        this.heartbeatCallback(\"disconnected\");\n      } catch (e) {\n        this.log(\"error\", \"error in heartbeat callback\", e);\n      }\n      return;\n    }\n    if (this.pendingHeartbeatRef) {\n      this.heartbeatTimeout();\n      return;\n    }\n    this.pendingHeartbeatRef = this.makeRef();\n    this.heartbeatSentAt = Date.now();\n    this.push({ topic: \"phoenix\", event: \"heartbeat\", payload: {}, ref: this.pendingHeartbeatRef });\n    try {\n      this.heartbeatCallback(\"sent\");\n    } catch (e) {\n      this.log(\"error\", \"error in heartbeat callback\", e);\n    }\n    this.heartbeatTimeoutTimer = setTimeout(() => this.heartbeatTimeout(), this.heartbeatIntervalMs);\n  }\n  flushSendBuffer() {\n    if (this.isConnected() && this.sendBuffer.length > 0) {\n      this.sendBuffer.forEach((callback) => callback());\n      this.sendBuffer = [];\n    }\n  }\n  /**\n  * @param {MessageEvent<any>} rawMessage\n  */\n  onConnMessage(rawMessage) {\n    this.decode(rawMessage.data, (msg) => {\n      let { topic, event, payload, ref, join_ref } = msg;\n      if (ref && ref === this.pendingHeartbeatRef) {\n        const latency = this.heartbeatSentAt ? Date.now() - this.heartbeatSentAt : void 0;\n        this.clearHeartbeats();\n        try {\n          this.heartbeatCallback(payload.status === \"ok\" ? \"ok\" : \"error\", latency);\n        } catch (e) {\n          this.log(\"error\", \"error in heartbeat callback\", e);\n        }\n        this.pendingHeartbeatRef = null;\n        this.heartbeatSentAt = null;\n        if (this.autoSendHeartbeat) {\n          this.heartbeatTimer = setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs);\n        }\n      }\n      if (this.hasLogger()) this.log(\"receive\", `${payload.status || \"\"} ${topic} ${event} ${ref && \"(\" + ref + \")\" || \"\"}`.trim(), payload);\n      for (let i = 0; i < this.channels.length; i++) {\n        const channel = this.channels[i];\n        if (!channel.isMember(topic, event, payload, join_ref)) {\n          continue;\n        }\n        channel.trigger(event, payload, ref, join_ref);\n      }\n      this.triggerStateCallbacks(\"message\", msg);\n    });\n  }\n  /**\n   * @private\n   * @template {keyof SocketStateChangeCallbacks} K\n   * @param {K} event\n   * @param {...Parameters<SocketStateChangeCallbacks[K][number][1]>} args\n   * @returns {void}\n   */\n  triggerStateCallbacks(event, ...args) {\n    try {\n      this.stateChangeCallbacks[event].forEach(([_, callback]) => {\n        try {\n          callback(...args);\n        } catch (e) {\n          this.log(\"error\", `error in ${event} callback`, e);\n        }\n      });\n    } catch (e) {\n      this.log(\"error\", `error triggering ${event} callbacks`, e);\n    }\n  }\n  leaveOpenTopic(topic) {\n    let dupChannel = this.channels.find((c) => c.topic === topic && (c.isJoined() || c.isJoining()));\n    if (dupChannel) {\n      if (this.hasLogger()) this.log(\"transport\", `leaving duplicate topic \"${topic}\"`);\n      dupChannel.leave();\n    }\n  }\n};\nexport {\n  Channel,\n  LongPoll,\n  Presence,\n  Push,\n  serializer_default as Serializer,\n  Socket,\n  Timer\n};\n//# sourceMappingURL=phoenix.mjs.map\n","import { Presence } from '@supabase/phoenix';\nexport default class PresenceAdapter {\n    constructor(channel, opts) {\n        const phoenixOptions = phoenixPresenceOptions(opts);\n        this.presence = new Presence(channel.getChannel(), phoenixOptions);\n        this.presence.onJoin((key, currentPresence, newPresence) => {\n            const onJoinPayload = PresenceAdapter.onJoinPayload(key, currentPresence, newPresence);\n            channel.getChannel().trigger('presence', onJoinPayload);\n        });\n        this.presence.onLeave((key, currentPresence, leftPresence) => {\n            const onLeavePayload = PresenceAdapter.onLeavePayload(key, currentPresence, leftPresence);\n            channel.getChannel().trigger('presence', onLeavePayload);\n        });\n        this.presence.onSync(() => {\n            channel.getChannel().trigger('presence', { event: 'sync' });\n        });\n    }\n    get state() {\n        return PresenceAdapter.transformState(this.presence.state);\n    }\n    /**\n     * @private\n     * Remove 'metas' key\n     * Change 'phx_ref' to 'presence_ref'\n     * Remove 'phx_ref' and 'phx_ref_prev'\n     *\n     * @example Transform state\n     * // returns {\n     *  abc123: [\n     *    { presence_ref: '2', user_id: 1 },\n     *    { presence_ref: '3', user_id: 2 }\n     *  ]\n     * }\n     * RealtimePresence.transformState({\n     *  abc123: {\n     *    metas: [\n     *      { phx_ref: '2', phx_ref_prev: '1' user_id: 1 },\n     *      { phx_ref: '3', user_id: 2 }\n     *    ]\n     *  }\n     * })\n     *\n     */\n    static transformState(state) {\n        state = cloneState(state);\n        return Object.getOwnPropertyNames(state).reduce((newState, key) => {\n            const presences = state[key];\n            newState[key] = transformState(presences);\n            return newState;\n        }, {});\n    }\n    static onJoinPayload(key, currentPresence, newPresence) {\n        const currentPresences = parseCurrentPresences(currentPresence);\n        const newPresences = transformState(newPresence);\n        return {\n            event: 'join',\n            key,\n            currentPresences,\n            newPresences,\n        };\n    }\n    static onLeavePayload(key, currentPresence, leftPresence) {\n        const currentPresences = parseCurrentPresences(currentPresence);\n        const leftPresences = transformState(leftPresence);\n        return {\n            event: 'leave',\n            key,\n            currentPresences,\n            leftPresences,\n        };\n    }\n}\nfunction transformState(presences) {\n    return presences.metas.map((presence) => {\n        // Object spread compiles to Object.assign for ES2017, which treats __proto__ as a setter.\n        const descriptors = Object.getOwnPropertyDescriptors(presence);\n        const transformedPresence = Object.defineProperties({}, descriptors);\n        transformedPresence['presence_ref'] = transformedPresence['phx_ref'];\n        delete transformedPresence['phx_ref'];\n        delete transformedPresence['phx_ref_prev'];\n        return transformedPresence;\n    });\n}\nfunction cloneState(state) {\n    return JSON.parse(JSON.stringify(state));\n}\nfunction phoenixPresenceOptions(opts) {\n    return (opts === null || opts === void 0 ? void 0 : opts.events) && { events: opts.events };\n}\nfunction parseCurrentPresences(currentPresences) {\n    return (currentPresences === null || currentPresences === void 0 ? void 0 : currentPresences.metas) ? transformState(currentPresences) : [];\n}\n//# sourceMappingURL=presenceAdapter.js.map","/*\n  This file draws heavily from https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/assets/js/phoenix/presence.js\n  License: https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/LICENSE.md\n*/\nimport PresenceAdapter from './phoenix/presenceAdapter';\nexport var REALTIME_PRESENCE_LISTEN_EVENTS;\n(function (REALTIME_PRESENCE_LISTEN_EVENTS) {\n    REALTIME_PRESENCE_LISTEN_EVENTS[\"SYNC\"] = \"sync\";\n    REALTIME_PRESENCE_LISTEN_EVENTS[\"JOIN\"] = \"join\";\n    REALTIME_PRESENCE_LISTEN_EVENTS[\"LEAVE\"] = \"leave\";\n})(REALTIME_PRESENCE_LISTEN_EVENTS || (REALTIME_PRESENCE_LISTEN_EVENTS = {}));\nexport default class RealtimePresence {\n    get state() {\n        return this.presenceAdapter.state;\n    }\n    /**\n     * Creates a Presence helper that keeps the local presence state in sync with the server.\n     *\n     * @param channel - The realtime channel to bind to.\n     * @param opts - Optional custom event names, e.g. `{ events: { state: 'state', diff: 'diff' } }`.\n     *\n     * @category Realtime\n     *\n     * @example Example for a presence channel\n     * ```ts\n     * const presence = new RealtimePresence(channel)\n     *\n     * channel.on('presence', ({ event, key }) => {\n     *   console.log(`Presence ${event} on ${key}`)\n     * })\n     * ```\n     */\n    constructor(channel, opts) {\n        this.channel = channel;\n        this.presenceAdapter = new PresenceAdapter(this.channel.channelAdapter, opts);\n    }\n}\n//# sourceMappingURL=RealtimePresence.js.map","/**\n * Normalize the various shapes a channel error reason can take into a real `Error`.\n *\n * Transport-level channel errors arrive as a `CloseEvent`, a transport `Event`, an `Error`,\n * a string, or `undefined` depending on which path in the underlying socket fired. Server-reply\n * errors arrive as a payload object. This helper produces a consistent `Error` for every case\n * and preserves the original via `cause` so callers can still inspect the raw event.\n */\nexport function normalizeChannelError(reason) {\n    if (reason instanceof Error) {\n        return reason;\n    }\n    if (typeof reason === 'string') {\n        return new Error(reason);\n    }\n    if (reason && typeof reason === 'object') {\n        const obj = reason;\n        if (typeof obj.code === 'number') {\n            const detail = typeof obj.reason === 'string' && obj.reason ? ` (${obj.reason})` : '';\n            return new Error(`socket closed: ${obj.code}${detail}`, { cause: reason });\n        }\n        return new Error('channel error: transport failure', { cause: reason });\n    }\n    return new Error('channel error: connection lost');\n}\n//# sourceMappingURL=normalizeChannelError.js.map","import { CHANNEL_STATES, MAX_PUSH_BUFFER_SIZE } from '../lib/constants';\nexport default class ChannelAdapter {\n    constructor(socket, topic, params) {\n        const phoenixParams = phoenixChannelParams(params);\n        this.channel = socket.getSocket().channel(topic, phoenixParams);\n        this.socket = socket;\n    }\n    get state() {\n        return this.channel.state;\n    }\n    set state(state) {\n        this.channel.state = state;\n    }\n    get joinedOnce() {\n        return this.channel.joinedOnce;\n    }\n    get joinPush() {\n        return this.channel.joinPush;\n    }\n    get rejoinTimer() {\n        return this.channel.rejoinTimer;\n    }\n    on(event, callback) {\n        return this.channel.on(event, callback);\n    }\n    off(event, refNumber) {\n        this.channel.off(event, refNumber);\n    }\n    subscribe(timeout) {\n        return this.channel.join(timeout);\n    }\n    unsubscribe(timeout) {\n        return this.channel.leave(timeout);\n    }\n    teardown() {\n        this.channel.teardown();\n    }\n    onClose(callback) {\n        this.channel.onClose(callback);\n    }\n    onError(callback) {\n        return this.channel.onError(callback);\n    }\n    push(event, payload, timeout) {\n        let push;\n        try {\n            push = this.channel.push(event, payload, timeout);\n        }\n        catch (error) {\n            throw new Error(`tried to push '${event}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`);\n        }\n        if (this.channel.pushBuffer.length > MAX_PUSH_BUFFER_SIZE) {\n            const removedPush = this.channel.pushBuffer.shift();\n            removedPush.cancelTimeout();\n            this.socket.log('channel', `discarded push due to buffer overflow: ${removedPush.event}`, removedPush.payload());\n        }\n        return push;\n    }\n    updateJoinPayload(payload) {\n        const oldPayload = this.channel.joinPush.payload();\n        this.channel.joinPush.payload = () => (Object.assign(Object.assign({}, oldPayload), payload));\n    }\n    canPush() {\n        return this.socket.isConnected() && this.state === CHANNEL_STATES.joined;\n    }\n    isJoined() {\n        return this.state === CHANNEL_STATES.joined;\n    }\n    isJoining() {\n        return this.state === CHANNEL_STATES.joining;\n    }\n    isClosed() {\n        return this.state === CHANNEL_STATES.closed;\n    }\n    isLeaving() {\n        return this.state === CHANNEL_STATES.leaving;\n    }\n    updateFilterBindings(filterBindings) {\n        this.channel.filterBindings = filterBindings;\n    }\n    updatePayloadTransform(callback) {\n        this.channel.onMessage = callback;\n    }\n    /**\n     * @internal\n     */\n    getChannel() {\n        return this.channel;\n    }\n}\nfunction phoenixChannelParams(options) {\n    return {\n        config: Object.assign({\n            broadcast: { ack: false, self: false },\n            presence: { key: '', enabled: false },\n            private: false,\n        }, options.config),\n    };\n}\n//# sourceMappingURL=channelAdapter.js.map","// Reserved characters that force PostgREST-style quoting: `[,()]` (which the\n// server reads as condition/list delimiters) plus `\"`/`\\` (escaped inside quotes).\nconst PostgrestReservedCharsRegexp = /[,()\"\\\\]/;\nconst needsQuoting = (value) => PostgrestReservedCharsRegexp.test(value) || value !== value.trim();\nconst quote = (value) => `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`;\nconst serializeScalar = (value) => {\n    const serialized = value === null ? 'null' : String(value);\n    return needsQuoting(serialized) ? quote(serialized) : serialized;\n};\nconst serializeIsValue = (value) => value === null ? 'null' : String(value);\n// Builds the `operator.value` portion of a filter (everything after `column=`).\nconst serialize = (operator, value) => {\n    if (operator === 'in') {\n        const values = Array.isArray(value) ? value : [value];\n        if (values.length === 0) {\n            throw new Error('Realtime `in` filter requires at least one value.');\n        }\n        const items = Array.from(new Set(values))\n            .map((v) => serializeScalar(v))\n            .join(',');\n        return `in.(${items})`;\n    }\n    if (operator === 'is') {\n        return `is.${serializeIsValue(value)}`;\n    }\n    return `${operator}.${serializeScalar(value)}`;\n};\n/**\n * Fluent builder for Postgres Changes `filter` strings.\n *\n * Each method appends a single `column=operator.value` condition. Multiple\n * conditions are combined with commas, which the Realtime server applies as an\n * `AND`. Pass an instance straight to `channel.on('postgres_changes', …)` — the\n * SDK serializes it to a string automatically — or call {@link build} to obtain\n * the string yourself.\n *\n * The builder mirrors the `postgrest-js` filter API (`eq`, `neq`, `in`, `like`,\n * `not`, …) for the operators that Realtime supports. Values containing reserved\n * characters (`,`, `(`, `)`, `\"`, `\\`) — or surrounding whitespace — are\n * automatically double-quoted and escaped the same way PostgREST does, so they\n * survive the server's filter parser; all other values are sent verbatim.\n *\n * The filter is snapshotted when passed to `channel.on(...)`; mutating the\n * builder afterwards does not affect an existing subscription. An empty builder\n * serializes to `''`, which the server treats as \"no filter\".\n *\n * @example\n * channel.on('postgres_changes', {\n *   event: '*',\n *   schema: 'public',\n *   table: 'users',\n *   filter: postgresChangesFilter().eq('id', 1).lt('age', 30), // → 'id=eq.1,age=lt.30'\n * }, (payload) => { ... })\n */\nexport class RealtimePostgresFilterBuilder {\n    constructor() {\n        this.filters = [];\n    }\n    add(column, operator, value, negate = false) {\n        const prefix = negate ? 'not.' : '';\n        this.filters.push(`${column}=${prefix}${serialize(operator, value)}`);\n        return this;\n    }\n    /** Match rows where `column` equals `value` (`column=eq.value`). */\n    eq(column, value) {\n        return this.add(column, 'eq', value);\n    }\n    /** Match rows where `column` does not equal `value` (`column=neq.value`). */\n    neq(column, value) {\n        return this.add(column, 'neq', value);\n    }\n    /** Match rows where `column` is greater than `value` (`column=gt.value`). */\n    gt(column, value) {\n        return this.add(column, 'gt', value);\n    }\n    /** Match rows where `column` is greater than or equal to `value` (`column=gte.value`). */\n    gte(column, value) {\n        return this.add(column, 'gte', value);\n    }\n    /** Match rows where `column` is less than `value` (`column=lt.value`). */\n    lt(column, value) {\n        return this.add(column, 'lt', value);\n    }\n    /** Match rows where `column` is less than or equal to `value` (`column=lte.value`). */\n    lte(column, value) {\n        return this.add(column, 'lte', value);\n    }\n    /**\n     * Match rows where `column` is one of `values` (`column=in.(a,b,c)`).\n     * Requires at least one value; duplicates are removed. An element containing a\n     * reserved character is double-quoted (`in.(\"a,b\",c)`), so commas inside an\n     * element are preserved. `null` is intentionally not accepted (`IN (null)`\n     * never matches in SQL) — use `is`/`not('col','is',null)` for null checks.\n     */\n    in(column, values) {\n        return this.add(column, 'in', values);\n    }\n    /** Match rows where `column` matches the case-sensitive `pattern` (`column=like.pattern`). */\n    like(column, pattern) {\n        return this.add(column, 'like', pattern);\n    }\n    /** Match rows where `column` matches the case-insensitive `pattern` (`column=ilike.pattern`). */\n    ilike(column, pattern) {\n        return this.add(column, 'ilike', pattern);\n    }\n    /** Match rows where `column` matches the POSIX regex `pattern` (`column=match.pattern`). */\n    match(column, pattern) {\n        return this.add(column, 'match', pattern);\n    }\n    /** Match rows where `column` matches the case-insensitive POSIX regex `pattern` (`column=imatch.pattern`). */\n    imatch(column, pattern) {\n        return this.add(column, 'imatch', pattern);\n    }\n    /**\n     * Match rows where `column` `IS` the given value (`column=is.null`).\n     * Accepts `null`, a boolean, or the keywords `'null' | 'true' | 'false' | 'unknown'`.\n     */\n    is(column, value) {\n        return this.add(column, 'is', value);\n    }\n    /** Match rows where `column` is distinct from `value` (`column=isdistinct.value`). NULL-safe inequality. */\n    isDistinct(column, value) {\n        return this.add(column, 'isdistinct', value);\n    }\n    not(column, operator, value) {\n        return this.add(column, operator, value, true);\n    }\n    /**\n     * Serialize all conditions into the comma-separated (AND) filter string.\n     *\n     * Conditions are joined by commas, which the server applies as `AND`. A scalar\n     * value (or single `in` element) that contains a reserved character — `,`,\n     * `(`, `)`, `\"`, `\\` — or surrounding whitespace is double-quoted and escaped\n     * the way PostgREST does, so commas inside a value are preserved rather than\n     * read as a condition boundary.\n     */\n    build() {\n        return this.filters.join(',');\n    }\n    /** Alias for {@link build}; lets the builder be used wherever a string is expected. */\n    toString() {\n        return this.build();\n    }\n}\n/**\n * Create a {@link RealtimePostgresFilterBuilder} for composing a Postgres\n * Changes `filter`. Conditions are combined with `AND`.\n *\n * @example\n * import { postgresChangesFilter } from '@supabase/realtime-js'\n *\n * channel.on('postgres_changes', {\n *   event: 'UPDATE',\n *   schema: 'public',\n *   table: 'orders',\n *   filter: postgresChangesFilter().gt('amount', 100).eq('status', 'open'),\n * }, (payload) => { ... })\n */\nexport const postgresChangesFilter = () => new RealtimePostgresFilterBuilder();\n//# sourceMappingURL=RealtimePostgresFilterBuilder.js.map","import { CHANNEL_EVENTS, CHANNEL_STATES } from './lib/constants';\nimport RealtimePresence from './RealtimePresence';\nimport * as Transformers from './lib/transformers';\nimport { httpEndpointURL } from './lib/transformers';\nimport { normalizeChannelError } from './lib/normalizeChannelError';\nimport ChannelAdapter from './phoenix/channelAdapter';\nimport { RealtimePostgresFilterBuilder } from './RealtimePostgresFilterBuilder';\nexport { RealtimePostgresFilterBuilder, postgresChangesFilter, } from './RealtimePostgresFilterBuilder';\nexport var REALTIME_POSTGRES_CHANGES_LISTEN_EVENT;\n(function (REALTIME_POSTGRES_CHANGES_LISTEN_EVENT) {\n    REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"ALL\"] = \"*\";\n    REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"INSERT\"] = \"INSERT\";\n    REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"UPDATE\"] = \"UPDATE\";\n    REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"DELETE\"] = \"DELETE\";\n})(REALTIME_POSTGRES_CHANGES_LISTEN_EVENT || (REALTIME_POSTGRES_CHANGES_LISTEN_EVENT = {}));\nexport var REALTIME_LISTEN_TYPES;\n(function (REALTIME_LISTEN_TYPES) {\n    REALTIME_LISTEN_TYPES[\"BROADCAST\"] = \"broadcast\";\n    REALTIME_LISTEN_TYPES[\"PRESENCE\"] = \"presence\";\n    REALTIME_LISTEN_TYPES[\"POSTGRES_CHANGES\"] = \"postgres_changes\";\n    REALTIME_LISTEN_TYPES[\"SYSTEM\"] = \"system\";\n})(REALTIME_LISTEN_TYPES || (REALTIME_LISTEN_TYPES = {}));\nexport var REALTIME_SUBSCRIBE_STATES;\n(function (REALTIME_SUBSCRIBE_STATES) {\n    REALTIME_SUBSCRIBE_STATES[\"SUBSCRIBED\"] = \"SUBSCRIBED\";\n    REALTIME_SUBSCRIBE_STATES[\"TIMED_OUT\"] = \"TIMED_OUT\";\n    REALTIME_SUBSCRIBE_STATES[\"CLOSED\"] = \"CLOSED\";\n    REALTIME_SUBSCRIBE_STATES[\"CHANNEL_ERROR\"] = \"CHANNEL_ERROR\";\n})(REALTIME_SUBSCRIBE_STATES || (REALTIME_SUBSCRIBE_STATES = {}));\nexport const REALTIME_CHANNEL_STATES = CHANNEL_STATES;\n/** A channel is the basic building block of Realtime\n * and narrows the scope of data flow to subscribed clients.\n * You can think of a channel as a chatroom where participants are able to see who's online\n * and send and receive messages.\n */\nexport default class RealtimeChannel {\n    get state() {\n        return this.channelAdapter.state;\n    }\n    set state(state) {\n        this.channelAdapter.state = state;\n    }\n    get joinedOnce() {\n        return this.channelAdapter.joinedOnce;\n    }\n    get timeout() {\n        return this.socket.timeout;\n    }\n    get joinPush() {\n        return this.channelAdapter.joinPush;\n    }\n    get rejoinTimer() {\n        return this.channelAdapter.rejoinTimer;\n    }\n    /**\n     * Creates a channel that can broadcast messages, sync presence, and listen to Postgres changes.\n     *\n     * The topic determines which realtime stream you are subscribing to. Config options let you\n     * enable acknowledgement for broadcasts, presence tracking, or private channels.\n     *\n     * @category Realtime\n     *\n     * @example Using supabase-js (recommended)\n     * ```ts\n     * import { createClient } from '@supabase/supabase-js'\n     *\n     * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n     * const channel = supabase.channel('room1')\n     * channel\n     *   .on('broadcast', { event: 'cursor-pos' }, (payload) => console.log(payload))\n     *   .subscribe()\n     * ```\n     *\n     * @example Standalone import for bundle-sensitive environments\n     * ```ts\n     * import RealtimeClient from '@supabase/realtime-js'\n     *\n     * const client = new RealtimeClient('https://xyzcompany.supabase.co/realtime/v1', {\n     *   params: { apikey: 'your-publishable-key' },\n     * })\n     * const channel = new RealtimeChannel('realtime:public:messages', { config: {} }, client)\n     * ```\n     */\n    constructor(\n    /** Topic name can be any string. */\n    topic, params = { config: {} }, socket) {\n        var _a, _b;\n        this.topic = topic;\n        this.params = params;\n        this.socket = socket;\n        this.bindings = {};\n        this.subTopic = topic.replace(/^realtime:/i, '');\n        this.params.config = Object.assign({\n            broadcast: { ack: false, self: false },\n            presence: { key: '', enabled: false },\n            private: false,\n        }, params.config);\n        this.channelAdapter = new ChannelAdapter(this.socket.socketAdapter, topic, this.params);\n        this.presence = new RealtimePresence(this);\n        this._onClose(() => {\n            this.socket._remove(this);\n        });\n        this._updateFilterTransform();\n        this.broadcastEndpointURL = httpEndpointURL(this.socket.socketAdapter.endPointURL());\n        this.private = this.params.config.private || false;\n        if (!this.private && ((_b = (_a = this.params.config) === null || _a === void 0 ? void 0 : _a.broadcast) === null || _b === void 0 ? void 0 : _b.replay)) {\n            throw new Error(`tried to use replay on public channel '${this.topic}'. It must be a private channel.`);\n        }\n    }\n    /**\n     * Subscribe registers your client with the server.\n     *\n     * The optional `callback` receives a `status` and, on failure, an `err` argument.\n     * Log the full `err` so its `cause`, `name`, and any structured fields aren't hidden\n     * behind `err.message`.\n     *\n     * @category Realtime\n     *\n     * @example Handling errors\n     * ```js\n     * supabase.channel('room1').subscribe((status, err) => {\n     *   if (status === 'CHANNEL_ERROR' || status === 'TIMED_OUT') {\n     *     // Log the full error: its `cause` often holds the underlying reason.\n     *     console.error(status, err)\n     *   }\n     * })\n     * ```\n     */\n    subscribe(callback, timeout = this.timeout) {\n        var _a, _b, _c;\n        if (!this.socket.isConnected()) {\n            this.socket.connect();\n        }\n        if (this.channelAdapter.isClosed()) {\n            const { config: { broadcast, presence, private: isPrivate }, } = this.params;\n            const postgres_changes = (_b = (_a = this.bindings.postgres_changes) === null || _a === void 0 ? void 0 : _a.map((r) => r.filter)) !== null && _b !== void 0 ? _b : [];\n            const presence_enabled = (!!this.bindings[REALTIME_LISTEN_TYPES.PRESENCE] &&\n                this.bindings[REALTIME_LISTEN_TYPES.PRESENCE].length > 0) ||\n                ((_c = this.params.config.presence) === null || _c === void 0 ? void 0 : _c.enabled) === true;\n            const accessTokenPayload = {};\n            const config = {\n                broadcast,\n                presence: Object.assign(Object.assign({}, presence), { enabled: presence_enabled }),\n                postgres_changes,\n                private: isPrivate,\n            };\n            if (this.socket.accessTokenValue) {\n                accessTokenPayload.access_token = this.socket.accessTokenValue;\n            }\n            this._onError((reason) => {\n                callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, normalizeChannelError(reason));\n            });\n            this._onClose(() => callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CLOSED));\n            this.updateJoinPayload(Object.assign({ config }, accessTokenPayload));\n            this._updateFilterMessage();\n            this.channelAdapter\n                .subscribe(timeout)\n                .receive('ok', async ({ postgres_changes }) => {\n                // Only refresh auth if using callback-based tokens\n                if (!this.socket._isManualToken()) {\n                    this.socket.setAuth();\n                }\n                if (postgres_changes === undefined) {\n                    callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED);\n                    return;\n                }\n                this._updatePostgresBindings(postgres_changes, callback);\n            })\n                .receive('error', (error) => {\n                this.state = CHANNEL_STATES.errored;\n                const message = Object.values(error).join(', ') || 'error';\n                callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error(message, { cause: error }));\n            })\n                .receive('timeout', () => {\n                callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.TIMED_OUT);\n            });\n        }\n        return this;\n    }\n    _updatePostgresBindings(postgres_changes, callback) {\n        var _a;\n        const clientPostgresBindings = this.bindings.postgres_changes;\n        const bindingsLen = (_a = clientPostgresBindings === null || clientPostgresBindings === void 0 ? void 0 : clientPostgresBindings.length) !== null && _a !== void 0 ? _a : 0;\n        const newPostgresBindings = [];\n        for (let i = 0; i < bindingsLen; i++) {\n            const clientPostgresBinding = clientPostgresBindings[i];\n            const { filter: { event, schema, table, filter }, } = clientPostgresBinding;\n            const serverPostgresFilter = postgres_changes && postgres_changes[i];\n            if (serverPostgresFilter &&\n                serverPostgresFilter.event === event &&\n                RealtimeChannel.isFilterValueEqual(serverPostgresFilter.schema, schema) &&\n                RealtimeChannel.isFilterValueEqual(serverPostgresFilter.table, table) &&\n                RealtimeChannel.isFilterValueEqual(serverPostgresFilter.filter, filter)) {\n                newPostgresBindings.push(Object.assign(Object.assign({}, clientPostgresBinding), { id: serverPostgresFilter.id }));\n            }\n            else {\n                this.unsubscribe();\n                this.state = CHANNEL_STATES.errored;\n                callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error('mismatch between server and client bindings for postgres changes'));\n                return;\n            }\n        }\n        this.bindings.postgres_changes = newPostgresBindings;\n        if (this.state != CHANNEL_STATES.errored && callback) {\n            callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED);\n        }\n    }\n    /**\n     * Returns the current presence state for this channel.\n     *\n     * The shape is a map keyed by presence key (for example a user id) where each entry contains the\n     * tracked metadata for that user.\n     *\n     * @category Realtime\n     */\n    presenceState() {\n        return this.presence.state;\n    }\n    /**\n     * Sends the supplied payload to the presence tracker so other subscribers can see that this\n     * client is online. Use `untrack` to stop broadcasting presence for the same key.\n     *\n     * Tracking makes this client visible to other subscribers immediately, regardless of this\n     * channel's `config.presence.enabled` setting or whether it has a `presence` listener — that\n     * flag only affects whether *this* client receives presence updates from others (and, on\n     * RLS-protected channels, whether it's authorized to do so).\n     *\n     * @category Realtime\n     */\n    async track(payload, opts = {}) {\n        return await this.send({\n            type: 'presence',\n            event: 'track',\n            payload,\n        }, opts);\n    }\n    /**\n     * Removes the current presence state for this client.\n     *\n     * @category Realtime\n     */\n    async untrack(opts = {}) {\n        return await this.send({\n            type: 'presence',\n            event: 'untrack',\n        }, opts);\n    }\n    /**\n     * Listen to realtime events on this channel.\n     * @category Realtime\n     *\n     * @remarks\n     * - By default, Broadcast and Presence are enabled for all projects.\n     * - By default, listening to database changes is disabled for new projects due to database performance and security concerns. You can turn it on by managing Realtime's [replication](/docs/guides/api#realtime-api-overview).\n     * - You can receive the \"previous\" data for updates and deletes by setting the table's `REPLICA IDENTITY` to `FULL` (e.g., `ALTER TABLE your_table REPLICA IDENTITY FULL;`).\n     * - Row level security is not applied to delete statements. When RLS is enabled and replica identity is set to full, only the primary key is sent to clients.\n     *\n     * @example Listen to broadcast messages\n     * ```js\n     * const channel = supabase.channel(\"room1\")\n     *\n     * channel.on(\"broadcast\", { event: \"cursor-pos\" }, (payload) => {\n     *   console.log(\"Cursor position received!\", payload);\n     * }).subscribe((status) => {\n     *   if (status === \"SUBSCRIBED\") {\n     *     channel.send({\n     *       type: \"broadcast\",\n     *       event: \"cursor-pos\",\n     *       payload: { x: Math.random(), y: Math.random() },\n     *     });\n     *   }\n     * });\n     * ```\n     *\n     * @example Listen to presence sync\n     * ```js\n     * const channel = supabase.channel('room1')\n     * channel\n     *   .on('presence', { event: 'sync' }, () => {\n     *     console.log('Synced presence state: ', channel.presenceState())\n     *   })\n     *   .subscribe(async (status) => {\n     *     if (status === 'SUBSCRIBED') {\n     *       await channel.track({ online_at: new Date().toISOString() })\n     *     }\n     *   })\n     * ```\n     *\n     * @example Listen to presence join\n     * ```js\n     * const channel = supabase.channel('room1')\n     * channel\n     *   .on('presence', { event: 'join' }, ({ newPresences }) => {\n     *     console.log('Newly joined presences: ', newPresences)\n     *   })\n     *   .subscribe(async (status) => {\n     *     if (status === 'SUBSCRIBED') {\n     *       await channel.track({ online_at: new Date().toISOString() })\n     *     }\n     *   })\n     * ```\n     *\n     * @example Listen to presence leave\n     * ```js\n     * const channel = supabase.channel('room1')\n     * channel\n     *   .on('presence', { event: 'leave' }, ({ leftPresences }) => {\n     *     console.log('Newly left presences: ', leftPresences)\n     *   })\n     *   .subscribe(async (status) => {\n     *     if (status === 'SUBSCRIBED') {\n     *       await channel.track({ online_at: new Date().toISOString() })\n     *       await channel.untrack()\n     *     }\n     *   })\n     * ```\n     *\n     * Registering the same `postgres_changes` filter more than once on a channel is a no-op: the\n     * duplicate is ignored and an error is logged, since the server only ever creates one\n     * subscription per distinct filter.\n     *\n     * @example Listen to all database changes\n     * ```js\n     * supabase\n     *   .channel('room1')\n     *   .on('postgres_changes', { event: '*', schema: '*' }, payload => {\n     *     console.log('Change received!', payload)\n     *   })\n     *   .subscribe()\n     * ```\n     *\n     * @example Listen to a specific table\n     * ```js\n     * supabase\n     *   .channel('room1')\n     *   .on('postgres_changes', { event: '*', schema: 'public', table: 'countries' }, payload => {\n     *     console.log('Change received!', payload)\n     *   })\n     *   .subscribe()\n     * ```\n     *\n     * @example Listen to inserts\n     * ```js\n     * supabase\n     *   .channel('room1')\n     *   .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'countries' }, payload => {\n     *     console.log('Change received!', payload)\n     *   })\n     *   .subscribe()\n     * ```\n     *\n     * @exampleDescription Listen to updates\n     * By default, Supabase will send only the updated record. If you want to receive the previous values as well you can\n     * enable full replication for the table you are listening to:\n     *\n     * ```sql\n     * alter table \"your_table\" replica identity full;\n     * ```\n     *\n     * @example Listen to updates\n     * ```js\n     * supabase\n     *   .channel('room1')\n     *   .on('postgres_changes', { event: 'UPDATE', schema: 'public', table: 'countries' }, payload => {\n     *     console.log('Change received!', payload)\n     *   })\n     *   .subscribe()\n     * ```\n     *\n     * @exampleDescription Listen to deletes\n     * By default, Supabase does not send deleted records. If you want to receive the deleted record you can\n     * enable full replication for the table you are listening to:\n     *\n     * ```sql\n     * alter table \"your_table\" replica identity full;\n     * ```\n     *\n     * @example Listen to deletes\n     * ```js\n     * supabase\n     *   .channel('room1')\n     *   .on('postgres_changes', { event: 'DELETE', schema: 'public', table: 'countries' }, payload => {\n     *     console.log('Change received!', payload)\n     *   })\n     *   .subscribe()\n     * ```\n     *\n     * @exampleDescription Listen to multiple events\n     * You can chain listeners if you want to listen to multiple events for each table.\n     *\n     * @example Listen to multiple events\n     * ```js\n     * supabase\n     *   .channel('room1')\n     *   .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'countries' }, handleRecordInserted)\n     *   .on('postgres_changes', { event: 'DELETE', schema: 'public', table: 'countries' }, handleRecordDeleted)\n     *   .subscribe()\n     * ```\n     *\n     * @exampleDescription Listen to row level changes\n     * You can listen to individual rows using the format `{table}:{col}=eq.{val}` - where `{col}` is the column name, and `{val}` is the value which you want to match.\n     *\n     * @example Listen to row level changes\n     * ```js\n     * supabase\n     *   .channel('room1')\n     *   .on('postgres_changes', { event: 'UPDATE', schema: 'public', table: 'countries', filter: 'id=eq.200' }, handleRecordUpdated)\n     *   .subscribe()\n     * ```\n     */\n    on(type, filter, callback) {\n        const stateCheck = this.channelAdapter.isJoined() || this.channelAdapter.isJoining();\n        const typeCheck = type === REALTIME_LISTEN_TYPES.PRESENCE || type === REALTIME_LISTEN_TYPES.POSTGRES_CHANGES;\n        if (stateCheck && typeCheck) {\n            this.socket.log('channel', `cannot add \\`${type}\\` callbacks for ${this.topic} after \\`subscribe()\\`.`);\n            throw new Error(`cannot add \\`${type}\\` callbacks for ${this.topic} after \\`subscribe()\\`.`);\n        }\n        return this._on(type, filter, callback);\n    }\n    /**\n     * Sends a broadcast message explicitly via REST API.\n     *\n     * This method always uses the REST API endpoint regardless of WebSocket connection state.\n     * Useful when you want to guarantee REST delivery or when gradually migrating from implicit REST fallback.\n     *\n     * Payloads that are `ArrayBuffer` or `ArrayBufferView` (e.g. `Uint8Array`) are sent as\n     * `application/octet-stream`; all other payloads are JSON-encoded.\n     *\n     * @param event The name of the broadcast event\n     * @param payload Payload to be sent (required)\n     * @param opts Options including timeout\n     * @returns Promise resolving to object with success status, and error details if failed\n     *\n     * @category Realtime\n     */\n    async httpSend(event, payload, opts = {}) {\n        var _a;\n        if (payload === undefined || payload === null) {\n            return Promise.reject(new Error('Payload is required for httpSend()'));\n        }\n        const isBinary = payload instanceof ArrayBuffer || ArrayBuffer.isView(payload);\n        const headers = {\n            apikey: this.socket.apiKey ? this.socket.apiKey : '',\n            'Content-Type': isBinary ? 'application/octet-stream' : 'application/json',\n        };\n        if (this.socket.accessTokenValue) {\n            headers['Authorization'] = `Bearer ${this.socket.accessTokenValue}`;\n        }\n        const url = new URL(this.broadcastEndpointURL);\n        url.pathname += `/${encodeURIComponent(this.subTopic)}/events/${encodeURIComponent(event)}`;\n        if (this.private) {\n            url.searchParams.set('private', 'true');\n        }\n        const options = {\n            method: 'POST',\n            headers,\n            body: isBinary ? payload : JSON.stringify(payload),\n        };\n        const response = await this._fetchWithTimeout(url.toString(), options, (_a = opts.timeout) !== null && _a !== void 0 ? _a : this.timeout);\n        if (response.status === 202) {\n            return { success: true };\n        }\n        if (response.status === 404) {\n            return Promise.reject(new Error('httpSend() requires Realtime server v2.97.0 or newer; the endpoint returned 404. ' +\n                'Update your Supabase CLI to a recent version, or upgrade the Realtime server in your self-hosted setup. ' +\n                'See https://github.com/supabase/supabase-js/blob/master/packages/core/realtime-js/migrations/httpsend-server-version.md'));\n        }\n        let errorMessage = response.statusText;\n        try {\n            const errorBody = await response.json();\n            errorMessage = errorBody.error || errorBody.message || errorMessage;\n        }\n        catch (_b) { }\n        return Promise.reject(new Error(errorMessage));\n    }\n    /**\n     * Sends a message into the channel.\n     *\n     * @param args Arguments to send to channel\n     * @param args.type The type of event to send\n     * @param args.event The name of the event being sent\n     * @param args.payload Payload to be sent\n     * @param opts Options to be used during the send process\n     *\n     * @category Realtime\n     *\n     * @remarks\n     * - When using REST you don't need to subscribe to the channel\n     * - REST calls are only available from 2.37.0 onwards\n     * - If you create a channel only to send a REST broadcast, remove it from\n     *   the client when the send completes\n     *\n     * @example Send a message via websocket\n     * ```js\n     * const channel = supabase.channel('room1')\n     *\n     * channel.subscribe((status) => {\n     *   if (status === 'SUBSCRIBED') {\n     *     channel.send({\n     *       type: 'broadcast',\n     *       event: 'cursor-pos',\n     *       payload: { x: Math.random(), y: Math.random() },\n     *     })\n     *   }\n     * })\n     * ```\n     *\n     * @exampleResponse Send a message via websocket\n     * ```js\n     * ok | timed out | error\n     * ```\n     *\n     * @example Send a message via REST\n     * ```js\n     * const channel = supabase.channel('room1')\n     *\n     * try {\n     *   await channel.httpSend('cursor-pos', { x: Math.random(), y: Math.random() })\n     * } finally {\n     *   await supabase.removeChannel(channel)\n     * }\n     * ```\n     */\n    async send(args, opts = {}) {\n        var _a, _b;\n        if (!this.channelAdapter.canPush() && args.type === 'broadcast') {\n            console.warn('Realtime send() is automatically falling back to REST API. ' +\n                'This behavior will be deprecated in the future. ' +\n                'Please use httpSend() explicitly for REST delivery.');\n            const { event, payload: endpoint_payload } = args;\n            const headers = {\n                apikey: this.socket.apiKey ? this.socket.apiKey : '',\n                'Content-Type': 'application/json',\n            };\n            if (this.socket.accessTokenValue) {\n                headers['Authorization'] = `Bearer ${this.socket.accessTokenValue}`;\n            }\n            const options = {\n                method: 'POST',\n                headers,\n                body: JSON.stringify({\n                    messages: [\n                        {\n                            topic: this.subTopic,\n                            event,\n                            payload: endpoint_payload,\n                            private: this.private,\n                        },\n                    ],\n                }),\n            };\n            try {\n                const response = await this._fetchWithTimeout(this.broadcastEndpointURL, options, (_a = opts.timeout) !== null && _a !== void 0 ? _a : this.timeout);\n                await ((_b = response.body) === null || _b === void 0 ? void 0 : _b.cancel());\n                return response.ok ? 'ok' : 'error';\n            }\n            catch (error) {\n                if (error instanceof Error && error.name === 'AbortError') {\n                    return 'timed out';\n                }\n                else {\n                    return 'error';\n                }\n            }\n        }\n        else {\n            return new Promise((resolve) => {\n                var _a, _b, _c;\n                const push = this.channelAdapter.push(args.type, args, opts.timeout || this.timeout);\n                if (args.type === 'broadcast' && !((_c = (_b = (_a = this.params) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.broadcast) === null || _c === void 0 ? void 0 : _c.ack)) {\n                    resolve('ok');\n                }\n                push.receive('ok', () => resolve('ok'));\n                push.receive('error', () => resolve('error'));\n                push.receive('timeout', () => resolve('timed out'));\n            });\n        }\n    }\n    /**\n     * Updates the payload that will be sent the next time the channel joins (reconnects).\n     * Useful for rotating access tokens or updating config without re-creating the channel.\n     *\n     * @category Realtime\n     */\n    updateJoinPayload(payload) {\n        this.channelAdapter.updateJoinPayload(payload);\n    }\n    /**\n     * Leaves the channel.\n     *\n     * Unsubscribes from server events, and instructs channel to terminate on server.\n     * Triggers onClose() hooks.\n     *\n     * To receive leave acknowledgements, use the a `receive` hook to bind to the server ack, ie:\n     * channel.unsubscribe().receive(\"ok\", () => alert(\"left!\") )\n     *\n     * @category Realtime\n     */\n    async unsubscribe(timeout = this.timeout) {\n        return new Promise((resolve) => {\n            this.channelAdapter\n                .unsubscribe(timeout)\n                .receive('ok', () => resolve('ok'))\n                .receive('timeout', () => resolve('timed out'))\n                .receive('error', () => resolve('error'));\n        });\n    }\n    /**\n     * Destroys and stops related timers.\n     *\n     * @category Realtime\n     */\n    teardown() {\n        this.channelAdapter.teardown();\n    }\n    /** @internal */\n    async _fetchWithTimeout(url, options, timeout) {\n        const controller = new AbortController();\n        const id = setTimeout(() => controller.abort(), timeout);\n        const response = await this.socket.fetch(url, Object.assign(Object.assign({}, options), { signal: controller.signal }));\n        clearTimeout(id);\n        return response;\n    }\n    /** @internal */\n    _on(type, filter, callback) {\n        var _a;\n        const typeLower = type.toLocaleLowerCase();\n        // Serialize a postgres_changes filter builder into its string form so the\n        // rest of the pipeline (join payload, server binding match) sees a string.\n        // Duck-type `build()` in addition to `instanceof` so a builder constructed\n        // against a duplicate copy of the package (separate module realm) still works.\n        const filterValue = filter === null || filter === void 0 ? void 0 : filter.filter;\n        if (filterValue instanceof RealtimePostgresFilterBuilder ||\n            (typeof filterValue === 'object' &&\n                filterValue !== null &&\n                typeof filterValue.build === 'function')) {\n            filter = Object.assign(Object.assign({}, filter), { filter: filterValue.build() });\n        }\n        // The server collapses identical postgres_changes filters, so keeping a duplicate here would\n        // desync the client and server binding lists and make `subscribe()` fail with a mismatch.\n        if (typeLower === REALTIME_LISTEN_TYPES.POSTGRES_CHANGES) {\n            const duplicate = (_a = this.bindings[typeLower]) === null || _a === void 0 ? void 0 : _a.find((bind) => RealtimeChannel.isSamePostgresFilter(bind.filter, filter));\n            if (duplicate) {\n                this.socket.log('error', `duplicate \\`postgres_changes\\` binding for ${this.topic} ignored`, filter);\n                return this;\n            }\n        }\n        const ref = this.channelAdapter.on(type, callback);\n        const binding = {\n            type: typeLower,\n            filter: filter,\n            callback: callback,\n            ref: ref,\n        };\n        if (this.bindings[typeLower]) {\n            this.bindings[typeLower].push(binding);\n        }\n        else {\n            this.bindings[typeLower] = [binding];\n        }\n        this._updateFilterMessage();\n        return this;\n    }\n    /**\n     * Registers a callback that will be executed when the channel closes.\n     *\n     * @internal\n     */\n    _onClose(callback) {\n        this.channelAdapter.onClose(callback);\n    }\n    /**\n     * Registers a callback that will be executed when the channel encounteres an error.\n     *\n     * @internal\n     */\n    _onError(callback) {\n        this.channelAdapter.onError(callback);\n    }\n    /** @internal */\n    _updateFilterMessage() {\n        this.channelAdapter.updateFilterBindings((binding, payload, ref) => {\n            var _a, _b, _c, _d, _e, _f, _g;\n            const typeLower = binding.event.toLocaleLowerCase();\n            if (this._notThisChannelEvent(typeLower, ref)) {\n                return false;\n            }\n            const bind = (_a = this.bindings[typeLower]) === null || _a === void 0 ? void 0 : _a.find((bind) => bind.ref === binding.ref);\n            if (!bind) {\n                return true;\n            }\n            if (['broadcast', 'presence', 'postgres_changes'].includes(typeLower)) {\n                if ('id' in bind) {\n                    const bindId = bind.id;\n                    const bindEvent = (_b = bind.filter) === null || _b === void 0 ? void 0 : _b.event;\n                    return (bindId &&\n                        ((_c = payload.ids) === null || _c === void 0 ? void 0 : _c.includes(bindId)) &&\n                        (bindEvent === '*' ||\n                            (bindEvent === null || bindEvent === void 0 ? void 0 : bindEvent.toLocaleLowerCase()) === ((_d = payload.data) === null || _d === void 0 ? void 0 : _d.type.toLocaleLowerCase())));\n                }\n                else {\n                    const bindEvent = (_f = (_e = bind === null || bind === void 0 ? void 0 : bind.filter) === null || _e === void 0 ? void 0 : _e.event) === null || _f === void 0 ? void 0 : _f.toLocaleLowerCase();\n                    return bindEvent === '*' || bindEvent === ((_g = payload === null || payload === void 0 ? void 0 : payload.event) === null || _g === void 0 ? void 0 : _g.toLocaleLowerCase());\n                }\n            }\n            else {\n                return bind.type.toLocaleLowerCase() === typeLower;\n            }\n        });\n    }\n    /** @internal */\n    _notThisChannelEvent(event, ref) {\n        const { close, error, leave, join } = CHANNEL_EVENTS;\n        const events = [close, error, leave, join];\n        return ref && events.includes(event) && ref !== this.joinPush.ref;\n    }\n    /** @internal */\n    _updateFilterTransform() {\n        this.channelAdapter.updatePayloadTransform((event, payload, ref) => {\n            if (typeof payload === 'object' && 'ids' in payload) {\n                const postgresChanges = payload.data;\n                const { schema, table, commit_timestamp, type, errors } = postgresChanges;\n                const enrichedPayload = {\n                    schema: schema,\n                    table: table,\n                    commit_timestamp: commit_timestamp,\n                    eventType: type,\n                    new: {},\n                    old: {},\n                    errors: errors,\n                };\n                return Object.assign(Object.assign({}, enrichedPayload), this._getPayloadRecords(postgresChanges));\n            }\n            return payload;\n        });\n    }\n    copyBindings(other) {\n        if (this.joinedOnce) {\n            throw new Error('cannot copy bindings into joined channel');\n        }\n        for (const kind in other.bindings) {\n            for (const binding of other.bindings[kind]) {\n                this._on(binding.type, binding.filter, binding.callback);\n            }\n        }\n    }\n    /**\n     * Compares two optional filter values for equality.\n     * Treats undefined, null, and empty string as equivalent empty values.\n     * @internal\n     */\n    static isFilterValueEqual(serverValue, clientValue) {\n        const normalizedServer = serverValue !== null && serverValue !== void 0 ? serverValue : undefined;\n        const normalizedClient = clientValue !== null && clientValue !== void 0 ? clientValue : undefined;\n        return normalizedServer === normalizedClient;\n    }\n    /**\n     * Two `postgres_changes` filters are the same when the server would collapse them into a single\n     * subscription.\n     * @internal\n     */\n    static isSamePostgresFilter(a, b) {\n        var _a, _b, _c, _d;\n        const selectA = (_b = (_a = a === null || a === void 0 ? void 0 : a.select) === null || _a === void 0 ? void 0 : _a.join()) !== null && _b !== void 0 ? _b : undefined;\n        const selectB = (_d = (_c = b === null || b === void 0 ? void 0 : b.select) === null || _c === void 0 ? void 0 : _c.join()) !== null && _d !== void 0 ? _d : undefined;\n        return ((a === null || a === void 0 ? void 0 : a.event) === (b === null || b === void 0 ? void 0 : b.event) &&\n            RealtimeChannel.isFilterValueEqual(a === null || a === void 0 ? void 0 : a.schema, b === null || b === void 0 ? void 0 : b.schema) &&\n            RealtimeChannel.isFilterValueEqual(a === null || a === void 0 ? void 0 : a.table, b === null || b === void 0 ? void 0 : b.table) &&\n            RealtimeChannel.isFilterValueEqual(a === null || a === void 0 ? void 0 : a.filter, b === null || b === void 0 ? void 0 : b.filter) &&\n            selectA === selectB);\n    }\n    /** @internal */\n    _getPayloadRecords(payload) {\n        const records = {\n            new: {},\n            old: {},\n        };\n        if (payload.type === 'INSERT' || payload.type === 'UPDATE') {\n            records.new = Transformers.convertChangeData(payload.columns, payload.record);\n        }\n        if (payload.type === 'UPDATE' || payload.type === 'DELETE') {\n            records.old = Transformers.convertChangeData(payload.columns, payload.old_record);\n        }\n        return records;\n    }\n}\n//# sourceMappingURL=RealtimeChannel.js.map","import { Socket } from '@supabase/phoenix';\nimport { CONNECTION_STATE } from '../lib/constants';\nexport default class SocketAdapter {\n    constructor(endPoint, options) {\n        this.socket = new Socket(endPoint, options);\n    }\n    get timeout() {\n        return this.socket.timeout;\n    }\n    get endPoint() {\n        return this.socket.endPoint;\n    }\n    get transport() {\n        return this.socket.transport;\n    }\n    get heartbeatIntervalMs() {\n        return this.socket.heartbeatIntervalMs;\n    }\n    get heartbeatCallback() {\n        return this.socket.heartbeatCallback;\n    }\n    set heartbeatCallback(callback) {\n        this.socket.heartbeatCallback = callback;\n    }\n    get heartbeatTimer() {\n        return this.socket.heartbeatTimer;\n    }\n    get pendingHeartbeatRef() {\n        return this.socket.pendingHeartbeatRef;\n    }\n    get reconnectTimer() {\n        return this.socket.reconnectTimer;\n    }\n    get vsn() {\n        return this.socket.vsn;\n    }\n    get encode() {\n        return this.socket.encode;\n    }\n    get decode() {\n        return this.socket.decode;\n    }\n    get reconnectAfterMs() {\n        return this.socket.reconnectAfterMs;\n    }\n    get sendBuffer() {\n        return this.socket.sendBuffer;\n    }\n    get stateChangeCallbacks() {\n        return this.socket.stateChangeCallbacks;\n    }\n    connect() {\n        this.socket.connect();\n    }\n    disconnect(callback, code, reason, timeout = 10000) {\n        return new Promise((resolve) => {\n            setTimeout(() => resolve('timeout'), timeout);\n            this.socket.disconnect(() => {\n                callback();\n                resolve('ok');\n            }, code, reason);\n        });\n    }\n    push(data) {\n        this.socket.push(data);\n    }\n    log(kind, msg, data) {\n        this.socket.log(kind, msg, data);\n    }\n    makeRef() {\n        return this.socket.makeRef();\n    }\n    onOpen(callback) {\n        this.socket.onOpen(callback);\n    }\n    onClose(callback) {\n        this.socket.onClose(callback);\n    }\n    onError(callback) {\n        this.socket.onError(callback);\n    }\n    onMessage(callback) {\n        this.socket.onMessage(callback);\n    }\n    isConnected() {\n        return this.socket.isConnected();\n    }\n    isConnecting() {\n        return this.socket.connectionState() == CONNECTION_STATE.connecting;\n    }\n    isDisconnecting() {\n        return this.socket.connectionState() == CONNECTION_STATE.closing;\n    }\n    connectionState() {\n        // @ts-ignore - requires better typing and exposing type in phoenix\n        return this.socket.connectionState();\n    }\n    endPointURL() {\n        return this.socket.endPointURL();\n    }\n    sendHeartbeat() {\n        this.socket.sendHeartbeat();\n    }\n    /**\n     * @internal\n     */\n    getSocket() {\n        return this.socket;\n    }\n}\n//# sourceMappingURL=socketAdapter.js.map","import WebSocketFactory from './lib/websocket-factory';\nimport { CHANNEL_EVENTS, CONNECTION_STATE, DEFAULT_VERSION, DEFAULT_TIMEOUT, DEFAULT_VSN, VSN_1_0_0, VSN_2_0_0, } from './lib/constants';\nimport Serializer from './lib/serializer';\nimport { httpEndpointURL } from './lib/transformers';\nimport RealtimeChannel from './RealtimeChannel';\nimport SocketAdapter from './phoenix/socketAdapter';\n// Connection-related constants\nconst CONNECTION_TIMEOUTS = {\n    HEARTBEAT_INTERVAL: 25000,\n    RECONNECT_DELAY: 10,\n    HEARTBEAT_TIMEOUT_FALLBACK: 100,\n};\nconst RECONNECT_INTERVALS = [1000, 2000, 5000, 10000];\nconst DEFAULT_RECONNECT_FALLBACK = 10000;\nfunction createMemorySessionStorage() {\n    const store = new Map();\n    return {\n        get length() {\n            return store.size;\n        },\n        clear() {\n            store.clear();\n        },\n        getItem(key) {\n            return store.has(key) ? store.get(key) : null;\n        },\n        key(index) {\n            var _a;\n            return (_a = Array.from(store.keys())[index]) !== null && _a !== void 0 ? _a : null;\n        },\n        removeItem(key) {\n            store.delete(key);\n        },\n        setItem(key, value) {\n            store.set(key, String(value));\n        },\n    };\n}\nfunction resolveSessionStorage() {\n    try {\n        if (typeof globalThis !== 'undefined' && globalThis.sessionStorage) {\n            return globalThis.sessionStorage;\n        }\n    }\n    catch (_a) {\n        // Property access on `sessionStorage` itself throws in restricted-storage browsers.\n    }\n    return createMemorySessionStorage();\n}\nconst WORKER_SCRIPT = `\n  addEventListener(\"message\", (e) => {\n    if (e.data.event === \"start\") {\n      setInterval(() => postMessage({ event: \"keepAlive\" }), e.data.interval);\n    }\n  });`;\nexport default class RealtimeClient {\n    get endPoint() {\n        return this.socketAdapter.endPoint;\n    }\n    get timeout() {\n        return this.socketAdapter.timeout;\n    }\n    get transport() {\n        return this.socketAdapter.transport;\n    }\n    get heartbeatCallback() {\n        return this.socketAdapter.heartbeatCallback;\n    }\n    get heartbeatIntervalMs() {\n        return this.socketAdapter.heartbeatIntervalMs;\n    }\n    get heartbeatTimer() {\n        if (this.worker) {\n            return this._workerHeartbeatTimer;\n        }\n        return this.socketAdapter.heartbeatTimer;\n    }\n    get pendingHeartbeatRef() {\n        if (this.worker) {\n            return this._pendingWorkerHeartbeatRef;\n        }\n        return this.socketAdapter.pendingHeartbeatRef;\n    }\n    get reconnectTimer() {\n        return this.socketAdapter.reconnectTimer;\n    }\n    get vsn() {\n        return this.socketAdapter.vsn;\n    }\n    get encode() {\n        return this.socketAdapter.encode;\n    }\n    get decode() {\n        return this.socketAdapter.decode;\n    }\n    get reconnectAfterMs() {\n        return this.socketAdapter.reconnectAfterMs;\n    }\n    get sendBuffer() {\n        return this.socketAdapter.sendBuffer;\n    }\n    get stateChangeCallbacks() {\n        return this.socketAdapter.stateChangeCallbacks;\n    }\n    /**\n     * Initializes the Socket.\n     *\n     * @param endPoint The string WebSocket endpoint, ie, \"ws://example.com/socket\", \"wss://example.com\", \"/socket\" (inherited host & protocol)\n     * @param options.transport The Websocket Transport, for example WebSocket. This can be a custom implementation\n     * @param options.timeout The default timeout in milliseconds to trigger push timeouts.\n     * @param options.params The optional params to pass when connecting.\n     * @param options.headers Deprecated: headers cannot be set on websocket connections and this option will be removed in the future.\n     * @param options.heartbeatIntervalMs The millisec interval to send a heartbeat message.\n     * @param options.heartbeatCallback The optional function to handle heartbeat status and latency.\n     * @param options.logger The optional function for specialized logging, ie: logger: (kind, msg, data) => { console.log(`${kind}: ${msg}`, data) }\n     * @param options.logLevel Sets the log level for Realtime\n     * @param options.encode The function to encode outgoing messages. Defaults to JSON: (payload, callback) => callback(JSON.stringify(payload))\n     * @param options.decode The function to decode incoming messages. Defaults to Serializer's decode.\n     * @param options.reconnectAfterMs he optional function that returns the millsec reconnect interval. Defaults to stepped backoff off.\n     * @param options.worker Use Web Worker to set a side flow. Defaults to false.\n     * @param options.workerUrl The URL of the worker script. Defaults to https://realtime.supabase.com/worker.js that includes a heartbeat event call to keep the connection alive.\n     * @param options.vsn The protocol version to use when connecting. Supported versions are \"1.0.0\" and \"2.0.0\". Defaults to \"2.0.0\".\n     *\n     * @category Realtime\n     *\n     * @example Using supabase-js (recommended)\n     * ```ts\n     * import { createClient } from '@supabase/supabase-js'\n     *\n     * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n     * const channel = supabase.channel('room1')\n     * channel\n     *   .on('broadcast', { event: 'cursor-pos' }, (payload) => console.log(payload))\n     *   .subscribe()\n     * ```\n     *\n     * @example Standalone import for bundle-sensitive environments\n     * ```ts\n     * import RealtimeClient from '@supabase/realtime-js'\n     *\n     * const client = new RealtimeClient('https://xyzcompany.supabase.co/realtime/v1', {\n     *   params: { apikey: 'your-publishable-key' },\n     * })\n     * client.connect()\n     * ```\n     */\n    constructor(endPoint, options) {\n        var _a;\n        this.channels = new Array();\n        this.accessTokenValue = null;\n        this.accessToken = null;\n        this.apiKey = null;\n        this.httpEndpoint = '';\n        /** @deprecated headers cannot be set on websocket connections */\n        this.headers = {};\n        this.params = {};\n        this.ref = 0;\n        this.serializer = new Serializer();\n        this._manuallySetToken = false;\n        this._authPromise = null;\n        this._authGeneration = 0;\n        this._workerHeartbeatTimer = undefined;\n        this._pendingWorkerHeartbeatRef = null;\n        this._pendingDisconnectTimer = null;\n        this._disconnectOnEmptyChannelsAfterMs = 0;\n        /**\n         * Use either custom fetch, if provided, or default fetch to make HTTP requests\n         *\n         * @internal\n         */\n        this._resolveFetch = (customFetch) => {\n            if (customFetch) {\n                return (...args) => customFetch(...args);\n            }\n            return (...args) => fetch(...args);\n        };\n        // Validate required parameters\n        if (!((_a = options === null || options === void 0 ? void 0 : options.params) === null || _a === void 0 ? void 0 : _a.apikey)) {\n            throw new Error('API key is required to connect to Realtime');\n        }\n        this.apiKey = options.params.apikey;\n        const socketAdapterOptions = this._initializeOptions(options);\n        this.socketAdapter = new SocketAdapter(endPoint, socketAdapterOptions);\n        this.httpEndpoint = httpEndpointURL(endPoint);\n        this.fetch = this._resolveFetch(options === null || options === void 0 ? void 0 : options.fetch);\n    }\n    /**\n     * Connects the socket, unless already connected.\n     *\n     * @category Realtime\n     */\n    connect() {\n        // Skip if already connecting, disconnecting, or connected\n        if (this.isConnecting() || this.isDisconnecting() || this.isConnected()) {\n            return;\n        }\n        // Trigger auth if needed and not already in progress\n        // This ensures auth is called for standalone RealtimeClient usage\n        // while avoiding race conditions with SupabaseClient's immediate setAuth call\n        if (this.accessToken && !this._authPromise) {\n            this._setAuthSafely('connect');\n        }\n        this._setupConnectionHandlers();\n        try {\n            this.socketAdapter.connect();\n        }\n        catch (error) {\n            const errorMessage = error.message;\n            throw new Error(`WebSocket not available: ${errorMessage}`);\n        }\n        this._handleNodeJsRaceCondition();\n    }\n    /**\n     * Returns the URL of the websocket.\n     * @returns string The URL of the websocket.\n     *\n     * @category Realtime\n     */\n    endpointURL() {\n        return this.socketAdapter.endPointURL();\n    }\n    /**\n     * Disconnects the socket.\n     *\n     * @param code A numeric status code to send on disconnect.\n     * @param reason A custom reason for the disconnect.\n     *\n     * @category Realtime\n     */\n    async disconnect(code, reason) {\n        this._cancelPendingDisconnect();\n        if (this.isDisconnecting()) {\n            return 'ok';\n        }\n        return await this.socketAdapter.disconnect(() => {\n            clearInterval(this._workerHeartbeatTimer);\n            this._terminateWorker();\n        }, code, reason);\n    }\n    /**\n     * Returns all created channels\n     *\n     * @category Realtime\n     */\n    getChannels() {\n        return this.channels;\n    }\n    /**\n     * Unsubscribes, removes and tears down a single channel\n     * @param channel A RealtimeChannel instance\n     *\n     * @category Realtime\n     */\n    async removeChannel(channel) {\n        const status = await channel.unsubscribe();\n        if (status === 'ok') {\n            channel.teardown();\n        }\n        return status;\n    }\n    /**\n     * Unsubscribes, removes and tears down all channels\n     *\n     * @category Realtime\n     */\n    async removeAllChannels() {\n        const promises = this.channels.map(async (channel) => {\n            const result = await channel.unsubscribe();\n            channel.teardown();\n            return result;\n        });\n        const result = await Promise.all(promises);\n        await this.disconnect();\n        return result;\n    }\n    /**\n     * Logs the message.\n     *\n     * For customized logging, `this.logger` can be overridden in Client constructor.\n     *\n     * @category Realtime\n     */\n    log(kind, msg, data) {\n        this.socketAdapter.log(kind, msg, data);\n    }\n    /**\n     * Returns the current state of the socket.\n     *\n     * @category Realtime\n     */\n    connectionState() {\n        return this.socketAdapter.connectionState() || CONNECTION_STATE.closed;\n    }\n    /**\n     * Returns `true` is the connection is open.\n     *\n     * @category Realtime\n     */\n    isConnected() {\n        return this.socketAdapter.isConnected();\n    }\n    /**\n     * Returns `true` if the connection is currently connecting.\n     *\n     * @category Realtime\n     */\n    isConnecting() {\n        return this.socketAdapter.isConnecting();\n    }\n    /**\n     * Returns `true` if the connection is currently disconnecting.\n     *\n     * @category Realtime\n     */\n    isDisconnecting() {\n        return this.socketAdapter.isDisconnecting();\n    }\n    /**\n     * Creates (or reuses) a {@link RealtimeChannel} for the provided topic.\n     *\n     * Topics are automatically prefixed with `realtime:` to match the Realtime service.\n     * If a channel with the same topic already exists it will be returned instead of creating\n     * a duplicate connection.\n     *\n     * @category Realtime\n     */\n    channel(topic, params = { config: {} }) {\n        const realtimeTopic = `realtime:${topic}`;\n        const exists = this.getChannels().find((c) => c.topic === realtimeTopic);\n        if (!exists) {\n            const chan = new RealtimeChannel(`realtime:${topic}`, params, this);\n            this._cancelPendingDisconnect();\n            this.channels.push(chan);\n            return chan;\n        }\n        else {\n            return exists;\n        }\n    }\n    /**\n     * Push out a message if the socket is connected.\n     *\n     * If the socket is not connected, the message gets enqueued within a local buffer, and sent out when a connection is next established.\n     *\n     * @category Realtime\n     */\n    push(data) {\n        this.socketAdapter.push(data);\n    }\n    /**\n     * Sets the JWT access token used for channel subscription authorization and Realtime RLS.\n     *\n     * If param is null it will use the `accessToken` callback function or the token set on the client.\n     *\n     * On callback used, it will set the value of the token internal to the client.\n     *\n     * When a token is explicitly provided AND no `accessToken` callback is configured,\n     * it will be preserved across channel operations (including removeChannel and\n     * resubscribe) and the client stays in manual-token mode.\n     *\n     * When an `accessToken` callback IS configured, the callback is the source of truth:\n     * the client remains in callback mode and continues to refresh from it on heartbeat,\n     * even after a bootstrap/override `setAuth(token)` call.\n     *\n     * @param token A JWT string to override the token set on the client.\n     *\n     * @example Setting the authorization header\n     * // Use a manual token (preserved across resubscribes when no accessToken callback is set)\n     * client.realtime.setAuth('my-custom-jwt')\n     *\n     * // Switch back to using the accessToken callback\n     * client.realtime.setAuth()\n     *\n     * @category Realtime\n     */\n    async setAuth(token = null) {\n        const authGeneration = ++this._authGeneration;\n        const authPromise = this._performAuth(token, authGeneration);\n        if (authGeneration === this._authGeneration) {\n            this._authPromise = authPromise;\n        }\n        try {\n            await authPromise;\n        }\n        finally {\n            if (this._authPromise === authPromise) {\n                this._authPromise = null;\n            }\n        }\n    }\n    /**\n     * Returns true if the current access token was explicitly set via setAuth(token),\n     * false if it was obtained via the accessToken callback.\n     * @internal\n     */\n    _isManualToken() {\n        return this._manuallySetToken;\n    }\n    /**\n     * Sends a heartbeat message if the socket is connected.\n     *\n     * @category Realtime\n     */\n    async sendHeartbeat() {\n        this.socketAdapter.sendHeartbeat();\n    }\n    /**\n     * Sets a callback that receives lifecycle events for internal heartbeat messages.\n     * Useful for instrumenting connection health (e.g. sent/ok/timeout).\n     *\n     * @category Realtime\n     */\n    onHeartbeat(callback) {\n        this.socketAdapter.heartbeatCallback = this._wrapHeartbeatCallback(callback);\n    }\n    /**\n     * Return the next message ref, accounting for overflows\n     *\n     * @internal\n     */\n    _makeRef() {\n        return this.socketAdapter.makeRef();\n    }\n    /**\n     * Removes a channel from RealtimeClient\n     *\n     * @param channel An open subscription.\n     *\n     * @internal\n     */\n    _remove(channel) {\n        this.channels = this.channels.filter((c) => c.topic !== channel.topic);\n        if (this.channels.length === 0) {\n            this.log('transport', 'no channels remaining, scheduling disconnect');\n            this._schedulePendingDisconnect();\n        }\n    }\n    /** @internal */\n    _schedulePendingDisconnect() {\n        this._cancelPendingDisconnect();\n        if (this._disconnectOnEmptyChannelsAfterMs === 0) {\n            this.log('transport', 'disconnecting immediately - no channels');\n            this.disconnect();\n            return;\n        }\n        this._pendingDisconnectTimer = setTimeout(() => {\n            this._pendingDisconnectTimer = null;\n            if (this.channels.length === 0) {\n                this.log('transport', 'deferred disconnect fired - no channels, disconnecting');\n                this.disconnect();\n            }\n        }, this._disconnectOnEmptyChannelsAfterMs);\n        this.log('transport', `deferred disconnect scheduled in ${this._disconnectOnEmptyChannelsAfterMs}ms`);\n    }\n    /** @internal */\n    _cancelPendingDisconnect() {\n        if (this._pendingDisconnectTimer !== null) {\n            this.log('transport', 'pending disconnect cancelled - channel activity detected');\n            clearTimeout(this._pendingDisconnectTimer);\n            this._pendingDisconnectTimer = null;\n        }\n    }\n    /**\n     * Perform the actual auth operation\n     * @internal\n     */\n    async _performAuth(token, authGeneration) {\n        let tokenToSend;\n        let isManualToken = false;\n        if (token) {\n            tokenToSend = token;\n            // Track if this is a manually-provided token\n            isManualToken = true;\n        }\n        else if (this.accessToken) {\n            // Call the accessToken callback to get fresh token\n            try {\n                tokenToSend = await this.accessToken();\n            }\n            catch (e) {\n                this.log('error', 'Error fetching access token from callback', e);\n                // Fall back to cached value if callback fails\n                tokenToSend = this.accessTokenValue;\n            }\n        }\n        else {\n            tokenToSend = this.accessTokenValue;\n        }\n        if (authGeneration !== this._authGeneration) {\n            return;\n        }\n        // Track whether this token was manually set or fetched via callback.\n        // The callback is the source of truth for token refresh\n        if (this.accessToken) {\n            this._manuallySetToken = false;\n        }\n        else if (isManualToken) {\n            this._manuallySetToken = true;\n        }\n        if (this.accessTokenValue != tokenToSend) {\n            this.accessTokenValue = tokenToSend;\n            this.channels.forEach((channel) => {\n                const payload = {\n                    access_token: tokenToSend,\n                    version: DEFAULT_VERSION,\n                };\n                channel.updateJoinPayload(payload);\n                if (channel.joinedOnce && channel.channelAdapter.isJoined()) {\n                    channel.channelAdapter.push(CHANNEL_EVENTS.access_token, {\n                        access_token: tokenToSend,\n                    });\n                }\n            });\n        }\n    }\n    /**\n     * Wait for any in-flight auth operations to complete\n     * @internal\n     */\n    async _waitForAuthIfNeeded() {\n        if (this._authPromise) {\n            await this._authPromise;\n        }\n    }\n    /**\n     * Safely call setAuth with standardized error handling\n     * @internal\n     */\n    _setAuthSafely(context = 'general') {\n        // Only refresh auth if using callback-based tokens\n        if (!this._isManualToken()) {\n            this.setAuth().catch((e) => {\n                this.log('error', `Error setting auth in ${context}`, e);\n            });\n        }\n    }\n    /** @internal */\n    _setupConnectionHandlers() {\n        this.socketAdapter.onOpen(() => {\n            const authPromise = this._authPromise ||\n                (this.accessToken && !this.accessTokenValue ? this.setAuth() : Promise.resolve());\n            authPromise.catch((e) => {\n                this.log('error', 'error waiting for auth on connect', e);\n            });\n            if (this.worker && !this.workerRef) {\n                this._startWorkerHeartbeat();\n            }\n        });\n        this.socketAdapter.onClose(() => {\n            if (this.worker && this.workerRef) {\n                this._terminateWorker();\n            }\n        });\n        this.socketAdapter.onMessage((message) => {\n            if (message.ref && message.ref === this._pendingWorkerHeartbeatRef) {\n                this._pendingWorkerHeartbeatRef = null;\n            }\n        });\n    }\n    /** @internal */\n    _handleNodeJsRaceCondition() {\n        if (this.socketAdapter.isConnected()) {\n            // hack: ensure onConnOpen is called\n            this.socketAdapter.getSocket().onConnOpen();\n        }\n    }\n    /** @internal */\n    _wrapHeartbeatCallback(heartbeatCallback) {\n        return (status, latency) => {\n            if (status === 'disconnected')\n                return;\n            if (status == 'sent')\n                this._setAuthSafely();\n            if (heartbeatCallback)\n                heartbeatCallback(status, latency);\n        };\n    }\n    /** @internal */\n    _startWorkerHeartbeat() {\n        if (this.workerUrl) {\n            this.log('worker', `starting worker for from ${this.workerUrl}`);\n        }\n        else {\n            this.log('worker', `starting default worker`);\n        }\n        const objectUrl = this._workerObjectUrl(this.workerUrl);\n        this.workerRef = new Worker(objectUrl);\n        this.workerRef.onerror = (error) => {\n            this.log('worker', 'worker error', error.message);\n            this._terminateWorker();\n            this.disconnect();\n        };\n        this.workerRef.onmessage = (event) => {\n            if (event.data.event === 'keepAlive') {\n                this.sendHeartbeat();\n            }\n        };\n        this.workerRef.postMessage({\n            event: 'start',\n            interval: this.heartbeatIntervalMs,\n        });\n    }\n    /**\n     * Terminate the Web Worker and clear the reference\n     * @internal\n     */\n    _terminateWorker() {\n        if (this.workerRef) {\n            this.log('worker', 'terminating worker');\n            this.workerRef.terminate();\n            this.workerRef = undefined;\n        }\n    }\n    /** @internal */\n    _workerObjectUrl(url) {\n        let result_url;\n        if (url) {\n            result_url = url;\n        }\n        else {\n            const blob = new Blob([WORKER_SCRIPT], { type: 'application/javascript' });\n            result_url = URL.createObjectURL(blob);\n        }\n        return result_url;\n    }\n    /**\n     * Initialize socket options with defaults\n     * @internal\n     */\n    _initializeOptions(options) {\n        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;\n        this.worker = (_a = options === null || options === void 0 ? void 0 : options.worker) !== null && _a !== void 0 ? _a : false;\n        this.accessToken = (_b = options === null || options === void 0 ? void 0 : options.accessToken) !== null && _b !== void 0 ? _b : null;\n        const result = {};\n        result.timeout = (_c = options === null || options === void 0 ? void 0 : options.timeout) !== null && _c !== void 0 ? _c : DEFAULT_TIMEOUT;\n        result.heartbeatIntervalMs =\n            (_d = options === null || options === void 0 ? void 0 : options.heartbeatIntervalMs) !== null && _d !== void 0 ? _d : CONNECTION_TIMEOUTS.HEARTBEAT_INTERVAL;\n        this._disconnectOnEmptyChannelsAfterMs =\n            (_e = options === null || options === void 0 ? void 0 : options.disconnectOnEmptyChannelsAfterMs) !== null && _e !== void 0 ? _e : 2 * ((_f = options === null || options === void 0 ? void 0 : options.heartbeatIntervalMs) !== null && _f !== void 0 ? _f : CONNECTION_TIMEOUTS.HEARTBEAT_INTERVAL);\n        // @ts-ignore - mismatch between phoenix and supabase\n        result.transport = (_g = options === null || options === void 0 ? void 0 : options.transport) !== null && _g !== void 0 ? _g : WebSocketFactory.getWebSocketConstructor();\n        result.params = options === null || options === void 0 ? void 0 : options.params;\n        result.logger = options === null || options === void 0 ? void 0 : options.logger;\n        result.heartbeatCallback = this._wrapHeartbeatCallback(options === null || options === void 0 ? void 0 : options.heartbeatCallback);\n        result.sessionStorage = (_h = options === null || options === void 0 ? void 0 : options.sessionStorage) !== null && _h !== void 0 ? _h : resolveSessionStorage();\n        result.reconnectAfterMs =\n            (_j = options === null || options === void 0 ? void 0 : options.reconnectAfterMs) !== null && _j !== void 0 ? _j : ((tries) => {\n                return RECONNECT_INTERVALS[tries - 1] || DEFAULT_RECONNECT_FALLBACK;\n            });\n        let defaultEncode;\n        let defaultDecode;\n        const vsn = (_k = options === null || options === void 0 ? void 0 : options.vsn) !== null && _k !== void 0 ? _k : DEFAULT_VSN;\n        switch (vsn) {\n            case VSN_1_0_0:\n                defaultEncode = (payload, callback) => {\n                    return callback(JSON.stringify(payload));\n                };\n                defaultDecode = (payload, callback) => {\n                    return callback(JSON.parse(payload));\n                };\n                break;\n            case VSN_2_0_0:\n                defaultEncode = this.serializer.encode.bind(this.serializer);\n                defaultDecode = this.serializer.decode.bind(this.serializer);\n                break;\n            default:\n                throw new Error(`Unsupported serializer version: ${result.vsn}`);\n        }\n        result.vsn = vsn;\n        result.encode = (_l = options === null || options === void 0 ? void 0 : options.encode) !== null && _l !== void 0 ? _l : defaultEncode;\n        result.decode = (_m = options === null || options === void 0 ? void 0 : options.decode) !== null && _m !== void 0 ? _m : defaultDecode;\n        result.beforeReconnect = this._reconnectAuth.bind(this);\n        if ((options === null || options === void 0 ? void 0 : options.logLevel) || (options === null || options === void 0 ? void 0 : options.log_level)) {\n            this.logLevel = options.logLevel || options.log_level;\n            result.params = Object.assign(Object.assign({}, result.params), { log_level: this.logLevel });\n        }\n        // Handle worker setup\n        if (this.worker) {\n            if (typeof window !== 'undefined' && !window.Worker) {\n                throw new Error('Web Worker is not supported');\n            }\n            this.workerUrl = options === null || options === void 0 ? void 0 : options.workerUrl;\n            result.autoSendHeartbeat = !this.worker;\n        }\n        return result;\n    }\n    /** @internal */\n    async _reconnectAuth() {\n        await this._waitForAuthIfNeeded();\n        if (!this.isConnected()) {\n            this.connect();\n        }\n    }\n}\n//# sourceMappingURL=RealtimeClient.js.map","// src/errors/IcebergError.ts\nvar IcebergError = class extends Error {\n  constructor(message, opts) {\n    super(message);\n    this.name = \"IcebergError\";\n    this.status = opts.status;\n    this.icebergType = opts.icebergType;\n    this.icebergCode = opts.icebergCode;\n    this.details = opts.details;\n    this.isCommitStateUnknown = opts.icebergType === \"CommitStateUnknownException\" || [500, 502, 504].includes(opts.status) && opts.icebergType?.includes(\"CommitState\") === true;\n  }\n  /**\n   * Returns true if the error is a 404 Not Found error.\n   */\n  isNotFound() {\n    return this.status === 404;\n  }\n  /**\n   * Returns true if the error is a 409 Conflict error.\n   */\n  isConflict() {\n    return this.status === 409;\n  }\n  /**\n   * Returns true if the error is a 419 Authentication Timeout error.\n   */\n  isAuthenticationTimeout() {\n    return this.status === 419;\n  }\n};\n\n// src/utils/url.ts\nfunction buildUrl(baseUrl, path, query) {\n  const url = new URL(path, baseUrl);\n  if (query) {\n    for (const [key, value] of Object.entries(query)) {\n      if (value !== void 0) {\n        url.searchParams.set(key, value);\n      }\n    }\n  }\n  return url.toString();\n}\n\n// src/http/createFetchClient.ts\nasync function buildAuthHeaders(auth) {\n  if (!auth || auth.type === \"none\") {\n    return {};\n  }\n  if (auth.type === \"bearer\") {\n    return { Authorization: `Bearer ${auth.token}` };\n  }\n  if (auth.type === \"header\") {\n    return { [auth.name]: auth.value };\n  }\n  if (auth.type === \"custom\") {\n    return await auth.getHeaders();\n  }\n  return {};\n}\nfunction createFetchClient(options) {\n  const fetchFn = options.fetchImpl ?? globalThis.fetch;\n  return {\n    async request({\n      method,\n      path,\n      query,\n      body,\n      headers\n    }) {\n      const url = buildUrl(options.baseUrl, path, query);\n      const authHeaders = await buildAuthHeaders(options.auth);\n      const res = await fetchFn(url, {\n        method,\n        headers: {\n          ...body ? { \"Content-Type\": \"application/json\" } : {},\n          ...authHeaders,\n          ...headers\n        },\n        body: body ? JSON.stringify(body) : void 0\n      });\n      const text = await res.text();\n      const isJson = (res.headers.get(\"content-type\") || \"\").includes(\"application/json\");\n      const data = isJson && text ? JSON.parse(text) : text;\n      if (!res.ok) {\n        const errBody = isJson ? data : void 0;\n        const errorDetail = errBody?.error;\n        throw new IcebergError(\n          errorDetail?.message ?? `Request failed with status ${res.status}`,\n          {\n            status: res.status,\n            icebergType: errorDetail?.type,\n            icebergCode: errorDetail?.code,\n            details: errBody\n          }\n        );\n      }\n      return { status: res.status, headers: res.headers, data };\n    }\n  };\n}\n\n// src/catalog/namespaces.ts\nfunction namespaceToPath(namespace) {\n  return namespace.join(\"\u001f\");\n}\nvar NamespaceOperations = class {\n  constructor(client, prefix = \"\") {\n    this.client = client;\n    this.prefix = prefix;\n  }\n  async listNamespaces(parent) {\n    const query = parent ? { parent: namespaceToPath(parent.namespace) } : void 0;\n    const response = await this.client.request({\n      method: \"GET\",\n      path: `${this.prefix}/namespaces`,\n      query\n    });\n    return response.data.namespaces.map((ns) => ({ namespace: ns }));\n  }\n  async createNamespace(id, metadata) {\n    const request = {\n      namespace: id.namespace,\n      properties: metadata?.properties\n    };\n    const response = await this.client.request({\n      method: \"POST\",\n      path: `${this.prefix}/namespaces`,\n      body: request\n    });\n    return response.data;\n  }\n  async dropNamespace(id) {\n    await this.client.request({\n      method: \"DELETE\",\n      path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`\n    });\n  }\n  async loadNamespaceMetadata(id) {\n    const response = await this.client.request({\n      method: \"GET\",\n      path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`\n    });\n    return {\n      properties: response.data.properties\n    };\n  }\n  async namespaceExists(id) {\n    try {\n      await this.client.request({\n        method: \"HEAD\",\n        path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`\n      });\n      return true;\n    } catch (error) {\n      if (error instanceof IcebergError && error.status === 404) {\n        return false;\n      }\n      throw error;\n    }\n  }\n  async createNamespaceIfNotExists(id, metadata) {\n    try {\n      return await this.createNamespace(id, metadata);\n    } catch (error) {\n      if (error instanceof IcebergError && error.status === 409) {\n        return;\n      }\n      throw error;\n    }\n  }\n};\n\n// src/catalog/tables.ts\nfunction namespaceToPath2(namespace) {\n  return namespace.join(\"\u001f\");\n}\nvar TableOperations = class {\n  constructor(client, prefix = \"\", accessDelegation) {\n    this.client = client;\n    this.prefix = prefix;\n    this.accessDelegation = accessDelegation;\n  }\n  async listTables(namespace) {\n    const response = await this.client.request({\n      method: \"GET\",\n      path: `${this.prefix}/namespaces/${namespaceToPath2(namespace.namespace)}/tables`\n    });\n    return response.data.identifiers;\n  }\n  async createTable(namespace, request) {\n    const headers = {};\n    if (this.accessDelegation) {\n      headers[\"X-Iceberg-Access-Delegation\"] = this.accessDelegation;\n    }\n    const response = await this.client.request({\n      method: \"POST\",\n      path: `${this.prefix}/namespaces/${namespaceToPath2(namespace.namespace)}/tables`,\n      body: request,\n      headers\n    });\n    return response.data.metadata;\n  }\n  async updateTable(id, request) {\n    const response = await this.client.request({\n      method: \"POST\",\n      path: `${this.prefix}/namespaces/${namespaceToPath2(id.namespace)}/tables/${id.name}`,\n      body: request\n    });\n    return {\n      \"metadata-location\": response.data[\"metadata-location\"],\n      metadata: response.data.metadata\n    };\n  }\n  async dropTable(id, options) {\n    await this.client.request({\n      method: \"DELETE\",\n      path: `${this.prefix}/namespaces/${namespaceToPath2(id.namespace)}/tables/${id.name}`,\n      query: { purgeRequested: String(options?.purge ?? false) }\n    });\n  }\n  async loadTable(id) {\n    const headers = {};\n    if (this.accessDelegation) {\n      headers[\"X-Iceberg-Access-Delegation\"] = this.accessDelegation;\n    }\n    const response = await this.client.request({\n      method: \"GET\",\n      path: `${this.prefix}/namespaces/${namespaceToPath2(id.namespace)}/tables/${id.name}`,\n      headers\n    });\n    return response.data.metadata;\n  }\n  async tableExists(id) {\n    const headers = {};\n    if (this.accessDelegation) {\n      headers[\"X-Iceberg-Access-Delegation\"] = this.accessDelegation;\n    }\n    try {\n      await this.client.request({\n        method: \"HEAD\",\n        path: `${this.prefix}/namespaces/${namespaceToPath2(id.namespace)}/tables/${id.name}`,\n        headers\n      });\n      return true;\n    } catch (error) {\n      if (error instanceof IcebergError && error.status === 404) {\n        return false;\n      }\n      throw error;\n    }\n  }\n  async createTableIfNotExists(namespace, request) {\n    try {\n      return await this.createTable(namespace, request);\n    } catch (error) {\n      if (error instanceof IcebergError && error.status === 409) {\n        return await this.loadTable({ namespace: namespace.namespace, name: request.name });\n      }\n      throw error;\n    }\n  }\n};\n\n// src/catalog/IcebergRestCatalog.ts\nvar IcebergRestCatalog = class {\n  /**\n   * Creates a new Iceberg REST Catalog client.\n   *\n   * @param options - Configuration options for the catalog client\n   */\n  constructor(options) {\n    let prefix = \"v1\";\n    if (options.catalogName) {\n      prefix += `/${options.catalogName}`;\n    }\n    const baseUrl = options.baseUrl.endsWith(\"/\") ? options.baseUrl : `${options.baseUrl}/`;\n    this.client = createFetchClient({\n      baseUrl,\n      auth: options.auth,\n      fetchImpl: options.fetch\n    });\n    this.accessDelegation = options.accessDelegation?.join(\",\");\n    this.namespaceOps = new NamespaceOperations(this.client, prefix);\n    this.tableOps = new TableOperations(this.client, prefix, this.accessDelegation);\n  }\n  /**\n   * Lists all namespaces in the catalog.\n   *\n   * @param parent - Optional parent namespace to list children under\n   * @returns Array of namespace identifiers\n   *\n   * @example\n   * ```typescript\n   * // List all top-level namespaces\n   * const namespaces = await catalog.listNamespaces();\n   *\n   * // List namespaces under a parent\n   * const children = await catalog.listNamespaces({ namespace: ['analytics'] });\n   * ```\n   */\n  async listNamespaces(parent) {\n    return this.namespaceOps.listNamespaces(parent);\n  }\n  /**\n   * Creates a new namespace in the catalog.\n   *\n   * @param id - Namespace identifier to create\n   * @param metadata - Optional metadata properties for the namespace\n   * @returns Response containing the created namespace and its properties\n   *\n   * @example\n   * ```typescript\n   * const response = await catalog.createNamespace(\n   *   { namespace: ['analytics'] },\n   *   { properties: { owner: 'data-team' } }\n   * );\n   * console.log(response.namespace); // ['analytics']\n   * console.log(response.properties); // { owner: 'data-team', ... }\n   * ```\n   */\n  async createNamespace(id, metadata) {\n    return this.namespaceOps.createNamespace(id, metadata);\n  }\n  /**\n   * Drops a namespace from the catalog.\n   *\n   * The namespace must be empty (contain no tables) before it can be dropped.\n   *\n   * @param id - Namespace identifier to drop\n   *\n   * @example\n   * ```typescript\n   * await catalog.dropNamespace({ namespace: ['analytics'] });\n   * ```\n   */\n  async dropNamespace(id) {\n    await this.namespaceOps.dropNamespace(id);\n  }\n  /**\n   * Loads metadata for a namespace.\n   *\n   * @param id - Namespace identifier to load\n   * @returns Namespace metadata including properties\n   *\n   * @example\n   * ```typescript\n   * const metadata = await catalog.loadNamespaceMetadata({ namespace: ['analytics'] });\n   * console.log(metadata.properties);\n   * ```\n   */\n  async loadNamespaceMetadata(id) {\n    return this.namespaceOps.loadNamespaceMetadata(id);\n  }\n  /**\n   * Lists all tables in a namespace.\n   *\n   * @param namespace - Namespace identifier to list tables from\n   * @returns Array of table identifiers\n   *\n   * @example\n   * ```typescript\n   * const tables = await catalog.listTables({ namespace: ['analytics'] });\n   * console.log(tables); // [{ namespace: ['analytics'], name: 'events' }, ...]\n   * ```\n   */\n  async listTables(namespace) {\n    return this.tableOps.listTables(namespace);\n  }\n  /**\n   * Creates a new table in the catalog.\n   *\n   * @param namespace - Namespace to create the table in\n   * @param request - Table creation request including name, schema, partition spec, etc.\n   * @returns Table metadata for the created table\n   *\n   * @example\n   * ```typescript\n   * const metadata = await catalog.createTable(\n   *   { namespace: ['analytics'] },\n   *   {\n   *     name: 'events',\n   *     schema: {\n   *       type: 'struct',\n   *       fields: [\n   *         { id: 1, name: 'id', type: 'long', required: true },\n   *         { id: 2, name: 'timestamp', type: 'timestamp', required: true }\n   *       ],\n   *       'schema-id': 0\n   *     },\n   *     'partition-spec': {\n   *       'spec-id': 0,\n   *       fields: [\n   *         { source_id: 2, field_id: 1000, name: 'ts_day', transform: 'day' }\n   *       ]\n   *     }\n   *   }\n   * );\n   * ```\n   */\n  async createTable(namespace, request) {\n    return this.tableOps.createTable(namespace, request);\n  }\n  /**\n   * Updates an existing table's metadata.\n   *\n   * Can update the schema, partition spec, or properties of a table.\n   *\n   * @param id - Table identifier to update\n   * @param request - Update request with fields to modify\n   * @returns Response containing the metadata location and updated table metadata\n   *\n   * @example\n   * ```typescript\n   * const response = await catalog.updateTable(\n   *   { namespace: ['analytics'], name: 'events' },\n   *   {\n   *     properties: { 'read.split.target-size': '134217728' }\n   *   }\n   * );\n   * console.log(response['metadata-location']); // s3://...\n   * console.log(response.metadata); // TableMetadata object\n   * ```\n   */\n  async updateTable(id, request) {\n    return this.tableOps.updateTable(id, request);\n  }\n  /**\n   * Drops a table from the catalog.\n   *\n   * @param id - Table identifier to drop\n   *\n   * @example\n   * ```typescript\n   * await catalog.dropTable({ namespace: ['analytics'], name: 'events' });\n   * ```\n   */\n  async dropTable(id, options) {\n    await this.tableOps.dropTable(id, options);\n  }\n  /**\n   * Loads metadata for a table.\n   *\n   * @param id - Table identifier to load\n   * @returns Table metadata including schema, partition spec, location, etc.\n   *\n   * @example\n   * ```typescript\n   * const metadata = await catalog.loadTable({ namespace: ['analytics'], name: 'events' });\n   * console.log(metadata.schema);\n   * console.log(metadata.location);\n   * ```\n   */\n  async loadTable(id) {\n    return this.tableOps.loadTable(id);\n  }\n  /**\n   * Checks if a namespace exists in the catalog.\n   *\n   * @param id - Namespace identifier to check\n   * @returns True if the namespace exists, false otherwise\n   *\n   * @example\n   * ```typescript\n   * const exists = await catalog.namespaceExists({ namespace: ['analytics'] });\n   * console.log(exists); // true or false\n   * ```\n   */\n  async namespaceExists(id) {\n    return this.namespaceOps.namespaceExists(id);\n  }\n  /**\n   * Checks if a table exists in the catalog.\n   *\n   * @param id - Table identifier to check\n   * @returns True if the table exists, false otherwise\n   *\n   * @example\n   * ```typescript\n   * const exists = await catalog.tableExists({ namespace: ['analytics'], name: 'events' });\n   * console.log(exists); // true or false\n   * ```\n   */\n  async tableExists(id) {\n    return this.tableOps.tableExists(id);\n  }\n  /**\n   * Creates a namespace if it does not exist.\n   *\n   * If the namespace already exists, returns void. If created, returns the response.\n   *\n   * @param id - Namespace identifier to create\n   * @param metadata - Optional metadata properties for the namespace\n   * @returns Response containing the created namespace and its properties, or void if it already exists\n   *\n   * @example\n   * ```typescript\n   * const response = await catalog.createNamespaceIfNotExists(\n   *   { namespace: ['analytics'] },\n   *   { properties: { owner: 'data-team' } }\n   * );\n   * if (response) {\n   *   console.log('Created:', response.namespace);\n   * } else {\n   *   console.log('Already exists');\n   * }\n   * ```\n   */\n  async createNamespaceIfNotExists(id, metadata) {\n    return this.namespaceOps.createNamespaceIfNotExists(id, metadata);\n  }\n  /**\n   * Creates a table if it does not exist.\n   *\n   * If the table already exists, returns its metadata instead.\n   *\n   * @param namespace - Namespace to create the table in\n   * @param request - Table creation request including name, schema, partition spec, etc.\n   * @returns Table metadata for the created or existing table\n   *\n   * @example\n   * ```typescript\n   * const metadata = await catalog.createTableIfNotExists(\n   *   { namespace: ['analytics'] },\n   *   {\n   *     name: 'events',\n   *     schema: {\n   *       type: 'struct',\n   *       fields: [\n   *         { id: 1, name: 'id', type: 'long', required: true },\n   *         { id: 2, name: 'timestamp', type: 'timestamp', required: true }\n   *       ],\n   *       'schema-id': 0\n   *     }\n   *   }\n   * );\n   * ```\n   */\n  async createTableIfNotExists(namespace, request) {\n    return this.tableOps.createTableIfNotExists(namespace, request);\n  }\n};\n\n// src/catalog/types.ts\nvar DECIMAL_REGEX = /^decimal\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/;\nvar FIXED_REGEX = /^fixed\\s*\\[\\s*(\\d+)\\s*\\]$/;\nfunction parseDecimalType(type) {\n  const match = type.match(DECIMAL_REGEX);\n  if (!match) return null;\n  return {\n    precision: parseInt(match[1], 10),\n    scale: parseInt(match[2], 10)\n  };\n}\nfunction parseFixedType(type) {\n  const match = type.match(FIXED_REGEX);\n  if (!match) return null;\n  return {\n    length: parseInt(match[1], 10)\n  };\n}\nfunction isDecimalType(type) {\n  return DECIMAL_REGEX.test(type);\n}\nfunction isFixedType(type) {\n  return FIXED_REGEX.test(type);\n}\nfunction typesEqual(a, b) {\n  const decimalA = parseDecimalType(a);\n  const decimalB = parseDecimalType(b);\n  if (decimalA && decimalB) {\n    return decimalA.precision === decimalB.precision && decimalA.scale === decimalB.scale;\n  }\n  const fixedA = parseFixedType(a);\n  const fixedB = parseFixedType(b);\n  if (fixedA && fixedB) {\n    return fixedA.length === fixedB.length;\n  }\n  return a === b;\n}\nfunction getCurrentSchema(metadata) {\n  return metadata.schemas.find((s) => s[\"schema-id\"] === metadata[\"current-schema-id\"]);\n}\n\nexport { IcebergError, IcebergRestCatalog, getCurrentSchema, isDecimalType, isFixedType, parseDecimalType, parseFixedType, typesEqual };\n//# sourceMappingURL=index.mjs.map\n//# sourceMappingURL=index.mjs.map","import { IcebergRestCatalog } from \"iceberg-js\";\n\n//#region \\0@oxc-project+runtime@0.103.0/helpers/typeof.js\nfunction _typeof(o) {\n\t\"@babel/helpers - typeof\";\n\treturn _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o$1) {\n\t\treturn typeof o$1;\n\t} : function(o$1) {\n\t\treturn o$1 && \"function\" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? \"symbol\" : typeof o$1;\n\t}, _typeof(o);\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/toPrimitive.js\nfunction toPrimitive(t, r) {\n\tif (\"object\" != _typeof(t) || !t) return t;\n\tvar e = t[Symbol.toPrimitive];\n\tif (void 0 !== e) {\n\t\tvar i = e.call(t, r || \"default\");\n\t\tif (\"object\" != _typeof(i)) return i;\n\t\tthrow new TypeError(\"@@toPrimitive must return a primitive value.\");\n\t}\n\treturn (\"string\" === r ? String : Number)(t);\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/toPropertyKey.js\nfunction toPropertyKey(t) {\n\tvar i = toPrimitive(t, \"string\");\n\treturn \"symbol\" == _typeof(i) ? i : i + \"\";\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/defineProperty.js\nfunction _defineProperty(e, r, t) {\n\treturn (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n\t\tvalue: t,\n\t\tenumerable: !0,\n\t\tconfigurable: !0,\n\t\twritable: !0\n\t}) : e[r] = t, e;\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/objectSpread2.js\nfunction ownKeys(e, r) {\n\tvar t = Object.keys(e);\n\tif (Object.getOwnPropertySymbols) {\n\t\tvar o = Object.getOwnPropertySymbols(e);\n\t\tr && (o = o.filter(function(r$1) {\n\t\t\treturn Object.getOwnPropertyDescriptor(e, r$1).enumerable;\n\t\t})), t.push.apply(t, o);\n\t}\n\treturn t;\n}\nfunction _objectSpread2(e) {\n\tfor (var r = 1; r < arguments.length; r++) {\n\t\tvar t = null != arguments[r] ? arguments[r] : {};\n\t\tr % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) {\n\t\t\t_defineProperty(e, r$1, t[r$1]);\n\t\t}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) {\n\t\t\tObject.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1));\n\t\t});\n\t}\n\treturn e;\n}\n\n//#endregion\n//#region src/lib/common/errors.ts\n/**\n* Base error class for all Storage errors\n* Supports both 'storage' and 'vectors' namespaces\n*/\nvar StorageError = class extends Error {\n\tconstructor(message, namespace = \"storage\", status, statusCode) {\n\t\tsuper(message);\n\t\tthis.__isStorageError = true;\n\t\tthis.namespace = namespace;\n\t\tthis.name = namespace === \"vectors\" ? \"StorageVectorsError\" : \"StorageError\";\n\t\tthis.status = status;\n\t\tthis.statusCode = statusCode;\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tmessage: this.message,\n\t\t\tstatus: this.status,\n\t\t\tstatusCode: this.statusCode\n\t\t};\n\t}\n};\n/**\n* Type guard to check if an error is a StorageError\n* @param error - The error to check\n* @returns True if the error is a StorageError\n*/\nfunction isStorageError(error) {\n\treturn typeof error === \"object\" && error !== null && \"__isStorageError\" in error;\n}\n/**\n* API error returned from Storage service\n* Includes HTTP status code and service-specific error code\n*/\nvar StorageApiError = class extends StorageError {\n\tconstructor(message, status, statusCode, namespace = \"storage\", code) {\n\t\tsuper(message, namespace, status, statusCode);\n\t\tthis.name = namespace === \"vectors\" ? \"StorageVectorsApiError\" : \"StorageApiError\";\n\t\tthis.status = status;\n\t\tthis.statusCode = statusCode;\n\t\tthis.code = code;\n\t}\n\ttoJSON() {\n\t\treturn _objectSpread2(_objectSpread2({}, super.toJSON()), {}, { code: this.code });\n\t}\n};\n/**\n* Unknown error that doesn't match expected error patterns\n* Wraps the original error for debugging\n*/\nvar StorageUnknownError = class extends StorageError {\n\tconstructor(message, originalError, namespace = \"storage\") {\n\t\tsuper(message, namespace);\n\t\tthis.name = namespace === \"vectors\" ? \"StorageVectorsUnknownError\" : \"StorageUnknownError\";\n\t\tthis.originalError = originalError;\n\t}\n};\n/**\n* @deprecated Use StorageError with namespace='vectors' instead\n* Alias for backward compatibility with existing vector storage code\n*/\nvar StorageVectorsError = class extends StorageError {\n\tconstructor(message) {\n\t\tsuper(message, \"vectors\");\n\t}\n};\n/**\n* Type guard to check if an error is a StorageVectorsError\n* @param error - The error to check\n* @returns True if the error is a StorageVectorsError\n*/\nfunction isStorageVectorsError(error) {\n\treturn isStorageError(error) && error[\"namespace\"] === \"vectors\";\n}\n/**\n* @deprecated Use StorageApiError with namespace='vectors' instead\n* Alias for backward compatibility with existing vector storage code\n*/\nvar StorageVectorsApiError = class extends StorageApiError {\n\tconstructor(message, status, statusCode) {\n\t\tsuper(message, status, statusCode, \"vectors\");\n\t}\n};\n/**\n* @deprecated Use StorageUnknownError with namespace='vectors' instead\n* Alias for backward compatibility with existing vector storage code\n*/\nvar StorageVectorsUnknownError = class extends StorageUnknownError {\n\tconstructor(message, originalError) {\n\t\tsuper(message, originalError, \"vectors\");\n\t}\n};\n/**\n* Error codes specific to S3 Vectors API\n* Maps AWS service errors to application-friendly error codes\n*/\nlet StorageVectorsErrorCode = /* @__PURE__ */ function(StorageVectorsErrorCode$1) {\n\t/** Internal server fault (HTTP 500) */\n\tStorageVectorsErrorCode$1[\"InternalError\"] = \"InternalError\";\n\t/** Resource already exists / conflict (HTTP 409) */\n\tStorageVectorsErrorCode$1[\"S3VectorConflictException\"] = \"S3VectorConflictException\";\n\t/** Resource not found (HTTP 404) */\n\tStorageVectorsErrorCode$1[\"S3VectorNotFoundException\"] = \"S3VectorNotFoundException\";\n\t/** Delete bucket while not empty (HTTP 400) */\n\tStorageVectorsErrorCode$1[\"S3VectorBucketNotEmpty\"] = \"S3VectorBucketNotEmpty\";\n\t/** Exceeds bucket quota/limit (HTTP 400) */\n\tStorageVectorsErrorCode$1[\"S3VectorMaxBucketsExceeded\"] = \"S3VectorMaxBucketsExceeded\";\n\t/** Exceeds index quota/limit (HTTP 400) */\n\tStorageVectorsErrorCode$1[\"S3VectorMaxIndexesExceeded\"] = \"S3VectorMaxIndexesExceeded\";\n\treturn StorageVectorsErrorCode$1;\n}({});\n\n//#endregion\n//#region src/lib/common/headers.ts\n/**\n* Sets a header with case-insensitive deduplication.\n* Removes any existing headers whose name matches (case-insensitive),\n* then sets the value under the lowercase key. Does not mutate the input object.\n*\n* @param headers - Existing headers object\n* @param name - Header name to set (stored as lowercase)\n* @param value - Header value\n* @returns New headers object with the header set\n*/\nfunction setHeader(headers, name, value) {\n\tconst result = _objectSpread2({}, headers);\n\tconst nameLower = name.toLowerCase();\n\tfor (const key of Object.keys(result)) if (key.toLowerCase() === nameLower) delete result[key];\n\tresult[nameLower] = value;\n\treturn result;\n}\n/**\n* Normalizes all header keys to lowercase with case-insensitive deduplication.\n* When duplicate keys exist (differing only in case), the last value wins.\n* Does not mutate the input object.\n*\n* @param headers - Headers object to normalize\n* @returns New headers object with all keys lowercased\n*/\nfunction normalizeHeaders(headers) {\n\tconst result = {};\n\tfor (const [key, value] of Object.entries(headers)) result[key.toLowerCase()] = value;\n\treturn result;\n}\n\n//#endregion\n//#region src/lib/common/helpers.ts\n/**\n* Resolves the fetch implementation to use\n* Uses custom fetch if provided, otherwise uses native fetch\n*\n* @param customFetch - Optional custom fetch implementation\n* @returns Resolved fetch function\n*/\nconst resolveFetch = (customFetch) => {\n\tif (customFetch) return (...args) => customFetch(...args);\n\treturn (...args) => fetch(...args);\n};\n/**\n* Determine if input is a plain object\n* An object is plain if it's created by either {}, new Object(), or Object.create(null)\n*\n* @param value - Value to check\n* @returns True if value is a plain object\n* @source https://github.com/sindresorhus/is-plain-obj\n*/\nconst isPlainObject = (value) => {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n};\n/**\n* Recursively converts object keys from snake_case to camelCase\n* Used for normalizing API responses\n*\n* @param item - Object to convert\n* @returns Converted object with camelCase keys\n*/\nconst recursiveToCamel = (item) => {\n\tif (Array.isArray(item)) return item.map((el) => recursiveToCamel(el));\n\telse if (typeof item === \"function\" || item !== Object(item)) return item;\n\tconst result = {};\n\tObject.entries(item).forEach(([key, value]) => {\n\t\tconst newKey = key.replace(/([-_][a-z])/gi, (c) => c.toUpperCase().replace(/[-_]/g, \"\"));\n\t\tresult[newKey] = recursiveToCamel(value);\n\t});\n\treturn result;\n};\n/**\n* Validates if a given bucket name is valid according to Supabase Storage API rules\n* Mirrors backend validation from: storage/src/storage/limits.ts:isValidBucketName()\n*\n* Rules:\n* - Length: 1-100 characters\n* - Allowed characters: alphanumeric (a-z, A-Z, 0-9), underscore (_), and safe special characters\n* - Safe special characters: ! - . * ' ( ) space & $ @ = ; : + , ?\n* - Forbidden: path separators (/, \\), path traversal (..), leading/trailing whitespace\n*\n* AWS S3 Reference: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html\n*\n* @param bucketName - The bucket name to validate\n* @returns true if valid, false otherwise\n*/\nconst isValidBucketName = (bucketName) => {\n\tif (!bucketName || typeof bucketName !== \"string\") return false;\n\tif (bucketName.length === 0 || bucketName.length > 100) return false;\n\tif (bucketName.trim() !== bucketName) return false;\n\tif (bucketName.includes(\"/\") || bucketName.includes(\"\\\\\")) return false;\n\treturn /^[\\w!.\\*'() &$@=;:+,?-]+$/.test(bucketName);\n};\n/**\n* Percent-encodes each segment of a storage path so URL delimiters within a\n* key (e.g. `?`, `#`) can't be interpreted as a querystring/fragment start.\n*\n* Splits on `/` so real path separators stay literal — the storage server\n* routes on them and decodes each segment back to the original key.\n*\n* @param path - A bucket id or `bucketId/objectKey` path\n* @returns The path with each `/`-delimited segment percent-encoded\n*/\nconst encodeStoragePath = (path) => path.split(\"/\").map(encodeURIComponent).join(\"/\");\n\n//#endregion\n//#region src/lib/common/fetch.ts\n/**\n* Extracts error message from various error response formats\n* @param err - Error object from API\n* @returns Human-readable error message\n*/\nconst _getErrorMessage = (err) => {\n\tif (typeof err === \"object\" && err !== null) {\n\t\tconst e = err;\n\t\tif (typeof e.msg === \"string\") return e.msg;\n\t\tif (typeof e.message === \"string\") return e.message;\n\t\tif (typeof e.error_description === \"string\") return e.error_description;\n\t\tif (typeof e.error === \"string\") return e.error;\n\t\tif (typeof e.error === \"object\" && e.error !== null) {\n\t\t\tconst nested = e.error;\n\t\t\tif (typeof nested.message === \"string\") return nested.message;\n\t\t}\n\t}\n\treturn JSON.stringify(err);\n};\n/**\n* Handles fetch errors and converts them to Storage error types\n* @param error - The error caught from fetch\n* @param reject - Promise rejection function\n* @param options - Fetch options that may affect error handling\n* @param namespace - Error namespace ('storage' or 'vectors')\n*/\nconst handleError = async (error, reject, options, namespace) => {\n\tif (error !== null && typeof error === \"object\" && \"json\" in error && typeof error.json === \"function\") {\n\t\tconst responseError = error;\n\t\tlet status = parseInt(String(responseError.status), 10);\n\t\tif (!Number.isFinite(status)) status = 500;\n\t\tresponseError.json().then((err) => {\n\t\t\tconst statusCode = (err === null || err === void 0 ? void 0 : err.statusCode) || (err === null || err === void 0 ? void 0 : err.code) || status + \"\";\n\t\t\treject(new StorageApiError(_getErrorMessage(err), status, statusCode, namespace, err === null || err === void 0 ? void 0 : err.code));\n\t\t}).catch(() => {\n\t\t\tconst statusCode = status + \"\";\n\t\t\treject(new StorageApiError(responseError.statusText || `HTTP ${status} error`, status, statusCode, namespace));\n\t\t});\n\t} else reject(new StorageUnknownError(_getErrorMessage(error), error, namespace));\n};\n/**\n* Builds request parameters for fetch calls\n* @param method - HTTP method\n* @param options - Custom fetch options\n* @param parameters - Additional fetch parameters like AbortSignal\n* @param body - Request body (will be JSON stringified if plain object)\n* @returns Complete fetch request parameters\n*/\nconst _getRequestParams = (method, options, parameters, body) => {\n\tconst params = {\n\t\tmethod,\n\t\theaders: (options === null || options === void 0 ? void 0 : options.headers) || {}\n\t};\n\tif (method === \"GET\" || method === \"HEAD\" || !body) return _objectSpread2(_objectSpread2({}, params), parameters);\n\tif (isPlainObject(body)) {\n\t\tvar _contentType;\n\t\tconst headers = (options === null || options === void 0 ? void 0 : options.headers) || {};\n\t\tlet contentType;\n\t\tfor (const [key, value] of Object.entries(headers)) if (key.toLowerCase() === \"content-type\") contentType = value;\n\t\tparams.headers = setHeader(headers, \"Content-Type\", (_contentType = contentType) !== null && _contentType !== void 0 ? _contentType : \"application/json\");\n\t\tparams.body = JSON.stringify(body);\n\t} else params.body = body;\n\tif (options === null || options === void 0 ? void 0 : options.duplex) params.duplex = options.duplex;\n\treturn _objectSpread2(_objectSpread2({}, params), parameters);\n};\n/**\n* Internal request handler that wraps fetch with error handling\n* @param fetcher - Fetch function to use\n* @param method - HTTP method\n* @param url - Request URL\n* @param options - Custom fetch options\n* @param parameters - Additional fetch parameters\n* @param body - Request body\n* @param namespace - Error namespace ('storage' or 'vectors')\n* @returns Promise with parsed response or error\n*/\nasync function _handleRequest(fetcher, method, url, options, parameters, body, namespace) {\n\treturn new Promise((resolve, reject) => {\n\t\tfetcher(url, _getRequestParams(method, options, parameters, body)).then((result) => {\n\t\t\tif (!result.ok) throw result;\n\t\t\tif (options === null || options === void 0 ? void 0 : options.noResolveJson) return result;\n\t\t\tif (namespace === \"vectors\") {\n\t\t\t\tconst contentType = result.headers.get(\"content-type\");\n\t\t\t\tif (result.headers.get(\"content-length\") === \"0\" || result.status === 204) return {};\n\t\t\t\tif (!contentType || !contentType.includes(\"application/json\")) return {};\n\t\t\t}\n\t\t\treturn result.json();\n\t\t}).then((data) => resolve(data)).catch((error) => handleError(error, reject, options, namespace));\n\t});\n}\n/**\n* Creates a fetch API with the specified namespace\n* @param namespace - Error namespace ('storage' or 'vectors')\n* @returns Object with HTTP method functions\n*/\nfunction createFetchApi(namespace = \"storage\") {\n\treturn {\n\t\tget: async (fetcher, url, options, parameters) => {\n\t\t\treturn _handleRequest(fetcher, \"GET\", url, options, parameters, void 0, namespace);\n\t\t},\n\t\tpost: async (fetcher, url, body, options, parameters) => {\n\t\t\treturn _handleRequest(fetcher, \"POST\", url, options, parameters, body, namespace);\n\t\t},\n\t\tput: async (fetcher, url, body, options, parameters) => {\n\t\t\treturn _handleRequest(fetcher, \"PUT\", url, options, parameters, body, namespace);\n\t\t},\n\t\thead: async (fetcher, url, options, parameters) => {\n\t\t\treturn _handleRequest(fetcher, \"HEAD\", url, _objectSpread2(_objectSpread2({}, options), {}, { noResolveJson: true }), parameters, void 0, namespace);\n\t\t},\n\t\tremove: async (fetcher, url, body, options, parameters) => {\n\t\t\treturn _handleRequest(fetcher, \"DELETE\", url, options, parameters, body, namespace);\n\t\t}\n\t};\n}\nconst defaultApi = createFetchApi(\"storage\");\nconst { get, post, put, head, remove } = defaultApi;\nconst vectorsApi = createFetchApi(\"vectors\");\n\n//#endregion\n//#region src/lib/common/BaseApiClient.ts\n/**\n* @ignore\n* Base API client class for all Storage API classes\n* Provides common infrastructure for error handling and configuration\n*\n* @typeParam TError - The error type (StorageError or subclass)\n*/\nvar BaseApiClient = class {\n\t/**\n\t* Creates a new BaseApiClient instance\n\t* @param url - Base URL for API requests\n\t* @param headers - Default headers for API requests\n\t* @param fetch - Optional custom fetch implementation\n\t* @param namespace - Error namespace ('storage' or 'vectors')\n\t*/\n\tconstructor(url, headers = {}, fetch$1, namespace = \"storage\") {\n\t\tthis.shouldThrowOnError = false;\n\t\tthis.url = url;\n\t\tthis.headers = normalizeHeaders(headers);\n\t\tthis.fetch = resolveFetch(fetch$1);\n\t\tthis.namespace = namespace;\n\t}\n\t/**\n\t* Enable throwing errors instead of returning them.\n\t* When enabled, errors are thrown instead of returned in { data, error } format.\n\t*\n\t* @returns this - For method chaining\n\t*/\n\tthrowOnError() {\n\t\tthis.shouldThrowOnError = true;\n\t\treturn this;\n\t}\n\t/**\n\t* Set an HTTP header for the request.\n\t* Creates a shallow copy of headers to avoid mutating shared state.\n\t*\n\t* @param name - Header name\n\t* @param value - Header value\n\t* @returns this - For method chaining\n\t*/\n\tsetHeader(name, value) {\n\t\tthis.headers = setHeader(this.headers, name, value);\n\t\treturn this;\n\t}\n\t/**\n\t* Handles API operation with standardized error handling\n\t* Eliminates repetitive try-catch blocks across all API methods\n\t*\n\t* This wrapper:\n\t* 1. Executes the operation\n\t* 2. Returns { data, error: null } on success\n\t* 3. Returns { data: null, error } on failure (if shouldThrowOnError is false)\n\t* 4. Throws error on failure (if shouldThrowOnError is true)\n\t*\n\t* @typeParam T - The expected data type from the operation\n\t* @param operation - Async function that performs the API call\n\t* @returns Promise with { data, error } tuple\n\t*\n\t* @example Handling an operation\n\t* ```typescript\n\t* async listBuckets() {\n\t*   return this.handleOperation(async () => {\n\t*     return await get(this.fetch, `${this.url}/bucket`, {\n\t*       headers: this.headers,\n\t*     })\n\t*   })\n\t* }\n\t* ```\n\t*/\n\tasync handleOperation(operation) {\n\t\tvar _this = this;\n\t\ttry {\n\t\t\treturn {\n\t\t\t\tdata: await operation(),\n\t\t\t\terror: null\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (_this.shouldThrowOnError) throw error;\n\t\t\tif (isStorageError(error)) return {\n\t\t\t\tdata: null,\n\t\t\t\terror\n\t\t\t};\n\t\t\tthrow error;\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/packages/StreamDownloadBuilder.ts\nlet _Symbol$toStringTag$1;\n_Symbol$toStringTag$1 = Symbol.toStringTag;\nvar StreamDownloadBuilder = class {\n\tconstructor(downloadFn, shouldThrowOnError) {\n\t\tthis.downloadFn = downloadFn;\n\t\tthis.shouldThrowOnError = shouldThrowOnError;\n\t\tthis[_Symbol$toStringTag$1] = \"StreamDownloadBuilder\";\n\t\tthis.promise = null;\n\t}\n\tthen(onfulfilled, onrejected) {\n\t\treturn this.getPromise().then(onfulfilled, onrejected);\n\t}\n\tcatch(onrejected) {\n\t\treturn this.getPromise().catch(onrejected);\n\t}\n\tfinally(onfinally) {\n\t\treturn this.getPromise().finally(onfinally);\n\t}\n\tgetPromise() {\n\t\tif (!this.promise) this.promise = this.execute();\n\t\treturn this.promise;\n\t}\n\tasync execute() {\n\t\tvar _this = this;\n\t\ttry {\n\t\t\treturn {\n\t\t\t\tdata: (await _this.downloadFn()).body,\n\t\t\t\terror: null\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (_this.shouldThrowOnError) throw error;\n\t\t\tif (isStorageError(error)) return {\n\t\t\t\tdata: null,\n\t\t\t\terror\n\t\t\t};\n\t\t\tthrow error;\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/packages/BlobDownloadBuilder.ts\nlet _Symbol$toStringTag;\n_Symbol$toStringTag = Symbol.toStringTag;\nvar BlobDownloadBuilder = class {\n\tconstructor(downloadFn, shouldThrowOnError) {\n\t\tthis.downloadFn = downloadFn;\n\t\tthis.shouldThrowOnError = shouldThrowOnError;\n\t\tthis[_Symbol$toStringTag] = \"BlobDownloadBuilder\";\n\t\tthis.promise = null;\n\t}\n\tasStream() {\n\t\treturn new StreamDownloadBuilder(this.downloadFn, this.shouldThrowOnError);\n\t}\n\tthen(onfulfilled, onrejected) {\n\t\treturn this.getPromise().then(onfulfilled, onrejected);\n\t}\n\tcatch(onrejected) {\n\t\treturn this.getPromise().catch(onrejected);\n\t}\n\tfinally(onfinally) {\n\t\treturn this.getPromise().finally(onfinally);\n\t}\n\tgetPromise() {\n\t\tif (!this.promise) this.promise = this.execute();\n\t\treturn this.promise;\n\t}\n\tasync execute() {\n\t\tvar _this = this;\n\t\ttry {\n\t\t\treturn {\n\t\t\t\tdata: await (await _this.downloadFn()).blob(),\n\t\t\t\terror: null\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (_this.shouldThrowOnError) throw error;\n\t\t\tif (isStorageError(error)) return {\n\t\t\t\tdata: null,\n\t\t\t\terror\n\t\t\t};\n\t\t\tthrow error;\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/packages/StorageFileApi.ts\nconst DEFAULT_SEARCH_OPTIONS = {\n\tlimit: 100,\n\toffset: 0,\n\tsortBy: {\n\t\tcolumn: \"name\",\n\t\torder: \"asc\"\n\t}\n};\nconst DEFAULT_FILE_OPTIONS = {\n\tcacheControl: \"3600\",\n\tcontentType: \"text/plain;charset=UTF-8\",\n\tupsert: false\n};\nvar StorageFileApi = class extends BaseApiClient {\n\tconstructor(url, headers = {}, bucketId, fetch$1) {\n\t\tsuper(url, headers, fetch$1, \"storage\");\n\t\tthis.bucketId = bucketId;\n\t}\n\t/**\n\t* Uploads a file to an existing bucket or replaces an existing file at the specified path with a new one.\n\t*\n\t* @param method HTTP method.\n\t* @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\n\t* @param fileBody The body of the file to be stored in the bucket.\n\t*/\n\tasync uploadOrUpdate(method, path, fileBody, fileOptions) {\n\t\tvar _this = this;\n\t\treturn _this.handleOperation(async () => {\n\t\t\tlet body;\n\t\t\tconst options = _objectSpread2(_objectSpread2({}, DEFAULT_FILE_OPTIONS), fileOptions);\n\t\t\tlet headers = _objectSpread2(_objectSpread2({}, _this.headers), method === \"POST\" && { \"x-upsert\": String(options.upsert) });\n\t\t\tconst metadata = options.metadata;\n\t\t\tif (typeof Blob !== \"undefined\" && fileBody instanceof Blob) {\n\t\t\t\tbody = new FormData();\n\t\t\t\tbody.append(\"cacheControl\", options.cacheControl);\n\t\t\t\tif (metadata) body.append(\"metadata\", _this.encodeMetadata(metadata));\n\t\t\t\tbody.append(\"\", fileBody);\n\t\t\t} else if (typeof FormData !== \"undefined\" && fileBody instanceof FormData) {\n\t\t\t\tbody = fileBody;\n\t\t\t\tif (!body.has(\"cacheControl\")) body.append(\"cacheControl\", options.cacheControl);\n\t\t\t\tif (metadata && !body.has(\"metadata\")) body.append(\"metadata\", _this.encodeMetadata(metadata));\n\t\t\t} else {\n\t\t\t\tbody = fileBody;\n\t\t\t\theaders[\"cache-control\"] = `max-age=${options.cacheControl}`;\n\t\t\t\theaders[\"content-type\"] = options.contentType;\n\t\t\t\tif (metadata) headers[\"x-metadata\"] = _this.toBase64(_this.encodeMetadata(metadata));\n\t\t\t\tif ((typeof ReadableStream !== \"undefined\" && body instanceof ReadableStream || body && typeof body === \"object\" && \"pipe\" in body && typeof body.pipe === \"function\") && !options.duplex) options.duplex = \"half\";\n\t\t\t}\n\t\t\tif (fileOptions === null || fileOptions === void 0 ? void 0 : fileOptions.headers) for (const [key, value] of Object.entries(fileOptions.headers)) headers = setHeader(headers, key, value);\n\t\t\tconst cleanPath = _this._removeEmptyFolders(path);\n\t\t\tconst _path = _this._getFinalPath(cleanPath);\n\t\t\tconst data = await (method == \"PUT\" ? put : post)(_this.fetch, `${_this.url}/object/${_path}`, body, _objectSpread2({ headers }, (options === null || options === void 0 ? void 0 : options.duplex) ? { duplex: options.duplex } : {}));\n\t\t\treturn {\n\t\t\t\tpath: cleanPath,\n\t\t\t\tid: data.Id,\n\t\t\t\tfullPath: data.Key\n\t\t\t};\n\t\t});\n\t}\n\t/**\n\t* Uploads a file to an existing bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\n\t* @param fileBody The body of the file to be stored in the bucket.\n\t* @param fileOptions Optional file upload options including cacheControl, contentType, upsert, and metadata.\n\t* @returns Promise with response containing file path, id, and fullPath or error\n\t*\n\t* @example Upload file\n\t* ```js\n\t* const avatarFile = event.target.files[0]\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .upload('public/avatar1.png', avatarFile, {\n\t*     cacheControl: '3600',\n\t*     upsert: false\n\t*   })\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"path\": \"public/avatar1.png\",\n\t*     \"fullPath\": \"avatars/public/avatar1.png\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @example Upload file using `ArrayBuffer` from base64 file data\n\t* ```js\n\t* import { decode } from 'base64-arraybuffer'\n\t*\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .upload('public/avatar1.png', decode('base64FileData'), {\n\t*     contentType: 'image/png'\n\t*   })\n\t* ```\n\t*\n\t* @example Handling errors\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .upload('public/avatar1.png', avatarFile)\n\t*\n\t* if (error) {\n\t*   // Log the full error so fields like `statusCode` and `error` (the\n\t*   // Storage error name, e.g. \"Duplicate\") aren't hidden behind `error.message`.\n\t*   console.error(error)\n\t*   return\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: none\n\t*   - `objects` table permissions: only `insert` when you are uploading new files and `select`, `insert` and `update` when you are upserting files\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t* - For React Native, using either `Blob`, `File` or `FormData` does not work as intended. Upload file using `ArrayBuffer` from base64 file data instead, see example below.\n\t*/\n\tasync upload(path, fileBody, fileOptions) {\n\t\treturn this.uploadOrUpdate(\"POST\", path, fileBody, fileOptions);\n\t}\n\t/**\n\t* Upload a file with a token generated from `createSignedUploadUrl`.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\n\t* @param token The token generated from `createSignedUploadUrl`\n\t* @param fileBody The body of the file to be stored in the bucket.\n\t* @param fileOptions HTTP headers (cacheControl, contentType, etc.).\n\t* **Note:** The `upsert` option has no effect here. To enable upsert behavior,\n\t* pass `{ upsert: true }` when calling `createSignedUploadUrl()` instead.\n\t* @returns Promise with response containing file path and fullPath or error\n\t*\n\t* @example Upload to a signed URL\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .uploadToSignedUrl('folder/cat.jpg', 'token-from-createSignedUploadUrl', file)\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"path\": \"folder/cat.jpg\",\n\t*     \"fullPath\": \"avatars/folder/cat.jpg\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: none\n\t*   - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync uploadToSignedUrl(path, token, fileBody, fileOptions) {\n\t\tvar _this3 = this;\n\t\tconst cleanPath = _this3._removeEmptyFolders(path);\n\t\tconst _path = _this3._getFinalPath(cleanPath);\n\t\tconst url = new URL(_this3.url + `/object/upload/sign/${_path}`);\n\t\turl.searchParams.set(\"token\", token);\n\t\treturn _this3.handleOperation(async () => {\n\t\t\tlet body;\n\t\t\tconst options = _objectSpread2(_objectSpread2({}, DEFAULT_FILE_OPTIONS), fileOptions);\n\t\t\tlet headers = _objectSpread2(_objectSpread2({}, _this3.headers), { \"x-upsert\": String(options.upsert) });\n\t\t\tconst metadata = options.metadata;\n\t\t\tif (typeof Blob !== \"undefined\" && fileBody instanceof Blob) {\n\t\t\t\tbody = new FormData();\n\t\t\t\tbody.append(\"cacheControl\", options.cacheControl);\n\t\t\t\tif (metadata) body.append(\"metadata\", _this3.encodeMetadata(metadata));\n\t\t\t\tbody.append(\"\", fileBody);\n\t\t\t} else if (typeof FormData !== \"undefined\" && fileBody instanceof FormData) {\n\t\t\t\tbody = fileBody;\n\t\t\t\tif (!body.has(\"cacheControl\")) body.append(\"cacheControl\", options.cacheControl);\n\t\t\t\tif (metadata && !body.has(\"metadata\")) body.append(\"metadata\", _this3.encodeMetadata(metadata));\n\t\t\t} else {\n\t\t\t\tbody = fileBody;\n\t\t\t\theaders[\"cache-control\"] = `max-age=${options.cacheControl}`;\n\t\t\t\theaders[\"content-type\"] = options.contentType;\n\t\t\t\tif (metadata) headers[\"x-metadata\"] = _this3.toBase64(_this3.encodeMetadata(metadata));\n\t\t\t\tif ((typeof ReadableStream !== \"undefined\" && body instanceof ReadableStream || body && typeof body === \"object\" && \"pipe\" in body && typeof body.pipe === \"function\") && !options.duplex) options.duplex = \"half\";\n\t\t\t}\n\t\t\tif (fileOptions === null || fileOptions === void 0 ? void 0 : fileOptions.headers) for (const [key, value] of Object.entries(fileOptions.headers)) headers = setHeader(headers, key, value);\n\t\t\treturn {\n\t\t\t\tpath: cleanPath,\n\t\t\t\tfullPath: (await put(_this3.fetch, url.toString(), body, _objectSpread2({ headers }, (options === null || options === void 0 ? void 0 : options.duplex) ? { duplex: options.duplex } : {}))).Key\n\t\t\t};\n\t\t});\n\t}\n\t/**\n\t* Creates a signed upload URL.\n\t* Signed upload URLs can be used to upload files to the bucket without further authentication.\n\t* They are valid for 2 hours.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The file path, including the current file name. For example `folder/image.png`.\n\t* @param options.upsert If set to true, allows the file to be overwritten if it already exists.\n\t* @returns Promise with response containing signed upload URL, token, and path or error\n\t*\n\t* @example Create Signed Upload URL\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .createSignedUploadUrl('folder/cat.jpg')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"signedUrl\": \"https://example.supabase.co/storage/v1/object/upload/sign/avatars/folder/cat.jpg?token=<TOKEN>\",\n\t*     \"path\": \"folder/cat.jpg\",\n\t*     \"token\": \"<TOKEN>\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: none\n\t*   - `objects` table permissions: `insert`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync createSignedUploadUrl(path, options) {\n\t\tvar _this4 = this;\n\t\treturn _this4.handleOperation(async () => {\n\t\t\tlet _path = _this4._getFinalPath(path);\n\t\t\tconst headers = _objectSpread2({}, _this4.headers);\n\t\t\tif (options === null || options === void 0 ? void 0 : options.upsert) headers[\"x-upsert\"] = \"true\";\n\t\t\tconst data = await post(_this4.fetch, `${_this4.url}/object/upload/sign/${_path}`, {}, { headers });\n\t\t\tconst url = new URL(_this4.url + data.url);\n\t\t\tconst token = url.searchParams.get(\"token\");\n\t\t\tif (!token) throw new StorageError(\"No token returned by API\");\n\t\t\treturn {\n\t\t\t\tsignedUrl: url.toString(),\n\t\t\t\tpath,\n\t\t\t\ttoken\n\t\t\t};\n\t\t});\n\t}\n\t/**\n\t* Replaces an existing file at the specified path with a new one.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to update.\n\t* @param fileBody The body of the file to be stored in the bucket.\n\t* @param fileOptions Optional file upload options including cacheControl, contentType, and metadata.\n\t* **Note:** The `upsert` option has no effect here. `update()` always replaces the\n\t* file at the given path, so the `x-upsert` header is not sent. To control upsert\n\t* behavior, use `upload()` instead.\n\t* @returns Promise with response containing file path, id, and fullPath or error\n\t*\n\t* @example Update file\n\t* ```js\n\t* const avatarFile = event.target.files[0]\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .update('public/avatar1.png', avatarFile, {\n\t*     cacheControl: '3600'\n\t*   })\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"path\": \"public/avatar1.png\",\n\t*     \"fullPath\": \"avatars/public/avatar1.png\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @example Update file using `ArrayBuffer` from base64 file data\n\t* ```js\n\t* import {decode} from 'base64-arraybuffer'\n\t*\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .update('public/avatar1.png', decode('base64FileData'), {\n\t*     contentType: 'image/png'\n\t*   })\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: none\n\t*   - `objects` table permissions: `update` and `select`\n\t* - `update()` always replaces the file at the given path regardless of the `upsert` option.\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t* - For React Native, using either `Blob`, `File` or `FormData` does not work as intended. Update file using `ArrayBuffer` from base64 file data instead, see example below.\n\t*/\n\tasync update(path, fileBody, fileOptions) {\n\t\treturn this.uploadOrUpdate(\"PUT\", path, fileBody, fileOptions);\n\t}\n\t/**\n\t* Moves an existing file to a new path in the same bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param fromPath The original file path, including the current file name. For example `folder/image.png`.\n\t* @param toPath The new file path, including the new file name. For example `folder/image-new.png`.\n\t* @param options The destination options.\n\t* @returns Promise with response containing success message or error\n\t*\n\t* @example Move file\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .move('public/avatar1.png', 'private/avatar2.png')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"message\": \"Successfully moved\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: none\n\t*   - `objects` table permissions: `update` and `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync move(fromPath, toPath, options) {\n\t\tvar _this6 = this;\n\t\treturn _this6.handleOperation(async () => {\n\t\t\treturn await post(_this6.fetch, `${_this6.url}/object/move`, {\n\t\t\t\tbucketId: _this6.bucketId,\n\t\t\t\tsourceKey: fromPath,\n\t\t\t\tdestinationKey: toPath,\n\t\t\t\tdestinationBucket: options === null || options === void 0 ? void 0 : options.destinationBucket\n\t\t\t}, { headers: _this6.headers });\n\t\t});\n\t}\n\t/**\n\t* Copies an existing file to a new path in the same bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param fromPath The original file path, including the current file name. For example `folder/image.png`.\n\t* @param toPath The new file path, including the new file name. For example `folder/image-copy.png`.\n\t* @param options The destination options.\n\t* @returns Promise with response containing copied file path or error\n\t*\n\t* @example Copy file\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .copy('public/avatar1.png', 'private/avatar2.png')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"path\": \"avatars/private/avatar2.png\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: none\n\t*   - `objects` table permissions: `insert` and `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync copy(fromPath, toPath, options) {\n\t\tvar _this7 = this;\n\t\treturn _this7.handleOperation(async () => {\n\t\t\treturn { path: (await post(_this7.fetch, `${_this7.url}/object/copy`, {\n\t\t\t\tbucketId: _this7.bucketId,\n\t\t\t\tsourceKey: fromPath,\n\t\t\t\tdestinationKey: toPath,\n\t\t\t\tdestinationBucket: options === null || options === void 0 ? void 0 : options.destinationBucket\n\t\t\t}, { headers: _this7.headers })).Key };\n\t\t});\n\t}\n\t/**\n\t* Creates a signed URL. Use a signed URL to share a file for a fixed amount of time.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The file path, including the current file name. For example `folder/image.png`.\n\t* @param expiresIn The number of seconds until the signed URL expires. For example, `60` for a URL which is valid for one minute.\n\t* @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\n\t* @param options.transform Transform the asset before serving it to the client.\n\t* @param options.cacheNonce Append a cache nonce parameter to the URL to invalidate the cache.\n\t* @returns Promise with response containing signed URL or error\n\t*\n\t* @example Create Signed URL\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .createSignedUrl('folder/avatar1.png', 60)\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"signedUrl\": \"https://example.supabase.co/storage/v1/object/sign/avatars/folder/avatar1.png?token=<TOKEN>\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @example Create a signed URL for an asset with transformations\n\t* ```js\n\t* const { data } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .createSignedUrl('folder/avatar1.png', 60, {\n\t*     transform: {\n\t*       width: 100,\n\t*       height: 100,\n\t*     }\n\t*   })\n\t* ```\n\t*\n\t* @example Create a signed URL which triggers the download of the asset\n\t* ```js\n\t* const { data } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .createSignedUrl('folder/avatar1.png', 60, {\n\t*     download: true,\n\t*   })\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: none\n\t*   - `objects` table permissions: `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync createSignedUrl(path, expiresIn, options) {\n\t\tvar _this8 = this;\n\t\treturn _this8.handleOperation(async () => {\n\t\t\tlet _path = _this8._getFinalPath(path);\n\t\t\tconst hasTransform = typeof (options === null || options === void 0 ? void 0 : options.transform) === \"object\" && options.transform !== null && Object.keys(options.transform).length > 0;\n\t\t\tlet data = await post(_this8.fetch, `${_this8.url}/object/sign/${_path}`, _objectSpread2({ expiresIn }, hasTransform ? { transform: options.transform } : {}), { headers: _this8.headers });\n\t\t\tconst query = new URLSearchParams();\n\t\t\tif (options === null || options === void 0 ? void 0 : options.download) query.set(\"download\", options.download === true ? \"\" : options.download);\n\t\t\tif ((options === null || options === void 0 ? void 0 : options.cacheNonce) != null) query.set(\"cacheNonce\", String(options.cacheNonce));\n\t\t\tconst queryString = query.toString();\n\t\t\treturn { signedUrl: encodeURI(`${_this8.url}${data.signedURL}${queryString ? `&${queryString}` : \"\"}`) };\n\t\t});\n\t}\n\t/**\n\t* Creates multiple signed URLs. Use a signed URL to share a file for a fixed amount of time.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param paths The file paths to be downloaded, including the current file names. For example `['folder/image.png', 'folder2/image2.png']`.\n\t* @param expiresIn The number of seconds until the signed URLs expire. For example, `60` for URLs which are valid for one minute.\n\t* @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\n\t* @param options.cacheNonce Append a cache nonce parameter to the URL to invalidate the cache.\n\t* @returns Promise with response containing array of objects with signedUrl, path, and error or error\n\t*\n\t* @example Create Signed URLs\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .createSignedUrls(['folder/avatar1.png', 'folder/avatar2.png'], 60)\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"error\": null,\n\t*       \"path\": \"folder/avatar1.png\",\n\t*       \"signedURL\": \"/object/sign/avatars/folder/avatar1.png?token=<TOKEN>\",\n\t*       \"signedUrl\": \"https://example.supabase.co/storage/v1/object/sign/avatars/folder/avatar1.png?token=<TOKEN>\"\n\t*     },\n\t*     {\n\t*       \"error\": null,\n\t*       \"path\": \"folder/avatar2.png\",\n\t*       \"signedURL\": \"/object/sign/avatars/folder/avatar2.png?token=<TOKEN>\",\n\t*       \"signedUrl\": \"https://example.supabase.co/storage/v1/object/sign/avatars/folder/avatar2.png?token=<TOKEN>\"\n\t*     }\n\t*   ],\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: none\n\t*   - `objects` table permissions: `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync createSignedUrls(paths, expiresIn, options) {\n\t\tvar _this9 = this;\n\t\treturn _this9.handleOperation(async () => {\n\t\t\tconst data = await post(_this9.fetch, `${_this9.url}/object/sign/${_this9.bucketId}`, {\n\t\t\t\texpiresIn,\n\t\t\t\tpaths\n\t\t\t}, { headers: _this9.headers });\n\t\t\tconst query = new URLSearchParams();\n\t\t\tif (options === null || options === void 0 ? void 0 : options.download) query.set(\"download\", options.download === true ? \"\" : options.download);\n\t\t\tif ((options === null || options === void 0 ? void 0 : options.cacheNonce) != null) query.set(\"cacheNonce\", String(options.cacheNonce));\n\t\t\tconst queryString = query.toString();\n\t\t\treturn data.map((datum) => _objectSpread2(_objectSpread2({}, datum), {}, { signedUrl: datum.signedURL ? encodeURI(`${_this9.url}${datum.signedURL}${queryString ? `&${queryString}` : \"\"}`) : null }));\n\t\t});\n\t}\n\t/**\n\t* Downloads a file from a private bucket. For public buckets, make a request to the URL returned from `getPublicUrl` instead.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The full path and file name of the file to be downloaded. For example `folder/image.png`.\n\t* @param options Optional settings: `transform` to transform the asset before serving it to the client, and `cacheNonce` to append a cache nonce parameter to the URL to invalidate the cache.\n\t* @param parameters Additional fetch parameters like signal for cancellation. Supports standard fetch options including cache control.\n\t* @returns BlobDownloadBuilder instance for downloading the file\n\t*\n\t* @example Download file\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .download('folder/avatar1.png')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": <BLOB>,\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @example Download file with transformations\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .download('folder/avatar1.png', {\n\t*     transform: {\n\t*       width: 100,\n\t*       height: 100,\n\t*       quality: 80\n\t*     }\n\t*   })\n\t* ```\n\t*\n\t* @example Download with cache control (useful in Edge Functions)\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .download('folder/avatar1.png', {}, { cache: 'no-store' })\n\t* ```\n\t*\n\t* @example Download with abort signal\n\t* ```js\n\t* const controller = new AbortController()\n\t* setTimeout(() => controller.abort(), 5000)\n\t*\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .download('folder/avatar1.png', {}, { signal: controller.signal })\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: none\n\t*   - `objects` table permissions: `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tdownload(path, options, parameters) {\n\t\tconst renderPath = typeof (options === null || options === void 0 ? void 0 : options.transform) === \"object\" && options.transform !== null && Object.keys(options.transform).length > 0 ? \"render/image/authenticated\" : \"object\";\n\t\tconst query = new URLSearchParams();\n\t\tif (options === null || options === void 0 ? void 0 : options.transform) this.applyTransformOptsToQuery(query, options.transform);\n\t\tif ((options === null || options === void 0 ? void 0 : options.cacheNonce) != null) query.set(\"cacheNonce\", String(options.cacheNonce));\n\t\tconst queryString = query.toString();\n\t\tconst _path = this._getFinalPath(path);\n\t\tconst downloadFn = () => get(this.fetch, `${this.url}/${renderPath}/${_path}${queryString ? `?${queryString}` : \"\"}`, {\n\t\t\theaders: this.headers,\n\t\t\tnoResolveJson: true\n\t\t}, parameters);\n\t\treturn new BlobDownloadBuilder(downloadFn, this.shouldThrowOnError);\n\t}\n\t/**\n\t* Retrieves the details of an existing file.\n\t*\n\t* Returns detailed file metadata including size, content type, and timestamps.\n\t* Note: The API returns `last_modified` field, not `updated_at`.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The file path, including the file name. For example `folder/image.png`.\n\t* @returns Promise with response containing file metadata or error\n\t*\n\t* @example Get file info\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .info('folder/avatar1.png')\n\t*\n\t* if (data) {\n\t*   console.log('Last modified:', data.lastModified)\n\t*   console.log('Size:', data.size)\n\t* }\n\t* ```\n\t*/\n\tasync info(path) {\n\t\tvar _this10 = this;\n\t\tconst _path = _this10._getFinalPath(path);\n\t\treturn _this10.handleOperation(async () => {\n\t\t\treturn recursiveToCamel(await get(_this10.fetch, `${_this10.url}/object/info/${_path}`, { headers: _this10.headers }));\n\t\t});\n\t}\n\t/**\n\t* Checks the existence of a file.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The file path, including the file name. For example `folder/image.png`.\n\t* @returns Promise with response containing boolean indicating file existence or error\n\t*\n\t* @example Check file existence\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .exists('folder/avatar1.png')\n\t* ```\n\t*/\n\tasync exists(path) {\n\t\tvar _this11 = this;\n\t\tconst _path = _this11._getFinalPath(path);\n\t\ttry {\n\t\t\tawait head(_this11.fetch, `${_this11.url}/object/${_path}`, { headers: _this11.headers });\n\t\t\treturn {\n\t\t\t\tdata: true,\n\t\t\t\terror: null\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (_this11.shouldThrowOnError) throw error;\n\t\t\tif (isStorageError(error)) {\n\t\t\t\tvar _error$originalError;\n\t\t\t\tconst status = error instanceof StorageApiError ? error.status : error instanceof StorageUnknownError ? (_error$originalError = error.originalError) === null || _error$originalError === void 0 ? void 0 : _error$originalError.status : void 0;\n\t\t\t\tif (status !== void 0 && [400, 404].includes(status)) return {\n\t\t\t\t\tdata: false,\n\t\t\t\t\terror\n\t\t\t\t};\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\t/**\n\t* A simple convenience function to get the URL for an asset in a public bucket. If you do not want to use this function, you can construct the public URL by concatenating the bucket URL with the path to the asset.\n\t* This function does not verify if the bucket is public. If a public URL is created for a bucket which is not public, you will not be able to download the asset.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The path and name of the file to generate the public URL for. For example `folder/image.png`.\n\t* @param options.download Triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\n\t* @param options.transform Transform the asset before serving it to the client.\n\t* @param options.cacheNonce Append a cache nonce parameter to the URL to invalidate the cache.\n\t* @returns Object with public URL\n\t*\n\t* @example Returns the URL for an asset in a public bucket\n\t* ```js\n\t* const { data } = supabase\n\t*   .storage\n\t*   .from('public-bucket')\n\t*   .getPublicUrl('folder/avatar1.png')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"publicUrl\": \"https://example.supabase.co/storage/v1/object/public/public-bucket/folder/avatar1.png\"\n\t*   }\n\t* }\n\t* ```\n\t*\n\t* @example Returns the URL for an asset in a public bucket with transformations\n\t* ```js\n\t* const { data } = supabase\n\t*   .storage\n\t*   .from('public-bucket')\n\t*   .getPublicUrl('folder/avatar1.png', {\n\t*     transform: {\n\t*       width: 100,\n\t*       height: 100,\n\t*     }\n\t*   })\n\t* ```\n\t*\n\t* @example Returns the URL which triggers the download of an asset in a public bucket\n\t* ```js\n\t* const { data } = supabase\n\t*   .storage\n\t*   .from('public-bucket')\n\t*   .getPublicUrl('folder/avatar1.png', {\n\t*     download: true,\n\t*   })\n\t* ```\n\t*\n\t* @remarks\n\t* - The bucket needs to be set to public, either via [updateBucket()](/docs/reference/javascript/storage-updatebucket) or by going to Storage on [supabase.com/dashboard](https://supabase.com/dashboard), clicking the overflow menu on a bucket and choosing \"Make public\"\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: none\n\t*   - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tgetPublicUrl(path, options) {\n\t\tconst _path = this._getFinalPath(path);\n\t\tconst query = new URLSearchParams();\n\t\tif (options === null || options === void 0 ? void 0 : options.download) query.set(\"download\", options.download === true ? \"\" : options.download);\n\t\tif (options === null || options === void 0 ? void 0 : options.transform) this.applyTransformOptsToQuery(query, options.transform);\n\t\tif ((options === null || options === void 0 ? void 0 : options.cacheNonce) != null) query.set(\"cacheNonce\", String(options.cacheNonce));\n\t\tconst queryString = query.toString();\n\t\tconst renderPath = typeof (options === null || options === void 0 ? void 0 : options.transform) === \"object\" && options.transform !== null && Object.keys(options.transform).length > 0 ? \"render/image\" : \"object\";\n\t\treturn { data: { publicUrl: encodeURI(`${this.url}/${renderPath}/public/${_path}`) + (queryString ? `?${queryString}` : \"\") } };\n\t}\n\t/**\n\t* Deletes files within the same bucket\n\t*\n\t* Returns an array of FileObject entries for the deleted files. Note that deprecated\n\t* fields like `bucket_id` may or may not be present in the response - do not rely on them.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param paths An array of files to delete, including the path and file name. For example [`'folder/image.png'`].\n\t* @returns Promise with response containing array of deleted file objects or error\n\t*\n\t* @example Delete file\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .remove(['folder/avatar1.png'])\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": [],\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: none\n\t*   - `objects` table permissions: `delete` and `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync remove(paths) {\n\t\tvar _this12 = this;\n\t\treturn _this12.handleOperation(async () => {\n\t\t\treturn await remove(_this12.fetch, `${_this12.url}/object/${_this12.bucketId}`, { prefixes: paths }, { headers: _this12.headers });\n\t\t});\n\t}\n\t/**\n\t* Purges the CDN cache for a single object in this bucket.\n\t*\n\t* Maps to `DELETE /cdn/{bucket}/{path}` on the Storage API. The server\n\t* issues a CDN invalidation for the object and returns `{ message: 'success' }`.\n\t*\n\t* **Requires the `service_role` key.** The underlying endpoint enforces\n\t* `service_role` JWT — calls made with the anon key or a user JWT will be\n\t* rejected by the server.\n\t*\n\t* **Hosted CDN feature.** On self-hosted Supabase, the Storage service must\n\t* have `CDN_PURGE_ENDPOINT_URL` configured and the `purgeCache` tenant\n\t* feature enabled, otherwise the server returns an error.\n\t*\n\t* Operates on a single object path. There is no wildcard or recursion: pass\n\t* the exact path of the object you want invalidated.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The path (relative to the bucket) of the object to purge, e.g. `folder/avatar.png`.\n\t* @param options Optional purge cache options.\n\t* @param options.transformations If true, purges only transformations (resized/formatted variants), leaving the original cached file intact.\n\t* @param parameters Optional fetch parameters such as an `AbortController` signal.\n\t* @returns Promise with `{ data: { message }, error: null }` on success or `{ data: null, error }` on failure.\n\t*\n\t* @example Purge a single cached object\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .purgeCache('folder/avatar1.png')\n\t* ```\n\t*\n\t* @example Purge only transformations for a single object\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .purgeCache('folder/avatar1.png', { transformations: true })\n\t* ```\n\t*/\n\tasync purgeCache(path, options, parameters) {\n\t\tvar _this13 = this;\n\t\treturn _this13.handleOperation(async () => {\n\t\t\tconst _path = encodeStoragePath(_this13._getFinalPath(path));\n\t\t\tconst query = new URLSearchParams();\n\t\t\tif (options === null || options === void 0 ? void 0 : options.transformations) query.set(\"transformations\", \"true\");\n\t\t\tconst queryString = query.toString();\n\t\t\treturn await remove(_this13.fetch, `${_this13.url}/cdn/${_path}${queryString ? `?${queryString}` : \"\"}`, {}, { headers: _this13.headers }, parameters);\n\t\t});\n\t}\n\t/**\n\t* Get file metadata\n\t* @param id the file id to retrieve metadata\n\t*/\n\t/**\n\t* Update file metadata\n\t* @param id the file id to update metadata\n\t* @param meta the new file metadata\n\t*/\n\t/**\n\t* Lists all the files and folders within a path of the bucket.\n\t*\n\t* **Important:** For folder entries, fields like `id`, `updated_at`, `created_at`,\n\t* `last_accessed_at`, and `metadata` will be `null`. Only files have these fields populated.\n\t* Additionally, deprecated fields like `bucket_id`, `owner`, and `buckets` are NOT returned\n\t* by this method.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The folder path.\n\t* @param options Search options including limit (defaults to 100), offset, sortBy, and search\n\t* @param parameters Optional fetch parameters including signal for cancellation\n\t* @returns Promise with response containing array of files/folders or error\n\t*\n\t* @example List files in a bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .list('folder', {\n\t*     limit: 100,\n\t*     offset: 0,\n\t*     sortBy: { column: 'name', order: 'asc' },\n\t*   })\n\t*\n\t* // Handle files vs folders\n\t* data?.forEach(item => {\n\t*   if (item.id !== null) {\n\t*     // It's a file\n\t*     console.log('File:', item.name, 'Size:', item.metadata?.size)\n\t*   } else {\n\t*     // It's a folder\n\t*     console.log('Folder:', item.name)\n\t*   }\n\t* })\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"avatar1.png\",\n\t*       \"id\": \"e668cf7f-821b-4a2f-9dce-7dfa5dd1cfd2\",\n\t*       \"updated_at\": \"2024-05-22T23:06:05.580Z\",\n\t*       \"created_at\": \"2024-05-22T23:04:34.443Z\",\n\t*       \"last_accessed_at\": \"2024-05-22T23:04:34.443Z\",\n\t*       \"metadata\": {\n\t*         \"eTag\": \"\\\"c5e8c553235d9af30ef4f6e280790b92\\\"\",\n\t*         \"size\": 32175,\n\t*         \"mimetype\": \"image/png\",\n\t*         \"cacheControl\": \"max-age=3600\",\n\t*         \"lastModified\": \"2024-05-22T23:06:05.574Z\",\n\t*         \"contentLength\": 32175,\n\t*         \"httpStatusCode\": 200\n\t*       }\n\t*     }\n\t*   ],\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @example Search files in a bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .list('folder', {\n\t*     limit: 100,\n\t*     offset: 0,\n\t*     sortBy: { column: 'name', order: 'asc' },\n\t*     search: 'jon'\n\t*   })\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: none\n\t*   - `objects` table permissions: `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync list(path, options, parameters) {\n\t\tvar _this14 = this;\n\t\treturn _this14.handleOperation(async () => {\n\t\t\tconst sortBy = (options === null || options === void 0 ? void 0 : options.sortBy) ? _objectSpread2(_objectSpread2({}, DEFAULT_SEARCH_OPTIONS.sortBy), options.sortBy) : DEFAULT_SEARCH_OPTIONS.sortBy;\n\t\t\tconst body = _objectSpread2(_objectSpread2(_objectSpread2({}, DEFAULT_SEARCH_OPTIONS), options), {}, {\n\t\t\t\tsortBy,\n\t\t\t\tprefix: path || \"\"\n\t\t\t});\n\t\t\treturn await post(_this14.fetch, `${_this14.url}/object/list/${_this14.bucketId}`, body, { headers: _this14.headers }, parameters);\n\t\t});\n\t}\n\t/**\n\t* Lists all the files and folders within a bucket using the V2 API with pagination support.\n\t*\n\t* **Important:** Folder entries in the `folders` array only contain `name` and optionally `key` —\n\t* they have no `id`, timestamps, or `metadata` fields. Full file metadata is only available\n\t* on entries in the `objects` array.\n\t*\n\t* @experimental this method signature might change in the future\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param options Search options including prefix, cursor for pagination, limit, with_delimiter\n\t* @param parameters Optional fetch parameters including signal for cancellation\n\t* @returns Promise with response containing folders/objects arrays with pagination info or error\n\t*\n\t* @example List files with pagination\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .from('avatars')\n\t*   .listV2({\n\t*     prefix: 'folder/',\n\t*     limit: 100,\n\t*   })\n\t*\n\t* // Handle pagination\n\t* if (data?.hasNext) {\n\t*   const nextPage = await supabase\n\t*     .storage\n\t*     .from('avatars')\n\t*     .listV2({\n\t*       prefix: 'folder/',\n\t*       cursor: data.nextCursor,\n\t*     })\n\t* }\n\t*\n\t* // Handle files vs folders\n\t* data?.objects.forEach(file => {\n\t*   if (file.id !== null) {\n\t*     console.log('File:', file.name, 'Size:', file.metadata?.size)\n\t*   }\n\t* })\n\t* data?.folders.forEach(folder => {\n\t*   console.log('Folder:', folder.name)\n\t* })\n\t* ```\n\t*/\n\tasync listV2(options, parameters) {\n\t\tvar _this15 = this;\n\t\treturn _this15.handleOperation(async () => {\n\t\t\tconst body = _objectSpread2({}, options);\n\t\t\treturn await post(_this15.fetch, `${_this15.url}/object/list-v2/${_this15.bucketId}`, body, { headers: _this15.headers }, parameters);\n\t\t});\n\t}\n\tencodeMetadata(metadata) {\n\t\treturn JSON.stringify(metadata);\n\t}\n\ttoBase64(data) {\n\t\tif (typeof Buffer !== \"undefined\") return Buffer.from(data).toString(\"base64\");\n\t\treturn btoa(data);\n\t}\n\t_getFinalPath(path) {\n\t\treturn `${this.bucketId}/${path.replace(/^\\/+/, \"\")}`;\n\t}\n\t_removeEmptyFolders(path) {\n\t\treturn path.replace(/^\\/|\\/$/g, \"\").replace(/\\/+/g, \"/\");\n\t}\n\t/** Modifies the `query`, appending values the from `transform` */\n\tapplyTransformOptsToQuery(query, transform) {\n\t\tif (transform.width) query.set(\"width\", transform.width.toString());\n\t\tif (transform.height) query.set(\"height\", transform.height.toString());\n\t\tif (transform.resize) query.set(\"resize\", transform.resize);\n\t\tif (transform.format) query.set(\"format\", transform.format);\n\t\tif (transform.quality) query.set(\"quality\", transform.quality.toString());\n\t\treturn query;\n\t}\n};\n\n//#endregion\n//#region src/lib/version.ts\nconst version = \"2.112.3\";\n\n//#endregion\n//#region src/lib/constants.ts\nconst DEFAULT_HEADERS = { \"X-Client-Info\": `storage-js/${version}` };\n\n//#endregion\n//#region src/packages/StorageBucketApi.ts\nvar StorageBucketApi = class extends BaseApiClient {\n\tconstructor(url, headers = {}, fetch$1, opts) {\n\t\tconst baseUrl = new URL(url);\n\t\tif (opts === null || opts === void 0 ? void 0 : opts.useNewHostname) {\n\t\t\tif (/supabase\\.(co|in|red)$/.test(baseUrl.hostname) && !baseUrl.hostname.includes(\"storage.supabase.\")) baseUrl.hostname = baseUrl.hostname.replace(\"supabase.\", \"storage.supabase.\");\n\t\t}\n\t\tconst finalUrl = baseUrl.href.replace(/\\/$/, \"\");\n\t\tconst finalHeaders = _objectSpread2(_objectSpread2({}, DEFAULT_HEADERS), headers);\n\t\tsuper(finalUrl, finalHeaders, fetch$1, \"storage\");\n\t}\n\t/**\n\t* Retrieves the details of all Storage buckets within an existing project.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param options Query parameters for listing buckets\n\t* @param options.limit Maximum number of buckets to return\n\t* @param options.offset Number of buckets to skip\n\t* @param options.sortColumn Column to sort by ('id', 'name', 'created_at', 'updated_at')\n\t* @param options.sortOrder Sort order ('asc' or 'desc')\n\t* @param options.search Search term to filter bucket names\n\t* @returns Promise with response containing array of buckets or error\n\t*\n\t* @example List buckets\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .listBuckets()\n\t* ```\n\t*\n\t* @example List buckets with options\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .listBuckets({\n\t*     limit: 10,\n\t*     offset: 0,\n\t*     sortColumn: 'created_at',\n\t*     sortOrder: 'desc',\n\t*     search: 'prod'\n\t*   })\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: `select`\n\t*   - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync listBuckets(options) {\n\t\tvar _this = this;\n\t\treturn _this.handleOperation(async () => {\n\t\t\tconst queryString = _this.listBucketOptionsToQueryString(options);\n\t\t\treturn await get(_this.fetch, `${_this.url}/bucket${queryString}`, { headers: _this.headers });\n\t\t});\n\t}\n\t/**\n\t* Retrieves the details of an existing Storage bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param id The unique identifier of the bucket you would like to retrieve.\n\t* @returns Promise with response containing bucket details or error\n\t*\n\t* @example Get bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .getBucket('avatars')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"id\": \"avatars\",\n\t*     \"name\": \"avatars\",\n\t*     \"owner\": \"\",\n\t*     \"public\": false,\n\t*     \"file_size_limit\": 1024,\n\t*     \"allowed_mime_types\": [\n\t*       \"image/png\"\n\t*     ],\n\t*     \"created_at\": \"2024-05-22T22:26:05.100Z\",\n\t*     \"updated_at\": \"2024-05-22T22:26:05.100Z\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: `select`\n\t*   - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync getBucket(id) {\n\t\tvar _this2 = this;\n\t\treturn _this2.handleOperation(async () => {\n\t\t\treturn await get(_this2.fetch, `${_this2.url}/bucket/${id}`, { headers: _this2.headers });\n\t\t});\n\t}\n\t/**\n\t* Creates a new Storage bucket\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param id A unique identifier for the bucket you are creating.\n\t* @param options.public The visibility of the bucket. Public buckets don't require an authorization token to download objects, but still require a valid token for all other operations. By default, buckets are private.\n\t* @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket.\n\t* The global file size limit takes precedence over this value.\n\t* The default value is null, which doesn't set a per bucket file size limit.\n\t* @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload.\n\t* The default value is null, which allows files with all mime types to be uploaded.\n\t* Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png.\n\t* @param options.type (private-beta) specifies the bucket type. see `BucketType` for more details.\n\t*   - default bucket type is `STANDARD`\n\t* @returns Promise with response containing newly created bucket name or error\n\t*\n\t* @example Create bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .createBucket('avatars', {\n\t*     public: false,\n\t*     allowedMimeTypes: ['image/png'],\n\t*     fileSizeLimit: 1024\n\t*   })\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"name\": \"avatars\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: `insert`\n\t*   - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync createBucket(id, options = { public: false }) {\n\t\tvar _this3 = this;\n\t\treturn _this3.handleOperation(async () => {\n\t\t\treturn await post(_this3.fetch, `${_this3.url}/bucket`, {\n\t\t\t\tid,\n\t\t\t\tname: id,\n\t\t\t\ttype: options.type,\n\t\t\t\tpublic: options.public,\n\t\t\t\tfile_size_limit: options.fileSizeLimit,\n\t\t\t\tallowed_mime_types: options.allowedMimeTypes\n\t\t\t}, { headers: _this3.headers });\n\t\t});\n\t}\n\t/**\n\t* Updates a Storage bucket\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param id A unique identifier for the bucket you are updating.\n\t* @param options.public The visibility of the bucket. Public buckets don't require an authorization token to download objects, but still require a valid token for all other operations.\n\t* @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket.\n\t* The global file size limit takes precedence over this value.\n\t* The default value is null, which doesn't set a per bucket file size limit.\n\t* @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload.\n\t* The default value is null, which allows files with all mime types to be uploaded.\n\t* Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png.\n\t* @returns Promise with response containing success message or error\n\t*\n\t* @example Update bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .updateBucket('avatars', {\n\t*     public: false,\n\t*     allowedMimeTypes: ['image/png'],\n\t*     fileSizeLimit: 1024\n\t*   })\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"message\": \"Successfully updated\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: `select` and `update`\n\t*   - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync updateBucket(id, options) {\n\t\tvar _this4 = this;\n\t\treturn _this4.handleOperation(async () => {\n\t\t\treturn await put(_this4.fetch, `${_this4.url}/bucket/${id}`, {\n\t\t\t\tid,\n\t\t\t\tname: id,\n\t\t\t\tpublic: options.public,\n\t\t\t\tfile_size_limit: options.fileSizeLimit,\n\t\t\t\tallowed_mime_types: options.allowedMimeTypes\n\t\t\t}, { headers: _this4.headers });\n\t\t});\n\t}\n\t/**\n\t* Removes all objects inside a single bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param id The unique identifier of the bucket you would like to empty.\n\t* @returns Promise with success message or error\n\t*\n\t* @example Empty bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .emptyBucket('avatars')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"message\": \"Successfully emptied\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: `select`\n\t*   - `objects` table permissions: `select` and `delete`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync emptyBucket(id) {\n\t\tvar _this5 = this;\n\t\treturn _this5.handleOperation(async () => {\n\t\t\treturn await post(_this5.fetch, `${_this5.url}/bucket/${id}/empty`, {}, { headers: _this5.headers });\n\t\t});\n\t}\n\t/**\n\t* Deletes an existing bucket. A bucket can't be deleted with existing objects inside it.\n\t* You must first `empty()` the bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param id The unique identifier of the bucket you would like to delete.\n\t* @returns Promise with success message or error\n\t*\n\t* @example Delete bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .deleteBucket('avatars')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"message\": \"Successfully deleted\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t*   - `buckets` table permissions: `select` and `delete`\n\t*   - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync deleteBucket(id) {\n\t\tvar _this6 = this;\n\t\treturn _this6.handleOperation(async () => {\n\t\t\treturn await remove(_this6.fetch, `${_this6.url}/bucket/${id}`, {}, { headers: _this6.headers });\n\t\t});\n\t}\n\t/**\n\t* Purges the CDN cache for an entire bucket.\n\t*\n\t* Maps to `DELETE /cdn/{bucket}` on the Storage API. The server\n\t* issues a CDN invalidation for the bucket and returns `{ message: 'success' }`.\n\t*\n\t* **Requires the `service_role` key.** The underlying endpoint enforces\n\t* `service_role` JWT — calls made with the anon key or a user JWT will be\n\t* rejected by the server.\n\t*\n\t* **Hosted CDN feature.** On self-hosted Supabase, the Storage service must\n\t* have `CDN_PURGE_ENDPOINT_URL` configured and the `purgeCache` tenant\n\t* feature enabled, otherwise the server returns an error.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param id The unique identifier of the bucket you would like to purge from cache.\n\t* @param options Optional purge cache options.\n\t* @param options.transformations If true, purges only transformations (resized/formatted variants), leaving original cached files intact.\n\t* @param parameters Optional fetch parameters such as an `AbortController` signal.\n\t* @returns Promise with `{ data: { message }, error: null }` on success or `{ data: null, error }` on failure.\n\t*\n\t* @example Purge cache for an entire bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .purgeBucketCache('avatars')\n\t* ```\n\t*\n\t* @example Purge only transformations for an entire bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .purgeBucketCache('avatars', { transformations: true })\n\t* ```\n\t*/\n\tasync purgeBucketCache(id, options, parameters) {\n\t\tvar _this7 = this;\n\t\treturn _this7.handleOperation(async () => {\n\t\t\tconst query = new URLSearchParams();\n\t\t\tif (options === null || options === void 0 ? void 0 : options.transformations) query.set(\"transformations\", \"true\");\n\t\t\tconst queryString = query.toString();\n\t\t\treturn await remove(_this7.fetch, `${_this7.url}/cdn/${encodeStoragePath(id)}${queryString ? `?${queryString}` : \"\"}`, {}, { headers: _this7.headers }, parameters);\n\t\t});\n\t}\n\tlistBucketOptionsToQueryString(options) {\n\t\tconst params = {};\n\t\tif (options) {\n\t\t\tif (\"limit\" in options) params.limit = String(options.limit);\n\t\t\tif (\"offset\" in options) params.offset = String(options.offset);\n\t\t\tif (options.search) params.search = options.search;\n\t\t\tif (options.sortColumn) params.sortColumn = options.sortColumn;\n\t\t\tif (options.sortOrder) params.sortOrder = options.sortOrder;\n\t\t}\n\t\treturn Object.keys(params).length > 0 ? \"?\" + new URLSearchParams(params).toString() : \"\";\n\t}\n};\n\n//#endregion\n//#region src/packages/StorageAnalyticsClient.ts\n/**\n* Client class for managing Analytics Buckets using Iceberg tables\n* Provides methods for creating, listing, and deleting analytics buckets\n*/\nvar StorageAnalyticsClient = class extends BaseApiClient {\n\t/**\n\t* @alpha\n\t*\n\t* Creates a new StorageAnalyticsClient instance\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Analytics Buckets\n\t* @param url - The base URL for the storage API\n\t* @param headers - HTTP headers to include in requests\n\t* @param fetch - Optional custom fetch implementation\n\t*\n\t* @example Using supabase-js (recommended)\n\t* ```typescript\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* const { data, error } = await supabase.storage.analytics.listBuckets()\n\t* ```\n\t*\n\t* @example Standalone import for bundle-sensitive environments\n\t* ```typescript\n\t* import { StorageAnalyticsClient } from '@supabase/storage-js'\n\t*\n\t* const client = new StorageAnalyticsClient(url, headers)\n\t* ```\n\t*/\n\tconstructor(url, headers = {}, fetch$1) {\n\t\tconst finalUrl = url.replace(/\\/$/, \"\");\n\t\tconst finalHeaders = _objectSpread2(_objectSpread2({}, DEFAULT_HEADERS), headers);\n\t\tsuper(finalUrl, finalHeaders, fetch$1, \"storage\");\n\t}\n\t/**\n\t* @alpha\n\t*\n\t* Creates a new analytics bucket using Iceberg tables\n\t* Analytics buckets are optimized for analytical queries and data processing\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Analytics Buckets\n\t* @param name A unique name for the bucket you are creating\n\t* @returns Promise with response containing newly created analytics bucket or error\n\t*\n\t* @example Create analytics bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .analytics\n\t*   .createBucket('analytics-data')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"name\": \"analytics-data\",\n\t*     \"type\": \"ANALYTICS\",\n\t*     \"format\": \"iceberg\",\n\t*     \"created_at\": \"2024-05-22T22:26:05.100Z\",\n\t*     \"updated_at\": \"2024-05-22T22:26:05.100Z\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - Creates a new analytics bucket using Iceberg tables\n\t* - Analytics buckets are optimized for analytical queries and data processing\n\t*/\n\tasync createBucket(name) {\n\t\tvar _this = this;\n\t\treturn _this.handleOperation(async () => {\n\t\t\treturn await post(_this.fetch, `${_this.url}/bucket`, { name }, { headers: _this.headers });\n\t\t});\n\t}\n\t/**\n\t* @alpha\n\t*\n\t* Retrieves the details of all Analytics Storage buckets within an existing project\n\t* Only returns buckets of type 'ANALYTICS'\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Analytics Buckets\n\t* @param options Query parameters for listing buckets\n\t* @param options.limit Maximum number of buckets to return\n\t* @param options.offset Number of buckets to skip\n\t* @param options.sortColumn Column to sort by ('name', 'created_at', 'updated_at')\n\t* @param options.sortOrder Sort order ('asc' or 'desc')\n\t* @param options.search Search term to filter bucket names\n\t* @returns Promise with response containing array of analytics buckets or error\n\t*\n\t* @example List analytics buckets\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .analytics\n\t*   .listBuckets({\n\t*     limit: 10,\n\t*     offset: 0,\n\t*     sortColumn: 'created_at',\n\t*     sortOrder: 'desc'\n\t*   })\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": [\n\t*     {\n\t*       \"name\": \"analytics-data\",\n\t*       \"type\": \"ANALYTICS\",\n\t*       \"format\": \"iceberg\",\n\t*       \"created_at\": \"2024-05-22T22:26:05.100Z\",\n\t*       \"updated_at\": \"2024-05-22T22:26:05.100Z\"\n\t*     }\n\t*   ],\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - Retrieves the details of all Analytics Storage buckets within an existing project\n\t* - Only returns buckets of type 'ANALYTICS'\n\t*/\n\tasync listBuckets(options) {\n\t\tvar _this2 = this;\n\t\treturn _this2.handleOperation(async () => {\n\t\t\tconst queryParams = new URLSearchParams();\n\t\t\tif ((options === null || options === void 0 ? void 0 : options.limit) !== void 0) queryParams.set(\"limit\", options.limit.toString());\n\t\t\tif ((options === null || options === void 0 ? void 0 : options.offset) !== void 0) queryParams.set(\"offset\", options.offset.toString());\n\t\t\tif (options === null || options === void 0 ? void 0 : options.sortColumn) queryParams.set(\"sortColumn\", options.sortColumn);\n\t\t\tif (options === null || options === void 0 ? void 0 : options.sortOrder) queryParams.set(\"sortOrder\", options.sortOrder);\n\t\t\tif (options === null || options === void 0 ? void 0 : options.search) queryParams.set(\"search\", options.search);\n\t\t\tconst queryString = queryParams.toString();\n\t\t\tconst url = queryString ? `${_this2.url}/bucket?${queryString}` : `${_this2.url}/bucket`;\n\t\t\treturn await get(_this2.fetch, url, { headers: _this2.headers });\n\t\t});\n\t}\n\t/**\n\t* @alpha\n\t*\n\t* Deletes an existing analytics bucket\n\t* A bucket can't be deleted with existing objects inside it\n\t* You must first empty the bucket before deletion\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Analytics Buckets\n\t* @param bucketName The unique identifier of the bucket you would like to delete\n\t* @returns Promise with response containing success message or error\n\t*\n\t* @example Delete analytics bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .analytics\n\t*   .deleteBucket('analytics-data')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t*   \"data\": {\n\t*     \"message\": \"Successfully deleted\"\n\t*   },\n\t*   \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - Deletes an analytics bucket\n\t*/\n\tasync deleteBucket(bucketName) {\n\t\tvar _this3 = this;\n\t\treturn _this3.handleOperation(async () => {\n\t\t\treturn await remove(_this3.fetch, `${_this3.url}/bucket/${bucketName}`, {}, { headers: _this3.headers });\n\t\t});\n\t}\n\t/**\n\t* @alpha\n\t*\n\t* Get an Iceberg REST Catalog client configured for a specific analytics bucket\n\t* Use this to perform advanced table and namespace operations within the bucket\n\t* The returned client provides full access to the Apache Iceberg REST Catalog API\n\t* with the Supabase `{ data, error }` pattern for consistent error handling on all operations.\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Analytics Buckets\n\t* @param bucketName - The name of the analytics bucket (warehouse) to connect to\n\t* @returns The wrapped Iceberg catalog client\n\t* @throws {StorageError} If the bucket name is invalid\n\t*\n\t* @example Get catalog and create table\n\t* ```js\n\t* // First, create an analytics bucket\n\t* const { data: bucket, error: bucketError } = await supabase\n\t*   .storage\n\t*   .analytics\n\t*   .createBucket('analytics-data')\n\t*\n\t* // Get the Iceberg catalog for that bucket\n\t* const catalog = supabase.storage.analytics.from('analytics-data')\n\t*\n\t* // Create a namespace\n\t* const { error: nsError } = await catalog.createNamespace({ namespace: ['default'] })\n\t*\n\t* // Create a table with schema\n\t* const { data: tableMetadata, error: tableError } = await catalog.createTable(\n\t*   { namespace: ['default'] },\n\t*   {\n\t*     name: 'events',\n\t*     schema: {\n\t*       type: 'struct',\n\t*       fields: [\n\t*         { id: 1, name: 'id', type: 'long', required: true },\n\t*         { id: 2, name: 'timestamp', type: 'timestamp', required: true },\n\t*         { id: 3, name: 'user_id', type: 'string', required: false }\n\t*       ],\n\t*       'schema-id': 0,\n\t*       'identifier-field-ids': [1]\n\t*     },\n\t*     'partition-spec': {\n\t*       'spec-id': 0,\n\t*       fields: []\n\t*     },\n\t*     'write-order': {\n\t*       'order-id': 0,\n\t*       fields: []\n\t*     },\n\t*     properties: {\n\t*       'write.format.default': 'parquet'\n\t*     }\n\t*   }\n\t* )\n\t* ```\n\t*\n\t* @example List tables in namespace\n\t* ```js\n\t* const catalog = supabase.storage.analytics.from('analytics-data')\n\t*\n\t* // List all tables in the default namespace\n\t* const { data: tables, error: listError } = await catalog.listTables({ namespace: ['default'] })\n\t* if (listError) {\n\t*   if (listError.isNotFound()) {\n\t*     console.log('Namespace not found')\n\t*   }\n\t*   return\n\t* }\n\t* console.log(tables) // [{ namespace: ['default'], name: 'events' }]\n\t* ```\n\t*\n\t* @example Working with namespaces\n\t* ```js\n\t* const catalog = supabase.storage.analytics.from('analytics-data')\n\t*\n\t* // List all namespaces\n\t* const { data: namespaces } = await catalog.listNamespaces()\n\t*\n\t* // Create namespace with properties\n\t* await catalog.createNamespace(\n\t*   { namespace: ['production'] },\n\t*   { properties: { owner: 'data-team', env: 'prod' } }\n\t* )\n\t* ```\n\t*\n\t* @example Cleanup operations\n\t* ```js\n\t* const catalog = supabase.storage.analytics.from('analytics-data')\n\t*\n\t* // Drop table with purge option (removes all data)\n\t* const { error: dropError } = await catalog.dropTable(\n\t*   { namespace: ['default'], name: 'events' },\n\t*   { purge: true }\n\t* )\n\t*\n\t* if (dropError?.isNotFound()) {\n\t*   console.log('Table does not exist')\n\t* }\n\t*\n\t* // Drop namespace (must be empty)\n\t* await catalog.dropNamespace({ namespace: ['default'] })\n\t* ```\n\t*\n\t* @remarks\n\t* This method provides a bridge between Supabase's bucket management and the standard\n\t* Apache Iceberg REST Catalog API. The bucket name maps to the Iceberg warehouse parameter.\n\t* All authentication and configuration is handled automatically using your Supabase credentials.\n\t*\n\t* **Error Handling**: Invalid bucket names throw immediately. All catalog\n\t* operations return `{ data, error }` where errors are `IcebergError` instances from iceberg-js.\n\t* Use helper methods like `error.isNotFound()` or check `error.status` for specific error handling.\n\t* Use `.throwOnError()` on the analytics client if you prefer exceptions for catalog operations.\n\t*\n\t* **Cleanup Operations**: When using `dropTable`, the `purge: true` option permanently\n\t* deletes all table data. Without it, the table is marked as deleted but data remains.\n\t*\n\t* **Library Dependency**: The returned catalog wraps `IcebergRestCatalog` from iceberg-js.\n\t* For complete API documentation and advanced usage, refer to the\n\t* [iceberg-js documentation](https://supabase.github.io/iceberg-js/).\n\t*/\n\tfrom(bucketName) {\n\t\tvar _this4 = this;\n\t\tif (!isValidBucketName(bucketName)) throw new StorageError(\"Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines and should avoid the use of any other characters.\");\n\t\tconst catalog = new IcebergRestCatalog({\n\t\t\tbaseUrl: this.url,\n\t\t\tcatalogName: bucketName,\n\t\t\tauth: {\n\t\t\t\ttype: \"custom\",\n\t\t\t\tgetHeaders: async () => _this4.headers\n\t\t\t},\n\t\t\tfetch: this.fetch\n\t\t});\n\t\tconst shouldThrowOnError = this.shouldThrowOnError;\n\t\treturn new Proxy(catalog, { get(target, prop) {\n\t\t\tconst value = target[prop];\n\t\t\tif (typeof value !== \"function\") return value;\n\t\t\treturn async (...args) => {\n\t\t\t\ttry {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: await value.apply(target, args),\n\t\t\t\t\t\terror: null\n\t\t\t\t\t};\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (shouldThrowOnError) throw error;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t};\n\t\t} });\n\t}\n};\n\n//#endregion\n//#region src/packages/VectorIndexApi.ts\n/**\n* @hidden\n* Base implementation for vector index operations.\n* Use {@link VectorBucketScope} via `supabase.storage.vectors.from('bucket')` instead.\n*/\nvar VectorIndexApi = class extends BaseApiClient {\n\t/** Creates a new VectorIndexApi instance */\n\tconstructor(url, headers = {}, fetch$1) {\n\t\tconst finalUrl = url.replace(/\\/$/, \"\");\n\t\tconst finalHeaders = _objectSpread2(_objectSpread2({}, DEFAULT_HEADERS), {}, { \"Content-Type\": \"application/json\" }, headers);\n\t\tsuper(finalUrl, finalHeaders, fetch$1, \"vectors\");\n\t}\n\t/** Creates a new vector index within a bucket */\n\tasync createIndex(options) {\n\t\tvar _this = this;\n\t\treturn _this.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this.fetch, `${_this.url}/CreateIndex`, options, { headers: _this.headers }) || {};\n\t\t});\n\t}\n\t/** Retrieves metadata for a specific vector index */\n\tasync getIndex(vectorBucketName, indexName) {\n\t\tvar _this2 = this;\n\t\treturn _this2.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this2.fetch, `${_this2.url}/GetIndex`, {\n\t\t\t\tvectorBucketName,\n\t\t\t\tindexName\n\t\t\t}, { headers: _this2.headers });\n\t\t});\n\t}\n\t/** Lists vector indexes within a bucket with optional filtering and pagination */\n\tasync listIndexes(options) {\n\t\tvar _this3 = this;\n\t\treturn _this3.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this3.fetch, `${_this3.url}/ListIndexes`, options, { headers: _this3.headers });\n\t\t});\n\t}\n\t/** Deletes a vector index and all its data */\n\tasync deleteIndex(vectorBucketName, indexName) {\n\t\tvar _this4 = this;\n\t\treturn _this4.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this4.fetch, `${_this4.url}/DeleteIndex`, {\n\t\t\t\tvectorBucketName,\n\t\t\t\tindexName\n\t\t\t}, { headers: _this4.headers }) || {};\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/packages/VectorDataApi.ts\n/**\n* @hidden\n* Base implementation for vector data operations.\n* Use {@link VectorIndexScope} via `supabase.storage.vectors.from('bucket').index('idx')` instead.\n*/\nvar VectorDataApi = class extends BaseApiClient {\n\t/** Creates a new VectorDataApi instance */\n\tconstructor(url, headers = {}, fetch$1) {\n\t\tconst finalUrl = url.replace(/\\/$/, \"\");\n\t\tconst finalHeaders = _objectSpread2(_objectSpread2({}, DEFAULT_HEADERS), {}, { \"Content-Type\": \"application/json\" }, headers);\n\t\tsuper(finalUrl, finalHeaders, fetch$1, \"vectors\");\n\t}\n\t/** Inserts or updates vectors in batch (1-500 per request) */\n\tasync putVectors(options) {\n\t\tvar _this = this;\n\t\tif (options.vectors.length < 1 || options.vectors.length > 500) throw new Error(\"Vector batch size must be between 1 and 500 items\");\n\t\treturn _this.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this.fetch, `${_this.url}/PutVectors`, options, { headers: _this.headers }) || {};\n\t\t});\n\t}\n\t/** Retrieves vectors by their keys in batch */\n\tasync getVectors(options) {\n\t\tvar _this2 = this;\n\t\treturn _this2.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this2.fetch, `${_this2.url}/GetVectors`, options, { headers: _this2.headers });\n\t\t});\n\t}\n\t/** Lists vectors in an index with pagination */\n\tasync listVectors(options) {\n\t\tvar _this3 = this;\n\t\tif (options.segmentCount !== void 0) {\n\t\t\tif (options.segmentCount < 1 || options.segmentCount > 16) throw new Error(\"segmentCount must be between 1 and 16\");\n\t\t\tif (options.segmentIndex !== void 0) {\n\t\t\t\tif (options.segmentIndex < 0 || options.segmentIndex >= options.segmentCount) throw new Error(`segmentIndex must be between 0 and ${options.segmentCount - 1}`);\n\t\t\t}\n\t\t}\n\t\treturn _this3.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this3.fetch, `${_this3.url}/ListVectors`, options, { headers: _this3.headers });\n\t\t});\n\t}\n\t/** Queries for similar vectors using approximate nearest neighbor search */\n\tasync queryVectors(options) {\n\t\tvar _this4 = this;\n\t\treturn _this4.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this4.fetch, `${_this4.url}/QueryVectors`, options, { headers: _this4.headers });\n\t\t});\n\t}\n\t/** Deletes vectors by their keys in batch (1-500 per request) */\n\tasync deleteVectors(options) {\n\t\tvar _this5 = this;\n\t\tif (options.keys.length < 1 || options.keys.length > 500) throw new Error(\"Keys batch size must be between 1 and 500 items\");\n\t\treturn _this5.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this5.fetch, `${_this5.url}/DeleteVectors`, options, { headers: _this5.headers }) || {};\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/packages/VectorBucketApi.ts\n/**\n* @hidden\n* Base implementation for vector bucket operations.\n* Use {@link StorageVectorsClient} via `supabase.storage.vectors` instead.\n*/\nvar VectorBucketApi = class extends BaseApiClient {\n\t/** Creates a new VectorBucketApi instance */\n\tconstructor(url, headers = {}, fetch$1) {\n\t\tconst finalUrl = url.replace(/\\/$/, \"\");\n\t\tconst finalHeaders = _objectSpread2(_objectSpread2({}, DEFAULT_HEADERS), {}, { \"Content-Type\": \"application/json\" }, headers);\n\t\tsuper(finalUrl, finalHeaders, fetch$1, \"vectors\");\n\t}\n\t/** Creates a new vector bucket */\n\tasync createBucket(vectorBucketName) {\n\t\tvar _this = this;\n\t\treturn _this.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this.fetch, `${_this.url}/CreateVectorBucket`, { vectorBucketName }, { headers: _this.headers }) || {};\n\t\t});\n\t}\n\t/** Retrieves metadata for a specific vector bucket */\n\tasync getBucket(vectorBucketName) {\n\t\tvar _this2 = this;\n\t\treturn _this2.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this2.fetch, `${_this2.url}/GetVectorBucket`, { vectorBucketName }, { headers: _this2.headers });\n\t\t});\n\t}\n\t/** Lists vector buckets with optional filtering and pagination */\n\tasync listBuckets(options = {}) {\n\t\tvar _this3 = this;\n\t\treturn _this3.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this3.fetch, `${_this3.url}/ListVectorBuckets`, options, { headers: _this3.headers });\n\t\t});\n\t}\n\t/** Deletes a vector bucket (must be empty first) */\n\tasync deleteBucket(vectorBucketName) {\n\t\tvar _this4 = this;\n\t\treturn _this4.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this4.fetch, `${_this4.url}/DeleteVectorBucket`, { vectorBucketName }, { headers: _this4.headers }) || {};\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/packages/StorageVectorsClient.ts\n/**\n*\n* @alpha\n*\n* Main client for interacting with S3 Vectors API\n* Provides access to bucket, index, and vector data operations\n*\n* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n*\n* **Usage Patterns:**\n*\n* ```typescript\n* const { data, error } = await supabase\n*  .storage\n*  .vectors\n*  .createBucket('embeddings-prod')\n*\n* // Access index operations via buckets\n* const bucket = supabase.storage.vectors.from('embeddings-prod')\n* await bucket.createIndex({\n*   indexName: 'documents',\n*   dataType: 'float32',\n*   dimension: 1536,\n*   distanceMetric: 'cosine'\n* })\n*\n* // Access vector operations via index\n* const index = bucket.index('documents')\n* await index.putVectors({\n*   vectors: [\n*     { key: 'doc-1', data: { float32: [...] }, metadata: { title: 'Intro' } }\n*   ]\n* })\n*\n* // Query similar vectors\n* const { data } = await index.queryVectors({\n*   queryVector: { float32: [...] },\n*   topK: 5,\n*   returnDistance: true\n* })\n* ```\n*/\nvar StorageVectorsClient = class extends VectorBucketApi {\n\t/**\n\t* @alpha\n\t*\n\t* Creates a StorageVectorsClient that can manage buckets, indexes, and vectors.\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param url - Base URL of the Storage Vectors REST API.\n\t* @param options.headers - Optional headers (for example `Authorization`) applied to every request.\n\t* @param options.fetch - Optional custom `fetch` implementation for non-browser runtimes.\n\t*\n\t* @example Using supabase-js (recommended)\n\t* ```typescript\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* ```\n\t*\n\t* @example Standalone import for bundle-sensitive environments\n\t* ```typescript\n\t* import { StorageVectorsClient } from '@supabase/storage-js'\n\t*\n\t* const client = new StorageVectorsClient(url, options)\n\t* ```\n\t*/\n\tconstructor(url, options = {}) {\n\t\tsuper(url, options.headers || {}, options.fetch);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Access operations for a specific vector bucket\n\t* Returns a scoped client for index and vector operations within the bucket\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param vectorBucketName - Name of the vector bucket\n\t* @returns Bucket-scoped client with index and vector operations\n\t*\n\t* @example Accessing a vector bucket\n\t* ```typescript\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* ```\n\t*/\n\tfrom(vectorBucketName) {\n\t\treturn new VectorBucketScope(this.url, this.headers, vectorBucketName, this.fetch);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Creates a new vector bucket\n\t* Vector buckets are containers for vector indexes and their data\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param vectorBucketName - Unique name for the vector bucket\n\t* @returns Promise with empty response on success or error\n\t*\n\t* @example Creating a vector bucket\n\t* ```typescript\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .vectors\n\t*   .createBucket('embeddings-prod')\n\t* ```\n\t*/\n\tasync createBucket(vectorBucketName) {\n\t\tvar _superprop_getCreateBucket = () => super.createBucket, _this = this;\n\t\treturn _superprop_getCreateBucket().call(_this, vectorBucketName);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Retrieves metadata for a specific vector bucket\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param vectorBucketName - Name of the vector bucket\n\t* @returns Promise with bucket metadata or error\n\t*\n\t* @example Get bucket metadata\n\t* ```typescript\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .vectors\n\t*   .getBucket('embeddings-prod')\n\t*\n\t* console.log('Bucket created:', data?.vectorBucket.creationTime)\n\t* ```\n\t*/\n\tasync getBucket(vectorBucketName) {\n\t\tvar _superprop_getGetBucket = () => super.getBucket, _this2 = this;\n\t\treturn _superprop_getGetBucket().call(_this2, vectorBucketName);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Lists all vector buckets with optional filtering and pagination\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Optional filters (prefix, maxResults, nextToken)\n\t* @returns Promise with list of buckets or error\n\t*\n\t* @example List vector buckets\n\t* ```typescript\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .vectors\n\t*   .listBuckets({ prefix: 'embeddings-' })\n\t*\n\t* data?.vectorBuckets.forEach(bucket => {\n\t*   console.log(bucket.vectorBucketName)\n\t* })\n\t* ```\n\t*/\n\tasync listBuckets(options = {}) {\n\t\tvar _superprop_getListBuckets = () => super.listBuckets, _this3 = this;\n\t\treturn _superprop_getListBuckets().call(_this3, options);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Deletes a vector bucket (bucket must be empty)\n\t* All indexes must be deleted before deleting the bucket\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param vectorBucketName - Name of the vector bucket to delete\n\t* @returns Promise with empty response on success or error\n\t*\n\t* @example Delete a vector bucket\n\t* ```typescript\n\t* const { data, error } = await supabase\n\t*   .storage\n\t*   .vectors\n\t*   .deleteBucket('embeddings-old')\n\t* ```\n\t*/\n\tasync deleteBucket(vectorBucketName) {\n\t\tvar _superprop_getDeleteBucket = () => super.deleteBucket, _this4 = this;\n\t\treturn _superprop_getDeleteBucket().call(_this4, vectorBucketName);\n\t}\n};\n/**\n*\n* @alpha\n*\n* Scoped client for operations within a specific vector bucket\n* Provides index management and access to vector operations\n*\n* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n*/\nvar VectorBucketScope = class extends VectorIndexApi {\n\t/**\n\t* @alpha\n\t*\n\t* Creates a helper that automatically scopes all index operations to the provided bucket.\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @example Creating a vector bucket scope\n\t* ```typescript\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* ```\n\t*/\n\tconstructor(url, headers, vectorBucketName, fetch$1) {\n\t\tsuper(url, headers, fetch$1);\n\t\tthis.vectorBucketName = vectorBucketName;\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Creates a new vector index in this bucket\n\t* Convenience method that automatically includes the bucket name\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Index configuration (vectorBucketName is automatically set)\n\t* @returns Promise with empty response on success or error\n\t*\n\t* @example Creating a vector index\n\t* ```typescript\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* await bucket.createIndex({\n\t*   indexName: 'documents-openai',\n\t*   dataType: 'float32',\n\t*   dimension: 1536,\n\t*   distanceMetric: 'cosine',\n\t*   metadataConfiguration: {\n\t*     nonFilterableMetadataKeys: ['raw_text']\n\t*   }\n\t* })\n\t* ```\n\t*/\n\tasync createIndex(options) {\n\t\tvar _superprop_getCreateIndex = () => super.createIndex, _this5 = this;\n\t\treturn _superprop_getCreateIndex().call(_this5, _objectSpread2(_objectSpread2({}, options), {}, { vectorBucketName: _this5.vectorBucketName }));\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Lists indexes in this bucket\n\t* Convenience method that automatically includes the bucket name\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Listing options (vectorBucketName is automatically set)\n\t* @returns Promise with response containing indexes array and pagination token or error\n\t*\n\t* @example List indexes\n\t* ```typescript\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* const { data } = await bucket.listIndexes({ prefix: 'documents-' })\n\t* ```\n\t*/\n\tasync listIndexes(options = {}) {\n\t\tvar _superprop_getListIndexes = () => super.listIndexes, _this6 = this;\n\t\treturn _superprop_getListIndexes().call(_this6, _objectSpread2(_objectSpread2({}, options), {}, { vectorBucketName: _this6.vectorBucketName }));\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Retrieves metadata for a specific index in this bucket\n\t* Convenience method that automatically includes the bucket name\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param indexName - Name of the index to retrieve\n\t* @returns Promise with index metadata or error\n\t*\n\t* @example Get index metadata\n\t* ```typescript\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* const { data } = await bucket.getIndex('documents-openai')\n\t* console.log('Dimension:', data?.index.dimension)\n\t* ```\n\t*/\n\tasync getIndex(indexName) {\n\t\tvar _superprop_getGetIndex = () => super.getIndex, _this7 = this;\n\t\treturn _superprop_getGetIndex().call(_this7, _this7.vectorBucketName, indexName);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Deletes an index from this bucket\n\t* Convenience method that automatically includes the bucket name\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param indexName - Name of the index to delete\n\t* @returns Promise with empty response on success or error\n\t*\n\t* @example Delete an index\n\t* ```typescript\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* await bucket.deleteIndex('old-index')\n\t* ```\n\t*/\n\tasync deleteIndex(indexName) {\n\t\tvar _superprop_getDeleteIndex = () => super.deleteIndex, _this8 = this;\n\t\treturn _superprop_getDeleteIndex().call(_this8, _this8.vectorBucketName, indexName);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Access operations for a specific index within this bucket\n\t* Returns a scoped client for vector data operations\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param indexName - Name of the index\n\t* @returns Index-scoped client with vector data operations\n\t*\n\t* @example Accessing an index\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t*\n\t* // Insert vectors\n\t* await index.putVectors({\n\t*   vectors: [\n\t*     { key: 'doc-1', data: { float32: [...] }, metadata: { title: 'Intro' } }\n\t*   ]\n\t* })\n\t*\n\t* // Query similar vectors\n\t* const { data } = await index.queryVectors({\n\t*   queryVector: { float32: [...] },\n\t*   topK: 5\n\t* })\n\t* ```\n\t*/\n\tindex(indexName) {\n\t\treturn new VectorIndexScope(this.url, this.headers, this.vectorBucketName, indexName, this.fetch);\n\t}\n};\n/**\n*\n* @alpha\n*\n* Scoped client for operations within a specific vector index\n* Provides vector data operations (put, get, list, query, delete)\n*\n* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n*/\nvar VectorIndexScope = class extends VectorDataApi {\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Creates a helper that automatically scopes all vector operations to the provided bucket/index names.\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @example Creating a vector index scope\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t* ```\n\t*/\n\tconstructor(url, headers, vectorBucketName, indexName, fetch$1) {\n\t\tsuper(url, headers, fetch$1);\n\t\tthis.vectorBucketName = vectorBucketName;\n\t\tthis.indexName = indexName;\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Inserts or updates vectors in this index\n\t* Convenience method that automatically includes bucket and index names\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Vector insertion options (bucket and index names automatically set)\n\t* @returns Promise with empty response on success or error\n\t*\n\t* @example Insert vectors into an index\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t* await index.putVectors({\n\t*   vectors: [\n\t*     {\n\t*       key: 'doc-1',\n\t*       data: { float32: [0.1, 0.2, ...] },\n\t*       metadata: { title: 'Introduction', page: 1 }\n\t*     }\n\t*   ]\n\t* })\n\t* ```\n\t*/\n\tasync putVectors(options) {\n\t\tvar _superprop_getPutVectors = () => super.putVectors, _this9 = this;\n\t\treturn _superprop_getPutVectors().call(_this9, _objectSpread2(_objectSpread2({}, options), {}, {\n\t\t\tvectorBucketName: _this9.vectorBucketName,\n\t\t\tindexName: _this9.indexName\n\t\t}));\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Retrieves vectors by keys from this index\n\t* Convenience method that automatically includes bucket and index names\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Vector retrieval options (bucket and index names automatically set)\n\t* @returns Promise with response containing vectors array or error\n\t*\n\t* @example Get vectors by keys\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t* const { data } = await index.getVectors({\n\t*   keys: ['doc-1', 'doc-2'],\n\t*   returnMetadata: true\n\t* })\n\t* ```\n\t*/\n\tasync getVectors(options) {\n\t\tvar _superprop_getGetVectors = () => super.getVectors, _this10 = this;\n\t\treturn _superprop_getGetVectors().call(_this10, _objectSpread2(_objectSpread2({}, options), {}, {\n\t\t\tvectorBucketName: _this10.vectorBucketName,\n\t\t\tindexName: _this10.indexName\n\t\t}));\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Lists vectors in this index with pagination\n\t* Convenience method that automatically includes bucket and index names\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Listing options (bucket and index names automatically set)\n\t* @returns Promise with response containing vectors array and pagination token or error\n\t*\n\t* @example List vectors with pagination\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t* const { data } = await index.listVectors({\n\t*   maxResults: 500,\n\t*   returnMetadata: true\n\t* })\n\t* ```\n\t*/\n\tasync listVectors(options = {}) {\n\t\tvar _superprop_getListVectors = () => super.listVectors, _this11 = this;\n\t\treturn _superprop_getListVectors().call(_this11, _objectSpread2(_objectSpread2({}, options), {}, {\n\t\t\tvectorBucketName: _this11.vectorBucketName,\n\t\t\tindexName: _this11.indexName\n\t\t}));\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Queries for similar vectors in this index\n\t* Convenience method that automatically includes bucket and index names\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Query options (bucket and index names automatically set)\n\t* @returns Promise with response containing matches array of similar vectors ordered by distance or error\n\t*\n\t* @example Query similar vectors\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t* const { data } = await index.queryVectors({\n\t*   queryVector: { float32: [0.1, 0.2, ...] },\n\t*   topK: 5,\n\t*   filter: { category: 'technical' },\n\t*   returnDistance: true,\n\t*   returnMetadata: true\n\t* })\n\t* ```\n\t*/\n\tasync queryVectors(options) {\n\t\tvar _superprop_getQueryVectors = () => super.queryVectors, _this12 = this;\n\t\treturn _superprop_getQueryVectors().call(_this12, _objectSpread2(_objectSpread2({}, options), {}, {\n\t\t\tvectorBucketName: _this12.vectorBucketName,\n\t\t\tindexName: _this12.indexName\n\t\t}));\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Deletes vectors by keys from this index\n\t* Convenience method that automatically includes bucket and index names\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Deletion options (bucket and index names automatically set)\n\t* @returns Promise with empty response on success or error\n\t*\n\t* @example Delete vectors by keys\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t* await index.deleteVectors({\n\t*   keys: ['doc-1', 'doc-2', 'doc-3']\n\t* })\n\t* ```\n\t*/\n\tasync deleteVectors(options) {\n\t\tvar _superprop_getDeleteVectors = () => super.deleteVectors, _this13 = this;\n\t\treturn _superprop_getDeleteVectors().call(_this13, _objectSpread2(_objectSpread2({}, options), {}, {\n\t\t\tvectorBucketName: _this13.vectorBucketName,\n\t\t\tindexName: _this13.indexName\n\t\t}));\n\t}\n};\n\n//#endregion\n//#region src/StorageClient.ts\nvar StorageClient = class extends StorageBucketApi {\n\t/**\n\t* Creates a client for Storage buckets, files, analytics, and vectors.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t*\n\t* @example Using supabase-js (recommended)\n\t* ```ts\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* const avatars = supabase.storage.from('avatars')\n\t* ```\n\t*\n\t* @example Standalone import for bundle-sensitive environments\n\t* ```ts\n\t* import { StorageClient } from '@supabase/storage-js'\n\t*\n\t* const storage = new StorageClient('https://xyzcompany.supabase.co/storage/v1', {\n\t*   apikey: 'your-publishable-key',\n\t* })\n\t* const avatars = storage.from('avatars')\n\t* ```\n\t*/\n\tconstructor(url, headers = {}, fetch$1, opts) {\n\t\tsuper(url, headers, fetch$1, opts);\n\t}\n\t/**\n\t* Perform file operation in a bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t*\n\t* @param id The bucket id to operate on.\n\t*\n\t* @example Accessing a bucket\n\t* ```typescript\n\t* const avatars = supabase.storage.from('avatars')\n\t* ```\n\t*/\n\tfrom(id) {\n\t\treturn new StorageFileApi(this.url, this.headers, id, this.fetch);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Access vector storage operations.\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t*\n\t* @returns A StorageVectorsClient instance configured with the current storage settings.\n\t*/\n\tget vectors() {\n\t\treturn new StorageVectorsClient(this.url + \"/vector\", {\n\t\t\theaders: this.headers,\n\t\t\tfetch: this.fetch\n\t\t});\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Access analytics storage operations using Iceberg tables.\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Analytics Buckets\n\t*\n\t* @returns A StorageAnalyticsClient instance configured with the current storage settings.\n\t*/\n\tget analytics() {\n\t\treturn new StorageAnalyticsClient(this.url + \"/iceberg\", this.headers, this.fetch);\n\t}\n};\n\n//#endregion\nexport { StorageAnalyticsClient, StorageApiError, StorageClient, StorageError, StorageUnknownError, StorageVectorsApiError, StorageVectorsClient, StorageVectorsError, StorageVectorsErrorCode, StorageVectorsUnknownError, VectorBucketApi, VectorBucketScope, VectorDataApi, VectorIndexApi, VectorIndexScope, isStorageError, isStorageVectorsError };\n//# sourceMappingURL=index.mjs.map","// Generated automatically during releases by scripts/update-version-files.ts\n// This file provides runtime access to the package version for:\n// - HTTP request headers (e.g., X-Client-Info header for API requests)\n// - Debugging and support (identifying which version is running)\n// - Telemetry and logging (version reporting in errors/analytics)\n// - Ensuring build artifacts match the published package version\nexport const version = '2.112.3';\n//# sourceMappingURL=version.js.map","import { version } from './version';\n/** Current session will be checked for refresh at this interval. */\nexport const AUTO_REFRESH_TICK_DURATION_MS = 30 * 1000;\n/**\n * A token refresh will be attempted this many ticks before the current session expires. */\nexport const AUTO_REFRESH_TICK_THRESHOLD = 3;\n/*\n * Earliest time before an access token expires that the session should be refreshed.\n */\nexport const EXPIRY_MARGIN_MS = AUTO_REFRESH_TICK_THRESHOLD * AUTO_REFRESH_TICK_DURATION_MS;\n/**\n * After a refresh fails, serial callers (including the next auto-refresh\n * tick) within this window receive the cached failure instead of firing\n * another /token request. Two ticks: each outage burns at most one /token\n * call per cooldown window. Cleared on any successful refresh (locally or\n * via BroadcastChannel from another tab) and on `_removeSession`.\n */\nexport const REFRESH_FAILURE_COOLDOWN_MS = 2 * AUTO_REFRESH_TICK_DURATION_MS;\nexport const GOTRUE_URL = 'http://localhost:9999';\nexport const STORAGE_KEY = 'supabase.auth.token';\nexport const AUDIENCE = '';\nexport const DEFAULT_HEADERS = { 'X-Client-Info': `gotrue-js/${version}` };\nexport const NETWORK_FAILURE = {\n    MAX_RETRIES: 10,\n    RETRY_INTERVAL: 2, // in deciseconds\n};\nexport const API_VERSION_HEADER_NAME = 'X-Supabase-Api-Version';\nexport const API_VERSIONS = {\n    '2024-01-01': {\n        timestamp: Date.parse('2024-01-01T00:00:00.0Z'),\n        name: '2024-01-01',\n    },\n};\nexport const BASE64URL_REGEX = /^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i;\n/**\n * Reserved query parameter appended to `redirectTo` URLs (behind\n * `experimental.appendPkceFlowIdToRedirects`) that correlates a PKCE callback\n * with the code verifier stored when its flow started. It round-trips through\n * the auth server untouched and identifies a verifier slot in storage — the\n * verifier itself never appears in a URL.\n */\nexport const PKCE_FLOW_ID_PARAM = 'sb_flow_id';\n/**\n * Maximum number of PKCE code verifiers kept in storage at once. Starting a\n * new flow beyond this evicts the oldest pending verifier.\n */\nexport const PKCE_MAX_CONCURRENT_FLOWS = 5;\nexport const JWKS_TTL = 10 * 60 * 1000; // 10 minutes\n//# sourceMappingURL=constants.js.map","/**\n * Base error thrown by Supabase Auth helpers.\n *\n * @example\n * ```ts\n * import { AuthError } from '@supabase/auth-js'\n *\n * throw new AuthError('Unexpected auth error', 500, 'unexpected')\n * ```\n */\nexport class AuthError extends Error {\n    constructor(message, status, code) {\n        super(message);\n        this.__isAuthError = true;\n        this.name = 'AuthError';\n        this.status = status;\n        this.code = code;\n    }\n    toJSON() {\n        return {\n            name: this.name,\n            message: this.message,\n            status: this.status,\n            code: this.code,\n        };\n    }\n}\nexport function isAuthError(error) {\n    return typeof error === 'object' && error !== null && '__isAuthError' in error;\n}\n/**\n * Error returned directly from the GoTrue REST API.\n *\n * @example\n * ```ts\n * import { AuthApiError } from '@supabase/auth-js'\n *\n * throw new AuthApiError('Invalid credentials', 400, 'invalid_credentials')\n * ```\n */\nexport class AuthApiError extends AuthError {\n    constructor(message, status, code) {\n        super(message, status, code);\n        this.name = 'AuthApiError';\n        this.status = status;\n        this.code = code;\n    }\n}\nexport function isAuthApiError(error) {\n    return isAuthError(error) && error.name === 'AuthApiError';\n}\n/**\n * Wraps non-standard errors so callers can inspect the root cause.\n *\n * @example\n * ```ts\n * import { AuthUnknownError } from '@supabase/auth-js'\n *\n * try {\n *   await someAuthCall()\n * } catch (err) {\n *   throw new AuthUnknownError('Auth failed', err)\n * }\n * ```\n */\nexport class AuthUnknownError extends AuthError {\n    constructor(message, originalError) {\n        super(message);\n        this.name = 'AuthUnknownError';\n        this.originalError = originalError;\n    }\n}\n/**\n * Flexible error class used to create named auth errors at runtime.\n *\n * @example\n * ```ts\n * import { CustomAuthError } from '@supabase/auth-js'\n *\n * throw new CustomAuthError('My custom auth error', 'MyAuthError', 400, 'custom_code')\n * ```\n */\nexport class CustomAuthError extends AuthError {\n    constructor(message, name, status, code) {\n        super(message, status, code);\n        this.name = name;\n        this.status = status;\n    }\n}\n/**\n * Error thrown when an operation requires a session but none is present.\n *\n * @example\n * ```ts\n * import { AuthSessionMissingError } from '@supabase/auth-js'\n *\n * throw new AuthSessionMissingError()\n * ```\n */\nexport class AuthSessionMissingError extends CustomAuthError {\n    constructor() {\n        super('Auth session missing!', 'AuthSessionMissingError', 400, undefined);\n    }\n}\nexport function isAuthSessionMissingError(error) {\n    return isAuthError(error) && error.name === 'AuthSessionMissingError';\n}\n/**\n * Error thrown when the token response is malformed.\n *\n * @example\n * ```ts\n * import { AuthInvalidTokenResponseError } from '@supabase/auth-js'\n *\n * throw new AuthInvalidTokenResponseError()\n * ```\n */\nexport class AuthInvalidTokenResponseError extends CustomAuthError {\n    constructor() {\n        super('Auth session or user missing', 'AuthInvalidTokenResponseError', 500, undefined);\n    }\n}\n/**\n * Error thrown when email/password credentials are invalid.\n *\n * @example\n * ```ts\n * import { AuthInvalidCredentialsError } from '@supabase/auth-js'\n *\n * throw new AuthInvalidCredentialsError('Email or password is incorrect')\n * ```\n */\nexport class AuthInvalidCredentialsError extends CustomAuthError {\n    constructor(message) {\n        super(message, 'AuthInvalidCredentialsError', 400, undefined);\n    }\n}\n/**\n * Error thrown when implicit grant redirects contain an error.\n *\n * @example\n * ```ts\n * import { AuthImplicitGrantRedirectError } from '@supabase/auth-js'\n *\n * throw new AuthImplicitGrantRedirectError('OAuth redirect failed', {\n *   error: 'access_denied',\n *   code: 'oauth_error',\n * })\n * ```\n */\nexport class AuthImplicitGrantRedirectError extends CustomAuthError {\n    constructor(message, details = null) {\n        super(message, 'AuthImplicitGrantRedirectError', 500, undefined);\n        this.details = null;\n        this.details = details;\n    }\n    toJSON() {\n        return Object.assign(Object.assign({}, super.toJSON()), { details: this.details });\n    }\n}\nexport function isAuthImplicitGrantRedirectError(error) {\n    return isAuthError(error) && error.name === 'AuthImplicitGrantRedirectError';\n}\n/**\n * Error thrown during PKCE code exchanges.\n *\n * @example\n * ```ts\n * import { AuthPKCEGrantCodeExchangeError } from '@supabase/auth-js'\n *\n * throw new AuthPKCEGrantCodeExchangeError('PKCE exchange failed')\n * ```\n */\nexport class AuthPKCEGrantCodeExchangeError extends CustomAuthError {\n    constructor(message, details = null) {\n        super(message, 'AuthPKCEGrantCodeExchangeError', 500, undefined);\n        this.details = null;\n        this.details = details;\n    }\n    toJSON() {\n        return Object.assign(Object.assign({}, super.toJSON()), { details: this.details });\n    }\n}\n/**\n * Error thrown when the PKCE code verifier is not found in storage.\n * This typically happens when the auth flow was initiated in a different\n * browser, device, or the storage was cleared.\n *\n * @example\n * ```ts\n * import { AuthPKCECodeVerifierMissingError } from '@supabase/auth-js'\n *\n * throw new AuthPKCECodeVerifierMissingError()\n * ```\n */\nexport class AuthPKCECodeVerifierMissingError extends CustomAuthError {\n    constructor() {\n        super('PKCE code verifier not found in storage. ' +\n            'This can happen if the auth flow was initiated in a different browser or device, ' +\n            'or if the storage was cleared. For SSR frameworks (Next.js, SvelteKit, etc.), ' +\n            'use @supabase/ssr on both the server and client to store the code verifier in cookies.', 'AuthPKCECodeVerifierMissingError', 400, 'pkce_code_verifier_not_found');\n    }\n}\nexport function isAuthPKCECodeVerifierMissingError(error) {\n    return isAuthError(error) && error.name === 'AuthPKCECodeVerifierMissingError';\n}\n/**\n * Error thrown when a transient fetch issue occurs.\n *\n * @example\n * ```ts\n * import { AuthRetryableFetchError } from '@supabase/auth-js'\n *\n * throw new AuthRetryableFetchError('Service temporarily unavailable', 503)\n * ```\n */\nexport class AuthRetryableFetchError extends CustomAuthError {\n    constructor(message, status) {\n        super(message, 'AuthRetryableFetchError', status, undefined);\n    }\n}\nexport function isAuthRetryableFetchError(error) {\n    return isAuthError(error) && error.name === 'AuthRetryableFetchError';\n}\n/**\n * Returned when the server rotated a refresh token successfully but the\n * client chose not to persist the rotated tokens because the local session\n * changed mid-flight. Usually means a concurrent `signOut` cleared storage\n * between when the refresh started and when it came back.\n *\n * Set on the `error` field of the refresh result so callers can tell \"we\n * got rotated tokens but threw them away\" apart from \"the refresh failed.\"\n * The rotated session on the server will be picked up on the next refresh\n * via GoTrue's parent-of-active path.\n *\n * @example\n * ```ts\n * import { isAuthRefreshDiscardedError } from '@supabase/auth-js'\n *\n * if (isAuthRefreshDiscardedError(error)) {\n *   // Concurrent signOut/sign-in raced our refresh. Treat as a no-op.\n * }\n * ```\n */\nexport class AuthRefreshDiscardedError extends CustomAuthError {\n    constructor(message = 'Refresh result discarded: session state changed mid-flight (e.g., concurrent signOut)') {\n        super(message, 'AuthRefreshDiscardedError', 409, undefined);\n    }\n}\nexport function isAuthRefreshDiscardedError(error) {\n    return isAuthError(error) && error.name === 'AuthRefreshDiscardedError';\n}\n/**\n * This error is thrown on certain methods when the password used is deemed\n * weak. Inspect the reasons to identify what password strength rules are\n * inadequate.\n */\n/**\n * Error thrown when a supplied password is considered weak.\n *\n * @example\n * ```ts\n * import { AuthWeakPasswordError } from '@supabase/auth-js'\n *\n * throw new AuthWeakPasswordError('Password too short', 400, ['min_length'])\n * ```\n */\nexport class AuthWeakPasswordError extends CustomAuthError {\n    constructor(message, status, reasons) {\n        super(message, 'AuthWeakPasswordError', status, 'weak_password');\n        this.reasons = reasons;\n    }\n    toJSON() {\n        return Object.assign(Object.assign({}, super.toJSON()), { reasons: this.reasons });\n    }\n}\nexport function isAuthWeakPasswordError(error) {\n    return isAuthError(error) && error.name === 'AuthWeakPasswordError';\n}\n/**\n * Error thrown when a JWT cannot be verified or parsed.\n *\n * @example\n * ```ts\n * import { AuthInvalidJwtError } from '@supabase/auth-js'\n *\n * throw new AuthInvalidJwtError('Token signature is invalid')\n * ```\n */\nexport class AuthInvalidJwtError extends CustomAuthError {\n    constructor(message) {\n        super(message, 'AuthInvalidJwtError', 400, 'invalid_jwt');\n    }\n}\n//# sourceMappingURL=errors.js.map","/**\n * Avoid modifying this file. It's part of\n * https://github.com/supabase-community/base64url-js.  Submit all fixes on\n * that repo!\n */\n/**\n * An array of characters that encode 6 bits into a Base64-URL alphabet\n * character.\n */\nconst TO_BASE64URL = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'.split('');\n/**\n * An array of characters that can appear in a Base64-URL encoded string but\n * should be ignored.\n */\nconst IGNORE_BASE64URL = ' \\t\\n\\r='.split('');\n/**\n * An array of 128 numbers that map a Base64-URL character to 6 bits, or if -2\n * used to skip the character, or if -1 used to error out.\n */\nconst FROM_BASE64URL = (() => {\n    const charMap = new Array(128);\n    for (let i = 0; i < charMap.length; i += 1) {\n        charMap[i] = -1;\n    }\n    for (let i = 0; i < IGNORE_BASE64URL.length; i += 1) {\n        charMap[IGNORE_BASE64URL[i].charCodeAt(0)] = -2;\n    }\n    for (let i = 0; i < TO_BASE64URL.length; i += 1) {\n        charMap[TO_BASE64URL[i].charCodeAt(0)] = i;\n    }\n    return charMap;\n})();\n/**\n * Converts a byte to a Base64-URL string.\n *\n * @param byte The byte to convert, or null to flush at the end of the byte sequence.\n * @param state The Base64 conversion state. Pass an initial value of `{ queue: 0, queuedBits: 0 }`.\n * @param emit A function called with the next Base64 character when ready.\n */\nexport function byteToBase64URL(byte, state, emit) {\n    if (byte !== null) {\n        state.queue = (state.queue << 8) | byte;\n        state.queuedBits += 8;\n        while (state.queuedBits >= 6) {\n            const pos = (state.queue >> (state.queuedBits - 6)) & 63;\n            emit(TO_BASE64URL[pos]);\n            state.queuedBits -= 6;\n        }\n    }\n    else if (state.queuedBits > 0) {\n        state.queue = state.queue << (6 - state.queuedBits);\n        state.queuedBits = 6;\n        while (state.queuedBits >= 6) {\n            const pos = (state.queue >> (state.queuedBits - 6)) & 63;\n            emit(TO_BASE64URL[pos]);\n            state.queuedBits -= 6;\n        }\n    }\n}\n/**\n * Converts a String char code (extracted using `string.charCodeAt(position)`) to a sequence of Base64-URL characters.\n *\n * @param charCode The char code of the JavaScript string.\n * @param state The Base64 state. Pass an initial value of `{ queue: 0, queuedBits: 0 }`.\n * @param emit A function called with the next byte.\n */\nexport function byteFromBase64URL(charCode, state, emit) {\n    const bits = FROM_BASE64URL[charCode];\n    if (bits > -1) {\n        // valid Base64-URL character\n        state.queue = (state.queue << 6) | bits;\n        state.queuedBits += 6;\n        while (state.queuedBits >= 8) {\n            emit((state.queue >> (state.queuedBits - 8)) & 0xff);\n            state.queuedBits -= 8;\n        }\n    }\n    else if (bits === -2) {\n        // ignore spaces, tabs, newlines, =\n        return;\n    }\n    else {\n        throw new Error(`Invalid Base64-URL character \"${String.fromCharCode(charCode)}\"`);\n    }\n}\n/**\n * Converts a JavaScript string (which may include any valid character) into a\n * Base64-URL encoded string. The string is first encoded in UTF-8 which is\n * then encoded as Base64-URL.\n *\n * @param str The string to convert.\n */\nexport function stringToBase64URL(str) {\n    const base64 = [];\n    const emitter = (char) => {\n        base64.push(char);\n    };\n    const state = { queue: 0, queuedBits: 0 };\n    stringToUTF8(str, (byte) => {\n        byteToBase64URL(byte, state, emitter);\n    });\n    byteToBase64URL(null, state, emitter);\n    return base64.join('');\n}\n/**\n * Converts a Base64-URL encoded string into a JavaScript string. It is assumed\n * that the underlying string has been encoded as UTF-8.\n *\n * @param str The Base64-URL encoded string.\n */\nexport function stringFromBase64URL(str) {\n    const conv = [];\n    const utf8Emit = (codepoint) => {\n        conv.push(String.fromCodePoint(codepoint));\n    };\n    const utf8State = {\n        utf8seq: 0,\n        codepoint: 0,\n    };\n    const b64State = { queue: 0, queuedBits: 0 };\n    const byteEmit = (byte) => {\n        stringFromUTF8(byte, utf8State, utf8Emit);\n    };\n    for (let i = 0; i < str.length; i += 1) {\n        byteFromBase64URL(str.charCodeAt(i), b64State, byteEmit);\n    }\n    return conv.join('');\n}\n/**\n * Converts a Unicode codepoint to a multi-byte UTF-8 sequence.\n *\n * @param codepoint The Unicode codepoint.\n * @param emit      Function which will be called for each UTF-8 byte that represents the codepoint.\n */\nexport function codepointToUTF8(codepoint, emit) {\n    if (codepoint <= 0x7f) {\n        emit(codepoint);\n        return;\n    }\n    else if (codepoint <= 0x7ff) {\n        emit(0xc0 | (codepoint >> 6));\n        emit(0x80 | (codepoint & 0x3f));\n        return;\n    }\n    else if (codepoint <= 0xffff) {\n        emit(0xe0 | (codepoint >> 12));\n        emit(0x80 | ((codepoint >> 6) & 0x3f));\n        emit(0x80 | (codepoint & 0x3f));\n        return;\n    }\n    else if (codepoint <= 0x10ffff) {\n        emit(0xf0 | (codepoint >> 18));\n        emit(0x80 | ((codepoint >> 12) & 0x3f));\n        emit(0x80 | ((codepoint >> 6) & 0x3f));\n        emit(0x80 | (codepoint & 0x3f));\n        return;\n    }\n    throw new Error(`Unrecognized Unicode codepoint: ${codepoint.toString(16)}`);\n}\n/**\n * Converts a JavaScript string to a sequence of UTF-8 bytes.\n *\n * @param str  The string to convert to UTF-8.\n * @param emit Function which will be called for each UTF-8 byte of the string.\n */\nexport function stringToUTF8(str, emit) {\n    for (let i = 0; i < str.length; i += 1) {\n        let codepoint = str.charCodeAt(i);\n        if (codepoint > 0xd7ff && codepoint <= 0xdbff) {\n            // most UTF-16 codepoints are Unicode codepoints, except values in this\n            // range where the next UTF-16 codepoint needs to be combined with the\n            // current one to get the Unicode codepoint\n            const highSurrogate = ((codepoint - 0xd800) * 0x400) & 0xffff;\n            const lowSurrogate = (str.charCodeAt(i + 1) - 0xdc00) & 0xffff;\n            codepoint = (lowSurrogate | highSurrogate) + 0x10000;\n            i += 1;\n        }\n        codepointToUTF8(codepoint, emit);\n    }\n}\n/**\n * Converts a UTF-8 byte to a Unicode codepoint.\n *\n * @param byte  The UTF-8 byte next in the sequence.\n * @param state The shared state between consecutive UTF-8 bytes in the\n *              sequence, an object with the shape `{ utf8seq: 0, codepoint: 0 }`.\n * @param emit  Function which will be called for each codepoint.\n */\nexport function stringFromUTF8(byte, state, emit) {\n    if (state.utf8seq === 0) {\n        if (byte <= 0x7f) {\n            emit(byte);\n            return;\n        }\n        // count the number of 1 leading bits until you reach 0\n        for (let leadingBit = 1; leadingBit < 6; leadingBit += 1) {\n            if (((byte >> (7 - leadingBit)) & 1) === 0) {\n                state.utf8seq = leadingBit;\n                break;\n            }\n        }\n        if (state.utf8seq === 2) {\n            state.codepoint = byte & 31;\n        }\n        else if (state.utf8seq === 3) {\n            state.codepoint = byte & 15;\n        }\n        else if (state.utf8seq === 4) {\n            state.codepoint = byte & 7;\n        }\n        else {\n            throw new Error('Invalid UTF-8 sequence');\n        }\n        state.utf8seq -= 1;\n    }\n    else if (state.utf8seq > 0) {\n        if (byte <= 0x7f) {\n            throw new Error('Invalid UTF-8 sequence');\n        }\n        state.codepoint = (state.codepoint << 6) | (byte & 63);\n        state.utf8seq -= 1;\n        if (state.utf8seq === 0) {\n            emit(state.codepoint);\n        }\n    }\n}\n/**\n * Helper functions to convert different types of strings to Uint8Array\n */\nexport function base64UrlToUint8Array(str) {\n    const result = [];\n    const state = { queue: 0, queuedBits: 0 };\n    const onByte = (byte) => {\n        result.push(byte);\n    };\n    for (let i = 0; i < str.length; i += 1) {\n        byteFromBase64URL(str.charCodeAt(i), state, onByte);\n    }\n    return new Uint8Array(result);\n}\nexport function stringToUint8Array(str) {\n    const result = [];\n    stringToUTF8(str, (byte) => result.push(byte));\n    return new Uint8Array(result);\n}\nexport function bytesToBase64URL(bytes) {\n    const result = [];\n    const state = { queue: 0, queuedBits: 0 };\n    const onChar = (char) => {\n        result.push(char);\n    };\n    bytes.forEach((byte) => byteToBase64URL(byte, state, onChar));\n    // always call with `null` after processing all bytes\n    byteToBase64URL(null, state, onChar);\n    return result.join('');\n}\n//# sourceMappingURL=base64url.js.map","import { API_VERSION_HEADER_NAME, BASE64URL_REGEX, PKCE_FLOW_ID_PARAM, PKCE_MAX_CONCURRENT_FLOWS, } from './constants';\nimport { AuthInvalidJwtError } from './errors';\nimport { base64UrlToUint8Array, stringFromBase64URL } from './base64url';\nexport function expiresAt(expiresIn) {\n    const timeNow = Math.round(Date.now() / 1000);\n    return timeNow + expiresIn;\n}\n/**\n * Generates a unique identifier for internal callback subscriptions.\n *\n * This function uses JavaScript Symbols to create guaranteed-unique identifiers\n * for auth state change callbacks. Symbols are ideal for this use case because:\n * - They are guaranteed unique by the JavaScript runtime\n * - They work in all environments (browser, SSR, Node.js)\n * - They avoid issues with Next.js 16 deterministic rendering requirements\n * - They are perfect for internal, non-serializable identifiers\n *\n * Note: This function is only used for internal subscription management,\n * not for security-critical operations like session tokens.\n */\nexport function generateCallbackId() {\n    return Symbol('auth-callback');\n}\nexport const isBrowser = () => typeof window !== 'undefined' && typeof document !== 'undefined';\nconst localStorageWriteTests = {\n    tested: false,\n    writable: false,\n};\n/**\n * Checks whether localStorage is supported on this browser.\n */\nexport const supportsLocalStorage = () => {\n    if (!isBrowser()) {\n        return false;\n    }\n    try {\n        if (typeof globalThis.localStorage !== 'object') {\n            return false;\n        }\n    }\n    catch (e) {\n        // DOM exception when accessing `localStorage`\n        return false;\n    }\n    if (localStorageWriteTests.tested) {\n        return localStorageWriteTests.writable;\n    }\n    const randomKey = `lswt-${Math.random()}${Math.random()}`;\n    try {\n        globalThis.localStorage.setItem(randomKey, randomKey);\n        globalThis.localStorage.removeItem(randomKey);\n        localStorageWriteTests.tested = true;\n        localStorageWriteTests.writable = true;\n    }\n    catch (e) {\n        // localStorage can't be written to\n        // https://www.chromium.org/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document\n        localStorageWriteTests.tested = true;\n        localStorageWriteTests.writable = false;\n    }\n    return localStorageWriteTests.writable;\n};\n/**\n * Extracts parameters encoded in the URL both in the query and fragment.\n */\nexport function parseParametersFromURL(href) {\n    const result = {};\n    const url = new URL(href);\n    if (url.hash && url.hash[0] === '#') {\n        try {\n            const hashSearchParams = new URLSearchParams(url.hash.substring(1));\n            hashSearchParams.forEach((value, key) => {\n                result[key] = value;\n            });\n        }\n        catch (_e) {\n            // hash is not a query string\n        }\n    }\n    // search parameters take precedence over hash parameters\n    url.searchParams.forEach((value, key) => {\n        result[key] = value;\n    });\n    return result;\n}\nexport const resolveFetch = (customFetch) => {\n    if (customFetch) {\n        return (...args) => customFetch(...args);\n    }\n    return (...args) => fetch(...args);\n};\nexport const looksLikeFetchResponse = (maybeResponse) => {\n    return (typeof maybeResponse === 'object' &&\n        maybeResponse !== null &&\n        'status' in maybeResponse &&\n        'ok' in maybeResponse &&\n        'json' in maybeResponse &&\n        typeof maybeResponse.json === 'function');\n};\n// Storage helpers\nexport const setItemAsync = async (storage, key, data) => {\n    await storage.setItem(key, JSON.stringify(data));\n};\nexport const getItemAsync = async (storage, key) => {\n    const value = await storage.getItem(key);\n    if (!value) {\n        return null;\n    }\n    try {\n        return JSON.parse(value);\n    }\n    catch (_a) {\n        // Storage values are always written as JSON via setItemAsync. A non-JSON\n        // value means the entry is corrupted (e.g. mismatched chunked cookies in\n        // SSR contexts). Treat as absent so callers do not mutate or re-save the\n        // garbage, which would otherwise trigger a TypeError downstream and\n        // leak the raw value into error logs.\n        return null;\n    }\n};\nexport const removeItemAsync = async (storage, key) => {\n    await storage.removeItem(key);\n};\n/**\n * A deferred represents some asynchronous work that is not yet finished, which\n * may or may not culminate in a value.\n * Taken from: https://github.com/mike-north/types/blob/master/src/async.ts\n */\nexport class Deferred {\n    constructor() {\n        // eslint-disable-next-line @typescript-eslint/no-extra-semi\n        ;\n        this.promise = new Deferred.promiseConstructor((res, rej) => {\n            // eslint-disable-next-line @typescript-eslint/no-extra-semi\n            ;\n            this.resolve = res;\n            this.reject = rej;\n        });\n    }\n}\nDeferred.promiseConstructor = Promise;\nexport function decodeJWT(token) {\n    const parts = token.split('.');\n    if (parts.length !== 3) {\n        throw new AuthInvalidJwtError('Invalid JWT structure');\n    }\n    // Regex checks for base64url format\n    for (let i = 0; i < parts.length; i++) {\n        if (!BASE64URL_REGEX.test(parts[i])) {\n            throw new AuthInvalidJwtError('JWT not in base64url format');\n        }\n    }\n    const data = {\n        // using base64url lib\n        header: JSON.parse(stringFromBase64URL(parts[0])),\n        payload: JSON.parse(stringFromBase64URL(parts[1])),\n        signature: base64UrlToUint8Array(parts[2]),\n        raw: {\n            header: parts[0],\n            payload: parts[1],\n        },\n    };\n    return data;\n}\n/**\n * Creates a promise that resolves to null after some time.\n */\nexport async function sleep(time) {\n    return await new Promise((accept) => {\n        setTimeout(() => accept(null), time);\n    });\n}\n/**\n * Converts the provided async function into a retryable function. Each result\n * or thrown error is sent to the isRetryable function which should return true\n * if the function should run again.\n */\nexport function retryable(fn, isRetryable) {\n    const promise = new Promise((accept, reject) => {\n        // eslint-disable-next-line @typescript-eslint/no-extra-semi\n        ;\n        (async () => {\n            for (let attempt = 0; attempt < Infinity; attempt++) {\n                try {\n                    const result = await fn(attempt);\n                    if (!isRetryable(attempt, null, result)) {\n                        accept(result);\n                        return;\n                    }\n                }\n                catch (e) {\n                    if (!isRetryable(attempt, e)) {\n                        reject(e);\n                        return;\n                    }\n                }\n            }\n        })();\n    });\n    return promise;\n}\nfunction dec2hex(dec) {\n    return ('0' + dec.toString(16)).substr(-2);\n}\n// Functions below taken from: https://stackoverflow.com/questions/63309409/creating-a-code-verifier-and-challenge-for-pkce-auth-on-spotify-api-in-reactjs\nexport function generatePKCEVerifier() {\n    const verifierLength = 56;\n    const array = new Uint32Array(verifierLength);\n    if (typeof crypto === 'undefined') {\n        const charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\n        const charSetLen = charSet.length;\n        let verifier = '';\n        for (let i = 0; i < verifierLength; i++) {\n            verifier += charSet.charAt(Math.floor(Math.random() * charSetLen));\n        }\n        return verifier;\n    }\n    crypto.getRandomValues(array);\n    return Array.from(array, dec2hex).join('');\n}\nasync function sha256(randomString) {\n    const encoder = new TextEncoder();\n    const encodedData = encoder.encode(randomString);\n    const hash = await crypto.subtle.digest('SHA-256', encodedData);\n    const bytes = new Uint8Array(hash);\n    return Array.from(bytes)\n        .map((c) => String.fromCharCode(c))\n        .join('');\n}\nexport async function generatePKCEChallenge(verifier) {\n    const hasCryptoSupport = typeof crypto !== 'undefined' &&\n        typeof crypto.subtle !== 'undefined' &&\n        typeof TextEncoder !== 'undefined';\n    if (!hasCryptoSupport) {\n        console.warn('WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256.');\n        return verifier;\n    }\n    const hashed = await sha256(verifier);\n    return btoa(hashed).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\nconst PKCE_FLOW_ID_PATTERN = /^[a-zA-Z0-9_-]{8,64}$/;\n/**\n * Returns the flow id if it is a plausible flow id, `null` otherwise. Flow\n * ids can arrive via URL parameters, so anything outside the expected shape\n * is discarded before it is used to build a storage key.\n */\nexport function validatePKCEFlowId(flowId) {\n    return typeof flowId === 'string' && PKCE_FLOW_ID_PATTERN.test(flowId) ? flowId : null;\n}\nexport function generatePKCEFlowId() {\n    if (typeof crypto !== 'undefined' && typeof crypto.getRandomValues === 'function') {\n        const bytes = new Uint8Array(16);\n        crypto.getRandomValues(bytes);\n        return Array.from(bytes, dec2hex).join('');\n    }\n    let flowId = '';\n    for (let i = 0; i < 32; i++) {\n        flowId += Math.floor(Math.random() * 16).toString(16);\n    }\n    return flowId;\n}\n// Slot keys deliberately end in `-code-verifier`: @supabase/ssr's server\n// cookie adapter only persists writes immediately for keys with that suffix\n// (no auth event fires when a verifier is stored). They also contain no dot,\n// because @supabase/ssr chunks oversized cookies as `<key>.<number>` and a\n// dot-delimited key could be mistaken for a chunk of the fixed\n// `-code-verifier` cookie and clobbered by its chunk management.\nexport const pkceVerifierSlotKey = (storageKey, flowId) => `${storageKey}-flow-${flowId}-code-verifier`;\nconst pkceFlowIndexKey = (storageKey) => `${storageKey}-flows-code-verifier`;\n/**\n * Storage adapters cannot enumerate keys, so the ids of pending verifier\n * slots are tracked in an index entry, oldest first. Index entries pass\n * through the same validation as URL-provided flow ids: with cookie-based\n * storage the index contents are no more trustworthy than a URL parameter.\n */\nasync function getPKCEFlowIndex(storage, storageKey) {\n    const index = await getItemAsync(storage, pkceFlowIndexKey(storageKey));\n    return Array.isArray(index)\n        ? index.filter((id) => validatePKCEFlowId(id) !== null)\n        : [];\n}\n/**\n * The index is read-modify-write without a lock: two concurrent starts (e.g.\n * two tabs) can lose one index update. The losing flow still works — its slot\n * is addressed directly by key — but its entry is missing from the index, so\n * it escapes both ring eviction and removeAllPKCEVerifiers: the orphaned slot\n * persists for the storage medium's lifetime (up to the cookie max age in\n * cookie storage) and repeated races accumulate one orphan each. Accepted\n * trade-off: locking every flow start is far more intrusive than the leak.\n */\nexport async function storePKCEVerifier(storage, storageKey, flowId, verifier, onEvictFlow) {\n    await setItemAsync(storage, pkceVerifierSlotKey(storageKey, flowId), verifier);\n    const index = (await getPKCEFlowIndex(storage, storageKey)).filter((id) => id !== flowId);\n    index.push(flowId);\n    while (index.length > PKCE_MAX_CONCURRENT_FLOWS) {\n        const evicted = index.shift();\n        await removeItemAsync(storage, pkceVerifierSlotKey(storageKey, evicted));\n        onEvictFlow === null || onEvictFlow === void 0 ? void 0 : onEvictFlow(evicted);\n    }\n    await setItemAsync(storage, pkceFlowIndexKey(storageKey), index);\n    // Deprecation-window dual write: exchanges that cannot identify their flow\n    // (older SDK versions, redirects without the flow id parameter) read the\n    // fixed key, which mirrors the most recently started flow.\n    await setItemAsync(storage, `${storageKey}-code-verifier`, verifier);\n}\n/**\n * Looks up the verifier for `flowId`. When a flow id is given, only that slot\n * is consulted — deliberately no fallback to the fixed legacy key: submitting\n * another flow's verifier would burn the single-use auth code, and the\n * subsequent cleanup would delete a pending flow's only fallback. The legacy\n * key is read only when no flow id is available at all.\n */\nexport async function retrievePKCEVerifier(storage, storageKey, flowId) {\n    if (flowId) {\n        const verifier = await getItemAsync(storage, pkceVerifierSlotKey(storageKey, flowId));\n        return { verifier: typeof verifier === 'string' ? verifier : null, flowId };\n    }\n    const verifier = await getItemAsync(storage, `${storageKey}-code-verifier`);\n    return { verifier: typeof verifier === 'string' ? verifier : null, flowId: null };\n}\n/**\n * Removes a single flow's verifier. Never clears other flows' slots: with a\n * `flowId` only that slot is deleted (plus the legacy fixed key when it holds\n * the same verifier); without one, only the legacy fixed key is deleted.\n */\nexport async function removePKCEVerifier(storage, storageKey, flowId) {\n    const legacyKey = `${storageKey}-code-verifier`;\n    if (!flowId) {\n        await removeItemAsync(storage, legacyKey);\n        return;\n    }\n    const slotKey = pkceVerifierSlotKey(storageKey, flowId);\n    const slotValue = await getItemAsync(storage, slotKey);\n    await removeItemAsync(storage, slotKey);\n    // Skip the index rewrite when the flow was never indexed (e.g. a failed\n    // exchange for an absent slot): on cookie storage every write is a full\n    // Set-Cookie cycle.\n    const index = await getPKCEFlowIndex(storage, storageKey);\n    const remaining = index.filter((id) => id !== flowId);\n    if (remaining.length !== index.length) {\n        if (remaining.length > 0) {\n            await setItemAsync(storage, pkceFlowIndexKey(storageKey), remaining);\n        }\n        else {\n            await removeItemAsync(storage, pkceFlowIndexKey(storageKey));\n        }\n    }\n    if (slotValue != null && slotValue === (await getItemAsync(storage, legacyKey))) {\n        await removeItemAsync(storage, legacyKey);\n    }\n}\n/**\n * Removes every pending verifier: all slots in the index, the index itself\n * and the fixed legacy key. Used on session teardown (sign-out, invalid\n * session) — matches the pre-slot behavior where tearing down the session\n * deleted the only verifier, and prevents long-lived stale verifier cookies.\n */\nexport async function removeAllPKCEVerifiers(storage, storageKey) {\n    const index = await getPKCEFlowIndex(storage, storageKey);\n    for (const flowId of index) {\n        await removeItemAsync(storage, pkceVerifierSlotKey(storageKey, flowId));\n    }\n    await removeItemAsync(storage, pkceFlowIndexKey(storageKey));\n    await removeItemAsync(storage, `${storageKey}-code-verifier`);\n}\n/**\n * Appends the reserved flow id parameter to a `redirectTo` URL, replacing any\n * existing occurrence. String-based (no URL round-trip) so custom schemes\n * (native deep links) and the exact encoding of the app's own parameters\n * survive untouched; an existing fragment stays at the end of the URL.\n */\nexport function appendFlowIdToRedirectTo(redirectTo, flowId) {\n    const hashIndex = redirectTo.indexOf('#');\n    let base = hashIndex === -1 ? redirectTo : redirectTo.slice(0, hashIndex);\n    const fragment = hashIndex === -1 ? '' : redirectTo.slice(hashIndex);\n    const queryIndex = base.indexOf('?');\n    if (queryIndex !== -1) {\n        const path = base.slice(0, queryIndex);\n        const remaining = base\n            .slice(queryIndex + 1)\n            .split('&')\n            .filter((pair) => pair !== '' && pair !== PKCE_FLOW_ID_PARAM && !pair.startsWith(`${PKCE_FLOW_ID_PARAM}=`));\n        base = remaining.length > 0 ? `${path}?${remaining.join('&')}` : path;\n    }\n    const separator = base.includes('?') ? '&' : '?';\n    return `${base}${separator}${PKCE_FLOW_ID_PARAM}=${encodeURIComponent(flowId)}${fragment}`;\n}\nexport async function getCodeChallengeAndMethod(storage, storageKey, isPasswordRecovery = false, onEvictFlow) {\n    const codeVerifier = generatePKCEVerifier();\n    let storedCodeVerifier = codeVerifier;\n    if (isPasswordRecovery) {\n        storedCodeVerifier += '/recovery';\n    }\n    const flowId = generatePKCEFlowId();\n    await storePKCEVerifier(storage, storageKey, flowId, storedCodeVerifier, onEvictFlow);\n    const codeChallenge = await generatePKCEChallenge(codeVerifier);\n    const codeChallengeMethod = codeVerifier === codeChallenge ? 'plain' : 's256';\n    return [codeChallenge, codeChallengeMethod, flowId];\n}\n/** Parses the API version which is 2YYY-MM-DD. */\nconst API_VERSION_REGEX = /^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;\nexport function parseResponseAPIVersion(response) {\n    const apiVersion = response.headers.get(API_VERSION_HEADER_NAME);\n    if (!apiVersion) {\n        return null;\n    }\n    if (!apiVersion.match(API_VERSION_REGEX)) {\n        return null;\n    }\n    try {\n        const date = new Date(`${apiVersion}T00:00:00.0Z`);\n        return date;\n    }\n    catch (_e) {\n        return null;\n    }\n}\nexport function validateExp(exp) {\n    if (!exp) {\n        throw new Error('Missing exp claim');\n    }\n    const timeNow = Math.floor(Date.now() / 1000);\n    if (exp <= timeNow) {\n        throw new Error('JWT has expired');\n    }\n}\nexport function getAlgorithm(alg) {\n    switch (alg) {\n        case 'RS256':\n            return {\n                name: 'RSASSA-PKCS1-v1_5',\n                hash: { name: 'SHA-256' },\n            };\n        case 'ES256':\n            return {\n                name: 'ECDSA',\n                namedCurve: 'P-256',\n                hash: { name: 'SHA-256' },\n            };\n        default:\n            throw new Error('Invalid alg claim');\n    }\n}\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;\nexport function validateUUID(str) {\n    if (!UUID_REGEX.test(str)) {\n        throw new Error('@supabase/auth-js: Expected parameter to be UUID but is not');\n    }\n}\nexport function assertPasskeyExperimentalEnabled(experimental) {\n    if (!experimental.passkey) {\n        throw new Error('@supabase/auth-js: the passkey API is experimental and disabled by default. Enable it by passing `auth: { experimental: { passkey: true } }` to createClient (or to the GoTrueClient constructor).');\n    }\n}\nexport function userNotAvailableProxy() {\n    const proxyTarget = {};\n    return new Proxy(proxyTarget, {\n        get: (target, prop) => {\n            if (prop === '__isUserNotAvailableProxy') {\n                return true;\n            }\n            // Preventative check for common problematic symbols during cloning/inspection\n            // These symbols might be accessed by structuredClone or other internal mechanisms.\n            if (typeof prop === 'symbol') {\n                const sProp = prop.toString();\n                if (sProp === 'Symbol(Symbol.toPrimitive)' ||\n                    sProp === 'Symbol(Symbol.toStringTag)' ||\n                    sProp === 'Symbol(util.inspect.custom)') {\n                    // Node.js util.inspect\n                    return undefined;\n                }\n            }\n            throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the \"${prop}\" property of the session object is not supported. Please use getUser() instead.`);\n        },\n        set: (_target, prop) => {\n            throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the \"${prop}\" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`);\n        },\n        deleteProperty: (_target, prop) => {\n            throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the \"${prop}\" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`);\n        },\n    });\n}\n/**\n * Creates a proxy around a user object that warns when properties are accessed on the server.\n * This is used to alert developers that using user data from getSession() on the server is insecure.\n *\n * @param user The actual user object to wrap\n * @param suppressWarningRef An object with a 'value' property that controls warning suppression\n * @returns A proxied user object that warns on property access\n */\nexport function insecureUserWarningProxy(user, suppressWarningRef) {\n    return new Proxy(user, {\n        get: (target, prop, receiver) => {\n            // Allow internal checks without warning\n            if (prop === '__isInsecureUserWarningProxy') {\n                return true;\n            }\n            // Preventative check for common problematic symbols during cloning/inspection\n            // These symbols might be accessed by structuredClone or other internal mechanisms\n            if (typeof prop === 'symbol') {\n                const sProp = prop.toString();\n                if (sProp === 'Symbol(Symbol.toPrimitive)' ||\n                    sProp === 'Symbol(Symbol.toStringTag)' ||\n                    sProp === 'Symbol(util.inspect.custom)' ||\n                    sProp === 'Symbol(nodejs.util.inspect.custom)') {\n                    // Return the actual value for these symbols to allow proper inspection\n                    return Reflect.get(target, prop, receiver);\n                }\n            }\n            // Emit warning on first property access\n            if (!suppressWarningRef.value && typeof prop === 'string') {\n                console.warn('Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server.');\n                suppressWarningRef.value = true;\n            }\n            return Reflect.get(target, prop, receiver);\n        },\n    });\n}\n/**\n * Deep clones a JSON-serializable object using JSON.parse(JSON.stringify(obj)).\n * Note: Only works for JSON-safe data.\n */\nexport function deepClone(obj) {\n    return JSON.parse(JSON.stringify(obj));\n}\n//# sourceMappingURL=helpers.js.map","import { __rest } from \"tslib\";\nimport { API_VERSIONS, API_VERSION_HEADER_NAME } from './constants';\nimport { expiresAt, looksLikeFetchResponse, parseResponseAPIVersion } from './helpers';\nimport { AuthApiError, AuthRetryableFetchError, AuthWeakPasswordError, AuthUnknownError, AuthSessionMissingError, } from './errors';\nconst _getErrorMessage = (err) => {\n    if (typeof err === 'object' && err !== null) {\n        const e = err;\n        if (typeof e.msg === 'string')\n            return e.msg;\n        if (typeof e.message === 'string')\n            return e.message;\n        if (typeof e.error_description === 'string')\n            return e.error_description;\n        if (typeof e.error === 'string')\n            return e.error;\n    }\n    return JSON.stringify(err);\n};\n// 500, 501, 502, 503, 504: Standard server/gateway errors\n// 520-529, 530: Cloudflare-specific error codes (web server down, connection timed out, etc.)\n// These are infrastructure errors and should not cause session invalidation.\nconst NETWORK_ERROR_CODES = [\n    500, 501, 502, 503, 504, 520, 521, 522, 523, 524, 525, 526, 527, 528, 529, 530,\n];\nexport async function handleError(error) {\n    var _a;\n    if (!looksLikeFetchResponse(error)) {\n        throw new AuthRetryableFetchError(_getErrorMessage(error), 0);\n    }\n    let data;\n    try {\n        data = await error.json();\n    }\n    catch (e) {\n        if (NETWORK_ERROR_CODES.includes(error.status)) {\n            // statusText can be empty — HTTP/2 has no reason phrase\n            throw new AuthRetryableFetchError(error.statusText || `HTTP ${error.status}`, error.status);\n        }\n        throw new AuthUnknownError(_getErrorMessage(e), e);\n    }\n    if (NETWORK_ERROR_CODES.includes(error.status)) {\n        // status in 500...599 range - server had an error, request might be retryed.\n        throw new AuthRetryableFetchError(_getErrorMessage(data), error.status);\n    }\n    let errorCode = undefined;\n    const responseAPIVersion = parseResponseAPIVersion(error);\n    if (responseAPIVersion &&\n        responseAPIVersion.getTime() >= API_VERSIONS['2024-01-01'].timestamp &&\n        typeof data === 'object' &&\n        data &&\n        typeof data.code === 'string') {\n        errorCode = data.code;\n    }\n    else if (typeof data === 'object' && data && typeof data.error_code === 'string') {\n        errorCode = data.error_code;\n    }\n    if (!errorCode) {\n        // Legacy support for weak password errors, when there were no error codes\n        if (typeof data === 'object' &&\n            data &&\n            typeof data.weak_password === 'object' &&\n            data.weak_password &&\n            Array.isArray(data.weak_password.reasons) &&\n            data.weak_password.reasons.length &&\n            data.weak_password.reasons.reduce((a, i) => a && typeof i === 'string', true)) {\n            throw new AuthWeakPasswordError(_getErrorMessage(data), error.status, data.weak_password.reasons);\n        }\n    }\n    else if (errorCode === 'weak_password') {\n        throw new AuthWeakPasswordError(_getErrorMessage(data), error.status, ((_a = data.weak_password) === null || _a === void 0 ? void 0 : _a.reasons) || []);\n    }\n    else if (errorCode === 'session_not_found') {\n        // The `session_id` inside the JWT does not correspond to a row in the\n        // `sessions` table. This usually means the user has signed out, has been\n        // deleted, or their session has somehow been terminated.\n        throw new AuthSessionMissingError();\n    }\n    throw new AuthApiError(_getErrorMessage(data), error.status || 500, errorCode);\n}\nconst _getRequestParams = (method, options, parameters, body) => {\n    const params = { method, headers: (options === null || options === void 0 ? void 0 : options.headers) || {} };\n    if (method === 'GET') {\n        return params;\n    }\n    params.headers = Object.assign({ 'Content-Type': 'application/json;charset=UTF-8' }, options === null || options === void 0 ? void 0 : options.headers);\n    params.body = JSON.stringify(body);\n    return Object.assign(Object.assign({}, params), parameters);\n};\nexport async function _request(fetcher, method, url, options) {\n    var _a;\n    const headers = Object.assign({}, options === null || options === void 0 ? void 0 : options.headers);\n    if (!headers[API_VERSION_HEADER_NAME]) {\n        headers[API_VERSION_HEADER_NAME] = API_VERSIONS['2024-01-01'].name;\n    }\n    if (options === null || options === void 0 ? void 0 : options.jwt) {\n        headers['Authorization'] = `Bearer ${options.jwt}`;\n    }\n    const qs = (_a = options === null || options === void 0 ? void 0 : options.query) !== null && _a !== void 0 ? _a : {};\n    if (options === null || options === void 0 ? void 0 : options.redirectTo) {\n        qs['redirect_to'] = options.redirectTo;\n    }\n    const queryString = Object.keys(qs).length ? '?' + new URLSearchParams(qs).toString() : '';\n    const data = await _handleRequest(fetcher, method, url + queryString, {\n        headers,\n        noResolveJson: options === null || options === void 0 ? void 0 : options.noResolveJson,\n    }, {}, options === null || options === void 0 ? void 0 : options.body);\n    return (options === null || options === void 0 ? void 0 : options.xform) ? options === null || options === void 0 ? void 0 : options.xform(data) : { data: Object.assign({}, data), error: null };\n}\nasync function _handleRequest(fetcher, method, url, options, parameters, body) {\n    const requestParams = _getRequestParams(method, options, parameters, body);\n    let result;\n    try {\n        result = await fetcher(url, Object.assign({}, requestParams));\n    }\n    catch (e) {\n        // fetch failed (network / CORS / aborted request) — surfaced to the\n        // caller as a retryable error below. Deliberately not logged here: an\n        // aborted in-flight request (e.g. a superseded page navigation) is a\n        // transient condition, and logging the raw error pollutes the console.\n        throw new AuthRetryableFetchError(_getErrorMessage(e), 0);\n    }\n    if (!result.ok) {\n        await handleError(result);\n    }\n    if (options === null || options === void 0 ? void 0 : options.noResolveJson) {\n        return result;\n    }\n    try {\n        return await result.json();\n    }\n    catch (e) {\n        await handleError(e);\n    }\n}\nexport function _sessionResponse(data) {\n    var _a;\n    let session = null;\n    if (hasSession(data)) {\n        session = Object.assign({}, data);\n        if (!data.expires_at) {\n            session.expires_at = expiresAt(data.expires_in);\n        }\n    }\n    // Some /verify responses (e.g. secure email_change first-confirmation) return\n    // only `{ msg, code }` with no user and no session. Treat those as null user.\n    const user = (_a = data.user) !== null && _a !== void 0 ? _a : (typeof (data === null || data === void 0 ? void 0 : data.id) === 'string' ? data : null);\n    return { data: { session, user }, error: null };\n}\nexport function _sessionResponsePassword(data) {\n    const response = _sessionResponse(data);\n    if (!response.error &&\n        data.weak_password &&\n        typeof data.weak_password === 'object' &&\n        Array.isArray(data.weak_password.reasons) &&\n        data.weak_password.reasons.length &&\n        data.weak_password.message &&\n        typeof data.weak_password.message === 'string' &&\n        data.weak_password.reasons.reduce((a, i) => a && typeof i === 'string', true)) {\n        response.data.weak_password = data.weak_password;\n    }\n    return response;\n}\nexport function _userResponse(data) {\n    var _a;\n    const user = (_a = data.user) !== null && _a !== void 0 ? _a : data;\n    return { data: { user }, error: null };\n}\nexport function _ssoResponse(data) {\n    return { data, error: null };\n}\nexport function _generateLinkResponse(data) {\n    const { action_link, email_otp, hashed_token, redirect_to, verification_type } = data, rest = __rest(data, [\"action_link\", \"email_otp\", \"hashed_token\", \"redirect_to\", \"verification_type\"]);\n    const properties = {\n        action_link,\n        email_otp,\n        hashed_token,\n        redirect_to,\n        verification_type,\n    };\n    const user = Object.assign({}, rest);\n    return {\n        data: {\n            properties,\n            user,\n        },\n        error: null,\n    };\n}\nexport function _noResolveJsonResponse(data) {\n    return data;\n}\n/**\n * hasSession checks if the response object contains a valid session\n * @param data A response object\n * @returns true if a session is in the response\n */\nfunction hasSession(data) {\n    return !!data.access_token && !!data.refresh_token && !!data.expires_in;\n}\n//# sourceMappingURL=fetch.js.map","const WeakPasswordReasons = ['length', 'characters', 'pwned'];\nconst AMRMethods = [\n    'password',\n    'otp',\n    'oauth',\n    'totp',\n    'mfa/totp',\n    'mfa/phone',\n    'mfa/webauthn',\n    'anonymous',\n    'sso/saml',\n    'magiclink',\n    'web3',\n    'oauth_provider/authorization_code',\n];\nconst FactorTypes = ['totp', 'phone', 'webauthn'];\nconst FactorVerificationStatuses = ['verified', 'unverified'];\nconst MFATOTPChannels = ['sms', 'whatsapp'];\nexport const SIGN_OUT_SCOPES = ['global', 'local', 'others'];\n//# sourceMappingURL=types.js.map","import { __rest } from \"tslib\";\nimport { _generateLinkResponse, _noResolveJsonResponse, _request, _userResponse, } from './lib/fetch';\nimport { assertPasskeyExperimentalEnabled, resolveFetch, validateUUID } from './lib/helpers';\nimport { SIGN_OUT_SCOPES, } from './lib/types';\nimport { isAuthError } from './lib/errors';\nexport default class GoTrueAdminApi {\n    /**\n     * Creates an admin API client that can be used to manage users and OAuth clients.\n     *\n     * @example Using supabase-js (recommended)\n     * ```ts\n     * import { createClient } from '@supabase/supabase-js'\n     *\n     * const supabase = createClient('https://xyzcompany.supabase.co', 'your-secret-key')\n     * const { data, error } = await supabase.auth.admin.listUsers()\n     * ```\n     *\n     * @example Standalone import for bundle-sensitive environments\n     * ```ts\n     * import { GoTrueAdminApi } from '@supabase/auth-js'\n     *\n     * const admin = new GoTrueAdminApi({\n     *   url: 'https://xyzcompany.supabase.co/auth/v1',\n     *   headers: { Authorization: `Bearer ${process.env.SUPABASE_SECRET_KEY}` },\n     * })\n     * ```\n     */\n    constructor({ url = '', headers = {}, fetch, experimental, }) {\n        this.url = url;\n        this.headers = headers;\n        this.fetch = resolveFetch(fetch);\n        this.experimental = experimental !== null && experimental !== void 0 ? experimental : {};\n        this.mfa = {\n            listFactors: this._listFactors.bind(this),\n            deleteFactor: this._deleteFactor.bind(this),\n        };\n        this.oauth = {\n            listClients: this._listOAuthClients.bind(this),\n            createClient: this._createOAuthClient.bind(this),\n            getClient: this._getOAuthClient.bind(this),\n            updateClient: this._updateOAuthClient.bind(this),\n            deleteClient: this._deleteOAuthClient.bind(this),\n            regenerateClientSecret: this._regenerateOAuthClientSecret.bind(this),\n        };\n        this.customProviders = {\n            listProviders: this._listCustomProviders.bind(this),\n            createProvider: this._createCustomProvider.bind(this),\n            getProvider: this._getCustomProvider.bind(this),\n            updateProvider: this._updateCustomProvider.bind(this),\n            deleteProvider: this._deleteCustomProvider.bind(this),\n        };\n        this.passkey = {\n            listPasskeys: this._adminListPasskeys.bind(this),\n            deletePasskey: this._adminDeletePasskey.bind(this),\n        };\n    }\n    /**\n     * Removes a logged-in session.\n     * @param jwt A valid, logged-in JWT.\n     * @param scope The logout sope.\n     *\n     * @category Auth\n     * @subcategory Auth Admin\n     */\n    async signOut(jwt, scope = SIGN_OUT_SCOPES[0]) {\n        if (SIGN_OUT_SCOPES.indexOf(scope) < 0) {\n            throw new Error(`@supabase/auth-js: Parameter scope must be one of ${SIGN_OUT_SCOPES.join(', ')}`);\n        }\n        try {\n            await _request(this.fetch, 'POST', `${this.url}/logout?scope=${scope}`, {\n                headers: this.headers,\n                jwt,\n                noResolveJson: true,\n            });\n            return { data: null, error: null };\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Sends an invite link to an email address.\n     * @param email The email address of the user.\n     * @param options Additional options to be included when inviting.\n     *\n     * @category Auth\n     * @subcategory Auth Admin\n     *\n     * @remarks\n     * - Sends an invite link to the user's email address.\n     * - The `inviteUserByEmail()` method is typically used by administrators to invite users to join the application.\n     * - Note that PKCE is not supported when using `inviteUserByEmail`. This is because the browser initiating the invite is often different from the browser accepting the invite which makes it difficult to provide the security guarantees required of the PKCE flow.\n     *\n     * @example Invite a user\n     * ```js\n     * const { data, error } = await supabase.auth.admin.inviteUserByEmail('email@example.com')\n     * ```\n     *\n     * @exampleResponse Invite a user\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"user\": {\n     *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"aud\": \"authenticated\",\n     *       \"role\": \"authenticated\",\n     *       \"email\": \"example@email.com\",\n     *       \"invited_at\": \"2024-01-01T00:00:00Z\",\n     *       \"phone\": \"\",\n     *       \"confirmation_sent_at\": \"2024-01-01T00:00:00Z\",\n     *       \"app_metadata\": {\n     *         \"provider\": \"email\",\n     *         \"providers\": [\n     *           \"email\"\n     *         ]\n     *       },\n     *       \"user_metadata\": {},\n     *       \"identities\": [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"identity_data\": {\n     *             \"email\": \"example@email.com\",\n     *             \"email_verified\": false,\n     *             \"phone_verified\": false,\n     *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *           },\n     *           \"provider\": \"email\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"example@email.com\"\n     *         }\n     *       ],\n     *       \"created_at\": \"2024-01-01T00:00:00Z\",\n     *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *       \"is_anonymous\": false\n     *     }\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     */\n    async inviteUserByEmail(email, options = {}) {\n        try {\n            return await _request(this.fetch, 'POST', `${this.url}/invite`, {\n                body: { email, data: options.data },\n                headers: this.headers,\n                redirectTo: options.redirectTo,\n                xform: _userResponse,\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: { user: null }, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Generates email links and OTPs to be sent via a custom email provider.\n     * @param params The parameters for generating the link, including the link `type`, the user's `email`, and type-specific options such as `password`, `data`, and `redirectTo`.\n     *\n     * @category Auth\n     * @subcategory Auth Admin\n     *\n     * @remarks\n     * - The following types can be passed into `generateLink()`: `signup`, `magiclink`, `invite`, `recovery`, `email_change_current`, `email_change_new`, `phone_change`.\n     * - `generateLink()` only generates the email link for `email_change_email` if the **Secure email change** is enabled in your project's [email auth provider settings](/dashboard/project/_/auth/providers).\n     * - `generateLink()` handles the creation of the user for `signup`, `invite` and `magiclink`.\n     *\n     * @example Generate a signup link\n     * ```js\n     * const { data, error } = await supabase.auth.admin.generateLink({\n     *   type: 'signup',\n     *   email: 'email@example.com',\n     *   password: 'secret'\n     * })\n     * ```\n     *\n     * @exampleResponse Generate a signup link\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"properties\": {\n     *       \"action_link\": \"<LINK_TO_SEND_TO_USER>\",\n     *       \"email_otp\": \"999999\",\n     *       \"hashed_token\": \"<HASHED_TOKEN\",\n     *       \"redirect_to\": \"<REDIRECT_URL>\",\n     *       \"verification_type\": \"signup\"\n     *     },\n     *     \"user\": {\n     *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"aud\": \"authenticated\",\n     *       \"role\": \"authenticated\",\n     *       \"email\": \"email@example.com\",\n     *       \"phone\": \"\",\n     *       \"confirmation_sent_at\": \"2024-01-01T00:00:00Z\",\n     *       \"app_metadata\": {\n     *         \"provider\": \"email\",\n     *         \"providers\": [\n     *           \"email\"\n     *         ]\n     *       },\n     *       \"user_metadata\": {},\n     *       \"identities\": [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"identity_data\": {\n     *             \"email\": \"email@example.com\",\n     *             \"email_verified\": false,\n     *             \"phone_verified\": false,\n     *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *           },\n     *           \"provider\": \"email\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"email@example.com\"\n     *         }\n     *       ],\n     *       \"created_at\": \"2024-01-01T00:00:00Z\",\n     *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *       \"is_anonymous\": false\n     *     }\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     *\n     * @example Generate an invite link\n     * ```js\n     * const { data, error } = await supabase.auth.admin.generateLink({\n     *   type: 'invite',\n     *   email: 'email@example.com'\n     * })\n     * ```\n     *\n     * @example Generate a magic link\n     * ```js\n     * const { data, error } = await supabase.auth.admin.generateLink({\n     *   type: 'magiclink',\n     *   email: 'email@example.com'\n     * })\n     * ```\n     *\n     * @example Generate a recovery link\n     * ```js\n     * const { data, error } = await supabase.auth.admin.generateLink({\n     *   type: 'recovery',\n     *   email: 'email@example.com'\n     * })\n     * ```\n     *\n     * @example Generate links to change current email address\n     * ```js\n     * // generate an email change link to be sent to the current email address\n     * const { data, error } = await supabase.auth.admin.generateLink({\n     *   type: 'email_change_current',\n     *   email: 'current.email@example.com',\n     *   newEmail: 'new.email@example.com'\n     * })\n     *\n     * // generate an email change link to be sent to the new email address\n     * const { data, error } = await supabase.auth.admin.generateLink({\n     *   type: 'email_change_new',\n     *   email: 'current.email@example.com',\n     *   newEmail: 'new.email@example.com'\n     * })\n     * ```\n     */\n    async generateLink(params) {\n        try {\n            const { options } = params, rest = __rest(params, [\"options\"]);\n            const body = Object.assign(Object.assign({}, rest), options);\n            if ('newEmail' in rest) {\n                // replace newEmail with new_email in request body\n                body.new_email = rest === null || rest === void 0 ? void 0 : rest.newEmail;\n                delete body['newEmail'];\n            }\n            return await _request(this.fetch, 'POST', `${this.url}/admin/generate_link`, {\n                body: body,\n                headers: this.headers,\n                xform: _generateLinkResponse,\n                redirectTo: options === null || options === void 0 ? void 0 : options.redirectTo,\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return {\n                    data: {\n                        properties: null,\n                        user: null,\n                    },\n                    error,\n                };\n            }\n            throw error;\n        }\n    }\n    // User Admin API\n    /**\n     * Creates a new user.\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     *\n     * @category Auth\n     * @subcategory Auth Admin\n     *\n     * @remarks\n     * - To confirm the user's email address or phone number, set `email_confirm` or `phone_confirm` to true. Both arguments default to false.\n     * - `createUser()` will not send a confirmation email to the user. You can use [`inviteUserByEmail()`](/docs/reference/javascript/auth-admin-inviteuserbyemail) if you want to send them an email invite instead.\n     * - If you are sure that the created user's email or phone number is legitimate and verified, you can set the `email_confirm` or `phone_confirm` param to `true`.\n     *\n     * @example With custom user metadata\n     * ```js\n     * const { data, error } = await supabase.auth.admin.createUser({\n     *   email: 'user@email.com',\n     *   password: 'password',\n     *   user_metadata: { name: 'Yoda' }\n     * })\n     * ```\n     *\n     * @exampleResponse With custom user metadata\n     * ```json\n     * {\n     *   data: {\n     *     user: {\n     *       id: '1',\n     *       aud: 'authenticated',\n     *       role: 'authenticated',\n     *       email: 'example@email.com',\n     *       email_confirmed_at: '2024-01-01T00:00:00Z',\n     *       phone: '',\n     *       confirmation_sent_at: '2024-01-01T00:00:00Z',\n     *       confirmed_at: '2024-01-01T00:00:00Z',\n     *       last_sign_in_at: '2024-01-01T00:00:00Z',\n     *       app_metadata: {},\n     *       user_metadata: {},\n     *       identities: [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"id\": \"1\",\n     *           \"user_id\": \"1\",\n     *           \"identity_data\": {\n     *             \"email\": \"example@email.com\",\n     *             \"email_verified\": true,\n     *             \"phone_verified\": false,\n     *             \"sub\": \"1\"\n     *           },\n     *           \"provider\": \"email\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"email@example.com\"\n     *         },\n     *       ],\n     *       created_at: '2024-01-01T00:00:00Z',\n     *       updated_at: '2024-01-01T00:00:00Z',\n     *       is_anonymous: false,\n     *     }\n     *   }\n     *   error: null\n     * }\n     * ```\n     *\n     * @example Auto-confirm the user's email\n     * ```js\n     * const { data, error } = await supabase.auth.admin.createUser({\n     *   email: 'user@email.com',\n     *   email_confirm: true\n     * })\n     * ```\n     *\n     * @example Auto-confirm the user's phone number\n     * ```js\n     * const { data, error } = await supabase.auth.admin.createUser({\n     *   phone: '1234567890',\n     *   phone_confirm: true\n     * })\n     * ```\n     */\n    async createUser(attributes) {\n        try {\n            return await _request(this.fetch, 'POST', `${this.url}/admin/users`, {\n                body: attributes,\n                headers: this.headers,\n                xform: _userResponse,\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: { user: null }, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Get a list of users.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     * @param params An object which supports `page` and `perPage` as numbers, to alter the paginated results.\n     *\n     * @category Auth\n     * @subcategory Auth Admin\n     *\n     * @remarks\n     * - Defaults to return 50 users per page.\n     *\n     * @example Get a page of users\n     * ```js\n     * const { data: { users }, error } = await supabase.auth.admin.listUsers()\n     * ```\n     *\n     * @example Paginated list of users\n     * ```js\n     * const { data: { users }, error } = await supabase.auth.admin.listUsers({\n     *   page: 1,\n     *   perPage: 1000\n     * })\n     * ```\n     */\n    async listUsers(params) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        try {\n            const pagination = { nextPage: null, lastPage: 0, total: 0 };\n            const response = await _request(this.fetch, 'GET', `${this.url}/admin/users`, {\n                headers: this.headers,\n                noResolveJson: true,\n                query: {\n                    page: (_b = (_a = params === null || params === void 0 ? void 0 : params.page) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '',\n                    per_page: (_d = (_c = params === null || params === void 0 ? void 0 : params.perPage) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : '',\n                },\n                xform: _noResolveJsonResponse,\n            });\n            if (response.error)\n                throw response.error;\n            const users = await response.json();\n            const total = (_e = response.headers.get('x-total-count')) !== null && _e !== void 0 ? _e : 0;\n            const links = (_g = (_f = response.headers.get('link')) === null || _f === void 0 ? void 0 : _f.split(',')) !== null && _g !== void 0 ? _g : [];\n            if (links.length > 0) {\n                links.forEach((link) => {\n                    const page = parseInt(link.split(';')[0].split('=')[1].substring(0, 1));\n                    const rel = JSON.parse(link.split(';')[1].split('=')[1]);\n                    pagination[`${rel}Page`] = page;\n                });\n                pagination.total = parseInt(total);\n            }\n            return { data: Object.assign(Object.assign({}, users), pagination), error: null };\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: { users: [] }, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Get user by id.\n     *\n     * @param uid The user's unique identifier\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     *\n     * @category Auth\n     * @subcategory Auth Admin\n     *\n     * @remarks\n     * - Fetches the user object from the database based on the user's id.\n     * - The `getUserById()` method requires the user's id which maps to the `auth.users.id` column.\n     *\n     * @example Fetch the user object using the access_token jwt\n     * ```js\n     * const { data, error } = await supabase.auth.admin.getUserById(1)\n     * ```\n     *\n     * @exampleResponse Fetch the user object using the access_token jwt\n     * ```json\n     * {\n     *   data: {\n     *     user: {\n     *       id: '1',\n     *       aud: 'authenticated',\n     *       role: 'authenticated',\n     *       email: 'example@email.com',\n     *       email_confirmed_at: '2024-01-01T00:00:00Z',\n     *       phone: '',\n     *       confirmation_sent_at: '2024-01-01T00:00:00Z',\n     *       confirmed_at: '2024-01-01T00:00:00Z',\n     *       last_sign_in_at: '2024-01-01T00:00:00Z',\n     *       app_metadata: {},\n     *       user_metadata: {},\n     *       identities: [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"id\": \"1\",\n     *           \"user_id\": \"1\",\n     *           \"identity_data\": {\n     *             \"email\": \"example@email.com\",\n     *             \"email_verified\": true,\n     *             \"phone_verified\": false,\n     *             \"sub\": \"1\"\n     *           },\n     *           \"provider\": \"email\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"email@example.com\"\n     *         },\n     *       ],\n     *       created_at: '2024-01-01T00:00:00Z',\n     *       updated_at: '2024-01-01T00:00:00Z',\n     *       is_anonymous: false,\n     *     }\n     *   }\n     *   error: null\n     * }\n     * ```\n     */\n    async getUserById(uid) {\n        validateUUID(uid);\n        try {\n            return await _request(this.fetch, 'GET', `${this.url}/admin/users/${uid}`, {\n                headers: this.headers,\n                xform: _userResponse,\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: { user: null }, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Updates the user data. Changes are applied directly without confirmation flows.\n     *\n     * @param uid The user's unique identifier\n     * @param attributes The data you want to update.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     *\n     * @remarks\n     * **Important:** This is a server-side operation and does **not** trigger client-side\n     * `onAuthStateChange` listeners. The admin API has no connection to client state.\n     *\n     * To sync changes to the client after calling this method:\n     * 1. On the client, call `supabase.auth.refreshSession()` to fetch the updated user data\n     * 2. This will trigger the `TOKEN_REFRESHED` event and notify all listeners\n     *\n     * @example\n     * ```typescript\n     * // Server-side (Edge Function)\n     * const { data, error } = await supabase.auth.admin.updateUserById(\n     *   userId,\n     *   { user_metadata: { preferences: { theme: 'dark' } } }\n     * )\n     *\n     * // Client-side (to sync the changes)\n     * const { data, error } = await supabase.auth.refreshSession()\n     * // onAuthStateChange listeners will now be notified with updated user\n     * ```\n     *\n     * @see {@link GoTrueClient.refreshSession} for syncing admin changes to the client\n     * @see {@link GoTrueClient.updateUser} for client-side user updates (triggers listeners automatically)\n     *\n     * @category Auth\n     * @subcategory Auth Admin\n     *\n     * @example Updates a user's email\n     * ```js\n     * const { data: user, error } = await supabase.auth.admin.updateUserById(\n     *   '11111111-1111-1111-1111-111111111111',\n     *   { email: 'new@email.com' }\n     * )\n     * ```\n     *\n     * @exampleResponse Updates a user's email\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"user\": {\n     *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"aud\": \"authenticated\",\n     *       \"role\": \"authenticated\",\n     *       \"email\": \"new@email.com\",\n     *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"phone\": \"\",\n     *       \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"recovery_sent_at\": \"2024-01-01T00:00:00Z\",\n     *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *       \"app_metadata\": {\n     *         \"provider\": \"email\",\n     *         \"providers\": [\n     *           \"email\"\n     *         ]\n     *       },\n     *       \"user_metadata\": {\n     *         \"email\": \"example@email.com\",\n     *         \"email_verified\": false,\n     *         \"phone_verified\": false,\n     *         \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *       },\n     *       \"identities\": [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"identity_data\": {\n     *             \"email\": \"example@email.com\",\n     *             \"email_verified\": false,\n     *             \"phone_verified\": false,\n     *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *           },\n     *           \"provider\": \"email\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"example@email.com\"\n     *         }\n     *       ],\n     *       \"created_at\": \"2024-01-01T00:00:00Z\",\n     *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *       \"is_anonymous\": false\n     *     }\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     *\n     * @example Updates a user's password\n     * ```js\n     * const { data: user, error } = await supabase.auth.admin.updateUserById(\n     *   '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n     *   { password: 'new_password' }\n     * )\n     * ```\n     *\n     * @example Updates a user's metadata\n     * ```js\n     * const { data: user, error } = await supabase.auth.admin.updateUserById(\n     *   '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n     *   { user_metadata: { hello: 'world' } }\n     * )\n     * ```\n     *\n     * @example Updates a user's app_metadata\n     * ```js\n     * const { data: user, error } = await supabase.auth.admin.updateUserById(\n     *   '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n     *   { app_metadata: { plan: 'trial' } }\n     * )\n     * ```\n     *\n     * @example Confirms a user's email address\n     * ```js\n     * const { data: user, error } = await supabase.auth.admin.updateUserById(\n     *   '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n     *   { email_confirm: true }\n     * )\n     * ```\n     *\n     * @example Confirms a user's phone number\n     * ```js\n     * const { data: user, error } = await supabase.auth.admin.updateUserById(\n     *   '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n     *   { phone_confirm: true }\n     * )\n     * ```\n     *\n     * @example Ban a user for 100 years\n     * ```js\n     * const { data: user, error } = await supabase.auth.admin.updateUserById(\n     *   '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n     *   { ban_duration: '876000h' }\n     * )\n     * ```\n     */\n    async updateUserById(uid, attributes) {\n        validateUUID(uid);\n        try {\n            return await _request(this.fetch, 'PUT', `${this.url}/admin/users/${uid}`, {\n                body: attributes,\n                headers: this.headers,\n                xform: _userResponse,\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: { user: null }, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Delete a user. Requires a `service_role` key.\n     *\n     * @param id The user id you want to remove.\n     * @param shouldSoftDelete If true, then the user will be soft-deleted from the auth schema. Soft deletion allows user identification from the hashed user ID but is not reversible.\n     * Defaults to false for backward compatibility.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     *\n     * @category Auth\n     * @subcategory Auth Admin\n     *\n     * @remarks\n     * - The `deleteUser()` method requires the user's ID, which maps to the `auth.users.id` column.\n     *\n     * @example Removes a user\n     * ```js\n     * const { data, error } = await supabase.auth.admin.deleteUser(\n     *   '715ed5db-f090-4b8c-a067-640ecee36aa0'\n     * )\n     * ```\n     *\n     * @exampleResponse Removes a user\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"user\": {}\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     */\n    async deleteUser(id, shouldSoftDelete = false) {\n        validateUUID(id);\n        try {\n            return await _request(this.fetch, 'DELETE', `${this.url}/admin/users/${id}`, {\n                headers: this.headers,\n                body: {\n                    should_soft_delete: shouldSoftDelete,\n                },\n                xform: _userResponse,\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: { user: null }, error };\n            }\n            throw error;\n        }\n    }\n    async _listFactors(params) {\n        validateUUID(params.userId);\n        try {\n            const { data, error } = await _request(this.fetch, 'GET', `${this.url}/admin/users/${params.userId}/factors`, {\n                headers: this.headers,\n                xform: (factors) => {\n                    return { data: { factors }, error: null };\n                },\n            });\n            return { data, error };\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n    async _deleteFactor(params) {\n        validateUUID(params.userId);\n        validateUUID(params.id);\n        try {\n            const data = await _request(this.fetch, 'DELETE', `${this.url}/admin/users/${params.userId}/factors/${params.id}`, {\n                headers: this.headers,\n            });\n            return { data, error: null };\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Lists all OAuth clients with optional pagination.\n     * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     */\n    async _listOAuthClients(params) {\n        var _a, _b, _c, _d, _e, _f, _g;\n        try {\n            const pagination = { nextPage: null, lastPage: 0, total: 0 };\n            const response = await _request(this.fetch, 'GET', `${this.url}/admin/oauth/clients`, {\n                headers: this.headers,\n                noResolveJson: true,\n                query: {\n                    page: (_b = (_a = params === null || params === void 0 ? void 0 : params.page) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '',\n                    per_page: (_d = (_c = params === null || params === void 0 ? void 0 : params.perPage) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : '',\n                },\n                xform: _noResolveJsonResponse,\n            });\n            if (response.error)\n                throw response.error;\n            const clients = await response.json();\n            const total = (_e = response.headers.get('x-total-count')) !== null && _e !== void 0 ? _e : 0;\n            const links = (_g = (_f = response.headers.get('link')) === null || _f === void 0 ? void 0 : _f.split(',')) !== null && _g !== void 0 ? _g : [];\n            if (links.length > 0) {\n                links.forEach((link) => {\n                    const page = parseInt(link.split(';')[0].split('=')[1].substring(0, 1));\n                    const rel = JSON.parse(link.split(';')[1].split('=')[1]);\n                    pagination[`${rel}Page`] = page;\n                });\n                pagination.total = parseInt(total);\n            }\n            return { data: Object.assign(Object.assign({}, clients), pagination), error: null };\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: { clients: [] }, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Creates a new OAuth client.\n     * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     */\n    async _createOAuthClient(params) {\n        try {\n            return await _request(this.fetch, 'POST', `${this.url}/admin/oauth/clients`, {\n                body: params,\n                headers: this.headers,\n                xform: (client) => {\n                    return { data: client, error: null };\n                },\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Gets details of a specific OAuth client.\n     * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     */\n    async _getOAuthClient(clientId) {\n        try {\n            return await _request(this.fetch, 'GET', `${this.url}/admin/oauth/clients/${clientId}`, {\n                headers: this.headers,\n                xform: (client) => {\n                    return { data: client, error: null };\n                },\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Updates an existing OAuth client.\n     * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     */\n    async _updateOAuthClient(clientId, params) {\n        try {\n            return await _request(this.fetch, 'PUT', `${this.url}/admin/oauth/clients/${clientId}`, {\n                body: params,\n                headers: this.headers,\n                xform: (client) => {\n                    return { data: client, error: null };\n                },\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Deletes an OAuth client.\n     * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     */\n    async _deleteOAuthClient(clientId) {\n        try {\n            await _request(this.fetch, 'DELETE', `${this.url}/admin/oauth/clients/${clientId}`, {\n                headers: this.headers,\n                noResolveJson: true,\n            });\n            return { data: null, error: null };\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Regenerates the secret for an OAuth client.\n     * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     */\n    async _regenerateOAuthClientSecret(clientId) {\n        try {\n            return await _request(this.fetch, 'POST', `${this.url}/admin/oauth/clients/${clientId}/regenerate_secret`, {\n                headers: this.headers,\n                xform: (client) => {\n                    return { data: client, error: null };\n                },\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Lists all custom providers with optional type filter.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     */\n    async _listCustomProviders(params) {\n        try {\n            const query = {};\n            if (params === null || params === void 0 ? void 0 : params.type) {\n                query.type = params.type;\n            }\n            return await _request(this.fetch, 'GET', `${this.url}/admin/custom-providers`, {\n                headers: this.headers,\n                query,\n                xform: (data) => {\n                    var _a;\n                    return { data: { providers: (_a = data === null || data === void 0 ? void 0 : data.providers) !== null && _a !== void 0 ? _a : [] }, error: null };\n                },\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: { providers: [] }, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Creates a new custom OIDC/OAuth provider.\n     *\n     * For OIDC providers, the server fetches and validates the OpenID Connect discovery document\n     * from the issuer's well-known endpoint (or the provided `discovery_url`) at creation time.\n     * This may return a validation error (`error_code: \"validation_failed\"`) if the discovery\n     * document is unreachable, not valid JSON, missing required fields, or if the issuer\n     * in the document does not match the expected issuer.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     */\n    async _createCustomProvider(params) {\n        try {\n            return await _request(this.fetch, 'POST', `${this.url}/admin/custom-providers`, {\n                body: params,\n                headers: this.headers,\n                xform: (provider) => {\n                    return { data: provider, error: null };\n                },\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Gets details of a specific custom provider by identifier.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     */\n    async _getCustomProvider(identifier) {\n        try {\n            return await _request(this.fetch, 'GET', `${this.url}/admin/custom-providers/${identifier}`, {\n                headers: this.headers,\n                xform: (provider) => {\n                    return { data: provider, error: null };\n                },\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Updates an existing custom provider.\n     *\n     * When `issuer` or `discovery_url` is changed on an OIDC provider, the server re-fetches and\n     * validates the discovery document before persisting. This may return a validation error\n     * (`error_code: \"validation_failed\"`) if the discovery document is unreachable, invalid, or\n     * the issuer does not match.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     */\n    async _updateCustomProvider(identifier, params) {\n        try {\n            return await _request(this.fetch, 'PUT', `${this.url}/admin/custom-providers/${identifier}`, {\n                body: params,\n                headers: this.headers,\n                xform: (provider) => {\n                    return { data: provider, error: null };\n                },\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Deletes a custom provider.\n     *\n     * This function should only be called on a server. Never expose your `service_role` key in the browser.\n     */\n    async _deleteCustomProvider(identifier) {\n        try {\n            await _request(this.fetch, 'DELETE', `${this.url}/admin/custom-providers/${identifier}`, {\n                headers: this.headers,\n                noResolveJson: true,\n            });\n            return { data: null, error: null };\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Lists all passkeys for a user.\n     *\n     * This function should only be called on a server. Never expose your secret key in the browser.\n     *\n     * Requires `auth.experimental.passkey: true`.\n     */\n    async _adminListPasskeys(params) {\n        assertPasskeyExperimentalEnabled(this.experimental);\n        validateUUID(params.userId);\n        try {\n            return await _request(this.fetch, 'GET', `${this.url}/admin/users/${params.userId}/passkeys`, { headers: this.headers, xform: (data) => ({ data, error: null }) });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n    /**\n     * Deletes a user's passkey.\n     *\n     * This function should only be called on a server. Never expose your secret key in the browser.\n     *\n     * Requires `auth.experimental.passkey: true`.\n     */\n    async _adminDeletePasskey(params) {\n        assertPasskeyExperimentalEnabled(this.experimental);\n        validateUUID(params.userId);\n        validateUUID(params.passkeyId);\n        try {\n            await _request(this.fetch, 'DELETE', `${this.url}/admin/users/${params.userId}/passkeys/${params.passkeyId}`, { headers: this.headers, noResolveJson: true });\n            return { data: null, error: null };\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            throw error;\n        }\n    }\n}\n//# sourceMappingURL=GoTrueAdminApi.js.map","/**\n * Returns a localStorage-like object that stores the key-value pairs in\n * memory.\n */\nexport function memoryLocalStorageAdapter(store = {}) {\n    return {\n        getItem: (key) => {\n            return store[key] || null;\n        },\n        setItem: (key, value) => {\n            store[key] = value;\n        },\n        removeItem: (key) => {\n            delete store[key];\n        },\n    };\n}\n//# sourceMappingURL=local-storage.js.map","/**\n * Lock primitives retained for backwards-compatible imports. The auth client\n * coordinates refreshes itself (deduping in-instance callers onto a shared\n * in-flight promise) and lets the GoTrue server resolve cross-instance races,\n * so it does not invoke any primitive from this module. The functions still\n * work for direct callers that need a navigator.locks-backed or in-process\n * exclusive lock of their own.\n */\nimport { supportsLocalStorage } from './helpers';\n/**\n * @deprecated Debug flag for `navigatorLock` / `processLock`. The auth\n * client ignores both, so this has no client-side effect.\n * @experimental\n */\nexport const internals = {\n    /**\n     * @experimental\n     */\n    debug: !!(globalThis &&\n        supportsLocalStorage() &&\n        globalThis.localStorage &&\n        globalThis.localStorage.getItem('supabase.gotrue-js.locks.debug') === 'true'),\n};\n/**\n * An error thrown when a lock cannot be acquired after some amount of time.\n *\n * @deprecated The auth client doesn't acquire locks around auth operations,\n * so this error never originates from `supabase.auth.*` calls. Direct callers\n * of `navigatorLock` / `processLock` still receive it on acquire timeout.\n */\nexport class LockAcquireTimeoutError extends Error {\n    constructor(message) {\n        super(message);\n        this.isAcquireTimeout = true;\n    }\n}\n/**\n * @deprecated The auth client doesn't call `navigator.locks`, so this error\n * never originates from `supabase.auth.*` calls. Direct callers of\n * `navigatorLock` still receive it on acquire timeout.\n */\nexport class NavigatorLockAcquireTimeoutError extends LockAcquireTimeoutError {\n}\n/**\n * @deprecated The auth client doesn't run `processLock`, so this error\n * never originates from `supabase.auth.*` calls. Direct callers of\n * `processLock` still receive it on acquire timeout.\n */\nexport class ProcessLockAcquireTimeoutError extends LockAcquireTimeoutError {\n}\n/**\n * Implements a global exclusive lock using the Navigator LockManager API. It\n * is available on all browsers released after 2022-03-15 with Safari being the\n * last one to release support. If the API is not available, this function will\n * throw. Make sure you check availablility before configuring {@link\n * GoTrueClient}.\n *\n * You can turn on debugging by setting the `supabase.gotrue-js.locks.debug`\n * local storage item to `true`.\n *\n * Internals:\n *\n * Since the LockManager API does not preserve stack traces for the async\n * function passed in the `request` method, a trick is used where acquiring the\n * lock releases a previously started promise to run the operation in the `fn`\n * function. The lock waits for that promise to finish (with or without error),\n * while the function will finally wait for the result anyway.\n *\n * @param name Name of the lock to be acquired.\n * @param acquireTimeout If negative, no timeout. If 0 an error is thrown if\n *                       the lock can't be acquired without waiting. If positive, the lock acquire\n *                       will time out after so many milliseconds. An error is\n *                       a timeout if it has `isAcquireTimeout` set to true.\n * @param fn The operation to run once the lock is acquired.\n *\n * @deprecated The auth client coordinates refreshes itself and the server\n * resolves concurrent refresh races, so passing `{ lock: navigatorLock }`\n * to it has no effect. You can safely drop the import from your client setup.\n */\nexport async function navigatorLock(name, acquireTimeout, fn) {\n    if (internals.debug) {\n        console.log('@supabase/gotrue-js: navigatorLock: acquire lock', name, acquireTimeout);\n    }\n    const abortController = new globalThis.AbortController();\n    let acquireTimeoutTimer;\n    if (acquireTimeout > 0) {\n        acquireTimeoutTimer = setTimeout(() => {\n            abortController.abort();\n            if (internals.debug) {\n                console.log('@supabase/gotrue-js: navigatorLock acquire timed out', name);\n            }\n        }, acquireTimeout);\n    }\n    // MDN article: https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request\n    // Wrapping navigator.locks.request() with a plain Promise is done as some\n    // libraries like zone.js patch the Promise object to track the execution\n    // context. However, it appears that most browsers use an internal promise\n    // implementation when using the navigator.locks.request() API causing them\n    // to lose context and emit confusing log messages or break certain features.\n    // This wrapping is believed to help zone.js track the execution context\n    // better.\n    await Promise.resolve();\n    try {\n        return await globalThis.navigator.locks.request(name, acquireTimeout === 0\n            ? {\n                mode: 'exclusive',\n                ifAvailable: true,\n            }\n            : {\n                mode: 'exclusive',\n                signal: abortController.signal,\n            }, async (lock) => {\n            if (lock) {\n                // Lock acquired — cancel the acquire-timeout timer so it cannot fire\n                // while fn() is running. Without this, a delayed timeout abort would\n                // set signal.aborted = true even though we already hold the lock,\n                // causing a subsequent steal to be misclassified as \"our timeout\n                // fired\" and triggering a spurious steal-back cascade.\n                clearTimeout(acquireTimeoutTimer);\n                if (internals.debug) {\n                    console.log('@supabase/gotrue-js: navigatorLock: acquired', name, lock.name);\n                }\n                try {\n                    return await fn();\n                }\n                finally {\n                    if (internals.debug) {\n                        console.log('@supabase/gotrue-js: navigatorLock: released', name, lock.name);\n                    }\n                }\n            }\n            else {\n                if (acquireTimeout === 0) {\n                    if (internals.debug) {\n                        console.log('@supabase/gotrue-js: navigatorLock: not immediately available', name);\n                    }\n                    throw new NavigatorLockAcquireTimeoutError(`Acquiring an exclusive Navigator LockManager lock \"${name}\" immediately failed`);\n                }\n                else {\n                    if (internals.debug) {\n                        try {\n                            const result = await globalThis.navigator.locks.query();\n                            console.log('@supabase/gotrue-js: Navigator LockManager state', JSON.stringify(result, null, '  '));\n                        }\n                        catch (e) {\n                            console.warn('@supabase/gotrue-js: Error when querying Navigator LockManager state', e);\n                        }\n                    }\n                    // Browser is not following the Navigator LockManager spec, it\n                    // returned a null lock when we didn't use ifAvailable. So we can\n                    // pretend the lock is acquired in the name of backward compatibility\n                    // and user experience and just run the function.\n                    console.warn('@supabase/gotrue-js: Navigator LockManager returned a null lock when using #request without ifAvailable set to true, it appears this browser is not following the LockManager spec https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request');\n                    clearTimeout(acquireTimeoutTimer);\n                    return await fn();\n                }\n            }\n        });\n    }\n    catch (e) {\n        // Always clear the acquire timeout once the request settles, so it cannot\n        // fire later and incorrectly abort/log after a rejection.\n        if (acquireTimeout > 0) {\n            clearTimeout(acquireTimeoutTimer);\n        }\n        // DOMException does not extend Error in Node.js, so use structural check\n        if (e !== null &&\n            typeof e === 'object' &&\n            'name' in e &&\n            e.name === 'AbortError' &&\n            acquireTimeout > 0) {\n            if (abortController.signal.aborted) {\n                // OUR timeout fired — the lock is genuinely orphaned. Steal it.\n                //\n                // The lock acquisition was aborted because the timeout fired while the\n                // request was still pending. This typically means another lock holder is\n                // not releasing the lock, possibly due to React Strict Mode's\n                // double-mount/unmount behavior or a component unmounting mid-operation,\n                // leaving an orphaned lock.\n                //\n                // Recovery: use { steal: true } to forcefully acquire the lock. Per the\n                // Web Locks API spec, this releases any currently held lock with the same\n                // name and grants the request immediately, preempting any queued requests.\n                // The previous holder's callback continues running to completion but no\n                // longer holds the lock for exclusion purposes.\n                //\n                // See: https://github.com/supabase/supabase/issues/42505\n                if (internals.debug) {\n                    console.log('@supabase/gotrue-js: navigatorLock: acquire timeout, recovering by stealing lock', name);\n                }\n                console.warn(`@supabase/gotrue-js: Lock \"${name}\" was not released within ${acquireTimeout}ms. ` +\n                    'This may indicate an orphaned lock from a component unmount (e.g., React Strict Mode). ' +\n                    'Forcefully acquiring the lock to recover.');\n                return await Promise.resolve().then(() => globalThis.navigator.locks.request(name, {\n                    mode: 'exclusive',\n                    steal: true,\n                }, async (lock) => {\n                    if (lock) {\n                        if (internals.debug) {\n                            console.log('@supabase/gotrue-js: navigatorLock: recovered (stolen)', name, lock.name);\n                        }\n                        try {\n                            return await fn();\n                        }\n                        finally {\n                            if (internals.debug) {\n                                console.log('@supabase/gotrue-js: navigatorLock: released (stolen)', name, lock.name);\n                            }\n                        }\n                    }\n                    else {\n                        // This should not happen with steal: true, but handle gracefully.\n                        console.warn('@supabase/gotrue-js: Navigator LockManager returned null lock even with steal: true');\n                        return await fn();\n                    }\n                }));\n            }\n            else {\n                // We HELD the lock but another request stole it from us.\n                // Per the Web Locks spec, our fn() callback is still running as an\n                // orphaned background task — do NOT steal back. Stealing back would\n                // cause a cascade (A steals B, B steals A, ...) and run fn() a second\n                // time concurrently, corrupting auth state.\n                // Convert to a typed error so callers (e.g. _autoRefreshTokenTick)\n                // can handle/filter it without it leaking to Sentry as a raw AbortError.\n                if (internals.debug) {\n                    console.log('@supabase/gotrue-js: navigatorLock: lock was stolen by another request', name);\n                }\n                throw new NavigatorLockAcquireTimeoutError(`Lock \"${name}\" was released because another request stole it`);\n            }\n        }\n        throw e;\n    }\n}\nconst PROCESS_LOCKS = {};\n/**\n * Implements a global exclusive lock that works only in the current process.\n * Useful for environments like React Native or other non-browser\n * single-process (i.e. no concept of \"tabs\") environments.\n *\n * Use {@link navigatorLock} in browser environments.\n *\n * @param name Name of the lock to be acquired.\n * @param acquireTimeout If negative, no timeout. If 0 an error is thrown if\n *                       the lock can't be acquired without waiting. If positive, the lock acquire\n *                       will time out after so many milliseconds. An error is\n *                       a timeout if it has `isAcquireTimeout` set to true.\n * @param fn The operation to run once the lock is acquired.\n *\n * @deprecated The auth client coordinates refreshes itself and the server\n * resolves concurrent refresh races, so passing `{ lock: processLock }`\n * to it has no effect. You can safely drop the import from your client setup.\n *\n * @example\n * ```ts\n * await processLock('migrate', 5000, async () => {\n *   await runMigration()\n * })\n * ```\n */\nexport async function processLock(name, acquireTimeout, fn) {\n    var _a;\n    const previousOperation = (_a = PROCESS_LOCKS[name]) !== null && _a !== void 0 ? _a : Promise.resolve();\n    // Wrap previousOperation to handle errors without using .catch()\n    // This avoids Firefox content script security errors\n    const previousOperationHandled = (async () => {\n        try {\n            await previousOperation;\n            return null;\n        }\n        catch (e) {\n            // ignore error of previous operation that we're waiting to finish\n            return null;\n        }\n    })();\n    const currentOperation = (async () => {\n        let timeoutId = null;\n        try {\n            // Wait for either previous operation or timeout\n            const timeoutPromise = acquireTimeout >= 0\n                ? new Promise((_, reject) => {\n                    timeoutId = setTimeout(() => {\n                        console.warn(`@supabase/gotrue-js: Lock \"${name}\" acquisition timed out after ${acquireTimeout}ms. ` +\n                            'This may be caused by another operation holding the lock. ' +\n                            'Consider increasing lockAcquireTimeout or checking for stuck operations.');\n                        reject(new ProcessLockAcquireTimeoutError(`Acquiring process lock with name \"${name}\" timed out`));\n                    }, acquireTimeout);\n                })\n                : null;\n            await Promise.race([previousOperationHandled, timeoutPromise].filter((x) => x));\n            // If we reach here, previousOperationHandled won the race\n            // Clear the timeout to prevent false warnings\n            if (timeoutId !== null) {\n                clearTimeout(timeoutId);\n            }\n        }\n        catch (e) {\n            // Clear the timeout on error path as well\n            if (timeoutId !== null) {\n                clearTimeout(timeoutId);\n            }\n            // Re-throw timeout errors, ignore others\n            if (e instanceof LockAcquireTimeoutError) {\n                throw e;\n            }\n            // Fall through to run fn() - previous operation finished with error\n        }\n        // Previous operations finished and we didn't get a race on the acquire\n        // timeout, so the current operation can finally start\n        return await fn();\n    })();\n    PROCESS_LOCKS[name] = (async () => {\n        try {\n            return await currentOperation;\n        }\n        catch (e) {\n            if (e instanceof LockAcquireTimeoutError) {\n                // if the current operation timed out, it doesn't mean that the previous\n                // operation finished, so we need continue waiting for it to finish\n                try {\n                    await previousOperation;\n                }\n                catch (prevError) {\n                    // Ignore previous operation errors\n                }\n                return null;\n            }\n            throw e;\n        }\n    })();\n    // finally wait for the current operation to finish successfully, with an\n    // error or with an acquire timeout error\n    return await currentOperation;\n}\n//# sourceMappingURL=locks.js.map","/**\n * https://mathiasbynens.be/notes/globalthis\n */\nexport function polyfillGlobalThis() {\n    if (typeof globalThis === 'object')\n        return;\n    try {\n        Object.defineProperty(Object.prototype, '__magic__', {\n            get: function () {\n                return this;\n            },\n            configurable: true,\n        });\n        // @ts-expect-error 'Allow access to magic'\n        __magic__.globalThis = __magic__;\n        // @ts-expect-error 'Allow access to magic'\n        delete Object.prototype.__magic__;\n    }\n    catch (e) {\n        if (typeof self !== 'undefined') {\n            // @ts-expect-error 'Allow access to globals'\n            self.globalThis = self;\n        }\n    }\n}\n//# sourceMappingURL=polyfills.js.map","// types and functions copied over from viem so this library doesn't depend on it\nexport function getAddress(address) {\n    if (!/^0x[a-fA-F0-9]{40}$/.test(address)) {\n        throw new Error(`@supabase/auth-js: Address \"${address}\" is invalid.`);\n    }\n    return address.toLowerCase();\n}\nexport function fromHex(hex) {\n    return parseInt(hex, 16);\n}\nexport function toHex(value) {\n    const bytes = new TextEncoder().encode(value);\n    const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');\n    return ('0x' + hex);\n}\n/**\n * Creates EIP-4361 formatted message.\n */\nexport function createSiweMessage(parameters) {\n    var _a;\n    const { chainId, domain, expirationTime, issuedAt = new Date(), nonce, notBefore, requestId, resources, scheme, uri, version, } = parameters;\n    // Validate fields\n    {\n        if (!Number.isInteger(chainId))\n            throw new Error(`@supabase/auth-js: Invalid SIWE message field \"chainId\". Chain ID must be a EIP-155 chain ID. Provided value: ${chainId}`);\n        if (!domain)\n            throw new Error(`@supabase/auth-js: Invalid SIWE message field \"domain\". Domain must be provided.`);\n        if (nonce && nonce.length < 8)\n            throw new Error(`@supabase/auth-js: Invalid SIWE message field \"nonce\". Nonce must be at least 8 characters. Provided value: ${nonce}`);\n        if (!uri)\n            throw new Error(`@supabase/auth-js: Invalid SIWE message field \"uri\". URI must be provided.`);\n        if (version !== '1')\n            throw new Error(`@supabase/auth-js: Invalid SIWE message field \"version\". Version must be '1'. Provided value: ${version}`);\n        if ((_a = parameters.statement) === null || _a === void 0 ? void 0 : _a.includes('\\n'))\n            throw new Error(`@supabase/auth-js: Invalid SIWE message field \"statement\". Statement must not include '\\\\n'. Provided value: ${parameters.statement}`);\n    }\n    // Construct message\n    const address = getAddress(parameters.address);\n    const origin = scheme ? `${scheme}://${domain}` : domain;\n    const statement = parameters.statement ? `${parameters.statement}\\n` : '';\n    const prefix = `${origin} wants you to sign in with your Ethereum account:\\n${address}\\n\\n${statement}`;\n    let suffix = `URI: ${uri}\\nVersion: ${version}\\nChain ID: ${chainId}${nonce ? `\\nNonce: ${nonce}` : ''}\\nIssued At: ${issuedAt.toISOString()}`;\n    if (expirationTime)\n        suffix += `\\nExpiration Time: ${expirationTime.toISOString()}`;\n    if (notBefore)\n        suffix += `\\nNot Before: ${notBefore.toISOString()}`;\n    if (requestId)\n        suffix += `\\nRequest ID: ${requestId}`;\n    if (resources) {\n        let content = '\\nResources:';\n        for (const resource of resources) {\n            if (!resource || typeof resource !== 'string')\n                throw new Error(`@supabase/auth-js: Invalid SIWE message field \"resources\". Every resource must be a valid string. Provided value: ${resource}`);\n            content += `\\n- ${resource}`;\n        }\n        suffix += content;\n    }\n    return `${prefix}\\n${suffix}`;\n}\n//# sourceMappingURL=ethereum.js.map","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { isValidDomain } from './webauthn';\n/**\n * A custom Error used to return a more nuanced error detailing _why_ one of the eight documented\n * errors in the spec was raised after calling `navigator.credentials.create()` or\n * `navigator.credentials.get()`:\n *\n * - `AbortError`\n * - `ConstraintError`\n * - `InvalidStateError`\n * - `NotAllowedError`\n * - `NotSupportedError`\n * - `SecurityError`\n * - `TypeError`\n * - `UnknownError`\n *\n * Error messages were determined through investigation of the spec to determine under which\n * scenarios a given error would be raised.\n */\nexport class WebAuthnError extends Error {\n    constructor({ message, code, cause, name, }) {\n        var _a;\n        // @ts-ignore: help Rollup understand that `cause` is okay to set\n        super(message, { cause });\n        this.__isWebAuthnError = true;\n        this.name = (_a = name !== null && name !== void 0 ? name : (cause instanceof Error ? cause.name : undefined)) !== null && _a !== void 0 ? _a : 'Unknown Error';\n        this.code = code;\n    }\n    toJSON() {\n        return {\n            name: this.name,\n            message: this.message,\n            code: this.code,\n        };\n    }\n}\n/**\n * Error class for unknown WebAuthn errors.\n * Wraps unexpected errors that don't match known WebAuthn error conditions.\n */\nexport class WebAuthnUnknownError extends WebAuthnError {\n    constructor(message, originalError) {\n        super({\n            code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n            cause: originalError,\n            message,\n        });\n        this.name = 'WebAuthnUnknownError';\n        this.originalError = originalError;\n    }\n}\n/**\n * Type guard to check if an error is a WebAuthnError.\n * @param {unknown} error - The error to check\n * @returns {boolean} True if the error is a WebAuthnError\n */\nexport function isWebAuthnError(error) {\n    return typeof error === 'object' && error !== null && '__isWebAuthnError' in error;\n}\n/**\n * Attempt to intuit _why_ an error was raised after calling `navigator.credentials.create()`.\n * Maps browser errors to specific WebAuthn error codes for better debugging.\n * @param {Object} params - Error identification parameters\n * @param {Error} params.error - The error thrown by the browser\n * @param {CredentialCreationOptions} params.options - The options passed to credentials.create()\n * @returns {WebAuthnError} A WebAuthnError with a specific error code\n * @see {@link https://w3c.github.io/webauthn/#sctn-createCredential W3C WebAuthn Spec - Create Credential}\n */\nexport function identifyRegistrationError({ error, options, }) {\n    var _a, _b, _c;\n    const { publicKey } = options;\n    if (!publicKey) {\n        throw Error('options was missing required publicKey property');\n    }\n    if (error.name === 'AbortError') {\n        if (options.signal instanceof AbortSignal) {\n            // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 16)\n            return new WebAuthnError({\n                message: 'Registration ceremony was sent an abort signal',\n                code: 'ERROR_CEREMONY_ABORTED',\n                cause: error,\n            });\n        }\n    }\n    else if (error.name === 'ConstraintError') {\n        if (((_a = publicKey.authenticatorSelection) === null || _a === void 0 ? void 0 : _a.requireResidentKey) === true) {\n            // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 4)\n            return new WebAuthnError({\n                message: 'Discoverable credentials were required but no available authenticator supported it',\n                code: 'ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT',\n                cause: error,\n            });\n        }\n        else if (\n        // @ts-ignore: `mediation` doesn't yet exist on CredentialCreationOptions but it's possible as of Sept 2024\n        options.mediation === 'conditional' &&\n            ((_b = publicKey.authenticatorSelection) === null || _b === void 0 ? void 0 : _b.userVerification) === 'required') {\n            // https://w3c.github.io/webauthn/#sctn-createCredential (Step 22.4)\n            return new WebAuthnError({\n                message: 'User verification was required during automatic registration but it could not be performed',\n                code: 'ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE',\n                cause: error,\n            });\n        }\n        else if (((_c = publicKey.authenticatorSelection) === null || _c === void 0 ? void 0 : _c.userVerification) === 'required') {\n            // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 5)\n            return new WebAuthnError({\n                message: 'User verification was required but no available authenticator supported it',\n                code: 'ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT',\n                cause: error,\n            });\n        }\n    }\n    else if (error.name === 'InvalidStateError') {\n        // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 20)\n        // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 3)\n        return new WebAuthnError({\n            message: 'The authenticator was previously registered',\n            code: 'ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED',\n            cause: error,\n        });\n    }\n    else if (error.name === 'NotAllowedError') {\n        /**\n         * Pass the error directly through. Platforms are overloading this error beyond what the spec\n         * defines and we don't want to overwrite potentially useful error messages.\n         */\n        return new WebAuthnError({\n            message: error.message,\n            code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n            cause: error,\n        });\n    }\n    else if (error.name === 'NotSupportedError') {\n        const validPubKeyCredParams = publicKey.pubKeyCredParams.filter((param) => param.type === 'public-key');\n        if (validPubKeyCredParams.length === 0) {\n            // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 10)\n            return new WebAuthnError({\n                message: 'No entry in pubKeyCredParams was of type \"public-key\"',\n                code: 'ERROR_MALFORMED_PUBKEYCREDPARAMS',\n                cause: error,\n            });\n        }\n        // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 2)\n        return new WebAuthnError({\n            message: 'No available authenticator supported any of the specified pubKeyCredParams algorithms',\n            code: 'ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG',\n            cause: error,\n        });\n    }\n    else if (error.name === 'SecurityError') {\n        const effectiveDomain = window.location.hostname;\n        if (!isValidDomain(effectiveDomain)) {\n            // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 7)\n            return new WebAuthnError({\n                message: `${window.location.hostname} is an invalid domain`,\n                code: 'ERROR_INVALID_DOMAIN',\n                cause: error,\n            });\n        }\n        else if (publicKey.rp.id !== effectiveDomain) {\n            // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 8)\n            return new WebAuthnError({\n                message: `The RP ID \"${publicKey.rp.id}\" is invalid for this domain`,\n                code: 'ERROR_INVALID_RP_ID',\n                cause: error,\n            });\n        }\n    }\n    else if (error.name === 'TypeError') {\n        if (publicKey.user.id.byteLength < 1 || publicKey.user.id.byteLength > 64) {\n            // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 5)\n            return new WebAuthnError({\n                message: 'User ID was not between 1 and 64 characters',\n                code: 'ERROR_INVALID_USER_ID_LENGTH',\n                cause: error,\n            });\n        }\n    }\n    else if (error.name === 'UnknownError') {\n        // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 1)\n        // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 8)\n        return new WebAuthnError({\n            message: 'The authenticator was unable to process the specified options, or could not create a new credential',\n            code: 'ERROR_AUTHENTICATOR_GENERAL_ERROR',\n            cause: error,\n        });\n    }\n    return new WebAuthnError({\n        message: 'a Non-Webauthn related error has occurred',\n        code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n        cause: error,\n    });\n}\n/**\n * Attempt to intuit _why_ an error was raised after calling `navigator.credentials.get()`.\n * Maps browser errors to specific WebAuthn error codes for better debugging.\n * @param {Object} params - Error identification parameters\n * @param {Error} params.error - The error thrown by the browser\n * @param {CredentialRequestOptions} params.options - The options passed to credentials.get()\n * @returns {WebAuthnError} A WebAuthnError with a specific error code\n * @see {@link https://w3c.github.io/webauthn/#sctn-getAssertion W3C WebAuthn Spec - Get Assertion}\n */\nexport function identifyAuthenticationError({ error, options, }) {\n    const { publicKey } = options;\n    if (!publicKey) {\n        throw Error('options was missing required publicKey property');\n    }\n    if (error.name === 'AbortError') {\n        if (options.signal instanceof AbortSignal) {\n            // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 16)\n            return new WebAuthnError({\n                message: 'Authentication ceremony was sent an abort signal',\n                code: 'ERROR_CEREMONY_ABORTED',\n                cause: error,\n            });\n        }\n    }\n    else if (error.name === 'NotAllowedError') {\n        /**\n         * Pass the error directly through. Platforms are overloading this error beyond what the spec\n         * defines and we don't want to overwrite potentially useful error messages.\n         */\n        return new WebAuthnError({\n            message: error.message,\n            code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n            cause: error,\n        });\n    }\n    else if (error.name === 'SecurityError') {\n        const effectiveDomain = window.location.hostname;\n        if (!isValidDomain(effectiveDomain)) {\n            // https://www.w3.org/TR/webauthn-2/#sctn-discover-from-external-source (Step 5)\n            return new WebAuthnError({\n                message: `${window.location.hostname} is an invalid domain`,\n                code: 'ERROR_INVALID_DOMAIN',\n                cause: error,\n            });\n        }\n        else if (publicKey.rpId !== effectiveDomain) {\n            // https://www.w3.org/TR/webauthn-2/#sctn-discover-from-external-source (Step 6)\n            return new WebAuthnError({\n                message: `The RP ID \"${publicKey.rpId}\" is invalid for this domain`,\n                code: 'ERROR_INVALID_RP_ID',\n                cause: error,\n            });\n        }\n    }\n    else if (error.name === 'UnknownError') {\n        // https://www.w3.org/TR/webauthn-2/#sctn-op-get-assertion (Step 1)\n        // https://www.w3.org/TR/webauthn-2/#sctn-op-get-assertion (Step 12)\n        return new WebAuthnError({\n            message: 'The authenticator was unable to process the specified options, or could not create a new assertion signature',\n            code: 'ERROR_AUTHENTICATOR_GENERAL_ERROR',\n            cause: error,\n        });\n    }\n    return new WebAuthnError({\n        message: 'a Non-Webauthn related error has occurred',\n        code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n        cause: error,\n    });\n}\n//# sourceMappingURL=webauthn.errors.js.map","import { __rest } from \"tslib\";\nimport { base64UrlToUint8Array, bytesToBase64URL } from './base64url';\nimport { AuthError, AuthUnknownError, isAuthError } from './errors';\nimport { isBrowser } from './helpers';\nimport { identifyAuthenticationError, identifyRegistrationError, isWebAuthnError, WebAuthnError, WebAuthnUnknownError, } from './webauthn.errors';\nexport { WebAuthnError, isWebAuthnError, identifyRegistrationError, identifyAuthenticationError };\n/**\n * WebAuthn abort service to manage ceremony cancellation.\n * Ensures only one WebAuthn ceremony is active at a time to prevent \"operation already in progress\" errors.\n *\n * @experimental This class is experimental and may change in future releases\n * @see {@link https://w3c.github.io/webauthn/#sctn-automation-webdriver-capability W3C WebAuthn Spec - Aborting Ceremonies}\n */\nexport class WebAuthnAbortService {\n    /**\n     * Create an abort signal for a new WebAuthn operation.\n     * Automatically cancels any existing operation.\n     *\n     * @returns {AbortSignal} Signal to pass to navigator.credentials.create() or .get()\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal MDN - AbortSignal}\n     */\n    createNewAbortSignal() {\n        // Abort any existing calls to navigator.credentials.create() or navigator.credentials.get()\n        if (this.controller) {\n            const abortError = new Error('Cancelling existing WebAuthn API call for new one');\n            abortError.name = 'AbortError';\n            this.controller.abort(abortError);\n        }\n        const newController = new AbortController();\n        this.controller = newController;\n        return newController.signal;\n    }\n    /**\n     * Manually cancel the current WebAuthn operation.\n     * Useful for cleaning up when user cancels or navigates away.\n     *\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/AbortController/abort MDN - AbortController.abort}\n     */\n    cancelCeremony() {\n        if (this.controller) {\n            const abortError = new Error('Manually cancelling existing WebAuthn API call');\n            abortError.name = 'AbortError';\n            this.controller.abort(abortError);\n            this.controller = undefined;\n        }\n    }\n}\n/**\n * Singleton instance to ensure only one WebAuthn ceremony is active at a time.\n * This prevents \"operation already in progress\" errors when retrying WebAuthn operations.\n *\n * @experimental This instance is experimental and may change in future releases\n */\nexport const webAuthnAbortService = new WebAuthnAbortService();\n/**\n * Convert base64url encoded strings in WebAuthn credential creation options to ArrayBuffers\n * as required by the WebAuthn browser API.\n * Supports both native WebAuthn Level 3 parseCreationOptionsFromJSON and manual fallback.\n *\n * @param {ServerCredentialCreationOptions} options - JSON options from server with base64url encoded fields\n * @returns {PublicKeyCredentialCreationOptionsFuture} Options ready for navigator.credentials.create()\n * @see {@link https://w3c.github.io/webauthn/#sctn-parseCreationOptionsFromJSON W3C WebAuthn Spec - parseCreationOptionsFromJSON}\n */\nexport function deserializeCredentialCreationOptions(options) {\n    if (!options) {\n        throw new Error('Credential creation options are required');\n    }\n    // Check if the native parseCreationOptionsFromJSON method is available\n    if (typeof PublicKeyCredential !== 'undefined' &&\n        'parseCreationOptionsFromJSON' in PublicKeyCredential &&\n        typeof PublicKeyCredential\n            .parseCreationOptionsFromJSON === 'function') {\n        // Use the native WebAuthn Level 3 method\n        return PublicKeyCredential.parseCreationOptionsFromJSON(\n        /** we assert the options here as typescript still doesn't know about future webauthn types */\n        options);\n    }\n    // Fallback to manual parsing for browsers that don't support the native method\n    // Destructure to separate fields that need transformation\n    const { challenge: challengeStr, user: userOpts, excludeCredentials } = options, restOptions = __rest(options\n    // Convert challenge from base64url to ArrayBuffer\n    , [\"challenge\", \"user\", \"excludeCredentials\"]);\n    // Convert challenge from base64url to ArrayBuffer\n    const challenge = base64UrlToUint8Array(challengeStr).buffer;\n    // Convert user.id from base64url to ArrayBuffer\n    const user = Object.assign(Object.assign({}, userOpts), { id: base64UrlToUint8Array(userOpts.id).buffer });\n    // Build the result object\n    const result = Object.assign(Object.assign({}, restOptions), { challenge,\n        user });\n    // Only add excludeCredentials if it exists\n    if (excludeCredentials && excludeCredentials.length > 0) {\n        result.excludeCredentials = new Array(excludeCredentials.length);\n        for (let i = 0; i < excludeCredentials.length; i++) {\n            const cred = excludeCredentials[i];\n            result.excludeCredentials[i] = Object.assign(Object.assign({}, cred), { id: base64UrlToUint8Array(cred.id).buffer, type: cred.type || 'public-key', \n                // Cast transports to handle future transport types like \"cable\"\n                transports: cred.transports });\n        }\n    }\n    return result;\n}\n/**\n * Convert base64url encoded strings in WebAuthn credential request options to ArrayBuffers\n * as required by the WebAuthn browser API.\n * Supports both native WebAuthn Level 3 parseRequestOptionsFromJSON and manual fallback.\n *\n * @param {ServerCredentialRequestOptions} options - JSON options from server with base64url encoded fields\n * @returns {PublicKeyCredentialRequestOptionsFuture} Options ready for navigator.credentials.get()\n * @see {@link https://w3c.github.io/webauthn/#sctn-parseRequestOptionsFromJSON W3C WebAuthn Spec - parseRequestOptionsFromJSON}\n */\nexport function deserializeCredentialRequestOptions(options) {\n    if (!options) {\n        throw new Error('Credential request options are required');\n    }\n    // Check if the native parseRequestOptionsFromJSON method is available\n    if (typeof PublicKeyCredential !== 'undefined' &&\n        'parseRequestOptionsFromJSON' in PublicKeyCredential &&\n        typeof PublicKeyCredential\n            .parseRequestOptionsFromJSON === 'function') {\n        // Use the native WebAuthn Level 3 method\n        return PublicKeyCredential.parseRequestOptionsFromJSON(options);\n    }\n    // Fallback to manual parsing for browsers that don't support the native method\n    // Destructure to separate fields that need transformation\n    const { challenge: challengeStr, allowCredentials } = options, restOptions = __rest(options\n    // Convert challenge from base64url to ArrayBuffer\n    , [\"challenge\", \"allowCredentials\"]);\n    // Convert challenge from base64url to ArrayBuffer\n    const challenge = base64UrlToUint8Array(challengeStr).buffer;\n    // Build the result object\n    const result = Object.assign(Object.assign({}, restOptions), { challenge });\n    // Only add allowCredentials if it exists\n    if (allowCredentials && allowCredentials.length > 0) {\n        result.allowCredentials = new Array(allowCredentials.length);\n        for (let i = 0; i < allowCredentials.length; i++) {\n            const cred = allowCredentials[i];\n            result.allowCredentials[i] = Object.assign(Object.assign({}, cred), { id: base64UrlToUint8Array(cred.id).buffer, type: cred.type || 'public-key', \n                // Cast transports to handle future transport types like \"cable\"\n                transports: cred.transports });\n        }\n    }\n    return result;\n}\n/**\n * Convert a registration/enrollment credential response to server format.\n * Serializes binary fields to base64url for JSON transmission.\n * Supports both native WebAuthn Level 3 toJSON and manual fallback.\n *\n * @param {RegistrationCredential} credential - Credential from navigator.credentials.create()\n * @returns {RegistrationResponseJSON} JSON-serializable credential for server\n * @see {@link https://w3c.github.io/webauthn/#dom-publickeycredential-tojson W3C WebAuthn Spec - toJSON}\n */\nexport function serializeCredentialCreationResponse(credential) {\n    var _a;\n    // Check if the credential instance has the toJSON method\n    if ('toJSON' in credential && typeof credential.toJSON === 'function') {\n        // Use the native WebAuthn Level 3 method\n        return credential.toJSON();\n    }\n    const credentialWithAttachment = credential;\n    return {\n        id: credential.id,\n        rawId: credential.id,\n        response: {\n            attestationObject: bytesToBase64URL(new Uint8Array(credential.response.attestationObject)),\n            clientDataJSON: bytesToBase64URL(new Uint8Array(credential.response.clientDataJSON)),\n        },\n        type: 'public-key',\n        clientExtensionResults: credential.getClientExtensionResults(),\n        // Convert null to undefined and cast to AuthenticatorAttachment type\n        authenticatorAttachment: ((_a = credentialWithAttachment.authenticatorAttachment) !== null && _a !== void 0 ? _a : undefined),\n    };\n}\n/**\n * Convert an authentication/verification credential response to server format.\n * Serializes binary fields to base64url for JSON transmission.\n * Supports both native WebAuthn Level 3 toJSON and manual fallback.\n *\n * @param {AuthenticationCredential} credential - Credential from navigator.credentials.get()\n * @returns {AuthenticationResponseJSON} JSON-serializable credential for server\n * @see {@link https://w3c.github.io/webauthn/#dom-publickeycredential-tojson W3C WebAuthn Spec - toJSON}\n */\nexport function serializeCredentialRequestResponse(credential) {\n    var _a;\n    // Check if the credential instance has the toJSON method\n    if ('toJSON' in credential && typeof credential.toJSON === 'function') {\n        // Use the native WebAuthn Level 3 method\n        return credential.toJSON();\n    }\n    // Fallback to manual conversion for browsers that don't support toJSON\n    // Access authenticatorAttachment via type assertion to handle TypeScript version differences\n    // @simplewebauthn/types includes this property but base TypeScript 4.7.4 doesn't\n    const credentialWithAttachment = credential;\n    const clientExtensionResults = credential.getClientExtensionResults();\n    const assertionResponse = credential.response;\n    return {\n        id: credential.id,\n        rawId: credential.id, // W3C spec expects rawId to match id for JSON format\n        response: {\n            authenticatorData: bytesToBase64URL(new Uint8Array(assertionResponse.authenticatorData)),\n            clientDataJSON: bytesToBase64URL(new Uint8Array(assertionResponse.clientDataJSON)),\n            signature: bytesToBase64URL(new Uint8Array(assertionResponse.signature)),\n            userHandle: assertionResponse.userHandle\n                ? bytesToBase64URL(new Uint8Array(assertionResponse.userHandle))\n                : undefined,\n        },\n        type: 'public-key',\n        clientExtensionResults,\n        // Convert null to undefined and cast to AuthenticatorAttachment type\n        authenticatorAttachment: ((_a = credentialWithAttachment.authenticatorAttachment) !== null && _a !== void 0 ? _a : undefined),\n    };\n}\n/**\n * A simple test to determine if a hostname is a properly-formatted domain name.\n * Considers localhost valid for development environments.\n *\n * A \"valid domain\" is defined here: https://url.spec.whatwg.org/#valid-domain\n *\n * Regex sourced from here:\n * https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch08s15.html\n *\n * @param {string} hostname - The hostname to validate\n * @returns {boolean} True if valid domain or localhost\n * @see {@link https://url.spec.whatwg.org/#valid-domain WHATWG URL Spec - Valid Domain}\n */\nexport function isValidDomain(hostname) {\n    return (\n    // Consider localhost valid as well since it's okay wrt Secure Contexts\n    hostname === 'localhost' || /^([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,}$/i.test(hostname));\n}\n/**\n * Determine if the browser is capable of WebAuthn.\n * Checks for necessary Web APIs: PublicKeyCredential and Credential Management.\n *\n * @returns {boolean} True if browser supports WebAuthn\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredential#browser_compatibility MDN - PublicKeyCredential Browser Compatibility}\n */\nexport function browserSupportsWebAuthn() {\n    var _a, _b;\n    return !!(isBrowser() &&\n        'PublicKeyCredential' in window &&\n        window.PublicKeyCredential &&\n        'credentials' in navigator &&\n        typeof ((_a = navigator === null || navigator === void 0 ? void 0 : navigator.credentials) === null || _a === void 0 ? void 0 : _a.create) === 'function' &&\n        typeof ((_b = navigator === null || navigator === void 0 ? void 0 : navigator.credentials) === null || _b === void 0 ? void 0 : _b.get) === 'function');\n}\n/**\n * Create a WebAuthn credential using the browser's credentials API.\n * Wraps navigator.credentials.create() with error handling.\n *\n * @param {CredentialCreationOptions} options - Options including publicKey parameters\n * @returns {Promise<RequestResult<RegistrationCredential, WebAuthnError>>} Created credential or error\n * @see {@link https://w3c.github.io/webauthn/#sctn-createCredential W3C WebAuthn Spec - Create Credential}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CredentialsContainer/create MDN - credentials.create}\n */\nexport async function createCredential(options) {\n    try {\n        const response = await navigator.credentials.create(\n        /** we assert the type here until typescript types are updated */\n        options);\n        if (!response) {\n            return {\n                data: null,\n                error: new WebAuthnUnknownError('Empty credential response', response),\n            };\n        }\n        if (!(response instanceof PublicKeyCredential)) {\n            return {\n                data: null,\n                error: new WebAuthnUnknownError('Browser returned unexpected credential type', response),\n            };\n        }\n        return { data: response, error: null };\n    }\n    catch (err) {\n        return {\n            data: null,\n            error: identifyRegistrationError({\n                error: err,\n                options,\n            }),\n        };\n    }\n}\n/**\n * Get a WebAuthn credential using the browser's credentials API.\n * Wraps navigator.credentials.get() with error handling.\n *\n * @param {CredentialRequestOptions} options - Options including publicKey parameters\n * @returns {Promise<RequestResult<AuthenticationCredential, WebAuthnError>>} Retrieved credential or error\n * @see {@link https://w3c.github.io/webauthn/#sctn-getAssertion W3C WebAuthn Spec - Get Assertion}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CredentialsContainer/get MDN - credentials.get}\n */\nexport async function getCredential(options) {\n    try {\n        const response = await navigator.credentials.get(\n        /** we assert the type here until typescript types are updated */\n        options);\n        if (!response) {\n            return {\n                data: null,\n                error: new WebAuthnUnknownError('Empty credential response', response),\n            };\n        }\n        if (!(response instanceof PublicKeyCredential)) {\n            return {\n                data: null,\n                error: new WebAuthnUnknownError('Browser returned unexpected credential type', response),\n            };\n        }\n        return { data: response, error: null };\n    }\n    catch (err) {\n        return {\n            data: null,\n            error: identifyAuthenticationError({\n                error: err,\n                options,\n            }),\n        };\n    }\n}\nexport const DEFAULT_CREATION_OPTIONS = {\n    hints: ['security-key'],\n    authenticatorSelection: {\n        authenticatorAttachment: 'cross-platform',\n        requireResidentKey: false,\n        /** set to preferred because older yubikeys don't have PIN/Biometric */\n        userVerification: 'preferred',\n        residentKey: 'discouraged',\n    },\n    attestation: 'direct',\n};\nexport const DEFAULT_REQUEST_OPTIONS = {\n    /** set to preferred because older yubikeys don't have PIN/Biometric */\n    userVerification: 'preferred',\n    hints: ['security-key'],\n    attestation: 'direct',\n};\nfunction deepMerge(...sources) {\n    const isObject = (val) => val !== null && typeof val === 'object' && !Array.isArray(val);\n    const isArrayBufferLike = (val) => val instanceof ArrayBuffer || ArrayBuffer.isView(val);\n    const result = {};\n    for (const source of sources) {\n        if (!source)\n            continue;\n        for (const key in source) {\n            const value = source[key];\n            if (value === undefined)\n                continue;\n            if (Array.isArray(value)) {\n                // preserve array reference, including unions like AuthenticatorTransport[]\n                result[key] = value;\n            }\n            else if (isArrayBufferLike(value)) {\n                result[key] = value;\n            }\n            else if (isObject(value)) {\n                const existing = result[key];\n                if (isObject(existing)) {\n                    result[key] = deepMerge(existing, value);\n                }\n                else {\n                    result[key] = deepMerge(value);\n                }\n            }\n            else {\n                result[key] = value;\n            }\n        }\n    }\n    return result;\n}\n/**\n * Merges WebAuthn credential creation options with overrides.\n * Sets sensible defaults for authenticator selection and extensions.\n *\n * @param {PublicKeyCredentialCreationOptionsFuture} baseOptions - The base options from the server\n * @param {PublicKeyCredentialCreationOptionsFuture} overrides - Optional overrides to apply\n * @param {string} friendlyName - Optional friendly name for the credential\n * @returns {PublicKeyCredentialCreationOptionsFuture} Merged credential creation options\n * @see {@link https://w3c.github.io/webauthn/#dictdef-authenticatorselectioncriteria W3C WebAuthn Spec - AuthenticatorSelectionCriteria}\n */\nexport function mergeCredentialCreationOptions(baseOptions, overrides) {\n    return deepMerge(DEFAULT_CREATION_OPTIONS, baseOptions, overrides || {});\n}\n/**\n * Merges WebAuthn credential request options with overrides.\n * Sets sensible defaults for user verification and hints.\n *\n * @param {PublicKeyCredentialRequestOptionsFuture} baseOptions - The base options from the server\n * @param {PublicKeyCredentialRequestOptionsFuture} overrides - Optional overrides to apply\n * @returns {PublicKeyCredentialRequestOptionsFuture} Merged credential request options\n * @see {@link https://w3c.github.io/webauthn/#dictdef-publickeycredentialrequestoptions W3C WebAuthn Spec - PublicKeyCredentialRequestOptions}\n */\nexport function mergeCredentialRequestOptions(baseOptions, overrides) {\n    return deepMerge(DEFAULT_REQUEST_OPTIONS, baseOptions, overrides || {});\n}\n/**\n * WebAuthn API wrapper for Supabase Auth.\n * Provides methods for enrolling, challenging, verifying, authenticating, and registering WebAuthn credentials.\n *\n * @experimental This API is experimental and may change in future releases\n * @see {@link https://w3c.github.io/webauthn/ W3C WebAuthn Specification}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API MDN - Web Authentication API}\n */\nexport class WebAuthnApi {\n    constructor(client) {\n        this.client = client;\n        // Bind all methods so they can be destructured\n        this.enroll = this._enroll.bind(this);\n        this.challenge = this._challenge.bind(this);\n        this.verify = this._verify.bind(this);\n        this.authenticate = this._authenticate.bind(this);\n        this.register = this._register.bind(this);\n    }\n    /**\n     * Enroll a new WebAuthn factor.\n     * Creates an unverified WebAuthn factor that must be verified with a credential.\n     *\n     * @experimental This method is experimental and may change in future releases\n     * @param {Omit<MFAEnrollWebauthnParams, 'factorType'>} params - Enrollment parameters (friendlyName required)\n     * @returns {Promise<AuthMFAEnrollWebauthnResponse>} Enrolled factor details or error\n     * @see {@link https://w3c.github.io/webauthn/#sctn-registering-a-new-credential W3C WebAuthn Spec - Registering a New Credential}\n     */\n    async _enroll(params) {\n        return this.client.mfa.enroll(Object.assign(Object.assign({}, params), { factorType: 'webauthn' }));\n    }\n    /**\n     * Challenge for WebAuthn credential creation or authentication.\n     * Combines server challenge with browser credential operations.\n     * Handles both registration (create) and authentication (request) flows.\n     *\n     * @experimental This method is experimental and may change in future releases\n     * @param {MFAChallengeWebauthnParams & { friendlyName?: string; signal?: AbortSignal }} params - Challenge parameters including factorId\n     * @param {Object} overrides - Allows you to override the parameters passed to navigator.credentials\n     * @param {PublicKeyCredentialCreationOptionsFuture} overrides.create - Override options for credential creation\n     * @param {PublicKeyCredentialRequestOptionsFuture} overrides.request - Override options for credential request\n     * @returns {Promise<RequestResult>} Challenge response with credential or error\n     * @see {@link https://w3c.github.io/webauthn/#sctn-credential-creation W3C WebAuthn Spec - Credential Creation}\n     * @see {@link https://w3c.github.io/webauthn/#sctn-verifying-assertion W3C WebAuthn Spec - Verifying Assertion}\n     */\n    async _challenge({ factorId, webauthn, friendlyName, signal, }, overrides) {\n        var _a;\n        try {\n            // Get challenge from server using the client's MFA methods\n            const { data: challengeResponse, error: challengeError } = await this.client.mfa.challenge({\n                factorId,\n                webauthn,\n            });\n            if (!challengeResponse) {\n                return { data: null, error: challengeError };\n            }\n            const abortSignal = signal !== null && signal !== void 0 ? signal : webAuthnAbortService.createNewAbortSignal();\n            /** webauthn will fail if either of the name/displayname are blank */\n            if (challengeResponse.webauthn.type === 'create') {\n                const { user } = challengeResponse.webauthn.credential_options.publicKey;\n                if (!user.name) {\n                    // Preserve original format: use friendlyName if provided, otherwise fetch fallback\n                    // This maintains backward compatibility with the ${user.id}:${name} format\n                    const nameToUse = friendlyName;\n                    if (!nameToUse) {\n                        // Only fetch user data if friendlyName is not provided (bug fix for null friendlyName)\n                        const currentUser = await this.client.getUser();\n                        const userData = currentUser.data.user;\n                        const fallbackName = ((_a = userData === null || userData === void 0 ? void 0 : userData.user_metadata) === null || _a === void 0 ? void 0 : _a.name) || (userData === null || userData === void 0 ? void 0 : userData.email) || (userData === null || userData === void 0 ? void 0 : userData.id) || 'User';\n                        user.name = `${user.id}:${fallbackName}`;\n                    }\n                    else {\n                        user.name = `${user.id}:${nameToUse}`;\n                    }\n                }\n                if (!user.displayName) {\n                    user.displayName = user.name;\n                }\n            }\n            switch (challengeResponse.webauthn.type) {\n                case 'create': {\n                    const options = mergeCredentialCreationOptions(challengeResponse.webauthn.credential_options.publicKey, overrides === null || overrides === void 0 ? void 0 : overrides.create);\n                    const { data, error } = await createCredential({\n                        publicKey: options,\n                        signal: abortSignal,\n                    });\n                    if (data) {\n                        return {\n                            data: {\n                                factorId,\n                                challengeId: challengeResponse.id,\n                                webauthn: {\n                                    type: challengeResponse.webauthn.type,\n                                    credential_response: data,\n                                },\n                            },\n                            error: null,\n                        };\n                    }\n                    return { data: null, error };\n                }\n                case 'request': {\n                    const options = mergeCredentialRequestOptions(challengeResponse.webauthn.credential_options.publicKey, overrides === null || overrides === void 0 ? void 0 : overrides.request);\n                    const { data, error } = await getCredential(Object.assign(Object.assign({}, challengeResponse.webauthn.credential_options), { publicKey: options, signal: abortSignal }));\n                    if (data) {\n                        return {\n                            data: {\n                                factorId,\n                                challengeId: challengeResponse.id,\n                                webauthn: {\n                                    type: challengeResponse.webauthn.type,\n                                    credential_response: data,\n                                },\n                            },\n                            error: null,\n                        };\n                    }\n                    return { data: null, error };\n                }\n            }\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            return {\n                data: null,\n                error: new AuthUnknownError('Unexpected error in challenge', error),\n            };\n        }\n    }\n    /**\n     * Verify a WebAuthn credential with the server.\n     * Completes the WebAuthn ceremony by sending the credential to the server for verification.\n     *\n     * @experimental This method is experimental and may change in future releases\n     * @param {Object} params - Verification parameters\n     * @param {string} params.challengeId - ID of the challenge being verified\n     * @param {string} params.factorId - ID of the WebAuthn factor\n     * @param {MFAVerifyWebauthnParams<T>['webauthn']} params.webauthn - WebAuthn credential response\n     * @returns {Promise<AuthMFAVerifyResponse>} Verification result with session or error\n     * @see {@link https://w3c.github.io/webauthn/#sctn-verifying-assertion W3C WebAuthn Spec - Verifying an Authentication Assertion}\n     * */\n    async _verify({ challengeId, factorId, webauthn, }) {\n        return this.client.mfa.verify({\n            factorId,\n            challengeId,\n            webauthn: webauthn,\n        });\n    }\n    /**\n     * Complete WebAuthn authentication flow.\n     * Performs challenge and verification in a single operation for existing credentials.\n     *\n     * @experimental This method is experimental and may change in future releases\n     * @param {Object} params - Authentication parameters\n     * @param {string} params.factorId - ID of the WebAuthn factor to authenticate with\n     * @param {Object} params.webauthn - WebAuthn configuration\n     * @param {string} params.webauthn.rpId - Relying Party ID (defaults to current hostname)\n     * @param {string[]} params.webauthn.rpOrigins - Allowed origins (defaults to current origin)\n     * @param {AbortSignal} params.webauthn.signal - Optional abort signal\n     * @param {PublicKeyCredentialRequestOptionsFuture} overrides - Override options for navigator.credentials.get\n     * @returns {Promise<RequestResult<AuthMFAVerifyResponseData, WebAuthnError | AuthError>>} Authentication result\n     * @see {@link https://w3c.github.io/webauthn/#sctn-authentication W3C WebAuthn Spec - Authentication Ceremony}\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialRequestOptions MDN - PublicKeyCredentialRequestOptions}\n     */\n    async _authenticate({ factorId, webauthn: { rpId = typeof window !== 'undefined' ? window.location.hostname : undefined, rpOrigins = typeof window !== 'undefined' ? [window.location.origin] : undefined, signal, } = {}, }, overrides) {\n        if (!rpId) {\n            return {\n                data: null,\n                error: new AuthError('rpId is required for WebAuthn authentication'),\n            };\n        }\n        try {\n            if (!browserSupportsWebAuthn()) {\n                return {\n                    data: null,\n                    error: new AuthUnknownError('Browser does not support WebAuthn', null),\n                };\n            }\n            // Get challenge and credential\n            const { data: challengeResponse, error: challengeError } = await this.challenge({\n                factorId,\n                webauthn: { rpId, rpOrigins },\n                signal,\n            }, { request: overrides });\n            if (!challengeResponse) {\n                return { data: null, error: challengeError };\n            }\n            const { webauthn } = challengeResponse;\n            // Verify credential\n            return this._verify({\n                factorId,\n                challengeId: challengeResponse.challengeId,\n                webauthn: {\n                    type: webauthn.type,\n                    rpId,\n                    rpOrigins,\n                    credential_response: webauthn.credential_response,\n                },\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            return {\n                data: null,\n                error: new AuthUnknownError('Unexpected error in authenticate', error),\n            };\n        }\n    }\n    /**\n     * Complete WebAuthn registration flow.\n     * Performs enrollment, challenge, and verification in a single operation for new credentials.\n     *\n     * @experimental This method is experimental and may change in future releases\n     * @param {Object} params - Registration parameters\n     * @param {string} params.friendlyName - User-friendly name for the credential\n     * @param {string} params.rpId - Relying Party ID (defaults to current hostname)\n     * @param {string[]} params.rpOrigins - Allowed origins (defaults to current origin)\n     * @param {AbortSignal} params.signal - Optional abort signal\n     * @param {PublicKeyCredentialCreationOptionsFuture} overrides - Override options for navigator.credentials.create\n     * @returns {Promise<RequestResult<AuthMFAVerifyResponseData, WebAuthnError | AuthError>>} Registration result\n     * @see {@link https://w3c.github.io/webauthn/#sctn-registering-a-new-credential W3C WebAuthn Spec - Registration Ceremony}\n     * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialCreationOptions MDN - PublicKeyCredentialCreationOptions}\n     */\n    async _register({ friendlyName, webauthn: { rpId = typeof window !== 'undefined' ? window.location.hostname : undefined, rpOrigins = typeof window !== 'undefined' ? [window.location.origin] : undefined, signal, } = {}, }, overrides) {\n        if (!rpId) {\n            return {\n                data: null,\n                error: new AuthError('rpId is required for WebAuthn registration'),\n            };\n        }\n        try {\n            if (!browserSupportsWebAuthn()) {\n                return {\n                    data: null,\n                    error: new AuthUnknownError('Browser does not support WebAuthn', null),\n                };\n            }\n            // Enroll factor\n            const { data: factor, error: enrollError } = await this._enroll({\n                friendlyName,\n            });\n            if (!factor) {\n                await this.client.mfa\n                    .listFactors()\n                    .then((factors) => {\n                    var _a;\n                    return (_a = factors.data) === null || _a === void 0 ? void 0 : _a.all.find((v) => v.factor_type === 'webauthn' &&\n                        v.friendly_name === friendlyName &&\n                        v.status !== 'unverified');\n                })\n                    .then((factor) => (factor ? this.client.mfa.unenroll({ factorId: factor === null || factor === void 0 ? void 0 : factor.id }) : void 0));\n                return { data: null, error: enrollError };\n            }\n            // Get challenge and create credential\n            const { data: challengeResponse, error: challengeError } = await this._challenge({\n                factorId: factor.id,\n                friendlyName: factor.friendly_name,\n                webauthn: { rpId, rpOrigins },\n                signal,\n            }, {\n                create: overrides,\n            });\n            if (!challengeResponse) {\n                return { data: null, error: challengeError };\n            }\n            return this._verify({\n                factorId: factor.id,\n                challengeId: challengeResponse.challengeId,\n                webauthn: {\n                    rpId,\n                    rpOrigins,\n                    type: challengeResponse.webauthn.type,\n                    credential_response: challengeResponse.webauthn.credential_response,\n                },\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return { data: null, error };\n            }\n            return {\n                data: null,\n                error: new AuthUnknownError('Unexpected error in register', error),\n            };\n        }\n    }\n}\n//# sourceMappingURL=webauthn.js.map","import GoTrueAdminApi from './GoTrueAdminApi';\nimport { AUTO_REFRESH_TICK_DURATION_MS, AUTO_REFRESH_TICK_THRESHOLD, DEFAULT_HEADERS, EXPIRY_MARGIN_MS, GOTRUE_URL, JWKS_TTL, PKCE_FLOW_ID_PARAM, REFRESH_FAILURE_COOLDOWN_MS, STORAGE_KEY, } from './lib/constants';\nimport { AuthImplicitGrantRedirectError, AuthInvalidCredentialsError, AuthInvalidJwtError, AuthInvalidTokenResponseError, AuthPKCECodeVerifierMissingError, AuthPKCEGrantCodeExchangeError, AuthRefreshDiscardedError, AuthSessionMissingError, AuthUnknownError, isAuthApiError, isAuthError, isAuthImplicitGrantRedirectError, isAuthRefreshDiscardedError, isAuthRetryableFetchError, isAuthSessionMissingError, } from './lib/errors';\nimport { _request, _sessionResponse, _sessionResponsePassword, _ssoResponse, _userResponse, } from './lib/fetch';\nimport { appendFlowIdToRedirectTo, assertPasskeyExperimentalEnabled, decodeJWT, deepClone, Deferred, generateCallbackId, getAlgorithm, getCodeChallengeAndMethod, getItemAsync, insecureUserWarningProxy, isBrowser, parseParametersFromURL, pkceVerifierSlotKey, removeAllPKCEVerifiers, removeItemAsync, removePKCEVerifier, resolveFetch, retrievePKCEVerifier, retryable, setItemAsync, sleep, supportsLocalStorage, userNotAvailableProxy, validateExp, validatePKCEFlowId, } from './lib/helpers';\nimport { memoryLocalStorageAdapter } from './lib/local-storage';\nimport { LockAcquireTimeoutError } from './lib/locks';\nimport { polyfillGlobalThis } from './lib/polyfills';\nimport { version } from './lib/version';\nimport { bytesToBase64URL, stringToUint8Array } from './lib/base64url';\nimport { createSiweMessage, fromHex, getAddress, toHex, } from './lib/web3/ethereum';\nimport { createCredential, deserializeCredentialCreationOptions, deserializeCredentialRequestOptions, getCredential, serializeCredentialCreationResponse, serializeCredentialRequestResponse, browserSupportsWebAuthn, webAuthnAbortService, WebAuthnApi, } from './lib/webauthn';\npolyfillGlobalThis(); // Make \"globalThis\" available\nconst DEFAULT_OPTIONS = {\n    url: GOTRUE_URL,\n    storageKey: STORAGE_KEY,\n    autoRefreshToken: true,\n    persistSession: true,\n    detectSessionInUrl: true,\n    headers: DEFAULT_HEADERS,\n    flowType: 'implicit',\n    debug: false,\n    hasCustomAuthorizationHeader: false,\n    throwOnError: false,\n    lockAcquireTimeout: 5000, // 5 seconds. Only used when a custom `lock` is supplied. TODO(v3): remove.\n    skipAutoInitialize: false,\n    experimental: {},\n};\n/**\n * No-op lock used internally as a placeholder. Kept so older test setups that\n * inject this exact reference do not break; new code never sees it because\n * `this.lock` stays `null` when no custom lock is supplied (lockless path).\n * TODO(v3): remove with the legacy lock path.\n */\nasync function lockNoOp(name, acquireTimeout, fn) {\n    return await fn();\n}\n/**\n * Caches JWKS values for all clients created in the same environment. This is\n * especially useful for shared-memory execution environments such as Vercel's\n * Fluid Compute, AWS Lambda or Supabase's Edge Functions. Regardless of how\n * many clients are created, if they share the same storage key they will use\n * the same JWKS cache, significantly speeding up getClaims() with asymmetric\n * JWTs.\n */\nconst GLOBAL_JWKS = {};\nclass GoTrueClient {\n    /**\n     * The JWKS used for verifying asymmetric JWTs\n     */\n    get jwks() {\n        var _a, _b;\n        return (_b = (_a = GLOBAL_JWKS[this.storageKey]) === null || _a === void 0 ? void 0 : _a.jwks) !== null && _b !== void 0 ? _b : { keys: [] };\n    }\n    set jwks(value) {\n        GLOBAL_JWKS[this.storageKey] = Object.assign(Object.assign({}, GLOBAL_JWKS[this.storageKey]), { jwks: value });\n    }\n    get jwks_cached_at() {\n        var _a, _b;\n        return (_b = (_a = GLOBAL_JWKS[this.storageKey]) === null || _a === void 0 ? void 0 : _a.cachedAt) !== null && _b !== void 0 ? _b : Number.MIN_SAFE_INTEGER;\n    }\n    set jwks_cached_at(value) {\n        GLOBAL_JWKS[this.storageKey] = Object.assign(Object.assign({}, GLOBAL_JWKS[this.storageKey]), { cachedAt: value });\n    }\n    /**\n     * Create a new client for use in the browser.\n     *\n     * @example Using supabase-js (recommended)\n     * ```ts\n     * import { createClient } from '@supabase/supabase-js'\n     *\n     * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n     * const { data, error } = await supabase.auth.getUser()\n     * ```\n     *\n     * @example Standalone import for bundle-sensitive environments\n     * ```ts\n     * import { GoTrueClient } from '@supabase/auth-js'\n     *\n     * const auth = new GoTrueClient({\n     *   url: 'https://xyzcompany.supabase.co/auth/v1',\n     *   headers: { apikey: 'your-publishable-key' },\n     *   storageKey: 'supabase-auth',\n     * })\n     * ```\n     */\n    constructor(options) {\n        var _a, _b, _c;\n        /**\n         * @experimental\n         */\n        this.userStorage = null;\n        this.memoryStorage = null;\n        this.stateChangeEmitters = new Map();\n        this.autoRefreshTicker = null;\n        this.autoRefreshTickTimeout = null;\n        this.visibilityChangedCallback = null;\n        this.refreshingDeferred = null;\n        /**\n         * Cache of the most recent refresh failure, keyed by the refresh token\n         * that failed. Serial callers passing the *same* token within\n         * `REFRESH_FAILURE_COOLDOWN_MS` (including subsequent auto-refresh ticks)\n         * receive this cached result instead of firing another `/token` request.\n         * Callers passing a *different* token (token rotation pickup, explicit\n         * `setSession`/`refreshSession({ refresh_token })`, multi-account switch)\n         * bypass the cache and attempt a fresh refresh as they should.\n         * Cleared on any successful refresh (locally or via BroadcastChannel from\n         * another tab) and on `_removeSession`.\n         *\n         * Pairs with `refreshingDeferred`: concurrent callers share the in-flight\n         * promise, serial callers within the cooldown share the failure result.\n         */\n        this.lastRefreshFailure = null;\n        /**\n         * Monotonic counter incremented at the top of `_removeSession`, before any\n         * `await`. The commit guard inside `_callRefreshToken` captures this value\n         * before `_saveSession` and re-checks it after, so a `signOut` that\n         * interleaves inside `_saveSession`'s storage-write awaits is still caught\n         * (the post-fetch storage snapshot alone misses that window).\n         */\n        this._sessionRemovalEpoch = 0;\n        /**\n         * Keeps track of the async client initialization.\n         * When null or not yet resolved the auth state is `unknown`\n         * Once resolved the auth state is known and it's safe to call any further client methods.\n         * Keep extra care to never reject or throw uncaught errors\n         */\n        this.initializePromise = null;\n        /**\n         * Non-null only while `initialize()` is running. While open,\n         * `_notifyAllSubscribers` enqueues init-chain notifications (those fired with\n         * `broadcast = true`, i.e. from `_recoverAndRefresh`) into this array instead\n         * of firing directly, so that `initializePromise` is guaranteed to be\n         * resolved before any subscriber callback runs. Callbacks that call\n         * `getSession()` / `getUser()` etc. would otherwise deadlock because those\n         * methods await `initializePromise`. Notifications from the incoming\n         * BroadcastChannel handler (`broadcast = false`) are not enqueued — they fire\n         * immediately. Flushed (in order) by `initialize()` after `initializePromise`\n         * settles.\n         */\n        this._pendingInitNotifications = null;\n        this.detectSessionInUrl = true;\n        this.hasCustomAuthorizationHeader = false;\n        this.suppressGetSessionWarning = false;\n        /**\n         * Custom lock function passed via `settings.lock`. When non-null, every auth\n         * operation runs inside `_acquireLock`. When null (the default), the client\n         * uses its lockless coordination (refresh single-flight + commit guard).\n         * TODO(v3): remove along with the legacy lock path.\n         */\n        this.lock = null;\n        this.lockAcquired = false;\n        this.pendingInLock = [];\n        /**\n         * Used to broadcast state change events to other tabs listening.\n         */\n        this.broadcastChannel = null;\n        this.logger = console.log;\n        const settings = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);\n        this.storageKey = settings.storageKey;\n        this.instanceID = (_a = GoTrueClient.nextInstanceID[this.storageKey]) !== null && _a !== void 0 ? _a : 0;\n        GoTrueClient.nextInstanceID[this.storageKey] = this.instanceID + 1;\n        this.logDebugMessages = !!settings.debug;\n        if (typeof settings.debug === 'function') {\n            this.logger = settings.debug;\n        }\n        if (this.instanceID > 0 && isBrowser()) {\n            const message = `${this._logPrefix()} Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.`;\n            console.warn(message);\n            if (this.logDebugMessages) {\n                console.trace(message);\n            }\n        }\n        this.persistSession = settings.persistSession;\n        this.autoRefreshToken = settings.autoRefreshToken;\n        this.experimental = (_b = settings.experimental) !== null && _b !== void 0 ? _b : {};\n        this.admin = new GoTrueAdminApi({\n            url: settings.url,\n            headers: settings.headers,\n            fetch: settings.fetch,\n            experimental: this.experimental,\n        });\n        this.url = settings.url;\n        this.headers = settings.headers;\n        this.fetch = resolveFetch(settings.fetch);\n        this.detectSessionInUrl = settings.detectSessionInUrl;\n        this.flowType = settings.flowType;\n        this.hasCustomAuthorizationHeader = settings.hasCustomAuthorizationHeader;\n        this.throwOnError = settings.throwOnError;\n        // Always wire `lockAcquireTimeout` even on the lockless path: consumers\n        // (including supabase-js tests) read it off the client to verify option\n        // flow-through.\n        this.lockAcquireTimeout = settings.lockAcquireTimeout;\n        // TODO(v3): remove. Legacy opt-in path preserved for backwards\n        // compatibility with callers passing a custom `lock` (typically React\n        // Native `processLock` or Node multi-process setups). When `settings.lock`\n        // is null the client uses its lockless coordination — no `navigator.locks`\n        // by default, no implicit `processLock`.\n        if (settings.lock != null) {\n            this.lock = settings.lock;\n        }\n        if (!this.jwks) {\n            this.jwks = { keys: [] };\n            this.jwks_cached_at = Number.MIN_SAFE_INTEGER;\n        }\n        this.mfa = {\n            verify: this._verify.bind(this),\n            enroll: this._enroll.bind(this),\n            unenroll: this._unenroll.bind(this),\n            challenge: this._challenge.bind(this),\n            listFactors: this._listFactors.bind(this),\n            challengeAndVerify: this._challengeAndVerify.bind(this),\n            getAuthenticatorAssuranceLevel: this._getAuthenticatorAssuranceLevel.bind(this),\n            webauthn: new WebAuthnApi(this),\n        };\n        this.oauth = {\n            getAuthorizationDetails: this._getAuthorizationDetails.bind(this),\n            approveAuthorization: this._approveAuthorization.bind(this),\n            denyAuthorization: this._denyAuthorization.bind(this),\n            listGrants: this._listOAuthGrants.bind(this),\n            revokeGrant: this._revokeOAuthGrant.bind(this),\n        };\n        this.passkey = {\n            startRegistration: this._startPasskeyRegistration.bind(this),\n            verifyRegistration: this._verifyPasskeyRegistration.bind(this),\n            startAuthentication: this._startPasskeyAuthentication.bind(this),\n            verifyAuthentication: this._verifyPasskeyAuthentication.bind(this),\n            list: this._listPasskeys.bind(this),\n            update: this._updatePasskey.bind(this),\n            delete: this._deletePasskey.bind(this),\n        };\n        if (this.persistSession) {\n            if (settings.storage) {\n                this.storage = settings.storage;\n            }\n            else {\n                if (supportsLocalStorage()) {\n                    this.storage = globalThis.localStorage;\n                }\n                else {\n                    this.memoryStorage = {};\n                    this.storage = memoryLocalStorageAdapter(this.memoryStorage);\n                }\n            }\n            if (settings.userStorage) {\n                this.userStorage = settings.userStorage;\n            }\n        }\n        else {\n            this.memoryStorage = {};\n            this.storage = memoryLocalStorageAdapter(this.memoryStorage);\n        }\n        if (isBrowser() && globalThis.BroadcastChannel && this.persistSession && this.storageKey) {\n            try {\n                this.broadcastChannel = new globalThis.BroadcastChannel(this.storageKey);\n            }\n            catch (e) {\n                console.error('Failed to create a new BroadcastChannel, multi-tab state changes will not be available', e);\n            }\n            (_c = this.broadcastChannel) === null || _c === void 0 ? void 0 : _c.addEventListener('message', async (event) => {\n                this._debug('received broadcast notification from other tab or client', event);\n                // Another tab successfully refreshed or signed in — any cached\n                // failure in this tab is stale and should not block the next\n                // refresh attempt.\n                if (event.data.event === 'TOKEN_REFRESHED' || event.data.event === 'SIGNED_IN') {\n                    this.lastRefreshFailure = null;\n                }\n                try {\n                    await this._notifyAllSubscribers(event.data.event, event.data.session, false); // broadcast = false so we don't get an endless loop of messages\n                }\n                catch (error) {\n                    this._debug('#broadcastChannel', 'error', error);\n                }\n            });\n        }\n        // Only auto-initialize if not explicitly disabled. Skipped in SSR contexts\n        // where initialization timing must be controlled. All public methods have\n        // lazy initialization, so the client remains fully functional.\n        if (!settings.skipAutoInitialize) {\n            this.initialize().catch((error) => {\n                this._debug('#initialize()', 'error', error);\n            });\n        }\n    }\n    /**\n     * Returns whether error throwing mode is enabled for this client.\n     */\n    isThrowOnErrorEnabled() {\n        return this.throwOnError;\n    }\n    /**\n     * Centralizes return handling with optional error throwing. When `throwOnError` is enabled\n     * and the provided result contains a non-nullish error, the error is thrown instead of\n     * being returned. This ensures consistent behavior across all public API methods.\n     */\n    _returnResult(result) {\n        if (this.throwOnError && result && result.error) {\n            throw result.error;\n        }\n        return result;\n    }\n    _logPrefix() {\n        return ('GoTrueClient@' +\n            `${this.storageKey}:${this.instanceID} (${version}) ${new Date().toISOString()}`);\n    }\n    _debug(...args) {\n        if (this.logDebugMessages) {\n            this.logger(this._logPrefix(), ...args);\n        }\n        return this;\n    }\n    /**\n     * Initialize the auth client by loading the session from storage or\n     * detecting it from the URL after an OAuth, magic-link, or password-recovery\n     * redirect.\n     *\n     * **Most callers do not need to invoke this directly.** The client calls it\n     * automatically during construction, and to react to sign-in events (including\n     * post-redirect events) you should subscribe to `onAuthStateChange` rather\n     * than awaiting `initialize()`.\n     *\n     * You only need to call it manually when you have opted out of the automatic\n     * call by passing `skipAutoInitialize: true` — for example, in an SSR context\n     * where you need to control initialization timing. In that case, awaiting\n     * `initialize()` returns the resolved session result (or any error encountered\n     * while detecting it from the URL).\n     *\n     * @category Auth\n     */\n    async initialize() {\n        var _a;\n        if (this.initializePromise) {\n            return await this.initializePromise;\n        }\n        // Open the notification queue before _initialize() runs so that every\n        // _notifyAllSubscribers call inside the init chain enqueues instead of\n        // firing. Without this, a callback receiving SIGNED_IN (or TOKEN_REFRESHED\n        // / SIGNED_OUT) during _recoverAndRefresh would deadlock if it called\n        // getSession() / getUser() — those methods await initializePromise, which\n        // can only resolve after the callback returns, which can only return after\n        // getSession() resolves. The queue is flushed below after initializePromise\n        // has settled, so callbacks run with a fully resolved initializePromise.\n        this._pendingInitNotifications = [];\n        this.initializePromise = (async () => {\n            if (this.lock != null) {\n                // TODO(v3): remove legacy lock path\n                return await this._acquireLock(this.lockAcquireTimeout, async () => {\n                    return await this._initialize();\n                });\n            }\n            return await this._initialize();\n        })();\n        const result = await this.initializePromise;\n        // initializePromise is now resolved — flush queued notifications in order.\n        // Callbacks can safely call getSession() / getUser() / signOut() etc.\n        const queue = (_a = this._pendingInitNotifications) !== null && _a !== void 0 ? _a : [];\n        this._pendingInitNotifications = null;\n        for (const n of queue) {\n            await this._notifyAllSubscribers(n.event, n.session, n.broadcast);\n        }\n        return result;\n    }\n    /**\n     * IMPORTANT:\n     * 1. Never throw in this method, as it is called from the constructor\n     * 2. Never return a session from this method as it would be cached over\n     *    the whole lifetime of the client\n     */\n    async _initialize() {\n        var _a;\n        try {\n            let params = {};\n            let callbackUrlType = 'none';\n            if (isBrowser()) {\n                params = parseParametersFromURL(window.location.href);\n                if (this._isImplicitGrantCallback(params)) {\n                    callbackUrlType = 'implicit';\n                }\n                else if (await this._isPKCECallback(params)) {\n                    callbackUrlType = 'pkce';\n                }\n            }\n            /**\n             * Attempt to get the session from the URL only if these conditions are fulfilled\n             *\n             * Note: If the URL isn't one of the callback url types (implicit or pkce),\n             * then there could be an existing session so we don't want to prematurely remove it\n             */\n            if (isBrowser() && this.detectSessionInUrl && callbackUrlType !== 'none') {\n                const { data, error } = await this._getSessionFromURL(params, callbackUrlType);\n                if (error) {\n                    this._debug('#_initialize()', 'error detecting session from URL', error);\n                    if (isAuthImplicitGrantRedirectError(error)) {\n                        const errorCode = (_a = error.details) === null || _a === void 0 ? void 0 : _a.code;\n                        if (errorCode === 'identity_already_exists' ||\n                            errorCode === 'identity_not_found' ||\n                            errorCode === 'single_identity_not_deletable') {\n                            return { error };\n                        }\n                    }\n                    // Don't remove existing session on URL login failure.\n                    // A failed attempt (e.g. reused magic link) shouldn't invalidate a valid session.\n                    return { error };\n                }\n                const { session, redirectType } = data;\n                this._debug('#_initialize()', 'detected session in URL', session, 'redirect type', redirectType);\n                await this._saveSession(session);\n                setTimeout(async () => {\n                    if (redirectType === 'recovery') {\n                        await this._notifyAllSubscribers('PASSWORD_RECOVERY', session);\n                    }\n                    else {\n                        await this._notifyAllSubscribers('SIGNED_IN', session);\n                    }\n                }, 0);\n                return { error: null };\n            }\n            // no login attempt via callback url try to recover session from storage\n            await this._recoverAndRefresh();\n            return { error: null };\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ error });\n            }\n            return this._returnResult({\n                error: new AuthUnknownError('Unexpected error during initialization', error),\n            });\n        }\n        finally {\n            await this._handleVisibilityChange();\n            this._debug('#_initialize()', 'end');\n        }\n    }\n    /**\n     * Creates a new anonymous user.\n     *\n     * @returns A session where the is_anonymous claim in the access token JWT set to true\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - Returns an anonymous user\n     * - It is recommended to set up captcha for anonymous sign-ins to prevent abuse. You can pass in the captcha token in the `options` param.\n     *\n     * @example Create an anonymous user\n     * ```js\n     * const { data, error } = await supabase.auth.signInAnonymously({\n     *   options: {\n     *     captchaToken\n     *   }\n     * });\n     * ```\n     *\n     * @exampleResponse Create an anonymous user\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"user\": {\n     *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"aud\": \"authenticated\",\n     *       \"role\": \"authenticated\",\n     *       \"email\": \"\",\n     *       \"phone\": \"\",\n     *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *       \"app_metadata\": {},\n     *       \"user_metadata\": {},\n     *       \"identities\": [],\n     *       \"created_at\": \"2024-01-01T00:00:00Z\",\n     *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *       \"is_anonymous\": true\n     *     },\n     *     \"session\": {\n     *       \"access_token\": \"<ACCESS_TOKEN>\",\n     *       \"token_type\": \"bearer\",\n     *       \"expires_in\": 3600,\n     *       \"expires_at\": 1700000000,\n     *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n     *       \"user\": {\n     *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *         \"aud\": \"authenticated\",\n     *         \"role\": \"authenticated\",\n     *         \"email\": \"\",\n     *         \"phone\": \"\",\n     *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *         \"app_metadata\": {},\n     *         \"user_metadata\": {},\n     *         \"identities\": [],\n     *         \"created_at\": \"2024-01-01T00:00:00Z\",\n     *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *         \"is_anonymous\": true\n     *       }\n     *     }\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     *\n     * @example Create an anonymous user with custom user metadata\n     * ```js\n     * const { data, error } = await supabase.auth.signInAnonymously({\n     *   options: {\n     *     data\n     *   }\n     * })\n     * ```\n     */\n    async signInAnonymously(credentials) {\n        var _a, _b, _c;\n        try {\n            const res = await _request(this.fetch, 'POST', `${this.url}/signup`, {\n                headers: this.headers,\n                body: {\n                    data: (_b = (_a = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _a === void 0 ? void 0 : _a.data) !== null && _b !== void 0 ? _b : {},\n                    gotrue_meta_security: { captcha_token: (_c = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _c === void 0 ? void 0 : _c.captchaToken },\n                },\n                xform: _sessionResponse,\n            });\n            const { data, error } = res;\n            if (error || !data) {\n                return this._returnResult({ data: { user: null, session: null }, error: error });\n            }\n            const session = data.session;\n            const user = data.user;\n            if (data.session) {\n                await this._saveSession(data.session);\n                await this._notifyAllSubscribers('SIGNED_IN', session);\n            }\n            return this._returnResult({ data: { user, session }, error: null });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Creates a new user.\n     *\n     * Be aware that if a user account exists in the system you may get back an\n     * error message that attempts to hide this information from the user.\n     * This method has support for PKCE via email signups. The PKCE flow cannot be used when autoconfirm is enabled.\n     *\n     * @returns A logged-in session if the server has \"autoconfirm\" ON\n     * @returns A user if the server has \"autoconfirm\" OFF\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - By default, the user needs to verify their email address before logging in. To turn this off, disable **Confirm email** in [your project](/dashboard/project/_/auth/providers).\n     * - **Confirm email** determines if users need to confirm their email address after signing up.\n     *   - If **Confirm email** is enabled, a `user` is returned but `session` is null.\n     *   - If **Confirm email** is disabled, both a `user` and a `session` are returned.\n     * - When the user confirms their email address, they are redirected to the [`SITE_URL`](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) by default. You can modify your `SITE_URL` or add additional redirect URLs in [your project](/dashboard/project/_/auth/url-configuration).\n     * - If signUp() is called for an existing confirmed user:\n     *   - When both **Confirm email** and **Confirm phone** (even when phone provider is disabled) are enabled in [your project](/dashboard/project/_/auth/providers), an obfuscated/fake user object is returned.\n     *   - When either **Confirm email** or **Confirm phone** (even when phone provider is disabled) is disabled, the error message, `User already registered` is returned.\n     * - To fetch the currently logged-in user, refer to [`getUser()`](/docs/reference/javascript/auth-getuser).\n     *\n     * @example Sign up with an email and password\n     * ```js\n     * const { data, error } = await supabase.auth.signUp({\n     *   email: 'example@email.com',\n     *   password: 'example-password',\n     * })\n     * ```\n     *\n     * @exampleResponse Sign up with an email and password\n     * ```json\n     * // Some fields may be null if \"confirm email\" is enabled.\n     * {\n     *   \"data\": {\n     *     \"user\": {\n     *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"aud\": \"authenticated\",\n     *       \"role\": \"authenticated\",\n     *       \"email\": \"example@email.com\",\n     *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"phone\": \"\",\n     *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *       \"app_metadata\": {\n     *         \"provider\": \"email\",\n     *         \"providers\": [\n     *           \"email\"\n     *         ]\n     *       },\n     *       \"user_metadata\": {},\n     *       \"identities\": [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"identity_data\": {\n     *             \"email\": \"example@email.com\",\n     *             \"email_verified\": false,\n     *             \"phone_verified\": false,\n     *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *           },\n     *           \"provider\": \"email\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"example@email.com\"\n     *         }\n     *       ],\n     *       \"created_at\": \"2024-01-01T00:00:00Z\",\n     *       \"updated_at\": \"2024-01-01T00:00:00Z\"\n     *     },\n     *     \"session\": {\n     *       \"access_token\": \"<ACCESS_TOKEN>\",\n     *       \"token_type\": \"bearer\",\n     *       \"expires_in\": 3600,\n     *       \"expires_at\": 1700000000,\n     *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n     *       \"user\": {\n     *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *         \"aud\": \"authenticated\",\n     *         \"role\": \"authenticated\",\n     *         \"email\": \"example@email.com\",\n     *         \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *         \"phone\": \"\",\n     *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *         \"app_metadata\": {\n     *           \"provider\": \"email\",\n     *           \"providers\": [\n     *             \"email\"\n     *           ]\n     *         },\n     *         \"user_metadata\": {},\n     *         \"identities\": [\n     *           {\n     *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"identity_data\": {\n     *               \"email\": \"example@email.com\",\n     *               \"email_verified\": false,\n     *               \"phone_verified\": false,\n     *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *             },\n     *             \"provider\": \"email\",\n     *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *             \"created_at\": \"2024-01-01T00:00:00Z\",\n     *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *             \"email\": \"example@email.com\"\n     *           }\n     *         ],\n     *         \"created_at\": \"2024-01-01T00:00:00Z\",\n     *         \"updated_at\": \"2024-01-01T00:00:00Z\"\n     *       }\n     *     }\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     *\n     * @example Sign up with a phone number and password (SMS)\n     * ```js\n     * const { data, error } = await supabase.auth.signUp({\n     *   phone: '123456789',\n     *   password: 'example-password',\n     *   options: {\n     *     channel: 'sms'\n     *   }\n     * })\n     * ```\n     *\n     * @exampleDescription Sign up with a phone number and password (whatsapp)\n     * The user will be sent a WhatsApp message which contains a OTP. By default, a given user can only request a OTP once every 60 seconds. Note that a user will need to have a valid WhatsApp account that is linked to Twilio in order to use this feature.\n     *\n     * @example Sign up with a phone number and password (whatsapp)\n     * ```js\n     * const { data, error } = await supabase.auth.signUp({\n     *   phone: '123456789',\n     *   password: 'example-password',\n     *   options: {\n     *     channel: 'whatsapp'\n     *   }\n     * })\n     * ```\n     *\n     * @example Sign up with additional user metadata\n     * ```js\n     * const { data, error } = await supabase.auth.signUp(\n     *   {\n     *     email: 'example@email.com',\n     *     password: 'example-password',\n     *     options: {\n     *       data: {\n     *         first_name: 'John',\n     *         age: 27,\n     *       }\n     *     }\n     *   }\n     * )\n     * ```\n     *\n     * @exampleDescription Sign up with a redirect URL\n     * - See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project.\n     *\n     * @example Sign up with a redirect URL\n     * ```js\n     * const { data, error } = await supabase.auth.signUp(\n     *   {\n     *     email: 'example@email.com',\n     *     password: 'example-password',\n     *     options: {\n     *       emailRedirectTo: 'https://example.com/welcome'\n     *     }\n     *   }\n     * )\n     * ```\n     */\n    async signUp(credentials) {\n        var _a, _b, _c;\n        let flowId = null;\n        try {\n            let res;\n            if ('email' in credentials) {\n                const { email, password, options } = credentials;\n                let codeChallenge = null;\n                let codeChallengeMethod = null;\n                if (this.flowType === 'pkce') {\n                    ;\n                    [codeChallenge, codeChallengeMethod, flowId] = await this._getCodeChallengeAndMethod();\n                }\n                res = await _request(this.fetch, 'POST', `${this.url}/signup`, {\n                    headers: this.headers,\n                    redirectTo: this._maybeAppendFlowIdToRedirect(options === null || options === void 0 ? void 0 : options.emailRedirectTo, flowId),\n                    body: {\n                        email,\n                        password,\n                        data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : {},\n                        gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n                        code_challenge: codeChallenge,\n                        code_challenge_method: codeChallengeMethod,\n                    },\n                    xform: _sessionResponse,\n                });\n            }\n            else if ('phone' in credentials) {\n                const { phone, password, options } = credentials;\n                res = await _request(this.fetch, 'POST', `${this.url}/signup`, {\n                    headers: this.headers,\n                    body: {\n                        phone,\n                        password,\n                        data: (_b = options === null || options === void 0 ? void 0 : options.data) !== null && _b !== void 0 ? _b : {},\n                        channel: (_c = options === null || options === void 0 ? void 0 : options.channel) !== null && _c !== void 0 ? _c : 'sms',\n                        gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n                    },\n                    xform: _sessionResponse,\n                });\n            }\n            else {\n                throw new AuthInvalidCredentialsError('You must provide either an email or phone number and a password');\n            }\n            const { data, error } = res;\n            if (error || !data) {\n                await removePKCEVerifier(this.storage, this.storageKey, flowId);\n                return this._returnResult({ data: { user: null, session: null }, error: error });\n            }\n            const session = data.session;\n            const user = data.user;\n            if (data.session) {\n                await this._saveSession(data.session);\n                await this._notifyAllSubscribers('SIGNED_IN', session);\n            }\n            return this._returnResult({ data: { user, session }, error: null });\n        }\n        catch (error) {\n            await removePKCEVerifier(this.storage, this.storageKey, flowId);\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Log in an existing user with an email and password or phone and password.\n     *\n     * Be aware that you may get back an error message that will not distinguish\n     * between the cases where the account does not exist or that the\n     * email/phone and password combination is wrong or that the account can only\n     * be accessed via social login.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - Requires either an email and password or a phone number and password.\n     *\n     * @example Sign in with email and password\n     * ```js\n     * const { data, error } = await supabase.auth.signInWithPassword({\n     *   email: 'example@email.com',\n     *   password: 'example-password',\n     * })\n     * ```\n     *\n     * @exampleResponse Sign in with email and password\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"user\": {\n     *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"aud\": \"authenticated\",\n     *       \"role\": \"authenticated\",\n     *       \"email\": \"example@email.com\",\n     *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"phone\": \"\",\n     *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *       \"app_metadata\": {\n     *         \"provider\": \"email\",\n     *         \"providers\": [\n     *           \"email\"\n     *         ]\n     *       },\n     *       \"user_metadata\": {},\n     *       \"identities\": [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"identity_data\": {\n     *             \"email\": \"example@email.com\",\n     *             \"email_verified\": false,\n     *             \"phone_verified\": false,\n     *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *           },\n     *           \"provider\": \"email\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"example@email.com\"\n     *         }\n     *       ],\n     *       \"created_at\": \"2024-01-01T00:00:00Z\",\n     *       \"updated_at\": \"2024-01-01T00:00:00Z\"\n     *     },\n     *     \"session\": {\n     *       \"access_token\": \"<ACCESS_TOKEN>\",\n     *       \"token_type\": \"bearer\",\n     *       \"expires_in\": 3600,\n     *       \"expires_at\": 1700000000,\n     *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n     *       \"user\": {\n     *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *         \"aud\": \"authenticated\",\n     *         \"role\": \"authenticated\",\n     *         \"email\": \"example@email.com\",\n     *         \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *         \"phone\": \"\",\n     *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *         \"app_metadata\": {\n     *           \"provider\": \"email\",\n     *           \"providers\": [\n     *             \"email\"\n     *           ]\n     *         },\n     *         \"user_metadata\": {},\n     *         \"identities\": [\n     *           {\n     *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"identity_data\": {\n     *               \"email\": \"example@email.com\",\n     *               \"email_verified\": false,\n     *               \"phone_verified\": false,\n     *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *             },\n     *             \"provider\": \"email\",\n     *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *             \"created_at\": \"2024-01-01T00:00:00Z\",\n     *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *             \"email\": \"example@email.com\"\n     *           }\n     *         ],\n     *         \"created_at\": \"2024-01-01T00:00:00Z\",\n     *         \"updated_at\": \"2024-01-01T00:00:00Z\"\n     *       }\n     *     }\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     *\n     * @example Sign in with phone and password\n     * ```js\n     * const { data, error } = await supabase.auth.signInWithPassword({\n     *   phone: '+13334445555',\n     *   password: 'some-password',\n     * })\n     * ```\n     *\n     * @exampleDescription Handling errors\n     * Log the full `error` object so fields like `code`, `status`, and `name` aren't hidden. The `error.code` (e.g. `'invalid_credentials'`, `'email_not_confirmed'`) is often more useful for branching than `error.message`, and the full object surfaces both.\n     *\n     * @example Handling errors\n     * ```js\n     * const { data, error } = await supabase.auth.signInWithPassword({\n     *   email: 'example@email.com',\n     *   password: 'example-password',\n     * })\n     * if (error) {\n     *   console.error(error)\n     *   return\n     * }\n     * ```\n     */\n    async signInWithPassword(credentials) {\n        try {\n            let res;\n            if ('email' in credentials) {\n                const { email, password, options } = credentials;\n                res = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=password`, {\n                    headers: this.headers,\n                    body: {\n                        email,\n                        password,\n                        gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n                    },\n                    xform: _sessionResponsePassword,\n                });\n            }\n            else if ('phone' in credentials) {\n                const { phone, password, options } = credentials;\n                res = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=password`, {\n                    headers: this.headers,\n                    body: {\n                        phone,\n                        password,\n                        gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n                    },\n                    xform: _sessionResponsePassword,\n                });\n            }\n            else {\n                throw new AuthInvalidCredentialsError('You must provide either an email or phone number and a password');\n            }\n            const { data, error } = res;\n            if (error) {\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            else if (!data || !data.session || !data.user) {\n                const invalidTokenError = new AuthInvalidTokenResponseError();\n                return this._returnResult({ data: { user: null, session: null }, error: invalidTokenError });\n            }\n            if (data.session) {\n                await this._saveSession(data.session);\n                await this._notifyAllSubscribers('SIGNED_IN', data.session);\n            }\n            return this._returnResult({\n                data: Object.assign({ user: data.user, session: data.session }, (data.weak_password ? { weakPassword: data.weak_password } : null)),\n                error,\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Log in an existing user via a third-party provider.\n     * This method supports the PKCE flow.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - This method is used for signing in using [Social Login (OAuth) providers](/docs/guides/auth#configure-third-party-providers).\n     * - It works by redirecting your application to the provider's authorization screen, before bringing back the user to your app.\n     *\n     * @example Sign in using a third-party provider\n     * ```js\n     * const { data, error } = await supabase.auth.signInWithOAuth({\n     *   provider: 'github'\n     * })\n     * ```\n     *\n     * @exampleResponse Sign in using a third-party provider\n     * ```json\n     * {\n     *   data: {\n     *     provider: 'github',\n     *     url: <PROVIDER_URL_TO_REDIRECT_TO>,\n     *     flowId: <PKCE_FLOW_ID_OR_NULL>\n     *   },\n     *   error: null\n     * }\n     * ```\n     *\n     * @exampleDescription Sign in using a third-party provider with redirect\n     * - When the OAuth provider successfully authenticates the user, they are redirected to the URL specified in the `redirectTo` parameter. This parameter defaults to the [`SITE_URL`](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls). It does not redirect the user immediately after invoking this method.\n     * - See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project.\n     *\n     * @example Sign in using a third-party provider with redirect\n     * ```js\n     * const { data, error } = await supabase.auth.signInWithOAuth({\n     *   provider: 'github',\n     *   options: {\n     *     redirectTo: 'https://example.com/welcome'\n     *   }\n     * })\n     * ```\n     *\n     * @exampleDescription Sign in with scopes and access provider tokens\n     * If you need additional access from an OAuth provider, in order to access provider specific APIs in the name of the user, you can do this by passing in the scopes the user should authorize for your application. Note that the `scopes` option takes in **a space-separated list** of scopes.\n     *\n     * Because OAuth sign-in often includes redirects, you should register an `onAuthStateChange` callback immediately after you create the Supabase client. This callback will listen for the presence of `provider_token` and `provider_refresh_token` properties on the `session` object and store them in local storage. The client library will emit these values **only once** immediately after the user signs in. You can then access them by looking them up in local storage, or send them to your backend servers for further processing.\n     *\n     * Finally, make sure you remove them from local storage on the `SIGNED_OUT` event. If the OAuth provider supports token revocation, make sure you call those APIs either from the frontend or schedule them to be called on the backend.\n     *\n     * @example Sign in with scopes and access provider tokens\n     * ```js\n     * // Register this immediately after calling createClient!\n     * // Because signInWithOAuth causes a redirect, you need to fetch the\n     * // provider tokens from the callback.\n     * supabase.auth.onAuthStateChange((event, session) => {\n     *   if (session && session.provider_token) {\n     *     window.localStorage.setItem('oauth_provider_token', session.provider_token)\n     *   }\n     *\n     *   if (session && session.provider_refresh_token) {\n     *     window.localStorage.setItem('oauth_provider_refresh_token', session.provider_refresh_token)\n     *   }\n     *\n     *   if (event === 'SIGNED_OUT') {\n     *     window.localStorage.removeItem('oauth_provider_token')\n     *     window.localStorage.removeItem('oauth_provider_refresh_token')\n     *   }\n     * })\n     *\n     * // Call this on your Sign in with GitHub button to initiate OAuth\n     * // with GitHub with the requested elevated scopes.\n     * await supabase.auth.signInWithOAuth({\n     *   provider: 'github',\n     *   options: {\n     *     scopes: 'repo gist notifications'\n     *   }\n     * })\n     * ```\n     */\n    async signInWithOAuth(credentials) {\n        var _a, _b, _c, _d;\n        return await this._handleProviderSignIn(credentials.provider, {\n            redirectTo: (_a = credentials.options) === null || _a === void 0 ? void 0 : _a.redirectTo,\n            scopes: (_b = credentials.options) === null || _b === void 0 ? void 0 : _b.scopes,\n            queryParams: (_c = credentials.options) === null || _c === void 0 ? void 0 : _c.queryParams,\n            skipBrowserRedirect: (_d = credentials.options) === null || _d === void 0 ? void 0 : _d.skipBrowserRedirect,\n        });\n    }\n    /**\n     * Log in an existing user by exchanging an Auth Code issued during the PKCE flow.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - Used when `flowType` is set to `pkce` in client options.\n     * - When several PKCE flows are in flight at once, pass `options.flowId` so\n     *   the code is exchanged with the verifier created by that specific flow.\n     *   The flow id is returned by `signInWithOAuth`, and with\n     *   `experimental.appendPkceFlowIdToRedirects` enabled it also arrives on\n     *   your callback URL as the reserved `sb_flow_id` query parameter (read\n     *   automatically in a browser).\n     * - When a flow id is present but its stored verifier is gone (evicted,\n     *   already used, or from another device), the call fails with a verifier\n     *   missing error instead of trying another flow's verifier — a mismatched\n     *   verifier would consume the single-use code. Without any flow id the\n     *   most recently stored verifier is used, as before.\n     *\n     * @example Exchange Auth Code\n     * ```js\n     * supabase.auth.exchangeCodeForSession('34e770dd-9ff9-416c-87fa-43b31d7ef225')\n     * ```\n     *\n     * @example Exchange Auth Code for a specific flow (e.g. in a server-side callback handler)\n     * ```js\n     * const flowId = requestUrl.searchParams.get('sb_flow_id')\n     * supabase.auth.exchangeCodeForSession(code, flowId ? { flowId } : undefined)\n     * ```\n     *\n     * @exampleResponse Exchange Auth Code\n     * ```json\n     * {\n     *   \"data\": {\n     *     session: {\n     *       access_token: '<ACCESS_TOKEN>',\n     *       token_type: 'bearer',\n     *       expires_in: 3600,\n     *       expires_at: 1700000000,\n     *       refresh_token: '<REFRESH_TOKEN>',\n     *       user: {\n     *         id: '11111111-1111-1111-1111-111111111111',\n     *         aud: 'authenticated',\n     *         role: 'authenticated',\n     *         email: 'example@email.com'\n     *         email_confirmed_at: '2024-01-01T00:00:00Z',\n     *         phone: '',\n     *         confirmation_sent_at: '2024-01-01T00:00:00Z',\n     *         confirmed_at: '2024-01-01T00:00:00Z',\n     *         last_sign_in_at: '2024-01-01T00:00:00Z',\n     *         app_metadata: {\n     *           \"provider\": \"email\",\n     *           \"providers\": [\n     *             \"email\",\n     *             \"<OTHER_PROVIDER>\"\n     *           ]\n     *         },\n     *         user_metadata: {\n     *           email: 'email@email.com',\n     *           email_verified: true,\n     *           full_name: 'User Name',\n     *           iss: '<ISS>',\n     *           name: 'User Name',\n     *           phone_verified: false,\n     *           provider_id: '<PROVIDER_ID>',\n     *           sub: '<SUB>'\n     *         },\n     *         identities: [\n     *           {\n     *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"identity_data\": {\n     *               \"email\": \"example@email.com\",\n     *               \"email_verified\": false,\n     *               \"phone_verified\": false,\n     *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *             },\n     *             \"provider\": \"email\",\n     *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *             \"created_at\": \"2024-01-01T00:00:00Z\",\n     *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *             \"email\": \"email@example.com\"\n     *           },\n     *           {\n     *             \"identity_id\": \"33333333-3333-3333-3333-333333333333\",\n     *             \"id\": \"<ID>\",\n     *             \"user_id\": \"<USER_ID>\",\n     *             \"identity_data\": {\n     *               \"email\": \"example@email.com\",\n     *               \"email_verified\": true,\n     *               \"full_name\": \"User Name\",\n     *               \"iss\": \"<ISS>\",\n     *               \"name\": \"User Name\",\n     *               \"phone_verified\": false,\n     *               \"provider_id\": \"<PROVIDER_ID>\",\n     *               \"sub\": \"<SUB>\"\n     *             },\n     *             \"provider\": \"<PROVIDER>\",\n     *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *             \"created_at\": \"2024-01-01T00:00:00Z\",\n     *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *             \"email\": \"example@email.com\"\n     *           }\n     *         ],\n     *         created_at: '2024-01-01T00:00:00Z',\n     *         updated_at: '2024-01-01T00:00:00Z',\n     *         is_anonymous: false\n     *       },\n     *       provider_token: '<PROVIDER_TOKEN>',\n     *       provider_refresh_token: '<PROVIDER_REFRESH_TOKEN>'\n     *     },\n     *     user: {\n     *       id: '11111111-1111-1111-1111-111111111111',\n     *       aud: 'authenticated',\n     *       role: 'authenticated',\n     *       email: 'example@email.com',\n     *       email_confirmed_at: '2024-01-01T00:00:00Z',\n     *       phone: '',\n     *       confirmation_sent_at: '2024-01-01T00:00:00Z',\n     *       confirmed_at: '2024-01-01T00:00:00Z',\n     *       last_sign_in_at: '2024-01-01T00:00:00Z',\n     *       app_metadata: {\n     *         provider: 'email',\n     *         providers: [\n     *           \"email\",\n     *           \"<OTHER_PROVIDER>\"\n     *         ]\n     *       },\n     *       user_metadata: {\n     *         email: 'email@email.com',\n     *         email_verified: true,\n     *         full_name: 'User Name',\n     *         iss: '<ISS>',\n     *         name: 'User Name',\n     *         phone_verified: false,\n     *         provider_id: '<PROVIDER_ID>',\n     *         sub: '<SUB>'\n     *       },\n     *       identities: [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"identity_data\": {\n     *             \"email\": \"example@email.com\",\n     *             \"email_verified\": false,\n     *             \"phone_verified\": false,\n     *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *           },\n     *           \"provider\": \"email\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"email@example.com\"\n     *         },\n     *         {\n     *           \"identity_id\": \"33333333-3333-3333-3333-333333333333\",\n     *           \"id\": \"<ID>\",\n     *           \"user_id\": \"<USER_ID>\",\n     *           \"identity_data\": {\n     *             \"email\": \"example@email.com\",\n     *             \"email_verified\": true,\n     *             \"full_name\": \"User Name\",\n     *             \"iss\": \"<ISS>\",\n     *             \"name\": \"User Name\",\n     *             \"phone_verified\": false,\n     *             \"provider_id\": \"<PROVIDER_ID>\",\n     *             \"sub\": \"<SUB>\"\n     *           },\n     *           \"provider\": \"<PROVIDER>\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"example@email.com\"\n     *         }\n     *       ],\n     *       created_at: '2024-01-01T00:00:00Z',\n     *       updated_at: '2024-01-01T00:00:00Z',\n     *       is_anonymous: false\n     *     },\n     *     redirectType: null\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     */\n    async exchangeCodeForSession(authCode, options) {\n        await this.initializePromise;\n        if (this.lock != null) {\n            // TODO(v3): remove legacy lock path\n            return this._acquireLock(this.lockAcquireTimeout, async () => {\n                return this._exchangeCodeForSession(authCode, options);\n            });\n        }\n        return this._exchangeCodeForSession(authCode, options);\n    }\n    /**\n     * Signs in a user by verifying a message signed by the user's private key.\n     * Supports Ethereum (via Sign-In-With-Ethereum) & Solana (Sign-In-With-Solana) standards,\n     * both of which derive from the EIP-4361 standard\n     * With slight variation on Solana's side.\n     * @reference https://eips.ethereum.org/EIPS/eip-4361\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - Uses a Web3 (Ethereum, Solana) wallet to sign a user in.\n     * - Read up on the [potential for abuse](/docs/guides/auth/auth-web3#potential-for-abuse) before using it.\n     *\n     * @example Sign in with Solana or Ethereum (Window API)\n     * ```js\n     *   // uses window.ethereum for the wallet\n     *   const { data, error } = await supabase.auth.signInWithWeb3({\n     *     chain: 'ethereum',\n     *     statement: 'I accept the Terms of Service at https://example.com/tos'\n     *   })\n     *\n     *   // uses window.solana for the wallet\n     *   const { data, error } = await supabase.auth.signInWithWeb3({\n     *     chain: 'solana',\n     *     statement: 'I accept the Terms of Service at https://example.com/tos'\n     *   })\n     * ```\n     *\n     * @example Sign in with Ethereum (Message and Signature)\n     * ```js\n     *   const { data, error } = await supabase.auth.signInWithWeb3({\n     *     chain: 'ethereum',\n     *     message: '<sign in with ethereum message>',\n     *     signature: '<hex of the ethereum signature over the message>',\n     *   })\n     * ```\n     *\n     * @example Sign in with Solana (Brave)\n     * ```js\n     *   const { data, error } = await supabase.auth.signInWithWeb3({\n     *     chain: 'solana',\n     *     statement: 'I accept the Terms of Service at https://example.com/tos',\n     *     wallet: window.braveSolana\n     *   })\n     * ```\n     *\n     * @example Sign in with Solana (Wallet Adapter)\n     * ```jsx\n     *   function SignInButton() {\n     *   const wallet = useWallet()\n     *\n     *   return (\n     *     <>\n     *       {wallet.connected ? (\n     *         <button\n     *           onClick={() => {\n     *             supabase.auth.signInWithWeb3({\n     *               chain: 'solana',\n     *               statement: 'I accept the Terms of Service at https://example.com/tos',\n     *               wallet,\n     *             })\n     *           }}\n     *         >\n     *           Sign in with Solana\n     *         </button>\n     *       ) : (\n     *         <WalletMultiButton />\n     *       )}\n     *     </>\n     *   )\n     * }\n     *\n     * function App() {\n     *   const endpoint = clusterApiUrl('devnet')\n     *   const wallets = useMemo(() => [], [])\n     *\n     *   return (\n     *     <ConnectionProvider endpoint={endpoint}>\n     *       <WalletProvider wallets={wallets}>\n     *         <WalletModalProvider>\n     *           <SignInButton />\n     *         </WalletModalProvider>\n     *       </WalletProvider>\n     *     </ConnectionProvider>\n     *   )\n     * }\n     * ```\n     */\n    async signInWithWeb3(credentials) {\n        const { chain } = credentials;\n        switch (chain) {\n            case 'ethereum':\n                return await this.signInWithEthereum(credentials);\n            case 'solana':\n                return await this.signInWithSolana(credentials);\n            default:\n                throw new Error(`@supabase/auth-js: Unsupported chain \"${chain}\"`);\n        }\n    }\n    async signInWithEthereum(credentials) {\n        var _a, _b, _c, _d, _f, _g, _h, _j, _k, _l, _m;\n        // TODO: flatten type\n        let message;\n        let signature;\n        if ('message' in credentials) {\n            message = credentials.message;\n            signature = credentials.signature;\n        }\n        else {\n            const { chain, wallet, statement, options } = credentials;\n            let resolvedWallet;\n            if (!isBrowser()) {\n                if (typeof wallet !== 'object' || !(options === null || options === void 0 ? void 0 : options.url)) {\n                    throw new Error('@supabase/auth-js: Both wallet and url must be specified in non-browser environments.');\n                }\n                resolvedWallet = wallet;\n            }\n            else if (typeof wallet === 'object') {\n                resolvedWallet = wallet;\n            }\n            else {\n                const windowAny = window;\n                if ('ethereum' in windowAny &&\n                    typeof windowAny.ethereum === 'object' &&\n                    'request' in windowAny.ethereum &&\n                    typeof windowAny.ethereum.request === 'function') {\n                    resolvedWallet = windowAny.ethereum;\n                }\n                else {\n                    throw new Error(`@supabase/auth-js: No compatible Ethereum wallet interface on the window object (window.ethereum) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'ethereum', wallet: resolvedUserWallet }) instead.`);\n                }\n            }\n            const url = new URL((_a = options === null || options === void 0 ? void 0 : options.url) !== null && _a !== void 0 ? _a : window.location.href);\n            const accounts = await resolvedWallet\n                .request({\n                method: 'eth_requestAccounts',\n            })\n                .then((accs) => accs)\n                .catch(() => {\n                throw new Error(`@supabase/auth-js: Wallet method eth_requestAccounts is missing or invalid`);\n            });\n            if (!accounts || accounts.length === 0) {\n                throw new Error(`@supabase/auth-js: No accounts available. Please ensure the wallet is connected.`);\n            }\n            const address = getAddress(accounts[0]);\n            let chainId = (_b = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _b === void 0 ? void 0 : _b.chainId;\n            if (!chainId) {\n                const chainIdHex = await resolvedWallet.request({\n                    method: 'eth_chainId',\n                });\n                chainId = fromHex(chainIdHex);\n            }\n            const siweMessage = {\n                domain: url.host,\n                address: address,\n                statement: statement,\n                uri: url.href,\n                version: '1',\n                chainId: chainId,\n                nonce: (_c = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _c === void 0 ? void 0 : _c.nonce,\n                issuedAt: (_f = (_d = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _d === void 0 ? void 0 : _d.issuedAt) !== null && _f !== void 0 ? _f : new Date(),\n                expirationTime: (_g = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _g === void 0 ? void 0 : _g.expirationTime,\n                notBefore: (_h = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _h === void 0 ? void 0 : _h.notBefore,\n                requestId: (_j = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _j === void 0 ? void 0 : _j.requestId,\n                resources: (_k = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _k === void 0 ? void 0 : _k.resources,\n            };\n            message = createSiweMessage(siweMessage);\n            // Sign message\n            signature = (await resolvedWallet.request({\n                method: 'personal_sign',\n                params: [toHex(message), address],\n            }));\n        }\n        try {\n            const { data, error } = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=web3`, {\n                headers: this.headers,\n                body: Object.assign({ chain: 'ethereum', message,\n                    signature }, (((_l = credentials.options) === null || _l === void 0 ? void 0 : _l.captchaToken)\n                    ? { gotrue_meta_security: { captcha_token: (_m = credentials.options) === null || _m === void 0 ? void 0 : _m.captchaToken } }\n                    : null)),\n                xform: _sessionResponse,\n            });\n            if (error) {\n                throw error;\n            }\n            if (!data || !data.session || !data.user) {\n                const invalidTokenError = new AuthInvalidTokenResponseError();\n                return this._returnResult({ data: { user: null, session: null }, error: invalidTokenError });\n            }\n            if (data.session) {\n                await this._saveSession(data.session);\n                await this._notifyAllSubscribers('SIGNED_IN', data.session);\n            }\n            return this._returnResult({ data: Object.assign({}, data), error });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            throw error;\n        }\n    }\n    async signInWithSolana(credentials) {\n        var _a, _b, _c, _d, _f, _g, _h, _j, _k, _l, _m, _o;\n        let message;\n        let signature;\n        if ('message' in credentials) {\n            message = credentials.message;\n            signature = credentials.signature;\n        }\n        else {\n            const { chain, wallet, statement, options } = credentials;\n            let resolvedWallet;\n            if (!isBrowser()) {\n                if (typeof wallet !== 'object' || !(options === null || options === void 0 ? void 0 : options.url)) {\n                    throw new Error('@supabase/auth-js: Both wallet and url must be specified in non-browser environments.');\n                }\n                resolvedWallet = wallet;\n            }\n            else if (typeof wallet === 'object') {\n                resolvedWallet = wallet;\n            }\n            else {\n                const windowAny = window;\n                if ('solana' in windowAny &&\n                    typeof windowAny.solana === 'object' &&\n                    (('signIn' in windowAny.solana && typeof windowAny.solana.signIn === 'function') ||\n                        ('signMessage' in windowAny.solana &&\n                            typeof windowAny.solana.signMessage === 'function'))) {\n                    resolvedWallet = windowAny.solana;\n                }\n                else {\n                    throw new Error(`@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead.`);\n                }\n            }\n            const url = new URL((_a = options === null || options === void 0 ? void 0 : options.url) !== null && _a !== void 0 ? _a : window.location.href);\n            if ('signIn' in resolvedWallet && resolvedWallet.signIn) {\n                const output = await resolvedWallet.signIn(Object.assign(Object.assign(Object.assign({ issuedAt: new Date().toISOString() }, options === null || options === void 0 ? void 0 : options.signInWithSolana), { \n                    // non-overridable properties\n                    version: '1', domain: url.host, uri: url.href }), (statement ? { statement } : null)));\n                let outputToProcess;\n                if (Array.isArray(output) && output[0] && typeof output[0] === 'object') {\n                    outputToProcess = output[0];\n                }\n                else if (output &&\n                    typeof output === 'object' &&\n                    'signedMessage' in output &&\n                    'signature' in output) {\n                    outputToProcess = output;\n                }\n                else {\n                    throw new Error('@supabase/auth-js: Wallet method signIn() returned unrecognized value');\n                }\n                if ('signedMessage' in outputToProcess &&\n                    'signature' in outputToProcess &&\n                    (typeof outputToProcess.signedMessage === 'string' ||\n                        outputToProcess.signedMessage instanceof Uint8Array) &&\n                    outputToProcess.signature instanceof Uint8Array) {\n                    message =\n                        typeof outputToProcess.signedMessage === 'string'\n                            ? outputToProcess.signedMessage\n                            : new TextDecoder().decode(outputToProcess.signedMessage);\n                    signature = outputToProcess.signature;\n                }\n                else {\n                    throw new Error('@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields');\n                }\n            }\n            else {\n                if (!('signMessage' in resolvedWallet) ||\n                    typeof resolvedWallet.signMessage !== 'function' ||\n                    !('publicKey' in resolvedWallet) ||\n                    typeof resolvedWallet !== 'object' ||\n                    !resolvedWallet.publicKey ||\n                    !('toBase58' in resolvedWallet.publicKey) ||\n                    typeof resolvedWallet.publicKey.toBase58 !== 'function') {\n                    throw new Error('@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API');\n                }\n                message = [\n                    `${url.host} wants you to sign in with your Solana account:`,\n                    resolvedWallet.publicKey.toBase58(),\n                    ...(statement ? ['', statement, ''] : ['']),\n                    'Version: 1',\n                    `URI: ${url.href}`,\n                    `Issued At: ${(_c = (_b = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _b === void 0 ? void 0 : _b.issuedAt) !== null && _c !== void 0 ? _c : new Date().toISOString()}`,\n                    ...(((_d = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _d === void 0 ? void 0 : _d.notBefore)\n                        ? [`Not Before: ${options.signInWithSolana.notBefore}`]\n                        : []),\n                    ...(((_f = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _f === void 0 ? void 0 : _f.expirationTime)\n                        ? [`Expiration Time: ${options.signInWithSolana.expirationTime}`]\n                        : []),\n                    ...(((_g = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _g === void 0 ? void 0 : _g.chainId)\n                        ? [`Chain ID: ${options.signInWithSolana.chainId}`]\n                        : []),\n                    ...(((_h = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _h === void 0 ? void 0 : _h.nonce) ? [`Nonce: ${options.signInWithSolana.nonce}`] : []),\n                    ...(((_j = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _j === void 0 ? void 0 : _j.requestId)\n                        ? [`Request ID: ${options.signInWithSolana.requestId}`]\n                        : []),\n                    ...(((_l = (_k = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _k === void 0 ? void 0 : _k.resources) === null || _l === void 0 ? void 0 : _l.length)\n                        ? [\n                            'Resources',\n                            ...options.signInWithSolana.resources.map((resource) => `- ${resource}`),\n                        ]\n                        : []),\n                ].join('\\n');\n                const maybeSignature = await resolvedWallet.signMessage(new TextEncoder().encode(message), 'utf8');\n                if (!maybeSignature || !(maybeSignature instanceof Uint8Array)) {\n                    throw new Error('@supabase/auth-js: Wallet signMessage() API returned an recognized value');\n                }\n                signature = maybeSignature;\n            }\n        }\n        try {\n            const { data, error } = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=web3`, {\n                headers: this.headers,\n                body: Object.assign({ chain: 'solana', message, signature: bytesToBase64URL(signature) }, (((_m = credentials.options) === null || _m === void 0 ? void 0 : _m.captchaToken)\n                    ? { gotrue_meta_security: { captcha_token: (_o = credentials.options) === null || _o === void 0 ? void 0 : _o.captchaToken } }\n                    : null)),\n                xform: _sessionResponse,\n            });\n            if (error) {\n                throw error;\n            }\n            if (!data || !data.session || !data.user) {\n                const invalidTokenError = new AuthInvalidTokenResponseError();\n                return this._returnResult({ data: { user: null, session: null }, error: invalidTokenError });\n            }\n            if (data.session) {\n                await this._saveSession(data.session);\n                await this._notifyAllSubscribers('SIGNED_IN', data.session);\n            }\n            return this._returnResult({ data: Object.assign({}, data), error });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            throw error;\n        }\n    }\n    async _exchangeCodeForSession(authCode, options) {\n        const hasExplicitFlowId = (options === null || options === void 0 ? void 0 : options.flowId) != null;\n        const requestedFlowId = hasExplicitFlowId\n            ? validatePKCEFlowId(options === null || options === void 0 ? void 0 : options.flowId)\n            : isBrowser()\n                ? validatePKCEFlowId(parseParametersFromURL(window.location.href)[PKCE_FLOW_ID_PARAM])\n                : null;\n        if (hasExplicitFlowId && !requestedFlowId) {\n            this._debug('#_exchangeCodeForSession()', 'provided flowId is not a valid flow id', options === null || options === void 0 ? void 0 : options.flowId);\n        }\n        // With a flow id (explicit or from the callback URL) the lookup is\n        // slot-only and a miss fails fast — see retrievePKCEVerifier. An invalid\n        // explicit flow id also fails fast rather than borrowing another flow's\n        // verifier.\n        const { verifier: storageItem, flowId } = hasExplicitFlowId && !requestedFlowId\n            ? { verifier: null, flowId: null }\n            : await retrievePKCEVerifier(this.storage, this.storageKey, requestedFlowId);\n        const [codeVerifier, redirectType] = (storageItem !== null && storageItem !== void 0 ? storageItem : '').split('/');\n        try {\n            if (!codeVerifier && this.flowType === 'pkce') {\n                throw new AuthPKCECodeVerifierMissingError();\n            }\n            const { data, error } = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=pkce`, {\n                headers: this.headers,\n                body: {\n                    auth_code: authCode,\n                    code_verifier: codeVerifier,\n                },\n                xform: _sessionResponse,\n            });\n            await removePKCEVerifier(this.storage, this.storageKey, flowId);\n            if (error) {\n                throw error;\n            }\n            if (!data || !data.session || !data.user) {\n                const invalidTokenError = new AuthInvalidTokenResponseError();\n                return this._returnResult({\n                    data: { user: null, session: null, redirectType: null },\n                    error: invalidTokenError,\n                });\n            }\n            if (data.session) {\n                await this._saveSession(data.session);\n                await this._notifyAllSubscribers(redirectType === 'recovery' ? 'PASSWORD_RECOVERY' : 'SIGNED_IN', data.session);\n            }\n            return this._returnResult({ data: Object.assign(Object.assign({}, data), { redirectType: redirectType !== null && redirectType !== void 0 ? redirectType : null }), error });\n        }\n        catch (error) {\n            await removePKCEVerifier(this.storage, this.storageKey, flowId);\n            if (isAuthError(error)) {\n                return this._returnResult({\n                    data: { user: null, session: null, redirectType: null },\n                    error,\n                });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Allows signing in with an OIDC ID token. The authentication provider used\n     * should be enabled and configured.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - Use an ID token to sign in.\n     * - Especially useful when implementing sign in using native platform dialogs in mobile or desktop apps using Sign in with Apple or Sign in with Google on iOS and Android.\n     * - You can also use Google's [One Tap](https://developers.google.com/identity/gsi/web/guides/display-google-one-tap) and [Automatic sign-in](https://developers.google.com/identity/gsi/web/guides/automatic-sign-in-sign-out) via this API.\n     *\n     * @example Sign In using ID Token\n     * ```js\n     * const { data, error } = await supabase.auth.signInWithIdToken({\n     *   provider: 'google',\n     *   token: 'your-id-token'\n     * })\n     * ```\n     *\n     * @exampleResponse Sign In using ID Token\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"user\": {\n     *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"aud\": \"authenticated\",\n     *       \"role\": \"authenticated\",\n     *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *       \"app_metadata\": {\n     *         ...\n     *       },\n     *       \"user_metadata\": {\n     *         ...\n     *       },\n     *       \"identities\": [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"provider\": \"google\",\n     *         }\n     *       ],\n     *       \"created_at\": \"2024-01-01T00:00:00Z\",\n     *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *     },\n     *     \"session\": {\n     *       \"access_token\": \"<ACCESS_TOKEN>\",\n     *       \"token_type\": \"bearer\",\n     *       \"expires_in\": 3600,\n     *       \"expires_at\": 1700000000,\n     *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n     *       \"user\": {\n     *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *         \"aud\": \"authenticated\",\n     *         \"role\": \"authenticated\",\n     *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *         \"app_metadata\": {\n     *           ...\n     *         },\n     *         \"user_metadata\": {\n     *           ...\n     *         },\n     *         \"identities\": [\n     *           {\n     *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *             \"provider\": \"google\",\n     *           }\n     *         ],\n     *         \"created_at\": \"2024-01-01T00:00:00Z\",\n     *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *       }\n     *     }\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     */\n    async signInWithIdToken(credentials) {\n        try {\n            const { options, provider, token, access_token, nonce } = credentials;\n            const res = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=id_token`, {\n                headers: this.headers,\n                body: {\n                    provider,\n                    id_token: token,\n                    access_token,\n                    nonce,\n                    gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n                },\n                xform: _sessionResponse,\n            });\n            const { data, error } = res;\n            if (error) {\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            else if (!data || !data.session || !data.user) {\n                const invalidTokenError = new AuthInvalidTokenResponseError();\n                return this._returnResult({ data: { user: null, session: null }, error: invalidTokenError });\n            }\n            if (data.session) {\n                await this._saveSession(data.session);\n                await this._notifyAllSubscribers('SIGNED_IN', data.session);\n            }\n            return this._returnResult({ data, error });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Log in a user using magiclink or a one-time password (OTP).\n     *\n     * If the `{{ .ConfirmationURL }}` variable is specified in the email template, a magiclink will be sent.\n     * If the `{{ .Token }}` variable is specified in the email template, an OTP will be sent.\n     * If you're using phone sign-ins, only an OTP will be sent. You won't be able to send a magiclink for phone sign-ins.\n     *\n     * Be aware that you may get back an error message that will not distinguish\n     * between the cases where the account does not exist or, that the account\n     * can only be accessed via social login.\n     *\n     * Do note that you will need to configure a Whatsapp sender on Twilio\n     * if you are using phone sign in with the 'whatsapp' channel. The whatsapp\n     * channel is not supported on other providers\n     * at this time.\n     * This method supports PKCE when an email is passed.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - Requires either an email or phone number.\n     * - This method is used for passwordless sign-ins where a OTP is sent to the user's email or phone number.\n     * - If the user doesn't exist, `signInWithOtp()` will signup the user instead. To restrict this behavior, you can set `shouldCreateUser` in `SignInWithPasswordlessCredentials.options` to `false`.\n     * - If you're using an email, you can configure whether you want the user to receive a magiclink or a OTP.\n     * - If you're using phone, you can configure whether you want the user to receive a OTP.\n     * - The magic link's destination URL is determined by the [`SITE_URL`](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls).\n     * - See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project.\n     * - Magic links and OTPs share the same implementation. To send users a one-time code instead of a magic link, [modify the magic link email template](/dashboard/project/_/auth/templates) to include `{{ .Token }}` instead of `{{ .ConfirmationURL }}`.\n     * - See our [Twilio Phone Auth Guide](/docs/guides/auth/phone-login?showSMSProvider=Twilio) for details about configuring WhatsApp sign in.\n     *\n     * @exampleDescription Sign in with email\n     * The user will be sent an email which contains either a magiclink or a OTP or both. By default, a given user can only request a OTP once every 60 seconds.\n     *\n     * @example Sign in with email\n     * ```js\n     * const { data, error } = await supabase.auth.signInWithOtp({\n     *   email: 'example@email.com',\n     *   options: {\n     *     emailRedirectTo: 'https://example.com/welcome'\n     *   }\n     * })\n     * ```\n     *\n     * @exampleResponse Sign in with email\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"user\": null,\n     *     \"session\": null\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     *\n     * @exampleDescription Sign in with SMS OTP\n     * The user will be sent a SMS which contains a OTP. By default, a given user can only request a OTP once every 60 seconds.\n     *\n     * @example Sign in with SMS OTP\n     * ```js\n     * const { data, error } = await supabase.auth.signInWithOtp({\n     *   phone: '+13334445555',\n     * })\n     * ```\n     *\n     * @exampleDescription Sign in with WhatsApp OTP\n     * The user will be sent a WhatsApp message which contains a OTP. By default, a given user can only request a OTP once every 60 seconds. Note that a user will need to have a valid WhatsApp account that is linked to Twilio in order to use this feature.\n     *\n     * @example Sign in with WhatsApp OTP\n     * ```js\n     * const { data, error } = await supabase.auth.signInWithOtp({\n     *   phone: '+13334445555',\n     *   options: {\n     *     channel:'whatsapp',\n     *   }\n     * })\n     * ```\n     */\n    async signInWithOtp(credentials) {\n        var _a, _b, _c, _d, _f;\n        let flowId = null;\n        try {\n            if ('email' in credentials) {\n                const { email, options } = credentials;\n                let codeChallenge = null;\n                let codeChallengeMethod = null;\n                if (this.flowType === 'pkce') {\n                    ;\n                    [codeChallenge, codeChallengeMethod, flowId] = await this._getCodeChallengeAndMethod();\n                }\n                const { error } = await _request(this.fetch, 'POST', `${this.url}/otp`, {\n                    headers: this.headers,\n                    body: {\n                        email,\n                        data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : {},\n                        create_user: (_b = options === null || options === void 0 ? void 0 : options.shouldCreateUser) !== null && _b !== void 0 ? _b : true,\n                        gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n                        code_challenge: codeChallenge,\n                        code_challenge_method: codeChallengeMethod,\n                    },\n                    redirectTo: this._maybeAppendFlowIdToRedirect(options === null || options === void 0 ? void 0 : options.emailRedirectTo, flowId),\n                });\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            if ('phone' in credentials) {\n                const { phone, options } = credentials;\n                const { data, error } = await _request(this.fetch, 'POST', `${this.url}/otp`, {\n                    headers: this.headers,\n                    body: {\n                        phone,\n                        data: (_c = options === null || options === void 0 ? void 0 : options.data) !== null && _c !== void 0 ? _c : {},\n                        create_user: (_d = options === null || options === void 0 ? void 0 : options.shouldCreateUser) !== null && _d !== void 0 ? _d : true,\n                        gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n                        channel: (_f = options === null || options === void 0 ? void 0 : options.channel) !== null && _f !== void 0 ? _f : 'sms',\n                    },\n                });\n                return this._returnResult({\n                    data: { user: null, session: null, messageId: data === null || data === void 0 ? void 0 : data.message_id },\n                    error,\n                });\n            }\n            throw new AuthInvalidCredentialsError('You must provide either an email or phone number.');\n        }\n        catch (error) {\n            await removePKCEVerifier(this.storage, this.storageKey, flowId);\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Log in a user given a User supplied OTP or TokenHash received through mobile or email.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - The `verifyOtp` method takes in different verification types.\n     * - If a phone number is used, the type can either be:\n     *   1. `sms` – Used when verifying a one-time password (OTP) sent via SMS during sign-up or sign-in.\n     *   2. `phone_change` – Used when verifying an OTP sent to a new phone number during a phone number update process.\n     * - If an email address is used, the type can be one of the following (note: `signup` and `magiclink` types are deprecated):\n     *   1. `email` – Used when verifying an OTP sent to the user's email during sign-up or sign-in.\n     *   2. `recovery` – Used when verifying an OTP sent for account recovery, typically after a password reset request.\n     *   3. `invite` – Used when verifying an OTP sent as part of an invitation to join a project or organization.\n     *   4. `email_change` – Used when verifying an OTP sent to a new email address during an email update process.\n     * - The verification type used should be determined based on the corresponding auth method called before `verifyOtp` to sign up / sign-in a user.\n     * - The `TokenHash` is contained in the [email templates](/docs/guides/auth/auth-email-templates) and can be used to sign in.  You may wish to use the hash for the PKCE flow for Server Side Auth. Read [the Password-based Auth guide](/docs/guides/auth/passwords) for more details.\n     *\n     * @example Verify Signup One-Time Password (OTP)\n     * ```js\n     * const { data, error } = await supabase.auth.verifyOtp({ email, token, type: 'email'})\n     * ```\n     *\n     * @exampleResponse Verify Signup One-Time Password (OTP)\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"user\": {\n     *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"aud\": \"authenticated\",\n     *       \"role\": \"authenticated\",\n     *       \"email\": \"example@email.com\",\n     *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"phone\": \"\",\n     *       \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"recovery_sent_at\": \"2024-01-01T00:00:00Z\",\n     *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *       \"app_metadata\": {\n     *         \"provider\": \"email\",\n     *         \"providers\": [\n     *           \"email\"\n     *         ]\n     *       },\n     *       \"user_metadata\": {\n     *         \"email\": \"example@email.com\",\n     *         \"email_verified\": false,\n     *         \"phone_verified\": false,\n     *         \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *       },\n     *       \"identities\": [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"identity_data\": {\n     *             \"email\": \"example@email.com\",\n     *             \"email_verified\": false,\n     *             \"phone_verified\": false,\n     *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *           },\n     *           \"provider\": \"email\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"example@email.com\"\n     *         }\n     *       ],\n     *       \"created_at\": \"2024-01-01T00:00:00Z\",\n     *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *       \"is_anonymous\": false\n     *     },\n     *     \"session\": {\n     *       \"access_token\": \"<ACCESS_TOKEN>\",\n     *       \"token_type\": \"bearer\",\n     *       \"expires_in\": 3600,\n     *       \"expires_at\": 1700000000,\n     *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n     *       \"user\": {\n     *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *         \"aud\": \"authenticated\",\n     *         \"role\": \"authenticated\",\n     *         \"email\": \"example@email.com\",\n     *         \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *         \"phone\": \"\",\n     *         \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *         \"recovery_sent_at\": \"2024-01-01T00:00:00Z\",\n     *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *         \"app_metadata\": {\n     *           \"provider\": \"email\",\n     *           \"providers\": [\n     *             \"email\"\n     *           ]\n     *         },\n     *         \"user_metadata\": {\n     *           \"email\": \"example@email.com\",\n     *           \"email_verified\": false,\n     *           \"phone_verified\": false,\n     *           \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *         },\n     *         \"identities\": [\n     *           {\n     *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"identity_data\": {\n     *               \"email\": \"example@email.com\",\n     *               \"email_verified\": false,\n     *               \"phone_verified\": false,\n     *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *             },\n     *             \"provider\": \"email\",\n     *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *             \"created_at\": \"2024-01-01T00:00:00Z\",\n     *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *             \"email\": \"example@email.com\"\n     *           }\n     *         ],\n     *         \"created_at\": \"2024-01-01T00:00:00Z\",\n     *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *         \"is_anonymous\": false\n     *       }\n     *     }\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     *\n     * @example Verify SMS One-Time Password (OTP)\n     * ```js\n     * const { data, error } = await supabase.auth.verifyOtp({ phone, token, type: 'sms'})\n     * ```\n     *\n     * @example Verify Email Auth (Token Hash)\n     * ```js\n     * const { data, error } = await supabase.auth.verifyOtp({ token_hash: tokenHash, type: 'email'})\n     * ```\n     */\n    async verifyOtp(params) {\n        var _a, _b;\n        try {\n            let redirectTo = undefined;\n            let captchaToken = undefined;\n            if ('options' in params) {\n                redirectTo = (_a = params.options) === null || _a === void 0 ? void 0 : _a.redirectTo;\n                captchaToken = (_b = params.options) === null || _b === void 0 ? void 0 : _b.captchaToken;\n            }\n            const { data, error } = await _request(this.fetch, 'POST', `${this.url}/verify`, {\n                headers: this.headers,\n                body: Object.assign(Object.assign({}, params), { gotrue_meta_security: { captcha_token: captchaToken } }),\n                redirectTo,\n                xform: _sessionResponse,\n            });\n            if (error) {\n                throw error;\n            }\n            if (!data) {\n                const tokenVerificationError = new Error('An error occurred on token verification.');\n                throw tokenVerificationError;\n            }\n            const session = data.session;\n            const user = data.user;\n            if (session === null || session === void 0 ? void 0 : session.access_token) {\n                await this._saveSession(session);\n                await this._notifyAllSubscribers(params.type == 'recovery' ? 'PASSWORD_RECOVERY' : 'SIGNED_IN', session);\n            }\n            return this._returnResult({ data: { user, session }, error: null });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Attempts a single-sign on using an enterprise Identity Provider. A\n     * successful SSO attempt will redirect the current page to the identity\n     * provider authorization page. The redirect URL is implementation and SSO\n     * protocol specific.\n     *\n     * You can use it by providing a SSO domain. Typically you can extract this\n     * domain by asking users for their email address. If this domain is\n     * registered on the Auth instance the redirect will use that organization's\n     * currently active SSO Identity Provider for the login.\n     *\n     * If you have built an organization-specific login page, you can use the\n     * organization's SSO Identity Provider UUID directly instead.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - Before you can call this method you need to [establish a connection](/docs/guides/auth/sso/auth-sso-saml#managing-saml-20-connections) to an identity provider. Use the [CLI commands](/docs/reference/cli/supabase-sso) to do this.\n     * - If you've associated an email domain to the identity provider, you can use the `domain` property to start a sign-in flow.\n     * - In case you need to use a different way to start the authentication flow with an identity provider, you can use the `providerId` property. For example:\n     *     - Mapping specific user email addresses with an identity provider.\n     *     - Using different hints to identity the identity provider to be used by the user, like a company-specific page, IP address or other tracking information.\n     *\n     * @example Sign in with email domain\n     * ```js\n     *   // You can extract the user's email domain and use it to trigger the\n     *   // authentication flow with the correct identity provider.\n     *\n     *   const { data, error } = await supabase.auth.signInWithSSO({\n     *     domain: 'company.com'\n     *   })\n     *\n     *   if (data?.url) {\n     *     // redirect the user to the identity provider's authentication flow\n     *     window.location.href = data.url\n     *   }\n     * ```\n     *\n     * @example Sign in with provider UUID\n     * ```js\n     *   // Useful when you need to map a user's sign in request according\n     *   // to different rules that can't use email domains.\n     *\n     *   const { data, error } = await supabase.auth.signInWithSSO({\n     *     providerId: '21648a9d-8d5a-4555-a9d1-d6375dc14e92'\n     *   })\n     *\n     *   if (data?.url) {\n     *     // redirect the user to the identity provider's authentication flow\n     *     window.location.href = data.url\n     *   }\n     * ```\n     */\n    async signInWithSSO(params) {\n        var _a, _b, _c, _d;\n        let flowId = null;\n        try {\n            let codeChallenge = null;\n            let codeChallengeMethod = null;\n            if (this.flowType === 'pkce') {\n                ;\n                [codeChallenge, codeChallengeMethod, flowId] = await this._getCodeChallengeAndMethod();\n            }\n            const result = await _request(this.fetch, 'POST', `${this.url}/sso`, {\n                body: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, ('providerId' in params ? { provider_id: params.providerId } : null)), ('domain' in params ? { domain: params.domain } : null)), { redirect_to: this._maybeAppendFlowIdToRedirect((_a = params.options) === null || _a === void 0 ? void 0 : _a.redirectTo, flowId) }), (((_b = params === null || params === void 0 ? void 0 : params.options) === null || _b === void 0 ? void 0 : _b.captchaToken)\n                    ? { gotrue_meta_security: { captcha_token: params.options.captchaToken } }\n                    : null)), { skip_http_redirect: true, code_challenge: codeChallenge, code_challenge_method: codeChallengeMethod }),\n                headers: this.headers,\n                xform: _ssoResponse,\n            });\n            // Automatically redirect in browser unless skipBrowserRedirect is true\n            if (((_c = result.data) === null || _c === void 0 ? void 0 : _c.url) && isBrowser() && !((_d = params.options) === null || _d === void 0 ? void 0 : _d.skipBrowserRedirect)) {\n                window.location.assign(result.data.url);\n            }\n            return this._returnResult(result);\n        }\n        catch (error) {\n            await removePKCEVerifier(this.storage, this.storageKey, flowId);\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Sends a reauthentication OTP to the user's email or phone number.\n     * Requires the user to be signed-in.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - This method is used together with `updateUser()` when a user's password needs to be updated.\n     * - If you require your user to reauthenticate before updating their password, you need to enable the **Secure password change** option in your [project's email provider settings](/dashboard/project/_/auth/providers).\n     * - A user is only require to reauthenticate before updating their password if **Secure password change** is enabled and the user **hasn't recently signed in**. A user is deemed recently signed in if the session was created in the last 24 hours.\n     * - This method will send a nonce to the user's email. If the user doesn't have a confirmed email address, the method will send the nonce to the user's confirmed phone number instead.\n     * - After receiving the OTP, include it as the `nonce` in your `updateUser()` call to finalize the password change.\n     *\n     * @exampleDescription Send reauthentication nonce\n     * Sends a reauthentication nonce to the user's email or phone number.\n     *\n     * @example Send reauthentication nonce\n     * ```js\n     * const { error } = await supabase.auth.reauthenticate()\n     * ```\n     */\n    async reauthenticate() {\n        await this.initializePromise;\n        if (this.lock != null) {\n            // TODO(v3): remove legacy lock path\n            return await this._acquireLock(this.lockAcquireTimeout, async () => {\n                return await this._reauthenticate();\n            });\n        }\n        return await this._reauthenticate();\n    }\n    async _reauthenticate() {\n        try {\n            return await this._useSession(async (result) => {\n                const { data: { session }, error: sessionError, } = result;\n                if (sessionError)\n                    throw sessionError;\n                if (!session)\n                    throw new AuthSessionMissingError();\n                const { error } = await _request(this.fetch, 'GET', `${this.url}/reauthenticate`, {\n                    headers: this.headers,\n                    jwt: session.access_token,\n                });\n                return this._returnResult({ data: { user: null, session: null }, error });\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Resends an existing signup confirmation email, email change email, SMS OTP or phone change OTP.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - Resends a signup confirmation, email change or phone change email to the user.\n     * - Passwordless sign-ins can be resent by calling the `signInWithOtp()` method again.\n     * - Password recovery emails can be resent by calling the `resetPasswordForEmail()` method again.\n     * - This method will only resend an email or phone OTP to the user if there was an initial signup, email change or phone change request being made(note: For existing users signing in with OTP, you should use `signInWithOtp()` again to resend the OTP).\n     * - You can specify a redirect url when you resend an email link using the `emailRedirectTo` option.\n     *\n     * @exampleDescription Resend an email signup confirmation\n     * Resends the email signup confirmation to the user\n     *\n     * @example Resend an email signup confirmation\n     * ```js\n     * const { error } = await supabase.auth.resend({\n     *   type: 'signup',\n     *   email: 'email@example.com',\n     *   options: {\n     *     emailRedirectTo: 'https://example.com/welcome'\n     *   }\n     * })\n     * ```\n     *\n     * @exampleDescription Resend a phone signup confirmation\n     * Resends the phone signup confirmation email to the user\n     *\n     * @example Resend a phone signup confirmation\n     * ```js\n     * const { error } = await supabase.auth.resend({\n     *   type: 'sms',\n     *   phone: '1234567890'\n     * })\n     * ```\n     *\n     * @exampleDescription Resend email change email\n     * Resends the email change email to the user\n     *\n     * @example Resend email change email\n     * ```js\n     * const { error } = await supabase.auth.resend({\n     *   type: 'email_change',\n     *   email: 'email@example.com'\n     * })\n     * ```\n     *\n     * @exampleDescription Resend phone change OTP\n     * Resends the phone change OTP to the user\n     *\n     * @example Resend phone change OTP\n     * ```js\n     * const { error } = await supabase.auth.resend({\n     *   type: 'phone_change',\n     *   phone: '1234567890'\n     * })\n     * ```\n     */\n    async resend(credentials) {\n        let flowId = null;\n        try {\n            const endpoint = `${this.url}/resend`;\n            if ('email' in credentials) {\n                const { email, type, options } = credentials;\n                let codeChallenge = null;\n                let codeChallengeMethod = null;\n                if (this.flowType === 'pkce') {\n                    ;\n                    [codeChallenge, codeChallengeMethod, flowId] = await this._getCodeChallengeAndMethod();\n                }\n                const { error } = await _request(this.fetch, 'POST', endpoint, {\n                    headers: this.headers,\n                    body: {\n                        email,\n                        type,\n                        gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n                        code_challenge: codeChallenge,\n                        code_challenge_method: codeChallengeMethod,\n                    },\n                    redirectTo: this._maybeAppendFlowIdToRedirect(options === null || options === void 0 ? void 0 : options.emailRedirectTo, flowId),\n                });\n                if (error) {\n                    await removePKCEVerifier(this.storage, this.storageKey, flowId);\n                }\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            else if ('phone' in credentials) {\n                const { phone, type, options } = credentials;\n                const { data, error } = await _request(this.fetch, 'POST', endpoint, {\n                    headers: this.headers,\n                    body: {\n                        phone,\n                        type,\n                        gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n                    },\n                });\n                return this._returnResult({\n                    data: { user: null, session: null, messageId: data === null || data === void 0 ? void 0 : data.message_id },\n                    error,\n                });\n            }\n            throw new AuthInvalidCredentialsError('You must provide either an email or phone number and a type');\n        }\n        catch (error) {\n            await removePKCEVerifier(this.storage, this.storageKey, flowId);\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Returns the session, refreshing it if necessary.\n     *\n     * The session returned can be null if the session is not detected which can happen in the event a user is not signed-in or has logged out.\n     *\n     * **IMPORTANT:** This method loads values directly from the storage attached\n     * to the client. If that storage is based on request cookies for example,\n     * the values in it may not be authentic and therefore it's strongly advised\n     * against using this method and its results in such circumstances. A warning\n     * will be emitted if this is detected. Use {@link GoTrueClient.getUser} instead.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - Since the introduction of [asymmetric JWT signing keys](/docs/guides/auth/signing-keys), this method is considered low-level and we encourage you to use `getClaims()` or `getUser()` instead.\n     * - Retrieves the current [user session](/docs/guides/auth/sessions) from the storage medium (local storage, cookies).\n     * - The session contains an access token (signed JWT), a refresh token and the user object.\n     * - If the session's access token is expired or is about to expire, this method will use the refresh token to refresh the session.\n     * - When using in a browser, or you've called `startAutoRefresh()` in your environment (React Native, etc.) this function always returns a valid access token without refreshing the session itself, as this is done in the background. This function returns very fast.\n     * - **IMPORTANT SECURITY NOTICE:** If using an insecure storage medium, such as cookies or request headers, the user object returned by this function **must not be trusted**. Always verify the JWT using `getClaims()` or your own JWT verification library to securely establish the user's identity and access. You can also use `getUser()` to fetch the user object directly from the Auth server for this purpose.\n     * - Cross-tab refresh races are handled by the GoTrue server (the rotated token from the first tab is returned to subsequent tabs via the parent-of-active mechanism), so no client-side serialization is needed.\n     *\n     * @example Get the session data\n     * ```js\n     * const { data, error } = await supabase.auth.getSession()\n     * ```\n     *\n     * @exampleResponse Get the session data\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"session\": {\n     *       \"access_token\": \"<ACCESS_TOKEN>\",\n     *       \"token_type\": \"bearer\",\n     *       \"expires_in\": 3600,\n     *       \"expires_at\": 1700000000,\n     *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n     *       \"user\": {\n     *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *         \"aud\": \"authenticated\",\n     *         \"role\": \"authenticated\",\n     *         \"email\": \"example@email.com\",\n     *         \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *         \"phone\": \"\",\n     *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *         \"app_metadata\": {\n     *           \"provider\": \"email\",\n     *           \"providers\": [\n     *             \"email\"\n     *           ]\n     *         },\n     *         \"user_metadata\": {\n     *           \"email\": \"example@email.com\",\n     *           \"email_verified\": false,\n     *           \"phone_verified\": false,\n     *           \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *         },\n     *         \"identities\": [\n     *           {\n     *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"identity_data\": {\n     *               \"email\": \"example@email.com\",\n     *               \"email_verified\": false,\n     *               \"phone_verified\": false,\n     *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *             },\n     *             \"provider\": \"email\",\n     *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *             \"created_at\": \"2024-01-01T00:00:00Z\",\n     *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *             \"email\": \"example@email.com\"\n     *           }\n     *         ],\n     *         \"created_at\": \"2024-01-01T00:00:00Z\",\n     *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *         \"is_anonymous\": false\n     *       }\n     *     }\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     */\n    async getSession() {\n        await this.initializePromise;\n        if (this.lock != null) {\n            // TODO(v3): remove legacy lock path\n            return await this._acquireLock(this.lockAcquireTimeout, async () => {\n                return this._useSession(async (result) => {\n                    return result;\n                });\n            });\n        }\n        return await this._useSession(async (result) => {\n            return result;\n        });\n    }\n    /**\n     * Acquires a global lock based on the storage key.\n     *\n     * TODO(v3): remove along with the legacy lock path. Only called when\n     * `this.lock` is non-null (custom lock supplied via constructor). The\n     * default lockless path bypasses this entirely.\n     */\n    async _acquireLock(acquireTimeout, fn) {\n        this._debug('#_acquireLock', 'begin', acquireTimeout);\n        try {\n            if (this.lockAcquired) {\n                const last = this.pendingInLock.length\n                    ? this.pendingInLock[this.pendingInLock.length - 1]\n                    : Promise.resolve();\n                const result = (async () => {\n                    await last;\n                    return await fn();\n                })();\n                this.pendingInLock.push((async () => {\n                    try {\n                        await result;\n                    }\n                    catch (_e) {\n                        // we just care if it finished\n                    }\n                })());\n                return result;\n            }\n            return await this.lock(`lock:${this.storageKey}`, acquireTimeout, async () => {\n                this._debug('#_acquireLock', 'lock acquired for storage key', this.storageKey);\n                try {\n                    this.lockAcquired = true;\n                    const result = fn();\n                    this.pendingInLock.push((async () => {\n                        try {\n                            await result;\n                        }\n                        catch (e) {\n                            // we just care if it finished\n                        }\n                    })());\n                    await result;\n                    // keep draining the queue until there's nothing to wait on\n                    while (this.pendingInLock.length) {\n                        const waitOn = [...this.pendingInLock];\n                        await Promise.all(waitOn);\n                        this.pendingInLock.splice(0, waitOn.length);\n                    }\n                    return await result;\n                }\n                finally {\n                    this._debug('#_acquireLock', 'lock released for storage key', this.storageKey);\n                    this.lockAcquired = false;\n                }\n            });\n        }\n        finally {\n            this._debug('#_acquireLock', 'end');\n        }\n    }\n    /**\n     * Use instead of {@link GoTrueClient.getSession} inside the library. Loads the session\n     * via `__loadSession` (which may trigger a refresh if the access token is\n     * within the expiry margin) and runs `fn` with the result.\n     */\n    async _useSession(fn) {\n        this._debug('#_useSession', 'begin');\n        try {\n            // Concurrent callers may both reach __loadSession; storage reads are\n            // idempotent, and the only write path inside it (refresh) is\n            // single-flighted downstream by `refreshingDeferred` in\n            // `_callRefreshToken`. No serialization is needed at this layer.\n            const result = await this.__loadSession();\n            return await fn(result);\n        }\n        finally {\n            this._debug('#_useSession', 'end');\n        }\n    }\n    /**\n     * NEVER USE DIRECTLY!\n     *\n     * Always use `_useSession`.\n     */\n    async __loadSession() {\n        this._debug('#__loadSession()', 'begin');\n        if (this.lock != null && !this.lockAcquired) {\n            // TODO(v3): remove. Only meaningful on the legacy lock path.\n            this._debug('#__loadSession()', 'used outside of an acquired lock!', new Error().stack);\n        }\n        try {\n            let currentSession = null;\n            const maybeSession = await getItemAsync(this.storage, this.storageKey);\n            this._debug('#getSession()', 'session from storage', maybeSession);\n            if (maybeSession !== null) {\n                if (this._isValidSession(maybeSession)) {\n                    currentSession = maybeSession;\n                }\n                else {\n                    this._debug('#getSession()', 'session from storage is not valid');\n                    await this._removeSession();\n                }\n            }\n            if (!currentSession) {\n                return { data: { session: null }, error: null };\n            }\n            // A session is considered expired before the access token _actually_\n            // expires. When the autoRefreshToken option is off (or when the tab is\n            // in the background), very eager users of getSession() -- like\n            // realtime-js -- might send a valid JWT which will expire by the time it\n            // reaches the server.\n            const hasExpired = currentSession.expires_at\n                ? currentSession.expires_at * 1000 - Date.now() < EXPIRY_MARGIN_MS\n                : false;\n            this._debug('#__loadSession()', `session has${hasExpired ? '' : ' not'} expired`, 'expires_at', currentSession.expires_at);\n            if (!hasExpired) {\n                if (this.userStorage) {\n                    const maybeUser = (await getItemAsync(this.userStorage, this.storageKey + '-user'));\n                    if (maybeUser === null || maybeUser === void 0 ? void 0 : maybeUser.user) {\n                        currentSession.user = maybeUser.user;\n                    }\n                    else {\n                        currentSession.user = userNotAvailableProxy();\n                    }\n                }\n                // Wrap the user object with a warning proxy on the server\n                // This warns when properties of the user are accessed, not when session.user itself is accessed\n                if (this.storage.isServer &&\n                    currentSession.user &&\n                    !currentSession.user.__isUserNotAvailableProxy) {\n                    const suppressWarningRef = { value: this.suppressGetSessionWarning };\n                    currentSession.user = insecureUserWarningProxy(currentSession.user, suppressWarningRef);\n                    // Update the client-level suppression flag when the proxy suppresses the warning\n                    if (suppressWarningRef.value) {\n                        this.suppressGetSessionWarning = true;\n                    }\n                }\n                return { data: { session: currentSession }, error: null };\n            }\n            const { data: session, error } = await this._callRefreshToken(currentSession.refresh_token);\n            if (error) {\n                // Proactive-preserve mirror: `_callRefreshToken` keeps the session\n                // in storage when refresh fails non-retryably but the access token\n                // is still inside its real expiry window. Hand the caller the\n                // still-valid session instead of translating the refresh error\n                // into `session: null`. If the access token has actually expired,\n                // the session is genuinely dead and the error stands. Explicit\n                // refresh entry points (`refreshSession`, `setSession`)\n                // intentionally bypass this fallback — they want to know the\n                // refresh failed.\n                const accessTokenStillValid = !!(currentSession.expires_at && currentSession.expires_at * 1000 > Date.now());\n                if (accessTokenStillValid) {\n                    // Race guard: a concurrent `signOut` may have cleared storage\n                    // during the refresh attempt. Don't hand back a session that no\n                    // longer exists on disk.\n                    const stillStored = (await getItemAsync(this.storage, this.storageKey));\n                    if (stillStored && stillStored.refresh_token === currentSession.refresh_token) {\n                        return this._returnResult({ data: { session: currentSession }, error: null });\n                    }\n                }\n                return this._returnResult({ data: { session: null }, error });\n            }\n            return this._returnResult({ data: { session }, error: null });\n        }\n        finally {\n            this._debug('#__loadSession()', 'end');\n        }\n    }\n    /**\n     * Gets the current user details if there is an existing session. This method\n     * performs a network request to the Supabase Auth server, so the returned\n     * value is authentic and can be used to base authorization rules on.\n     *\n     * @param jwt Takes in an optional access token JWT. If no JWT is provided, the JWT from the current session is used.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - This method fetches the user object from the database instead of local session.\n     * - This method is useful for checking if the user is authorized because it validates the user's access token JWT on the server.\n     * - Should always be used when checking for user authorization on the server. On the client, you can instead use `getSession().session.user` for faster results. `getSession` is insecure on the server.\n     *\n     * @example Get the logged in user with the current existing session\n     * ```js\n     * const { data: { user } } = await supabase.auth.getUser()\n     * ```\n     *\n     * @exampleResponse Get the logged in user with the current existing session\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"user\": {\n     *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"aud\": \"authenticated\",\n     *       \"role\": \"authenticated\",\n     *       \"email\": \"example@email.com\",\n     *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"phone\": \"\",\n     *       \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *       \"app_metadata\": {\n     *         \"provider\": \"email\",\n     *         \"providers\": [\n     *           \"email\"\n     *         ]\n     *       },\n     *       \"user_metadata\": {\n     *         \"email\": \"example@email.com\",\n     *         \"email_verified\": false,\n     *         \"phone_verified\": false,\n     *         \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *       },\n     *       \"identities\": [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"identity_data\": {\n     *             \"email\": \"example@email.com\",\n     *             \"email_verified\": false,\n     *             \"phone_verified\": false,\n     *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *           },\n     *           \"provider\": \"email\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"example@email.com\"\n     *         }\n     *       ],\n     *       \"created_at\": \"2024-01-01T00:00:00Z\",\n     *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *       \"is_anonymous\": false\n     *     }\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     *\n     * @example Get the logged in user with a custom access token jwt\n     * ```js\n     * const { data: { user } } = await supabase.auth.getUser(jwt)\n     * ```\n     */\n    async getUser(jwt) {\n        if (jwt) {\n            return await this._getUser(jwt);\n        }\n        await this.initializePromise;\n        let result;\n        if (this.lock != null) {\n            // TODO(v3): remove legacy lock path\n            result = await this._acquireLock(this.lockAcquireTimeout, async () => {\n                return await this._getUser();\n            });\n        }\n        else {\n            result = await this._getUser();\n        }\n        if (result.data.user) {\n            this.suppressGetSessionWarning = true;\n        }\n        return result;\n    }\n    async _getUser(jwt) {\n        try {\n            if (jwt) {\n                return await _request(this.fetch, 'GET', `${this.url}/user`, {\n                    headers: this.headers,\n                    jwt: jwt,\n                    xform: _userResponse,\n                });\n            }\n            return await this._useSession(async (result) => {\n                var _a, _b, _c;\n                const { data, error } = result;\n                if (error) {\n                    throw error;\n                }\n                // returns an error if there is no access_token or custom authorization header\n                if (!((_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) && !this.hasCustomAuthorizationHeader) {\n                    return { data: { user: null }, error: new AuthSessionMissingError() };\n                }\n                return await _request(this.fetch, 'GET', `${this.url}/user`, {\n                    headers: this.headers,\n                    jwt: (_c = (_b = data.session) === null || _b === void 0 ? void 0 : _b.access_token) !== null && _c !== void 0 ? _c : undefined,\n                    xform: _userResponse,\n                });\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                if (isAuthSessionMissingError(error)) {\n                    // JWT contains a `session_id` which does not correspond to an active\n                    // session in the database, indicating the user is signed out.\n                    await this._removeSession();\n                }\n                return this._returnResult({ data: { user: null }, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Updates user data for a logged in user.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - In order to use the `updateUser()` method, the user needs to be signed in first.\n     * - By default, email updates sends a confirmation link to both the user's current and new email.\n     * To only send a confirmation link to the user's new email, disable **Secure email change** in your project's [email auth provider settings](/dashboard/project/_/auth/providers).\n     *\n     * @exampleDescription Update the email for an authenticated user\n     * Sends a \"Confirm Email Change\" email to the new address. If **Secure Email Change** is enabled (default), confirmation is also required from the **old email** before the change is applied. To skip dual confirmation and apply the change after only the new email is verified, disable **Secure Email Change** in the [Email Auth Provider settings](/dashboard/project/_/auth/providers?provider=Email).\n     *\n     * @example Update the email for an authenticated user\n     * ```js\n     * const { data, error } = await supabase.auth.updateUser({\n     *   email: 'new@email.com'\n     * })\n     * ```\n     *\n     * @exampleResponse Update the email for an authenticated user\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"user\": {\n     *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"aud\": \"authenticated\",\n     *       \"role\": \"authenticated\",\n     *       \"email\": \"example@email.com\",\n     *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"phone\": \"\",\n     *       \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"new_email\": \"new@email.com\",\n     *       \"email_change_sent_at\": \"2024-01-01T00:00:00Z\",\n     *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *       \"app_metadata\": {\n     *         \"provider\": \"email\",\n     *         \"providers\": [\n     *           \"email\"\n     *         ]\n     *       },\n     *       \"user_metadata\": {\n     *         \"email\": \"example@email.com\",\n     *         \"email_verified\": false,\n     *         \"phone_verified\": false,\n     *         \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *       },\n     *       \"identities\": [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"identity_data\": {\n     *             \"email\": \"example@email.com\",\n     *             \"email_verified\": false,\n     *             \"phone_verified\": false,\n     *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *           },\n     *           \"provider\": \"email\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"example@email.com\"\n     *         }\n     *       ],\n     *       \"created_at\": \"2024-01-01T00:00:00Z\",\n     *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *       \"is_anonymous\": false\n     *     }\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     *\n     * @exampleDescription Update the phone number for an authenticated user\n     * Sends a one-time password (OTP) to the new phone number.\n     *\n     * @example Update the phone number for an authenticated user\n     * ```js\n     * const { data, error } = await supabase.auth.updateUser({\n     *   phone: '123456789'\n     * })\n     * ```\n     *\n     * @example Update the password for an authenticated user\n     * ```js\n     * const { data, error } = await supabase.auth.updateUser({\n     *   password: 'new password'\n     * })\n     * ```\n     *\n     * @exampleDescription Update the user's metadata\n     * Updates the user's custom metadata.\n     *\n     * **Note**: The `data` field maps to the `auth.users.raw_user_meta_data` column in your Supabase database. When calling `getUser()`, the data will be available as `user.user_metadata`.\n     *\n     * @example Update the user's metadata\n     * ```js\n     * const { data, error } = await supabase.auth.updateUser({\n     *   data: { hello: 'world' }\n     * })\n     * ```\n     *\n     * @exampleDescription Update the user's password with a nonce\n     * If **Secure password change** is enabled in your [project's email provider settings](/dashboard/project/_/auth/providers), updating the user's password would require a nonce if the user **hasn't recently signed in**. The nonce is sent to the user's email or phone number. A user is deemed recently signed in if the session was created in the last 24 hours.\n     *\n     * @example Update the user's password with a nonce\n     * ```js\n     * const { data, error } = await supabase.auth.updateUser({\n     *   password: 'new password',\n     *   nonce: '123456'\n     * })\n     * ```\n     */\n    async updateUser(attributes, options = {}) {\n        await this.initializePromise;\n        if (this.lock != null) {\n            // TODO(v3): remove legacy lock path\n            return await this._acquireLock(this.lockAcquireTimeout, async () => {\n                return await this._updateUser(attributes, options);\n            });\n        }\n        return await this._updateUser(attributes, options);\n    }\n    async _updateUser(attributes, options = {}) {\n        let flowId = null;\n        try {\n            return await this._useSession(async (result) => {\n                const { data: sessionData, error: sessionError } = result;\n                if (sessionError) {\n                    throw sessionError;\n                }\n                if (!sessionData.session) {\n                    throw new AuthSessionMissingError();\n                }\n                const session = sessionData.session;\n                let codeChallenge = null;\n                let codeChallengeMethod = null;\n                if (this.flowType === 'pkce' && attributes.email != null) {\n                    ;\n                    [codeChallenge, codeChallengeMethod, flowId] = await this._getCodeChallengeAndMethod();\n                }\n                const { data, error: userError } = await _request(this.fetch, 'PUT', `${this.url}/user`, {\n                    headers: this.headers,\n                    redirectTo: this._maybeAppendFlowIdToRedirect(options === null || options === void 0 ? void 0 : options.emailRedirectTo, flowId),\n                    body: Object.assign(Object.assign({}, attributes), { code_challenge: codeChallenge, code_challenge_method: codeChallengeMethod }),\n                    jwt: session.access_token,\n                    xform: _userResponse,\n                });\n                if (userError) {\n                    throw userError;\n                }\n                session.user = data.user;\n                await this._saveSession(session);\n                await this._notifyAllSubscribers('USER_UPDATED', session);\n                return this._returnResult({ data: { user: session.user }, error: null });\n            });\n        }\n        catch (error) {\n            await removePKCEVerifier(this.storage, this.storageKey, flowId);\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { user: null }, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Sets the session data from the current session. If the current session is expired, setSession will take care of refreshing it to obtain a new session.\n     * If the refresh token or access token in the current session is invalid, an error will be thrown.\n     * @param currentSession The current session that minimally contains an access token and refresh token.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - This method sets the session using an `access_token` and `refresh_token`.\n     * - If successful, a `SIGNED_IN` event is emitted.\n     *\n     * @exampleDescription Set the session\n     * Sets the session data from an access_token and refresh_token, then returns an auth response or error.\n     *\n     * @example Set the session\n     * ```js\n     *   const { data, error } = await supabase.auth.setSession({\n     *     access_token,\n     *     refresh_token\n     *   })\n     * ```\n     *\n     * @exampleResponse Set the session\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"user\": {\n     *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"aud\": \"authenticated\",\n     *       \"role\": \"authenticated\",\n     *       \"email\": \"example@email.com\",\n     *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"phone\": \"\",\n     *       \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *       \"app_metadata\": {\n     *         \"provider\": \"email\",\n     *         \"providers\": [\n     *           \"email\"\n     *         ]\n     *       },\n     *       \"user_metadata\": {\n     *         \"email\": \"example@email.com\",\n     *         \"email_verified\": false,\n     *         \"phone_verified\": false,\n     *         \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *       },\n     *       \"identities\": [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"identity_data\": {\n     *             \"email\": \"example@email.com\",\n     *             \"email_verified\": false,\n     *             \"phone_verified\": false,\n     *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *           },\n     *           \"provider\": \"email\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"example@email.com\"\n     *         }\n     *       ],\n     *       \"created_at\": \"2024-01-01T00:00:00Z\",\n     *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *       \"is_anonymous\": false\n     *     },\n     *     \"session\": {\n     *       \"access_token\": \"<ACCESS_TOKEN>\",\n     *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n     *       \"user\": {\n     *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *         \"aud\": \"authenticated\",\n     *         \"role\": \"authenticated\",\n     *         \"email\": \"example@email.com\",\n     *         \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *         \"phone\": \"\",\n     *         \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *         \"last_sign_in_at\": \"11111111-1111-1111-1111-111111111111\",\n     *         \"app_metadata\": {\n     *           \"provider\": \"email\",\n     *           \"providers\": [\n     *             \"email\"\n     *           ]\n     *         },\n     *         \"user_metadata\": {\n     *           \"email\": \"example@email.com\",\n     *           \"email_verified\": false,\n     *           \"phone_verified\": false,\n     *           \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *         },\n     *         \"identities\": [\n     *           {\n     *             \"identity_id\": \"2024-01-01T00:00:00Z\",\n     *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"identity_data\": {\n     *               \"email\": \"example@email.com\",\n     *               \"email_verified\": false,\n     *               \"phone_verified\": false,\n     *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *             },\n     *             \"provider\": \"email\",\n     *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *             \"created_at\": \"2024-01-01T00:00:00Z\",\n     *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *             \"email\": \"example@email.com\"\n     *           }\n     *         ],\n     *         \"created_at\": \"2024-01-01T00:00:00Z\",\n     *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *         \"is_anonymous\": false\n     *       },\n     *       \"token_type\": \"bearer\",\n     *       \"expires_in\": 3500,\n     *       \"expires_at\": 1700000000\n     *     }\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     */\n    async setSession(currentSession) {\n        await this.initializePromise;\n        if (this.lock != null) {\n            // TODO(v3): remove legacy lock path\n            return await this._acquireLock(this.lockAcquireTimeout, async () => {\n                return await this._setSession(currentSession);\n            });\n        }\n        return await this._setSession(currentSession);\n    }\n    async _setSession(currentSession) {\n        try {\n            if (!currentSession.access_token || !currentSession.refresh_token) {\n                throw new AuthSessionMissingError();\n            }\n            const timeNow = Date.now() / 1000;\n            let expiresAt = timeNow;\n            let hasExpired = true;\n            let session = null;\n            const { payload } = decodeJWT(currentSession.access_token);\n            if (payload.exp) {\n                expiresAt = payload.exp;\n                hasExpired = expiresAt <= timeNow;\n            }\n            if (hasExpired) {\n                const { data: refreshedSession, error } = await this._callRefreshToken(currentSession.refresh_token);\n                if (error) {\n                    return this._returnResult({ data: { user: null, session: null }, error: error });\n                }\n                if (!refreshedSession) {\n                    return { data: { user: null, session: null }, error: null };\n                }\n                session = refreshedSession;\n            }\n            else {\n                const { data, error } = await this._getUser(currentSession.access_token);\n                if (error) {\n                    return this._returnResult({ data: { user: null, session: null }, error });\n                }\n                session = {\n                    access_token: currentSession.access_token,\n                    refresh_token: currentSession.refresh_token,\n                    user: data.user,\n                    token_type: 'bearer',\n                    expires_in: expiresAt - timeNow,\n                    expires_at: expiresAt,\n                };\n                await this._saveSession(session);\n                await this._notifyAllSubscribers('SIGNED_IN', session);\n            }\n            return this._returnResult({ data: { user: session.user, session }, error: null });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { session: null, user: null }, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Returns a new session, regardless of expiry status.\n     * Takes in an optional current session. If not passed in, then refreshSession() will attempt to retrieve it from getSession().\n     * If the current session's refresh token is invalid, an error will be thrown.\n     * @param currentSession The current session. If passed in, it must contain a refresh token.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - This method will refresh and return a new session whether the current one is expired or not.\n     *\n     * @example Refresh session using the current session\n     * ```js\n     * const { data, error } = await supabase.auth.refreshSession()\n     * const { session, user } = data\n     * ```\n     *\n     * @exampleResponse Refresh session using the current session\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"user\": {\n     *       \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"aud\": \"authenticated\",\n     *       \"role\": \"authenticated\",\n     *       \"email\": \"example@email.com\",\n     *       \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"phone\": \"\",\n     *       \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *       \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *       \"app_metadata\": {\n     *         \"provider\": \"email\",\n     *         \"providers\": [\n     *           \"email\"\n     *         ]\n     *       },\n     *       \"user_metadata\": {\n     *         \"email\": \"example@email.com\",\n     *         \"email_verified\": false,\n     *         \"phone_verified\": false,\n     *         \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *       },\n     *       \"identities\": [\n     *         {\n     *           \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *           \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *           \"identity_data\": {\n     *             \"email\": \"example@email.com\",\n     *             \"email_verified\": false,\n     *             \"phone_verified\": false,\n     *             \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *           },\n     *           \"provider\": \"email\",\n     *           \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *           \"created_at\": \"2024-01-01T00:00:00Z\",\n     *           \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *           \"email\": \"example@email.com\"\n     *         }\n     *       ],\n     *       \"created_at\": \"2024-01-01T00:00:00Z\",\n     *       \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *       \"is_anonymous\": false\n     *     },\n     *     \"session\": {\n     *       \"access_token\": \"<ACCESS_TOKEN>\",\n     *       \"token_type\": \"bearer\",\n     *       \"expires_in\": 3600,\n     *       \"expires_at\": 1700000000,\n     *       \"refresh_token\": \"<REFRESH_TOKEN>\",\n     *       \"user\": {\n     *         \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *         \"aud\": \"authenticated\",\n     *         \"role\": \"authenticated\",\n     *         \"email\": \"example@email.com\",\n     *         \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *         \"phone\": \"\",\n     *         \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n     *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *         \"app_metadata\": {\n     *           \"provider\": \"email\",\n     *           \"providers\": [\n     *             \"email\"\n     *           ]\n     *         },\n     *         \"user_metadata\": {\n     *           \"email\": \"example@email.com\",\n     *           \"email_verified\": false,\n     *           \"phone_verified\": false,\n     *           \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *         },\n     *         \"identities\": [\n     *           {\n     *             \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *             \"id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n     *             \"identity_data\": {\n     *               \"email\": \"example@email.com\",\n     *               \"email_verified\": false,\n     *               \"phone_verified\": false,\n     *               \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *             },\n     *             \"provider\": \"email\",\n     *             \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *             \"created_at\": \"2024-01-01T00:00:00Z\",\n     *             \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *             \"email\": \"example@email.com\"\n     *           }\n     *         ],\n     *         \"created_at\": \"2024-01-01T00:00:00Z\",\n     *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *         \"is_anonymous\": false\n     *       }\n     *     }\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     *\n     * @example Refresh session using a refresh token\n     * ```js\n     * const { data, error } = await supabase.auth.refreshSession({ refresh_token })\n     * const { session, user } = data\n     * ```\n     */\n    async refreshSession(currentSession) {\n        await this.initializePromise;\n        if (this.lock != null) {\n            // TODO(v3): remove legacy lock path\n            return await this._acquireLock(this.lockAcquireTimeout, async () => {\n                return await this._refreshSession(currentSession);\n            });\n        }\n        return await this._refreshSession(currentSession);\n    }\n    async _refreshSession(currentSession) {\n        try {\n            return await this._useSession(async (result) => {\n                var _a;\n                if (!currentSession) {\n                    const { data, error } = result;\n                    if (error) {\n                        throw error;\n                    }\n                    currentSession = (_a = data.session) !== null && _a !== void 0 ? _a : undefined;\n                }\n                if (!(currentSession === null || currentSession === void 0 ? void 0 : currentSession.refresh_token)) {\n                    throw new AuthSessionMissingError();\n                }\n                const { data: session, error } = await this._callRefreshToken(currentSession.refresh_token);\n                if (error) {\n                    return this._returnResult({ data: { user: null, session: null }, error: error });\n                }\n                if (!session) {\n                    return this._returnResult({ data: { user: null, session: null }, error: null });\n                }\n                return this._returnResult({ data: { user: session.user, session }, error: null });\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { user: null, session: null }, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Gets the session data from a URL string\n     */\n    async _getSessionFromURL(params, callbackUrlType) {\n        var _a;\n        try {\n            if (!isBrowser())\n                throw new AuthImplicitGrantRedirectError('No browser detected.');\n            // If there's an error in the URL, it doesn't matter what flow it is, we just return the error.\n            if (params.error || params.error_description || params.error_code) {\n                // The error class returned implies that the redirect is from an implicit grant flow\n                // but it could also be from a redirect error from a PKCE flow.\n                throw new AuthImplicitGrantRedirectError(params.error_description || 'Error in URL with unspecified error_description', {\n                    error: params.error || 'unspecified_error',\n                    code: params.error_code || 'unspecified_code',\n                });\n            }\n            // Checks for mismatches between the flowType initialised in the client and the URL parameters\n            switch (callbackUrlType) {\n                case 'implicit':\n                    if (this.flowType === 'pkce') {\n                        throw new AuthPKCEGrantCodeExchangeError('Not a valid PKCE flow url.');\n                    }\n                    break;\n                case 'pkce':\n                    if (this.flowType === 'implicit') {\n                        throw new AuthImplicitGrantRedirectError('Not a valid implicit grant flow url.');\n                    }\n                    break;\n                default:\n                // there's no mismatch so we continue\n            }\n            // Since this is a redirect for PKCE, we attempt to retrieve the code from the URL for the code exchange\n            if (callbackUrlType === 'pkce') {\n                this._debug('#_initialize()', 'begin', 'is PKCE flow', true);\n                if (!params.code)\n                    throw new AuthPKCEGrantCodeExchangeError('No code detected.');\n                const { data, error } = await this._exchangeCodeForSession(params.code, {\n                    flowId: params[PKCE_FLOW_ID_PARAM],\n                });\n                if (error)\n                    throw error;\n                const url = new URL(window.location.href);\n                url.searchParams.delete('code');\n                url.searchParams.delete(PKCE_FLOW_ID_PARAM);\n                window.history.replaceState(window.history.state, '', url.toString());\n                return {\n                    data: { session: data.session, redirectType: (_a = data.redirectType) !== null && _a !== void 0 ? _a : null },\n                    error: null,\n                };\n            }\n            const { provider_token, provider_refresh_token, access_token, refresh_token, expires_in, expires_at, token_type, } = params;\n            if (!access_token || !expires_in || !refresh_token || !token_type) {\n                throw new AuthImplicitGrantRedirectError('No session defined in URL');\n            }\n            const timeNow = Math.round(Date.now() / 1000);\n            const expiresIn = parseInt(expires_in);\n            let expiresAt = timeNow + expiresIn;\n            if (expires_at) {\n                expiresAt = parseInt(expires_at);\n            }\n            const actuallyExpiresIn = expiresAt - timeNow;\n            if (actuallyExpiresIn * 1000 <= AUTO_REFRESH_TICK_DURATION_MS) {\n                console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${actuallyExpiresIn}s, should have been closer to ${expiresIn}s`);\n            }\n            const issuedAt = expiresAt - expiresIn;\n            if (timeNow - issuedAt >= 120) {\n                console.warn('@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale', issuedAt, expiresAt, timeNow);\n            }\n            else if (timeNow - issuedAt < 0) {\n                console.warn('@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew', issuedAt, expiresAt, timeNow);\n            }\n            const { data, error } = await this._getUser(access_token);\n            if (error)\n                throw error;\n            const session = {\n                provider_token,\n                provider_refresh_token,\n                access_token,\n                expires_in: expiresIn,\n                expires_at: expiresAt,\n                refresh_token,\n                token_type: token_type,\n                user: data.user,\n            };\n            // Remove tokens from URL\n            window.location.hash = '';\n            this._debug('#_getSessionFromURL()', 'clearing window.location.hash');\n            return this._returnResult({ data: { session, redirectType: params.type }, error: null });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { session: null, redirectType: null }, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Checks if the current URL contains parameters given by an implicit oauth grant flow (https://www.rfc-editor.org/rfc/rfc6749.html#section-4.2)\n     *\n     * If `detectSessionInUrl` is a function, it will be called with the URL and params to determine\n     * if the URL should be processed as a Supabase auth callback. This allows users to exclude\n     * URLs from other OAuth providers (e.g., Facebook Login) that also return access_token in the fragment.\n     */\n    _isImplicitGrantCallback(params) {\n        if (typeof this.detectSessionInUrl === 'function') {\n            return this.detectSessionInUrl(new URL(window.location.href), params);\n        }\n        return Boolean(params.access_token || params.error || params.error_description || params.error_code);\n    }\n    /**\n     * Checks if the current URL and backing storage contain parameters given by a PKCE flow\n     */\n    async _isPKCECallback(params) {\n        if (!params.code) {\n            return false;\n        }\n        const flowId = validatePKCEFlowId(params[PKCE_FLOW_ID_PARAM]);\n        if (flowId &&\n            (await getItemAsync(this.storage, pkceVerifierSlotKey(this.storageKey, flowId)))) {\n            return true;\n        }\n        const currentStorageContent = await getItemAsync(this.storage, `${this.storageKey}-code-verifier`);\n        return !!currentStorageContent;\n    }\n    /**\n     * Inside a browser context, `signOut()` will remove the logged in user from the browser session and log them out - removing all items from localstorage and then trigger a `\"SIGNED_OUT\"` event.\n     *\n     * For server-side management, you can revoke all refresh tokens for a user by passing a user's JWT through to `auth.api.signOut(JWT: string)`.\n     * There is no way to revoke a user's access token jwt until it expires. It is recommended to set a shorter expiry on the jwt for this reason.\n     *\n     * If using `others` scope, no `SIGNED_OUT` event is fired!\n     *\n     * **Warning:** the default `scope` is `'global'`. This signs the user out of\n     * **every device they are currently signed in on**, not just the current\n     * tab/session. If you only want to sign the user out of the current session\n     * (the behavior most other auth libraries default to), pass\n     * `{ scope: 'local' }` explicitly.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - In order to use the `signOut()` method, the user needs to be signed in first.\n     * - By default, `signOut()` uses the **global** scope, which signs out the user\n     *   on every device they are signed in on (not just the current one). Pass\n     *   `{ scope: 'local' }` to only sign out the current session. This is\n     *   usually what apps want on a \"Sign out\" button, especially when users\n     *   sign in from multiple devices and do not expect signing out of one to\n     *   terminate the others.\n     * - Since Supabase Auth uses JWTs for authentication, the access token JWT will be valid until it's expired. When the user signs out, Supabase revokes the refresh token and deletes the JWT from the client-side. This does not revoke the JWT and it will still be valid until it expires.\n     *\n     * @example Sign out of every device (global – default)\n     * ```js\n     * const { error } = await supabase.auth.signOut()\n     * ```\n     *\n     * @example Sign out only the current session (recommended for most apps)\n     * ```js\n     * const { error } = await supabase.auth.signOut({ scope: 'local' })\n     * ```\n     *\n     * @example Sign out of all other sessions, keep the current one\n     * ```js\n     * const { error } = await supabase.auth.signOut({ scope: 'others' })\n     * ```\n     */\n    async signOut(options = { scope: 'global' }) {\n        await this.initializePromise;\n        if (this.lock != null) {\n            // TODO(v3): remove legacy lock path\n            return await this._acquireLock(this.lockAcquireTimeout, async () => {\n                return await this._signOut(options);\n            });\n        }\n        return await this._signOut(options);\n    }\n    async _signOut({ scope } = { scope: 'global' }) {\n        return await this._useSession(async (result) => {\n            var _a;\n            const removeCurrentSession = async () => {\n                await this._removeSession();\n            };\n            const { data, error: sessionError } = result;\n            if (sessionError && !isAuthSessionMissingError(sessionError)) {\n                return this._returnResult({ error: sessionError });\n            }\n            const accessToken = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token;\n            if (accessToken) {\n                const { error } = await this.admin.signOut(accessToken, scope);\n                if (error) {\n                    // ignore 404s since user might not exist anymore\n                    // ignore 401s since an invalid or expired JWT should sign out the current session\n                    if (!((isAuthApiError(error) &&\n                        (error.status === 404 || error.status === 401 || error.status === 403)) ||\n                        isAuthSessionMissingError(error))) {\n                        if (scope !== 'others') {\n                            await removeCurrentSession();\n                        }\n                        return this._returnResult({ error });\n                    }\n                }\n            }\n            if (scope !== 'others') {\n                await removeCurrentSession();\n            }\n            return this._returnResult({ error: null });\n        });\n    }\n    /**  *\n     * @category Auth\n     *\n     * @remarks\n     * - Subscribes to important events occurring on the user's session.\n     * - Use on the frontend/client. It is less useful on the server.\n     * - Events are emitted across tabs to keep your application's UI up-to-date. Some events can fire very frequently, based on the number of tabs open. Use a quick and efficient callback function, and defer or debounce as many operations as you can to be performed outside of the callback.\n     * - Callbacks can be `async` and can safely call other Supabase auth methods (`getUser`, `setSession`, etc.) from inside the callback.\n     * - Keep callbacks quick. Events are awaited in order, so a slow callback delays subsequent events to subscribers in this tab.\n     * - Emitted events:\n     *   - `INITIAL_SESSION`\n     *     - Emitted right after the Supabase client is constructed and the initial session from storage is loaded.\n     *   - `SIGNED_IN`\n     *     - Emitted each time a user session is confirmed or re-established, including on user sign in and when refocusing a tab.\n     *     - Avoid making assumptions as to when this event is fired, this may occur even when the user is already signed in. Instead, check the user object attached to the event to see if a new user has signed in and update your application's UI.\n     *     - This event can fire very frequently depending on the number of tabs open in your application.\n     *   - `SIGNED_OUT`\n     *     - Emitted when the user signs out. This can be after:\n     *       - A call to `supabase.auth.signOut()`.\n     *       - After the user's session has expired for any reason:\n     *         - User has signed out on another device.\n     *         - The session has reached its timebox limit or inactivity timeout.\n     *         - User has signed in on another device with single session per user enabled.\n     *         - Check the [User Sessions](/docs/guides/auth/sessions) docs for more information.\n     *     - Use this to clean up any local storage your application has associated with the user.\n     *   - `TOKEN_REFRESHED`\n     *     - Emitted each time a new access and refresh token are fetched for the signed in user.\n     *     - It's best practice and highly recommended to extract the access token (JWT) and store it in memory for further use in your application.\n     *       - Avoid frequent calls to `supabase.auth.getSession()` for the same purpose.\n     *     - There is a background process that keeps track of when the session should be refreshed so you will always receive valid tokens by listening to this event.\n     *     - The frequency of this event is related to the JWT expiry limit configured on your project.\n     *   - `USER_UPDATED`\n     *     - Emitted each time the `supabase.auth.updateUser()` method finishes successfully. Listen to it to update your application's UI based on new profile information.\n     *   - `PASSWORD_RECOVERY`\n     *     - Emitted instead of the `SIGNED_IN` event when the user lands on a page that includes a password recovery link in the URL.\n     *     - Use it to show a UI to the user where they can [reset their password](/docs/guides/auth/passwords#resetting-a-users-password-forgot-password).\n     *\n     * @example Listen to auth changes\n     * ```js\n     * const { data } = supabase.auth.onAuthStateChange((event, session) => {\n     *   console.log(event, session)\n     *\n     *   if (event === 'INITIAL_SESSION') {\n     *     // handle initial session\n     *   } else if (event === 'SIGNED_IN') {\n     *     // handle sign in event\n     *   } else if (event === 'SIGNED_OUT') {\n     *     // handle sign out event\n     *   } else if (event === 'PASSWORD_RECOVERY') {\n     *     // handle password recovery event\n     *   } else if (event === 'TOKEN_REFRESHED') {\n     *     // handle token refreshed event\n     *   } else if (event === 'USER_UPDATED') {\n     *     // handle user updated event\n     *   }\n     * })\n     *\n     * // call unsubscribe to remove the callback\n     * data.subscription.unsubscribe()\n     * ```\n     *\n     * @exampleDescription Listen to sign out\n     * Make sure you clear out any local data, such as local and session storage, after the client library has detected the user's sign out.\n     *\n     * @example Listen to sign out\n     * ```js\n     * supabase.auth.onAuthStateChange((event, session) => {\n     *   if (event === 'SIGNED_OUT') {\n     *     console.log('SIGNED_OUT', session)\n     *\n     *     // clear local and session storage\n     *     [\n     *       window.localStorage,\n     *       window.sessionStorage,\n     *     ].forEach((storage) => {\n     *       Object.entries(storage)\n     *         .forEach(([key]) => {\n     *           storage.removeItem(key)\n     *         })\n     *     })\n     *   }\n     * })\n     * ```\n     *\n     * @exampleDescription Store OAuth provider tokens on sign in\n     * When using [OAuth (Social Login)](/docs/guides/auth/social-login) you sometimes wish to get access to the provider's access token and refresh token, in order to call provider APIs in the name of the user.\n     *\n     * For example, if you are using [Sign in with Google](/docs/guides/auth/social-login/auth-google) you may want to use the provider token to call Google APIs on behalf of the user. Supabase Auth does not keep track of the provider access and refresh token, but does return them for you once, immediately after sign in. You can use the `onAuthStateChange` method to listen for the presence of the provider tokens and store them in local storage. You can further send them to your server's APIs for use on the backend.\n     *\n     * Finally, make sure you remove them from local storage on the `SIGNED_OUT` event. If the OAuth provider supports token revocation, make sure you call those APIs either from the frontend or schedule them to be called on the backend.\n     *\n     * @example Store OAuth provider tokens on sign in\n     * ```js\n     * // Register this immediately after calling createClient!\n     * // Because signInWithOAuth causes a redirect, you need to fetch the\n     * // provider tokens from the callback.\n     * supabase.auth.onAuthStateChange((event, session) => {\n     *   if (session && session.provider_token) {\n     *     window.localStorage.setItem('oauth_provider_token', session.provider_token)\n     *   }\n     *\n     *   if (session && session.provider_refresh_token) {\n     *     window.localStorage.setItem('oauth_provider_refresh_token', session.provider_refresh_token)\n     *   }\n     *\n     *   if (event === 'SIGNED_OUT') {\n     *     window.localStorage.removeItem('oauth_provider_token')\n     *     window.localStorage.removeItem('oauth_provider_refresh_token')\n     *   }\n     * })\n     * ```\n     *\n     * @exampleDescription Use React Context for the User's session\n     * Instead of relying on `supabase.auth.getSession()` within your React components, you can use a [React Context](https://react.dev/reference/react/createContext) to store the latest session information from the `onAuthStateChange` callback and access it that way.\n     *\n     * @example Use React Context for the User's session\n     * ```js\n     * const SessionContext = React.createContext(null)\n     *\n     * function main() {\n     *   const [session, setSession] = React.useState(null)\n     *\n     *   React.useEffect(() => {\n     *     const {data: { subscription }} = supabase.auth.onAuthStateChange(\n     *       (event, session) => {\n     *         if (event === 'SIGNED_OUT') {\n     *           setSession(null)\n     *         } else if (session) {\n     *           setSession(session)\n     *         }\n     *       })\n     *\n     *     return () => {\n     *       subscription.unsubscribe()\n     *     }\n     *   }, [])\n     *\n     *   return (\n     *     <SessionContext.Provider value={session}>\n     *       <App />\n     *     </SessionContext.Provider>\n     *   )\n     * }\n     * ```\n     *\n     * @example Listen to password recovery events\n     * ```js\n     * supabase.auth.onAuthStateChange((event, session) => {\n     *   if (event === 'PASSWORD_RECOVERY') {\n     *     console.log('PASSWORD_RECOVERY', session)\n     *     // show screen to update user's password\n     *     showPasswordResetScreen(true)\n     *   }\n     * })\n     * ```\n     *\n     * @example Listen to sign in\n     * ```js\n     * supabase.auth.onAuthStateChange((event, session) => {\n     *   if (event === 'SIGNED_IN') console.log('SIGNED_IN', session)\n     * })\n     * ```\n     *\n     * @example Listen to token refresh\n     * ```js\n     * supabase.auth.onAuthStateChange((event, session) => {\n     *   if (event === 'TOKEN_REFRESHED') console.log('TOKEN_REFRESHED', session)\n     * })\n     * ```\n     *\n     * @example Listen to user updates\n     * ```js\n     * supabase.auth.onAuthStateChange((event, session) => {\n     *   if (event === 'USER_UPDATED') console.log('USER_UPDATED', session)\n     * })\n     * ```\n     */\n    onAuthStateChange(callback) {\n        const id = generateCallbackId();\n        const subscription = {\n            id,\n            callback,\n            unsubscribe: () => {\n                this._debug('#unsubscribe()', 'state change callback with id removed', id);\n                this.stateChangeEmitters.delete(id);\n            },\n        };\n        this._debug('#onAuthStateChange()', 'registered callback with id', id);\n        this.stateChangeEmitters.set(id, subscription);\n        (async () => {\n            await this.initializePromise;\n            if (this.lock != null) {\n                // TODO(v3): remove legacy lock path\n                await this._acquireLock(this.lockAcquireTimeout, async () => {\n                    this._emitInitialSession(id);\n                });\n            }\n            else {\n                await this._emitInitialSession(id);\n            }\n        })();\n        return { data: { subscription } };\n    }\n    async _emitInitialSession(id) {\n        return await this._useSession(async (result) => {\n            var _a, _b;\n            try {\n                const { data: { session }, error, } = result;\n                if (error)\n                    throw error;\n                await ((_a = this.stateChangeEmitters.get(id)) === null || _a === void 0 ? void 0 : _a.callback('INITIAL_SESSION', session));\n                this._debug('INITIAL_SESSION', 'callback id', id, 'session', session);\n            }\n            catch (err) {\n                await ((_b = this.stateChangeEmitters.get(id)) === null || _b === void 0 ? void 0 : _b.callback('INITIAL_SESSION', null));\n                this._debug('INITIAL_SESSION', 'callback id', id, 'error', err);\n                if (isAuthSessionMissingError(err) ||\n                    isAuthRetryableFetchError(err) ||\n                    (isAuthApiError(err) &&\n                        (err.code === 'refresh_token_not_found' ||\n                            err.code === 'refresh_token_already_used' ||\n                            err.code === 'session_expired'))) {\n                    // A missing session, a transient/aborted network failure (e.g. a\n                    // superseded page navigation cancelling the in-flight request), or\n                    // a dead refresh token (e.g. stale SSR cookies) is not an\n                    // application error — warn rather than surface it raw.\n                    console.warn(err);\n                }\n                else {\n                    console.error(err);\n                }\n            }\n        });\n    }\n    /**\n     * Sends a password reset request to an email address. This method supports the PKCE flow.\n     *\n     * @param email The email address of the user.\n     * @param options.redirectTo The URL to send the user to after they click the password reset link.\n     * @param options.captchaToken Verification token received when the user completes the captcha on the site.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - The password reset flow consist of 2 broad steps: (i) Allow the user to login via the password reset link; (ii) Update the user's password.\n     * - The `resetPasswordForEmail()` only sends a password reset link to the user's email.\n     * To update the user's password, see [`updateUser()`](/docs/reference/javascript/auth-updateuser).\n     * - A `PASSWORD_RECOVERY` event will be emitted when the password recovery link is clicked.\n     * You can use [`onAuthStateChange()`](/docs/reference/javascript/auth-onauthstatechange) to listen and invoke a callback function on these events.\n     * - When the user clicks the reset link in the email they are redirected back to your application.\n     * You can configure the URL that the user is redirected to with the `redirectTo` parameter.\n     * See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project.\n     * - After the user has been redirected successfully, prompt them for a new password and call `updateUser()`:\n     * ```js\n     * const { data, error } = await supabase.auth.updateUser({\n     *   password: new_password\n     * })\n     * ```\n     *\n     * @example Reset password\n     * ```js\n     * const { data, error } = await supabase.auth.resetPasswordForEmail(email, {\n     *   redirectTo: 'https://example.com/update-password',\n     * })\n     * ```\n     *\n     * @exampleResponse Reset password\n     * ```json\n     * {\n     *   data: {}\n     *   error: null\n     * }\n     * ```\n     *\n     * @example Reset password (React)\n     * ```js\n     * /**\n     *  * Step 1: Send the user an email to get a password reset token.\n     *  * This email contains a link which sends the user back to your application.\n     *  *\\/\n     * const { data, error } = await supabase.auth\n     *   .resetPasswordForEmail('user@email.com')\n     *\n     * /**\n     *  * Step 2: Once the user is redirected back to your application,\n     *  * ask the user to reset their password.\n     *  *\\/\n     *  useEffect(() => {\n     *    supabase.auth.onAuthStateChange(async (event, session) => {\n     *      if (event == \"PASSWORD_RECOVERY\") {\n     *        const newPassword = prompt(\"What would you like your new password to be?\");\n     *        const { data, error } = await supabase.auth\n     *          .updateUser({ password: newPassword })\n     *\n     *        if (data) alert(\"Password updated successfully!\")\n     *        if (error) alert(\"There was an error updating your password.\")\n     *      }\n     *    })\n     *  }, [])\n     * ```\n     */\n    async resetPasswordForEmail(email, options = {}) {\n        let codeChallenge = null;\n        let codeChallengeMethod = null;\n        let flowId = null;\n        if (this.flowType === 'pkce') {\n            ;\n            [codeChallenge, codeChallengeMethod, flowId] = await this._getCodeChallengeAndMethod(true // isPasswordRecovery\n            );\n        }\n        try {\n            return await _request(this.fetch, 'POST', `${this.url}/recover`, {\n                body: {\n                    email,\n                    code_challenge: codeChallenge,\n                    code_challenge_method: codeChallengeMethod,\n                    gotrue_meta_security: { captcha_token: options.captchaToken },\n                },\n                headers: this.headers,\n                redirectTo: this._maybeAppendFlowIdToRedirect(options.redirectTo, flowId),\n            });\n        }\n        catch (error) {\n            await removePKCEVerifier(this.storage, this.storageKey, flowId);\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Gets all the identities linked to a user.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - The user needs to be signed in to call `getUserIdentities()`.\n     *\n     * @example Returns a list of identities linked to the user\n     * ```js\n     * const { data, error } = await supabase.auth.getUserIdentities()\n     * ```\n     *\n     * @exampleResponse Returns a list of identities linked to the user\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"identities\": [\n     *       {\n     *         \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n     *         \"id\": \"2024-01-01T00:00:00Z\",\n     *         \"user_id\": \"2024-01-01T00:00:00Z\",\n     *         \"identity_data\": {\n     *           \"email\": \"example@email.com\",\n     *           \"email_verified\": false,\n     *           \"phone_verified\": false,\n     *           \"sub\": \"11111111-1111-1111-1111-111111111111\"\n     *         },\n     *         \"provider\": \"email\",\n     *         \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n     *         \"created_at\": \"2024-01-01T00:00:00Z\",\n     *         \"updated_at\": \"2024-01-01T00:00:00Z\",\n     *         \"email\": \"example@email.com\"\n     *       }\n     *     ]\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     */\n    async getUserIdentities() {\n        var _a;\n        try {\n            const { data, error } = await this.getUser();\n            if (error)\n                throw error;\n            return this._returnResult({ data: { identities: (_a = data.user.identities) !== null && _a !== void 0 ? _a : [] }, error: null });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**  *\n     * @category Auth\n     *\n     * @remarks\n     * - The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).\n     * - The user needs to be signed in to call `linkIdentity()`.\n     * - If the candidate identity is already linked to the existing user or another user, `linkIdentity()` will fail.\n     * - If `linkIdentity` is run in the browser, the user is automatically redirected to the returned URL. On the server, you should handle the redirect.\n     *\n     * @example Link an identity to a user\n     * ```js\n     * const { data, error } = await supabase.auth.linkIdentity({\n     *   provider: 'github'\n     * })\n     * ```\n     *\n     * @exampleResponse Link an identity to a user\n     * ```json\n     * {\n     *   data: {\n     *     provider: 'github',\n     *     url: <PROVIDER_URL_TO_REDIRECT_TO>,\n     *     flowId: <PKCE_FLOW_ID_OR_NULL>\n     *   },\n     *   error: null\n     * }\n     * ```\n     */\n    async linkIdentity(credentials) {\n        if ('token' in credentials) {\n            return this.linkIdentityIdToken(credentials);\n        }\n        return this.linkIdentityOAuth(credentials);\n    }\n    async linkIdentityOAuth(credentials) {\n        var _a;\n        let flowId = null;\n        try {\n            const { data, error } = await this._useSession(async (result) => {\n                var _a, _b, _c, _d, _f;\n                const { data, error } = result;\n                if (error)\n                    throw error;\n                const { url, flowId: urlFlowId } = await this._getUrlForProvider(`${this.url}/user/identities/authorize`, credentials.provider, {\n                    redirectTo: (_a = credentials.options) === null || _a === void 0 ? void 0 : _a.redirectTo,\n                    scopes: (_b = credentials.options) === null || _b === void 0 ? void 0 : _b.scopes,\n                    queryParams: (_c = credentials.options) === null || _c === void 0 ? void 0 : _c.queryParams,\n                    skipBrowserRedirect: true,\n                });\n                flowId = urlFlowId;\n                return await _request(this.fetch, 'GET', url, {\n                    headers: this.headers,\n                    jwt: (_f = (_d = data.session) === null || _d === void 0 ? void 0 : _d.access_token) !== null && _f !== void 0 ? _f : undefined,\n                });\n            });\n            if (error)\n                throw error;\n            if (isBrowser() && !((_a = credentials.options) === null || _a === void 0 ? void 0 : _a.skipBrowserRedirect)) {\n                window.location.assign(data === null || data === void 0 ? void 0 : data.url);\n            }\n            return this._returnResult({\n                data: { provider: credentials.provider, url: data === null || data === void 0 ? void 0 : data.url, flowId },\n                error: null,\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({\n                    data: { provider: credentials.provider, url: null, flowId },\n                    error,\n                });\n            }\n            throw error;\n        }\n    }\n    async linkIdentityIdToken(credentials) {\n        return await this._useSession(async (result) => {\n            var _a;\n            try {\n                const { error: sessionError, data: { session }, } = result;\n                if (sessionError)\n                    throw sessionError;\n                const { options, provider, token, access_token, nonce } = credentials;\n                const res = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=id_token`, {\n                    headers: this.headers,\n                    jwt: (_a = session === null || session === void 0 ? void 0 : session.access_token) !== null && _a !== void 0 ? _a : undefined,\n                    body: {\n                        provider,\n                        id_token: token,\n                        access_token,\n                        nonce,\n                        link_identity: true,\n                        gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n                    },\n                    xform: _sessionResponse,\n                });\n                const { data, error } = res;\n                if (error) {\n                    return this._returnResult({ data: { user: null, session: null }, error });\n                }\n                else if (!data || !data.session || !data.user) {\n                    return this._returnResult({\n                        data: { user: null, session: null },\n                        error: new AuthInvalidTokenResponseError(),\n                    });\n                }\n                if (data.session) {\n                    await this._saveSession(data.session);\n                    await this._notifyAllSubscribers('USER_UPDATED', data.session);\n                }\n                return this._returnResult({ data, error });\n            }\n            catch (error) {\n                await removePKCEVerifier(this.storage, this.storageKey, null);\n                if (isAuthError(error)) {\n                    return this._returnResult({ data: { user: null, session: null }, error });\n                }\n                throw error;\n            }\n        });\n    }\n    /**\n     * Unlinks an identity from a user by deleting it. The user will no longer be able to sign in with that identity once it's unlinked.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).\n     * - The user needs to be signed in to call `unlinkIdentity()`.\n     * - The user must have at least 2 identities in order to unlink an identity.\n     * - The identity to be unlinked must belong to the user.\n     *\n     * @example Unlink an identity\n     * ```js\n     * // retrieve all identities linked to a user\n     * const identities = await supabase.auth.getUserIdentities()\n     *\n     * // find the google identity\n     * const googleIdentity = identities.find(\n     *   identity => identity.provider === 'google'\n     * )\n     *\n     * // unlink the google identity\n     * const { error } = await supabase.auth.unlinkIdentity(googleIdentity)\n     * ```\n     */\n    async unlinkIdentity(identity) {\n        try {\n            return await this._useSession(async (result) => {\n                var _a, _b;\n                const { data, error } = result;\n                if (error) {\n                    throw error;\n                }\n                return await _request(this.fetch, 'DELETE', `${this.url}/user/identities/${identity.identity_id}`, {\n                    headers: this.headers,\n                    jwt: (_b = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) !== null && _b !== void 0 ? _b : undefined,\n                });\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Generates a new JWT.\n     * @param refreshToken A valid refresh token that was returned on login.\n     */\n    async _refreshAccessToken(refreshToken) {\n        // Refresh tokens are long-lived bearer credentials; do NOT include any\n        // fragment of the token in the debug tag, even when `debug: true` is\n        // enabled (logs may be forwarded to third-party services).\n        const debugName = `#_refreshAccessToken()`;\n        this._debug(debugName, 'begin');\n        try {\n            const startedAt = Date.now();\n            // will attempt to refresh the token with exponential backoff\n            return await retryable(async (attempt) => {\n                if (attempt > 0) {\n                    await sleep(200 * Math.pow(2, attempt - 1)); // 200, 400, 800, ...\n                }\n                this._debug(debugName, 'refreshing attempt', attempt);\n                return await _request(this.fetch, 'POST', `${this.url}/token?grant_type=refresh_token`, {\n                    body: { refresh_token: refreshToken },\n                    headers: this.headers,\n                    xform: _sessionResponse,\n                });\n            }, (attempt, error) => {\n                const nextBackOffInterval = 200 * Math.pow(2, attempt);\n                return (error &&\n                    isAuthRetryableFetchError(error) &&\n                    // retryable only if the request can be sent before the backoff overflows the tick duration\n                    Date.now() + nextBackOffInterval - startedAt < AUTO_REFRESH_TICK_DURATION_MS);\n            });\n        }\n        catch (error) {\n            this._debug(debugName, 'error', error);\n            if (isAuthError(error)) {\n                return this._returnResult({ data: { session: null, user: null }, error });\n            }\n            throw error;\n        }\n        finally {\n            this._debug(debugName, 'end');\n        }\n    }\n    _isValidSession(maybeSession) {\n        const isValidSession = typeof maybeSession === 'object' &&\n            maybeSession !== null &&\n            'access_token' in maybeSession &&\n            'refresh_token' in maybeSession &&\n            'expires_at' in maybeSession;\n        return isValidSession;\n    }\n    async _handleProviderSignIn(provider, options) {\n        const { url, flowId } = await this._getUrlForProvider(`${this.url}/authorize`, provider, {\n            redirectTo: options.redirectTo,\n            scopes: options.scopes,\n            queryParams: options.queryParams,\n        });\n        this._debug('#_handleProviderSignIn()', 'provider', provider, 'options', options, 'url', url);\n        // try to open on the browser\n        if (isBrowser() && !options.skipBrowserRedirect) {\n            window.location.assign(url);\n        }\n        return { data: { provider, url, flowId }, error: null };\n    }\n    /**\n     * Recovers the session from LocalStorage and refreshes the token\n     * Note: this method is async to accommodate for AsyncStorage e.g. in React native.\n     */\n    async _recoverAndRefresh() {\n        var _a, _b;\n        const debugName = '#_recoverAndRefresh()';\n        this._debug(debugName, 'begin');\n        try {\n            const currentSession = (await getItemAsync(this.storage, this.storageKey));\n            if (currentSession && this.userStorage) {\n                let maybeUser = (await getItemAsync(this.userStorage, this.storageKey + '-user'));\n                if (!this.storage.isServer && Object.is(this.storage, this.userStorage) && !maybeUser) {\n                    // storage and userStorage are the same storage medium, for example\n                    // window.localStorage if userStorage does not have the user from\n                    // storage stored, store it first thereby migrating the user object\n                    // from storage -> userStorage\n                    maybeUser = { user: currentSession.user };\n                    await setItemAsync(this.userStorage, this.storageKey + '-user', maybeUser);\n                }\n                currentSession.user = (_a = maybeUser === null || maybeUser === void 0 ? void 0 : maybeUser.user) !== null && _a !== void 0 ? _a : userNotAvailableProxy();\n            }\n            else if (currentSession && !currentSession.user) {\n                // user storage is not set, let's check if it was previously enabled so\n                // we bring back the storage as it should be\n                if (!currentSession.user) {\n                    // test if userStorage was previously enabled and the storage medium was the same, to move the user back under the same key\n                    const separateUser = (await getItemAsync(this.storage, this.storageKey + '-user'));\n                    if (separateUser && (separateUser === null || separateUser === void 0 ? void 0 : separateUser.user)) {\n                        currentSession.user = separateUser.user;\n                        await removeItemAsync(this.storage, this.storageKey + '-user');\n                        await setItemAsync(this.storage, this.storageKey, currentSession);\n                    }\n                    else {\n                        currentSession.user = userNotAvailableProxy();\n                    }\n                }\n            }\n            this._debug(debugName, 'session from storage', currentSession);\n            if (!this._isValidSession(currentSession)) {\n                this._debug(debugName, 'session is not valid');\n                if (currentSession !== null) {\n                    await this._removeSession();\n                }\n                return;\n            }\n            const expiresWithMargin = ((_b = currentSession.expires_at) !== null && _b !== void 0 ? _b : Infinity) * 1000 - Date.now() < EXPIRY_MARGIN_MS;\n            this._debug(debugName, `session has${expiresWithMargin ? '' : ' not'} expired with margin of ${EXPIRY_MARGIN_MS}s`);\n            if (expiresWithMargin) {\n                if (this.autoRefreshToken && currentSession.refresh_token) {\n                    const { error } = await this._callRefreshToken(currentSession.refresh_token);\n                    if (error) {\n                        // `_callRefreshToken` is the single source of truth for refresh\n                        // outcomes: it removes the session itself when the access token\n                        // is actually expired, and preserves it when the token is still\n                        // valid (proactive-preserve). Don't second-guess that here — a\n                        // local `_removeSession` would emit a duplicate `SIGNED_OUT` on\n                        // genuine failures and undo the proactive-preserve at init time.\n                        if (isAuthRefreshDiscardedError(error)) {\n                            this._debug(debugName, 'refresh discarded by commit guard', error);\n                        }\n                        else {\n                            this._debug(debugName, 'refresh failed', error);\n                        }\n                    }\n                }\n            }\n            else if (currentSession.user &&\n                currentSession.user.__isUserNotAvailableProxy === true) {\n                // If we have a proxy user, try to get the real user data\n                try {\n                    const { data, error: userError } = await this._getUser(currentSession.access_token);\n                    if (!userError && (data === null || data === void 0 ? void 0 : data.user)) {\n                        currentSession.user = data.user;\n                        await this._saveSession(currentSession);\n                        await this._notifyAllSubscribers('SIGNED_IN', currentSession);\n                    }\n                    else {\n                        this._debug(debugName, 'could not get user data, skipping SIGNED_IN notification');\n                    }\n                }\n                catch (getUserError) {\n                    console.error('Error getting user data:', getUserError);\n                    this._debug(debugName, 'error getting user data, skipping SIGNED_IN notification', getUserError);\n                }\n            }\n            else {\n                // no need to persist currentSession again, as we just loaded it from\n                // local storage; persisting it again may overwrite a value saved by\n                // another client with access to the same local storage\n                await this._notifyAllSubscribers('SIGNED_IN', currentSession);\n            }\n        }\n        catch (err) {\n            this._debug(debugName, 'error', err);\n            if (isAuthRetryableFetchError(err)) {\n                // Transient/aborted network failure during session recovery (e.g. a\n                // superseded page navigation cancelling the in-flight request). Warn\n                // rather than surface it raw; the session is untouched and recovery\n                // will run again on the next load.\n                console.warn(err);\n            }\n            else {\n                console.error(err);\n            }\n            return;\n        }\n        finally {\n            this._debug(debugName, 'end');\n        }\n    }\n    async _callRefreshToken(refreshToken) {\n        var _a, _b;\n        if (!refreshToken) {\n            throw new AuthSessionMissingError();\n        }\n        // refreshing is already in progress\n        if (this.refreshingDeferred) {\n            return this.refreshingDeferred.promise;\n        }\n        // Serial failure cooldown: callers passing the *same* refresh token\n        // after a recent failure receive the cached result instead of firing\n        // another `/token` request. This caps the proactive-refresh storm\n        // where every `getSession()` call inside the 90s EXPIRY_MARGIN_MS\n        // window kept re-firing against the same broken refresh token during\n        // outages. Concurrent callers already share `refreshingDeferred`; this\n        // cache covers serial callers spaced across cooldown windows.\n        //\n        // Token-keyed so callers with a fresh refresh token (rotation pickup\n        // from another tab, explicit `setSession`/`refreshSession({ refresh_token })`,\n        // multi-account switch) bypass the cache and attempt a real refresh.\n        if (this.lastRefreshFailure &&\n            this.lastRefreshFailure.refreshToken === refreshToken &&\n            Date.now() < this.lastRefreshFailure.expiresAt) {\n            this._debug('#_callRefreshToken()', 'returning cached failure (cooldown active)');\n            return this.lastRefreshFailure.result;\n        }\n        // Refresh tokens are long-lived bearer credentials; do NOT include any\n        // fragment of the token in the debug tag, even when `debug: true` is\n        // enabled (logs may be forwarded to third-party services).\n        const debugName = `#_callRefreshToken()`;\n        this._debug(debugName, 'begin');\n        try {\n            this.refreshingDeferred = new Deferred();\n            // Snapshot storage before the fetch. The commit guard discards the\n            // rotated tokens only when a non-null pre-fetch snapshot changed under\n            // us — typical case: a concurrent `signOut` ran `_removeSession`, or\n            // another tab's refresh rewrote the slot. Callers passing\n            // externally-sourced tokens (SSR cookie handoff, multi-account\n            // switching, `setSession`/`refreshSession({ refresh_token })`) may\n            // start from a null snapshot OR from a non-null snapshot whose\n            // refresh_token differs from the one they're hydrating; in both\n            // cases the guard fires only when storage was *modified between\n            // snapshots*, not when the input token disagrees with what's stored.\n            const storedAtStart = (await getItemAsync(this.storage, this.storageKey));\n            const { data, error } = await this._refreshAccessToken(refreshToken);\n            if (error)\n                throw error;\n            if (!data.session)\n                throw new AuthSessionMissingError();\n            const storedAfter = (await getItemAsync(this.storage, this.storageKey));\n            const storageChangedUnderUs = storedAtStart !== null &&\n                (storedAfter === null || storedAfter.refresh_token !== storedAtStart.refresh_token);\n            if (storageChangedUnderUs) {\n                this._debug(debugName, 'commit guard: storage changed since refresh started, discarding rotated tokens', {\n                    // Presence indicators only — never log refresh token fragments,\n                    // even partial. Logs may be forwarded to third-party services.\n                    startedWith: 'present',\n                    nowHolds: storedAfter ? 'replaced' : 'cleared',\n                });\n                const discarded = {\n                    data: null,\n                    error: new AuthRefreshDiscardedError(),\n                };\n                this.refreshingDeferred.resolve(discarded);\n                return discarded;\n            }\n            // Second leg of the commit guard: close the TOCTOU window between the\n            // synchronous `storageChangedUnderUs` check and the actual storage\n            // writes inside `_saveSession`. A concurrent `signOut → _removeSession`\n            // can land inside `_saveSession`'s `await setItemAsync(...)` yields and\n            // clear storage just before we overwrite it. Capture the epoch BEFORE\n            // the save and re-check after; if it advanced, undo the write directly\n            // (do NOT call `_removeSession` — that would emit a duplicate\n            // SIGNED_OUT for the concurrent signOut that already fired one).\n            const epochBeforeSave = this._sessionRemovalEpoch;\n            await this._saveSession(data.session);\n            if (this._sessionRemovalEpoch !== epochBeforeSave) {\n                this._debug(debugName, 'commit guard (post-save): _removeSession ran during _saveSession, undoing write');\n                await removeItemAsync(this.storage, this.storageKey);\n                if (this.userStorage) {\n                    await removeItemAsync(this.userStorage, this.storageKey + '-user');\n                }\n                const discarded = {\n                    data: null,\n                    error: new AuthRefreshDiscardedError(),\n                };\n                this.refreshingDeferred.resolve(discarded);\n                return discarded;\n            }\n            await this._notifyAllSubscribers('TOKEN_REFRESHED', data.session);\n            const result = { data: data.session, error: null };\n            // Refresh succeeded — clear any cached failure so the next caller\n            // (including the auto-refresh ticker) attempts a real refresh again.\n            this.lastRefreshFailure = null;\n            this.refreshingDeferred.resolve(result);\n            return result;\n        }\n        catch (error) {\n            this._debug(debugName, 'error', error);\n            if (isAuthError(error)) {\n                const result = { data: null, error };\n                if (!isAuthRetryableFetchError(error)) {\n                    // Proactive vs reactive distinction: a refresh fires whenever\n                    // the access token is within EXPIRY_MARGIN_MS of expiry. If the\n                    // access token is *still valid* at this moment, the refresh was\n                    // proactive and the existing session is still usable until its\n                    // real expiry — destroying it now would log out a user whose\n                    // access token works. If the access token has actually expired,\n                    // the refresh token is the only credential left and it just got\n                    // rejected — the session is genuinely dead. `__loadSession`\n                    // mirrors this distinction on the read path so callers see the\n                    // preserved session instead of `session: null`.\n                    const storedNow = (await getItemAsync(this.storage, this.storageKey));\n                    const accessTokenStillValid = !!((storedNow === null || storedNow === void 0 ? void 0 : storedNow.expires_at) && storedNow.expires_at * 1000 > Date.now());\n                    if (accessTokenStillValid) {\n                        this._debug(debugName, 'proactive refresh failed, access token still valid — preserving session');\n                    }\n                    else {\n                        await this._removeSession();\n                    }\n                }\n                // Cache the failure so serial callers (and the next auto-refresh\n                // tick) passing the same refresh token within the cooldown window\n                // receive it synchronously instead of firing another `/token`\n                // call. Set after the optional `_removeSession` above (which\n                // clears the cache as part of teardown) so the cache survives.\n                this.lastRefreshFailure = {\n                    refreshToken,\n                    result,\n                    expiresAt: Date.now() + REFRESH_FAILURE_COOLDOWN_MS,\n                };\n                (_a = this.refreshingDeferred) === null || _a === void 0 ? void 0 : _a.resolve(result);\n                return result;\n            }\n            (_b = this.refreshingDeferred) === null || _b === void 0 ? void 0 : _b.reject(error);\n            throw error;\n        }\n        finally {\n            this.refreshingDeferred = null;\n            this._debug(debugName, 'end');\n        }\n    }\n    async _notifyAllSubscribers(event, session, broadcast = true) {\n        if (this._pendingInitNotifications !== null && broadcast) {\n            // We're inside initialize() before initializePromise has resolved, and\n            // this notification originates from the init chain (_recoverAndRefresh),\n            // which always fires with broadcast = true. Enqueue instead of firing so\n            // that callbacks can safely call getSession() / getUser() without\n            // deadlocking on initializePromise.\n            //\n            // Notifications with broadcast = false come from the incoming\n            // BroadcastChannel handler (a cross-tab event), not the init chain, so\n            // they are fired immediately to preserve multi-tab ordering.\n            this._pendingInitNotifications.push({ event, session, broadcast });\n            return;\n        }\n        const debugName = `#_notifyAllSubscribers(${event})`;\n        this._debug(debugName, 'begin', session, `broadcast = ${broadcast}`);\n        try {\n            if (this.broadcastChannel && broadcast) {\n                this.broadcastChannel.postMessage({ event, session });\n            }\n            const errors = [];\n            const promises = Array.from(this.stateChangeEmitters.values()).map(async (x) => {\n                try {\n                    await x.callback(event, session);\n                }\n                catch (e) {\n                    errors.push(e);\n                }\n            });\n            await Promise.all(promises);\n            if (errors.length > 0) {\n                for (let i = 0; i < errors.length; i += 1) {\n                    console.error(errors[i]);\n                }\n                throw errors[0];\n            }\n        }\n        finally {\n            this._debug(debugName, 'end');\n        }\n    }\n    /**\n     * set currentSession and currentUser\n     * process to _startAutoRefreshToken if possible\n     */\n    async _saveSession(session) {\n        this._debug('#_saveSession()', session);\n        // _saveSession is always called whenever a new session has been acquired\n        // so we can safely suppress the warning returned by future getSession calls\n        this.suppressGetSessionWarning = true;\n        // Create a shallow copy to work with, to avoid mutating the original session object if it's used elsewhere\n        const sessionToProcess = Object.assign({}, session);\n        const userIsProxy = sessionToProcess.user && sessionToProcess.user.__isUserNotAvailableProxy === true;\n        if (this.userStorage) {\n            if (!userIsProxy && sessionToProcess.user) {\n                // If it's a real user object, save it to userStorage.\n                await setItemAsync(this.userStorage, this.storageKey + '-user', {\n                    user: sessionToProcess.user,\n                });\n            }\n            else if (userIsProxy) {\n                // If it's the proxy, it means user was not found in userStorage.\n                // We should ensure no stale user data for this key exists in userStorage if we were to save null,\n                // or simply not save the proxy. For now, we don't save the proxy here.\n                // If there's a need to clear userStorage if user becomes proxy, that logic would go here.\n            }\n            // Prepare the main session data for primary storage: remove the user property before cloning\n            // This is important because the original session.user might be the proxy\n            const mainSessionData = Object.assign({}, sessionToProcess);\n            delete mainSessionData.user; // Remove user (real or proxy) before cloning for main storage\n            const clonedMainSessionData = deepClone(mainSessionData);\n            await setItemAsync(this.storage, this.storageKey, clonedMainSessionData);\n        }\n        else {\n            // No userStorage is configured.\n            // In this case, session.user should ideally not be a proxy.\n            // If it were, structuredClone would fail. This implies an issue elsewhere if user is a proxy here\n            const clonedSession = deepClone(sessionToProcess); // sessionToProcess still has its original user property\n            await setItemAsync(this.storage, this.storageKey, clonedSession);\n        }\n    }\n    async _removeSession() {\n        // Bump synchronously, BEFORE any `await`, so that `_callRefreshToken`'s\n        // post-save check sees the increment whenever this method has started —\n        // even if it hasn't finished. Pairs with the epoch check in\n        // `_callRefreshToken`. See `_sessionRemovalEpoch` field doc.\n        this._sessionRemovalEpoch += 1;\n        this._debug('#_removeSession()');\n        // The session is gone — no point holding on to a cached refresh failure\n        // for a token that no longer exists. Synchronous, before any `await`.\n        this.lastRefreshFailure = null;\n        this.suppressGetSessionWarning = false;\n        await removeItemAsync(this.storage, this.storageKey);\n        await removeAllPKCEVerifiers(this.storage, this.storageKey);\n        await removeItemAsync(this.storage, this.storageKey + '-user');\n        if (this.userStorage) {\n            await removeItemAsync(this.userStorage, this.storageKey + '-user');\n        }\n        await this._notifyAllSubscribers('SIGNED_OUT', null);\n    }\n    /**\n     * Removes any registered visibilitychange callback.\n     *\n     * {@link GoTrueClient.startAutoRefresh}\n     * {@link GoTrueClient.stopAutoRefresh}\n     */\n    _removeVisibilityChangedCallback() {\n        this._debug('#_removeVisibilityChangedCallback()');\n        const callback = this.visibilityChangedCallback;\n        this.visibilityChangedCallback = null;\n        try {\n            if (callback && isBrowser() && (window === null || window === void 0 ? void 0 : window.removeEventListener)) {\n                window.removeEventListener('visibilitychange', callback);\n            }\n        }\n        catch (e) {\n            console.error('removing visibilitychange callback failed', e);\n        }\n    }\n    /**\n     * This is the private implementation of {@link GoTrueClient.startAutoRefresh}. Use this\n     * within the library.\n     */\n    async _startAutoRefresh() {\n        await this._stopAutoRefresh();\n        this._debug('#_startAutoRefresh()');\n        const ticker = setInterval(() => this._autoRefreshTokenTick(), AUTO_REFRESH_TICK_DURATION_MS);\n        this.autoRefreshTicker = ticker;\n        if (ticker && typeof ticker === 'object' && typeof ticker.unref === 'function') {\n            // ticker is a NodeJS Timeout object that has an `unref` method\n            // https://nodejs.org/api/timers.html#timeoutunref\n            // When auto refresh is used in NodeJS (like for testing) the\n            // `setInterval` is preventing the process from being marked as\n            // finished and tests run endlessly. This can be prevented by calling\n            // `unref()` on the returned object.\n            ticker.unref();\n            // @ts-expect-error TS has no context of Deno\n        }\n        else if (typeof Deno !== 'undefined' && typeof Deno.unrefTimer === 'function') {\n            // similar like for NodeJS, but with the Deno API\n            // https://deno.land/api@latest?unstable&s=Deno.unrefTimer\n            // @ts-expect-error TS has no context of Deno\n            Deno.unrefTimer(ticker);\n        }\n        // run the tick immediately, but in the next pass of the event loop so that\n        // #_initialize can be allowed to complete without recursively waiting on\n        // itself\n        const timeout = setTimeout(async () => {\n            await this.initializePromise;\n            await this._autoRefreshTokenTick();\n        }, 0);\n        this.autoRefreshTickTimeout = timeout;\n        if (timeout && typeof timeout === 'object' && typeof timeout.unref === 'function') {\n            timeout.unref();\n            // @ts-expect-error TS has no context of Deno\n        }\n        else if (typeof Deno !== 'undefined' && typeof Deno.unrefTimer === 'function') {\n            // @ts-expect-error TS has no context of Deno\n            Deno.unrefTimer(timeout);\n        }\n    }\n    /**\n     * This is the private implementation of {@link GoTrueClient.stopAutoRefresh}. Use this\n     * within the library.\n     */\n    async _stopAutoRefresh() {\n        this._debug('#_stopAutoRefresh()');\n        const ticker = this.autoRefreshTicker;\n        this.autoRefreshTicker = null;\n        if (ticker) {\n            clearInterval(ticker);\n        }\n        const timeout = this.autoRefreshTickTimeout;\n        this.autoRefreshTickTimeout = null;\n        if (timeout) {\n            clearTimeout(timeout);\n        }\n    }\n    /**\n     * Starts an auto-refresh process in the background. The session is checked\n     * every few seconds. Close to the time of expiration a process is started to\n     * refresh the session. If refreshing fails it will be retried for as long as\n     * necessary.\n     *\n     * If you set the {@link GoTrueClientOptions#autoRefreshToken} you don't need\n     * to call this function, it will be called for you.\n     *\n     * On browsers the refresh process works only when the tab/window is in the\n     * foreground to conserve resources as well as prevent race conditions and\n     * flooding auth with requests. If you call this method any managed\n     * visibility change callback will be removed and you must manage visibility\n     * changes on your own.\n     *\n     * On non-browser platforms the refresh process works *continuously* in the\n     * background, which may not be desirable. You should hook into your\n     * platform's foreground indication mechanism and call these methods\n     * appropriately to conserve resources.\n     *\n     * {@link GoTrueClient.stopAutoRefresh}\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - Only useful in non-browser environments such as React Native or Electron.\n     * - The Supabase Auth library automatically starts and stops proactively refreshing the session when a tab is focused or not.\n     * - On non-browser platforms, such as mobile or desktop apps built with web technologies, the library is not able to effectively determine whether the application is _focused_ or not.\n     * - To give this hint to the application, you should be calling this method when the app is in focus and calling `supabase.auth.stopAutoRefresh()` when it's out of focus.\n     *\n     * @example Start and stop auto refresh in React Native\n     * ```js\n     * import { AppState } from 'react-native'\n     *\n     * // make sure you register this only once!\n     * AppState.addEventListener('change', (state) => {\n     *   if (state === 'active') {\n     *     supabase.auth.startAutoRefresh()\n     *   } else {\n     *     supabase.auth.stopAutoRefresh()\n     *   }\n     * })\n     * ```\n     */\n    async startAutoRefresh() {\n        this._removeVisibilityChangedCallback();\n        await this._startAutoRefresh();\n    }\n    /**\n     * Stops an active auto refresh process running in the background (if any).\n     *\n     * If you call this method any managed visibility change callback will be\n     * removed and you must manage visibility changes on your own.\n     *\n     * See {@link GoTrueClient.startAutoRefresh} for more details.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - Only useful in non-browser environments such as React Native or Electron.\n     * - The Supabase Auth library automatically starts and stops proactively refreshing the session when a tab is focused or not.\n     * - On non-browser platforms, such as mobile or desktop apps built with web technologies, the library is not able to effectively determine whether the application is _focused_ or not.\n     * - When your application goes in the background or out of focus, call this method to stop the proactive refreshing of the session.\n     *\n     * @example Start and stop auto refresh in React Native\n     * ```js\n     * import { AppState } from 'react-native'\n     *\n     * // make sure you register this only once!\n     * AppState.addEventListener('change', (state) => {\n     *   if (state === 'active') {\n     *     supabase.auth.startAutoRefresh()\n     *   } else {\n     *     supabase.auth.stopAutoRefresh()\n     *   }\n     * })\n     * ```\n     */\n    async stopAutoRefresh() {\n        this._removeVisibilityChangedCallback();\n        await this._stopAutoRefresh();\n    }\n    /**\n     * Tears down the client's background work: stops the auto-refresh interval,\n     * removes the `visibilitychange` listener, closes the cross-tab\n     * `BroadcastChannel`, and clears registered `onAuthStateChange` subscribers.\n     *\n     * Call this from cleanup hooks when the client is being replaced before\n     * its JS realm is destroyed. React Strict Mode and HMR are the common\n     * cases. Any in-flight `fetch` calls continue to completion and may still\n     * write to storage; dispose doesn't abort them or erase storage.\n     *\n     * Lifecycle caveat: because in-flight refreshes are not aborted, a\n     * disposed instance can still persist a rotated session to storage after\n     * `dispose()` returns. A subsequent `createClient` against the same\n     * `storageKey` will pick up that session on its next read. If you need\n     * strict isolation between client lifecycles, await any pending auth\n     * operation before calling `dispose()` (or change the `storageKey` for\n     * the replacement client).\n     *\n     * Safe to call repeatedly.\n     *\n     * @category Auth\n     *\n     * @example Cleanup on React unmount\n     * ```ts\n     * useEffect(() => {\n     *   const client = createClient(...)\n     *   return () => { client.auth.dispose() }\n     * }, [])\n     * ```\n     */\n    async dispose() {\n        var _a;\n        this._removeVisibilityChangedCallback();\n        await this._stopAutoRefresh();\n        (_a = this.broadcastChannel) === null || _a === void 0 ? void 0 : _a.close();\n        this.broadcastChannel = null;\n        this.stateChangeEmitters.clear();\n    }\n    /**\n     * Runs the auto refresh token tick.\n     */\n    async _autoRefreshTokenTick() {\n        this._debug('#_autoRefreshTokenTick()', 'begin');\n        if (this.lock != null) {\n            // TODO(v3): remove legacy lock path. Uses `_acquireLock(0, ...)` which\n            // throws `LockAcquireTimeoutError` immediately if the lock is held —\n            // that's the fail-fast skip path that lets the tick bail out instead\n            // of queuing behind a long-running operation.\n            try {\n                await this._acquireLock(0, async () => {\n                    try {\n                        const now = Date.now();\n                        try {\n                            return await this._useSession(async (result) => {\n                                const { data: { session }, } = result;\n                                if (!session || !session.refresh_token || !session.expires_at) {\n                                    this._debug('#_autoRefreshTokenTick()', 'no session');\n                                    return;\n                                }\n                                const expiresInTicks = Math.floor((session.expires_at * 1000 - now) / AUTO_REFRESH_TICK_DURATION_MS);\n                                this._debug('#_autoRefreshTokenTick()', `access token expires in ${expiresInTicks} ticks, a tick lasts ${AUTO_REFRESH_TICK_DURATION_MS}ms, refresh threshold is ${AUTO_REFRESH_TICK_THRESHOLD} ticks`);\n                                if (expiresInTicks <= AUTO_REFRESH_TICK_THRESHOLD) {\n                                    await this._callRefreshToken(session.refresh_token);\n                                }\n                            });\n                        }\n                        catch (e) {\n                            console.error('Auto refresh tick failed with error. This is likely a transient error.', e);\n                        }\n                    }\n                    finally {\n                        this._debug('#_autoRefreshTokenTick()', 'end');\n                    }\n                });\n            }\n            catch (e) {\n                if (e instanceof LockAcquireTimeoutError) {\n                    this._debug('auto refresh token tick lock not available');\n                }\n                else {\n                    throw e;\n                }\n            }\n            return;\n        }\n        // Lockless default: skip if a refresh is already in flight.\n        // `_callRefreshToken` also dedupes via the same field; this is just a\n        // fast-path skip to avoid an unnecessary storage read.\n        if (this.refreshingDeferred !== null) {\n            this._debug('#_autoRefreshTokenTick()', 'refresh already in flight, skipping');\n            return;\n        }\n        try {\n            const now = Date.now();\n            try {\n                await this._useSession(async (result) => {\n                    const { data: { session }, } = result;\n                    if (!session || !session.refresh_token || !session.expires_at) {\n                        this._debug('#_autoRefreshTokenTick()', 'no session');\n                        return;\n                    }\n                    // session will expire in this many ticks (or has already expired if <= 0)\n                    const expiresInTicks = Math.floor((session.expires_at * 1000 - now) / AUTO_REFRESH_TICK_DURATION_MS);\n                    this._debug('#_autoRefreshTokenTick()', `access token expires in ${expiresInTicks} ticks, a tick lasts ${AUTO_REFRESH_TICK_DURATION_MS}ms, refresh threshold is ${AUTO_REFRESH_TICK_THRESHOLD} ticks`);\n                    if (expiresInTicks <= AUTO_REFRESH_TICK_THRESHOLD) {\n                        await this._callRefreshToken(session.refresh_token);\n                    }\n                });\n            }\n            catch (e) {\n                console.error('Auto refresh tick failed with error. This is likely a transient error.', e);\n            }\n        }\n        finally {\n            this._debug('#_autoRefreshTokenTick()', 'end');\n        }\n    }\n    /**\n     * Registers callbacks on the browser / platform, which in-turn run\n     * algorithms when the browser window/tab are in foreground. On non-browser\n     * platforms it assumes always foreground.\n     */\n    async _handleVisibilityChange() {\n        this._debug('#_handleVisibilityChange()');\n        if (!isBrowser() || !(window === null || window === void 0 ? void 0 : window.addEventListener)) {\n            if (this.autoRefreshToken) {\n                // in non-browser environments the refresh token ticker runs always\n                this.startAutoRefresh();\n            }\n            return false;\n        }\n        try {\n            this.visibilityChangedCallback = async () => {\n                try {\n                    await this._onVisibilityChanged(false);\n                }\n                catch (error) {\n                    this._debug('#visibilityChangedCallback', 'error', error);\n                }\n            };\n            window === null || window === void 0 ? void 0 : window.addEventListener('visibilitychange', this.visibilityChangedCallback);\n            // now immediately call the visbility changed callback to setup with the\n            // current visbility state\n            await this._onVisibilityChanged(true); // initial call\n        }\n        catch (error) {\n            console.error('_handleVisibilityChange', error);\n        }\n    }\n    /**\n     * Callback registered with `window.addEventListener('visibilitychange')`.\n     */\n    async _onVisibilityChanged(calledFromInitialize) {\n        const methodName = `#_onVisibilityChanged(${calledFromInitialize})`;\n        this._debug(methodName, 'visibilityState', document.visibilityState);\n        if (document.visibilityState === 'visible') {\n            if (this.autoRefreshToken) {\n                // in browser environments the refresh token ticker runs only on focused tabs\n                // which prevents race conditions\n                this._startAutoRefresh();\n            }\n            if (!calledFromInitialize) {\n                // called when the visibility has changed, i.e. the browser\n                // transitioned from hidden -> visible so we need to see if the session\n                // should be recovered\n                await this.initializePromise;\n                if (this.lock != null) {\n                    // TODO(v3): remove legacy lock path\n                    await this._acquireLock(this.lockAcquireTimeout, async () => {\n                        if (document.visibilityState !== 'visible') {\n                            this._debug(methodName, 'acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting');\n                            return;\n                        }\n                        await this._recoverAndRefresh();\n                    });\n                }\n                else {\n                    if (document.visibilityState !== 'visible') {\n                        this._debug(methodName, 'visibilityState is no longer visible, skipping recovery');\n                        return;\n                    }\n                    // recover the session\n                    await this._recoverAndRefresh();\n                }\n            }\n        }\n        else if (document.visibilityState === 'hidden') {\n            if (this.autoRefreshToken) {\n                this._stopAutoRefresh();\n            }\n        }\n    }\n    /**\n     * Generates the relevant login URL for a third-party provider.\n     * @param options.redirectTo A URL or mobile address to send the user to after they are confirmed.\n     * @param options.scopes A space-separated list of scopes granted to the OAuth application.\n     * @param options.queryParams An object of key-value pairs containing query parameters granted to the OAuth application.\n     */\n    async _getUrlForProvider(url, provider, options) {\n        let redirectTo = options === null || options === void 0 ? void 0 : options.redirectTo;\n        let codeChallenge = null;\n        let codeChallengeMethod = null;\n        let flowId = null;\n        if (this.flowType === 'pkce') {\n            ;\n            [codeChallenge, codeChallengeMethod, flowId] = await this._getCodeChallengeAndMethod();\n            redirectTo = this._maybeAppendFlowIdToRedirect(redirectTo, flowId);\n        }\n        const urlParams = [`provider=${encodeURIComponent(provider)}`];\n        if (redirectTo) {\n            urlParams.push(`redirect_to=${encodeURIComponent(redirectTo)}`);\n        }\n        if (options === null || options === void 0 ? void 0 : options.scopes) {\n            urlParams.push(`scopes=${encodeURIComponent(options.scopes)}`);\n        }\n        if (codeChallenge != null && codeChallengeMethod != null) {\n            const flowParams = new URLSearchParams({\n                code_challenge: `${encodeURIComponent(codeChallenge)}`,\n                code_challenge_method: `${encodeURIComponent(codeChallengeMethod)}`,\n            });\n            urlParams.push(flowParams.toString());\n        }\n        if (options === null || options === void 0 ? void 0 : options.queryParams) {\n            const query = new URLSearchParams(options.queryParams);\n            urlParams.push(query.toString());\n        }\n        if (options === null || options === void 0 ? void 0 : options.skipBrowserRedirect) {\n            urlParams.push(`skip_http_redirect=${options.skipBrowserRedirect}`);\n        }\n        return { url: `${url}?${urlParams.join('&')}`, flowId };\n    }\n    /**\n     * Appends the reserved flow id parameter to a redirect URL so the callback\n     * can be matched to the verifier stored for its flow. Opt-in via\n     * `experimental.appendPkceFlowIdToRedirects`: redirect URLs are validated\n     * against the project's allow list including the query string, so an extra\n     * parameter can stop exact (non-wildcard) entries from matching.\n     */\n    _maybeAppendFlowIdToRedirect(redirectTo, flowId) {\n        if (!redirectTo || !flowId || !this.experimental.appendPkceFlowIdToRedirects) {\n            return redirectTo !== null && redirectTo !== void 0 ? redirectTo : undefined;\n        }\n        return appendFlowIdToRedirectTo(redirectTo, flowId);\n    }\n    /**\n     * Generates and stores a PKCE challenge/verifier pair for a new flow,\n     * logging any pending verifier the bounded slot ring evicts.\n     */\n    async _getCodeChallengeAndMethod(isPasswordRecovery = false) {\n        return getCodeChallengeAndMethod(this.storage, this.storageKey, isPasswordRecovery, (evictedFlowId) => this._debug('#_getCodeChallengeAndMethod()', 'evicted oldest pending PKCE verifier slot', evictedFlowId));\n    }\n    async _unenroll(params) {\n        try {\n            return await this._useSession(async (result) => {\n                var _a;\n                const { data: sessionData, error: sessionError } = result;\n                if (sessionError) {\n                    return this._returnResult({ data: null, error: sessionError });\n                }\n                return await _request(this.fetch, 'DELETE', `${this.url}/factors/${params.factorId}`, {\n                    headers: this.headers,\n                    jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\n                });\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    async _enroll(params) {\n        try {\n            return await this._useSession(async (result) => {\n                var _a, _b;\n                const { data: sessionData, error: sessionError } = result;\n                if (sessionError) {\n                    return this._returnResult({ data: null, error: sessionError });\n                }\n                const body = Object.assign({ friendly_name: params.friendlyName, factor_type: params.factorType }, (params.factorType === 'phone'\n                    ? { phone: params.phone }\n                    : params.factorType === 'totp'\n                        ? { issuer: params.issuer }\n                        : {}));\n                const { data, error } = (await _request(this.fetch, 'POST', `${this.url}/factors`, {\n                    body,\n                    headers: this.headers,\n                    jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\n                }));\n                if (error) {\n                    return this._returnResult({ data: null, error });\n                }\n                if (params.factorType === 'totp' && data.type === 'totp' && ((_b = data === null || data === void 0 ? void 0 : data.totp) === null || _b === void 0 ? void 0 : _b.qr_code)) {\n                    data.totp.qr_code = `data:image/svg+xml;utf-8,${data.totp.qr_code}`;\n                }\n                return this._returnResult({ data, error: null });\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    async _verify(params) {\n        const run = async () => {\n            try {\n                return await this._useSession(async (result) => {\n                    var _a;\n                    const { data: sessionData, error: sessionError } = result;\n                    if (sessionError) {\n                        return this._returnResult({ data: null, error: sessionError });\n                    }\n                    const body = Object.assign({ challenge_id: params.challengeId }, ('webauthn' in params\n                        ? {\n                            webauthn: Object.assign(Object.assign({}, params.webauthn), { credential_response: params.webauthn.type === 'create'\n                                    ? serializeCredentialCreationResponse(params.webauthn.credential_response)\n                                    : serializeCredentialRequestResponse(params.webauthn.credential_response) }),\n                        }\n                        : { code: params.code }));\n                    const { data, error } = await _request(this.fetch, 'POST', `${this.url}/factors/${params.factorId}/verify`, {\n                        body,\n                        headers: this.headers,\n                        jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\n                    });\n                    if (error) {\n                        return this._returnResult({ data: null, error });\n                    }\n                    await this._saveSession(Object.assign({ expires_at: Math.round(Date.now() / 1000) + data.expires_in }, data));\n                    await this._notifyAllSubscribers('MFA_CHALLENGE_VERIFIED', data);\n                    return this._returnResult({ data, error });\n                });\n            }\n            catch (error) {\n                if (isAuthError(error)) {\n                    return this._returnResult({ data: null, error });\n                }\n                throw error;\n            }\n        };\n        if (this.lock != null) {\n            // TODO(v3): remove legacy lock path\n            return this._acquireLock(this.lockAcquireTimeout, run);\n        }\n        return run();\n    }\n    async _challenge(params) {\n        const run = async () => {\n            try {\n                return await this._useSession(async (result) => {\n                    var _a;\n                    const { data: sessionData, error: sessionError } = result;\n                    if (sessionError) {\n                        return this._returnResult({ data: null, error: sessionError });\n                    }\n                    const response = (await _request(this.fetch, 'POST', `${this.url}/factors/${params.factorId}/challenge`, {\n                        body: params,\n                        headers: this.headers,\n                        jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\n                    }));\n                    if (response.error) {\n                        return response;\n                    }\n                    const { data } = response;\n                    if (data.type !== 'webauthn') {\n                        return { data, error: null };\n                    }\n                    switch (data.webauthn.type) {\n                        case 'create':\n                            return {\n                                data: Object.assign(Object.assign({}, data), { webauthn: Object.assign(Object.assign({}, data.webauthn), { credential_options: Object.assign(Object.assign({}, data.webauthn.credential_options), { publicKey: deserializeCredentialCreationOptions(data.webauthn.credential_options.publicKey) }) }) }),\n                                error: null,\n                            };\n                        case 'request':\n                            return {\n                                data: Object.assign(Object.assign({}, data), { webauthn: Object.assign(Object.assign({}, data.webauthn), { credential_options: Object.assign(Object.assign({}, data.webauthn.credential_options), { publicKey: deserializeCredentialRequestOptions(data.webauthn.credential_options.publicKey) }) }) }),\n                                error: null,\n                            };\n                    }\n                });\n            }\n            catch (error) {\n                if (isAuthError(error)) {\n                    return this._returnResult({ data: null, error });\n                }\n                throw error;\n            }\n        };\n        if (this.lock != null) {\n            // TODO(v3): remove legacy lock path\n            return this._acquireLock(this.lockAcquireTimeout, run);\n        }\n        return run();\n    }\n    /**\n     * {@link GoTrueMFAApi#challengeAndVerify}\n     */\n    async _challengeAndVerify(params) {\n        const { data: challengeData, error: challengeError } = await this._challenge({\n            factorId: params.factorId,\n        });\n        if (challengeError) {\n            return this._returnResult({ data: null, error: challengeError });\n        }\n        return await this._verify({\n            factorId: params.factorId,\n            challengeId: challengeData.id,\n            code: params.code,\n        });\n    }\n    /**\n     * {@link GoTrueMFAApi#listFactors}\n     */\n    async _listFactors() {\n        var _a;\n        const { data: { user }, error: userError, } = await this.getUser();\n        if (userError) {\n            return { data: null, error: userError };\n        }\n        const data = {\n            all: [],\n            phone: [],\n            totp: [],\n            webauthn: [],\n        };\n        // loop over the factors ONCE\n        for (const factor of (_a = user === null || user === void 0 ? void 0 : user.factors) !== null && _a !== void 0 ? _a : []) {\n            data.all.push(factor);\n            if (factor.status === 'verified') {\n                ;\n                data[factor.factor_type].push(factor);\n            }\n        }\n        return {\n            data,\n            error: null,\n        };\n    }\n    /**\n     * {@link GoTrueMFAApi#getAuthenticatorAssuranceLevel}\n     */\n    async _getAuthenticatorAssuranceLevel(jwt) {\n        var _a, _b, _c, _d;\n        if (jwt) {\n            try {\n                const { payload } = decodeJWT(jwt);\n                let currentLevel = null;\n                if (payload.aal) {\n                    currentLevel = payload.aal;\n                }\n                let nextLevel = currentLevel;\n                const { data: { user }, error: userError, } = await this.getUser(jwt);\n                if (userError) {\n                    return this._returnResult({ data: null, error: userError });\n                }\n                const verifiedFactors = (_b = (_a = user === null || user === void 0 ? void 0 : user.factors) === null || _a === void 0 ? void 0 : _a.filter((factor) => factor.status === 'verified')) !== null && _b !== void 0 ? _b : [];\n                if (verifiedFactors.length > 0) {\n                    nextLevel = 'aal2';\n                }\n                const currentAuthenticationMethods = payload.amr || [];\n                return { data: { currentLevel, nextLevel, currentAuthenticationMethods }, error: null };\n            }\n            catch (error) {\n                if (isAuthError(error)) {\n                    return this._returnResult({ data: null, error });\n                }\n                throw error;\n            }\n        }\n        const { data: { session }, error: sessionError, } = await this.getSession();\n        if (sessionError) {\n            return this._returnResult({ data: null, error: sessionError });\n        }\n        if (!session) {\n            return {\n                data: { currentLevel: null, nextLevel: null, currentAuthenticationMethods: [] },\n                error: null,\n            };\n        }\n        const { payload } = decodeJWT(session.access_token);\n        let currentLevel = null;\n        if (payload.aal) {\n            currentLevel = payload.aal;\n        }\n        let nextLevel = currentLevel;\n        const verifiedFactors = (_d = (_c = session.user.factors) === null || _c === void 0 ? void 0 : _c.filter((factor) => factor.status === 'verified')) !== null && _d !== void 0 ? _d : [];\n        if (verifiedFactors.length > 0) {\n            nextLevel = 'aal2';\n        }\n        const currentAuthenticationMethods = payload.amr || [];\n        return { data: { currentLevel, nextLevel, currentAuthenticationMethods }, error: null };\n    }\n    /**\n     * Retrieves details about an OAuth authorization request.\n     * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n     *\n     * Returns authorization details including client info, scopes, and user information.\n     * If the response includes only a redirect_url field, it means consent was already given - the caller\n     * should handle the redirect manually if needed.\n     */\n    async _getAuthorizationDetails(authorizationId) {\n        try {\n            return await this._useSession(async (result) => {\n                const { data: { session }, error: sessionError, } = result;\n                if (sessionError) {\n                    return this._returnResult({ data: null, error: sessionError });\n                }\n                if (!session) {\n                    return this._returnResult({ data: null, error: new AuthSessionMissingError() });\n                }\n                return await _request(this.fetch, 'GET', `${this.url}/oauth/authorizations/${authorizationId}`, {\n                    headers: this.headers,\n                    jwt: session.access_token,\n                    xform: (data) => ({ data, error: null }),\n                });\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Approves an OAuth authorization request.\n     * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n     */\n    async _approveAuthorization(authorizationId, options) {\n        try {\n            return await this._useSession(async (result) => {\n                const { data: { session }, error: sessionError, } = result;\n                if (sessionError) {\n                    return this._returnResult({ data: null, error: sessionError });\n                }\n                if (!session) {\n                    return this._returnResult({ data: null, error: new AuthSessionMissingError() });\n                }\n                const response = await _request(this.fetch, 'POST', `${this.url}/oauth/authorizations/${authorizationId}/consent`, {\n                    headers: this.headers,\n                    jwt: session.access_token,\n                    body: { action: 'approve' },\n                    xform: (data) => ({ data, error: null }),\n                });\n                if (response.data && response.data.redirect_url) {\n                    // Automatically redirect in browser unless skipBrowserRedirect is true\n                    if (isBrowser() && !(options === null || options === void 0 ? void 0 : options.skipBrowserRedirect)) {\n                        window.location.assign(response.data.redirect_url);\n                    }\n                }\n                return response;\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Denies an OAuth authorization request.\n     * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n     */\n    async _denyAuthorization(authorizationId, options) {\n        try {\n            return await this._useSession(async (result) => {\n                const { data: { session }, error: sessionError, } = result;\n                if (sessionError) {\n                    return this._returnResult({ data: null, error: sessionError });\n                }\n                if (!session) {\n                    return this._returnResult({ data: null, error: new AuthSessionMissingError() });\n                }\n                const response = await _request(this.fetch, 'POST', `${this.url}/oauth/authorizations/${authorizationId}/consent`, {\n                    headers: this.headers,\n                    jwt: session.access_token,\n                    body: { action: 'deny' },\n                    xform: (data) => ({ data, error: null }),\n                });\n                if (response.data && response.data.redirect_url) {\n                    // Automatically redirect in browser unless skipBrowserRedirect is true\n                    if (isBrowser() && !(options === null || options === void 0 ? void 0 : options.skipBrowserRedirect)) {\n                        window.location.assign(response.data.redirect_url);\n                    }\n                }\n                return response;\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Lists all OAuth grants that the authenticated user has authorized.\n     * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n     */\n    async _listOAuthGrants() {\n        try {\n            return await this._useSession(async (result) => {\n                const { data: { session }, error: sessionError, } = result;\n                if (sessionError) {\n                    return this._returnResult({ data: null, error: sessionError });\n                }\n                if (!session) {\n                    return this._returnResult({ data: null, error: new AuthSessionMissingError() });\n                }\n                return await _request(this.fetch, 'GET', `${this.url}/user/oauth/grants`, {\n                    headers: this.headers,\n                    jwt: session.access_token,\n                    xform: (data) => ({ data, error: null }),\n                });\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Revokes a user's OAuth grant for a specific client.\n     * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n     */\n    async _revokeOAuthGrant(options) {\n        try {\n            return await this._useSession(async (result) => {\n                const { data: { session }, error: sessionError, } = result;\n                if (sessionError) {\n                    return this._returnResult({ data: null, error: sessionError });\n                }\n                if (!session) {\n                    return this._returnResult({ data: null, error: new AuthSessionMissingError() });\n                }\n                await _request(this.fetch, 'DELETE', `${this.url}/user/oauth/grants`, {\n                    headers: this.headers,\n                    jwt: session.access_token,\n                    query: { client_id: options.clientId },\n                    noResolveJson: true,\n                });\n                return { data: {}, error: null };\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    async fetchJwk(kid, jwks = { keys: [] }) {\n        // try fetching from the supplied jwks\n        let jwk = jwks.keys.find((key) => key.kid === kid);\n        if (jwk) {\n            return jwk;\n        }\n        const now = Date.now();\n        // try fetching from cache\n        jwk = this.jwks.keys.find((key) => key.kid === kid);\n        // jwk exists and jwks isn't stale\n        if (jwk && this.jwks_cached_at + JWKS_TTL > now) {\n            return jwk;\n        }\n        // jwk isn't cached in memory so we need to fetch it from the well-known endpoint\n        const { data, error } = await _request(this.fetch, 'GET', `${this.url}/.well-known/jwks.json`, {\n            headers: this.headers,\n        });\n        if (error) {\n            throw error;\n        }\n        if (!data.keys || data.keys.length === 0) {\n            return null;\n        }\n        this.jwks = data;\n        this.jwks_cached_at = now;\n        // Find the signing key\n        jwk = data.keys.find((key) => key.kid === kid);\n        if (!jwk) {\n            return null;\n        }\n        return jwk;\n    }\n    /**\n     * Extracts the JWT claims present in the access token by first verifying the\n     * JWT against the server's JSON Web Key Set endpoint\n     * `/.well-known/jwks.json` which is often cached, resulting in significantly\n     * faster responses. Prefer this method over {@link GoTrueClient.getUser} which always\n     * sends a request to the Auth server for each JWT.\n     *\n     * If the project is not using an asymmetric JWT signing key (like ECC or\n     * RSA) it always sends a request to the Auth server (similar to\n     * {@link GoTrueClient.getUser}) to verify the JWT.\n     *\n     * @param jwt An optional specific JWT you wish to verify, not the one you\n     *            can obtain from {@link GoTrueClient.getSession}.\n     * @param options Various additional options that allow you to customize the\n     *                behavior of this method.\n     *\n     * @category Auth\n     *\n     * @remarks\n     * - Parses the user's [access token](/docs/guides/auth/sessions#access-token-jwt-claims) as a [JSON Web Token (JWT)](/docs/guides/auth/jwts) and returns its components if valid and not expired.\n     * - If your project is using asymmetric JWT signing keys, then the verification is done locally usually without a network request using the [WebCrypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API).\n     * - A network request is sent to your project's JWT signing key discovery endpoint `https://project-id.supabase.co/auth/v1/.well-known/jwks.json`, which is cached locally. If your environment is ephemeral, such as a Lambda function that is destroyed after every request, a network request will be sent for each new invocation. Supabase provides a network-edge cache providing fast responses for these situations.\n     * - If the user's access token is about to expire when calling this function, the user's session will first be refreshed before validating the JWT.\n     * - If your project is using a symmetric secret to sign the JWT, it always sends a request similar to `getUser()` to validate the JWT at the server before returning the decoded token. This is also used if the WebCrypto API is not available in the environment. Make sure you polyfill it in such situations.\n     * - The returned claims can be customized per project using the [Custom Access Token Hook](/docs/guides/auth/auth-hooks/custom-access-token-hook).\n     *\n     * @example Get JWT claims, header and signature\n     * ```js\n     * const { data, error } = await supabase.auth.getClaims()\n     * ```\n     *\n     * @exampleResponse Get JWT claims, header and signature\n     * ```json\n     * {\n     *   \"data\": {\n     *     \"claims\": {\n     *       \"aal\": \"aal1\",\n     *       \"amr\": [{\n     *         \"method\": \"email\",\n     *         \"timestamp\": 1715766000\n     *       }],\n     *       \"app_metadata\": {},\n     *       \"aud\": \"authenticated\",\n     *       \"email\": \"example@email.com\",\n     *       \"exp\": 1715769600,\n     *       \"iat\": 1715766000,\n     *       \"is_anonymous\": false,\n     *       \"iss\": \"https://project-id.supabase.co/auth/v1\",\n     *       \"phone\": \"+13334445555\",\n     *       \"role\": \"authenticated\",\n     *       \"session_id\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"sub\": \"11111111-1111-1111-1111-111111111111\",\n     *       \"user_metadata\": {}\n     *     },\n     *     \"header\": {\n     *       \"alg\": \"RS256\",\n     *       \"typ\": \"JWT\",\n     *       \"kid\": \"11111111-1111-1111-1111-111111111111\"\n     *     },\n     *     \"signature\": [/** Uint8Array *\\/],\n     *   },\n     *   \"error\": null\n     * }\n     * ```\n     */\n    async getClaims(jwt, options = {}) {\n        try {\n            let token = jwt;\n            if (!token) {\n                const { data, error } = await this.getSession();\n                if (error || !data.session) {\n                    return this._returnResult({ data: null, error });\n                }\n                token = data.session.access_token;\n            }\n            const { header, payload, signature, raw: { header: rawHeader, payload: rawPayload }, } = decodeJWT(token);\n            if (!(options === null || options === void 0 ? void 0 : options.allowExpired)) {\n                // Reject expired JWTs should only happen if jwt argument was passed.\n                // Rethrow as AuthInvalidJwtError so the outer catch converts it to { data, error }.\n                try {\n                    validateExp(payload.exp);\n                }\n                catch (e) {\n                    throw new AuthInvalidJwtError(e instanceof Error ? e.message : 'JWT validation failed');\n                }\n            }\n            const signingKey = !header.alg ||\n                header.alg.startsWith('HS') ||\n                !header.kid ||\n                !('crypto' in globalThis && 'subtle' in globalThis.crypto)\n                ? null\n                : await this.fetchJwk(header.kid, (options === null || options === void 0 ? void 0 : options.keys) ? { keys: options.keys } : options === null || options === void 0 ? void 0 : options.jwks);\n            // If symmetric algorithm or WebCrypto API is unavailable, fallback to getUser()\n            if (!signingKey) {\n                const { error } = await this.getUser(token);\n                if (error) {\n                    throw error;\n                }\n                // getUser succeeds so the claims in the JWT can be trusted\n                return {\n                    data: {\n                        claims: payload,\n                        header,\n                        signature,\n                    },\n                    error: null,\n                };\n            }\n            const algorithm = getAlgorithm(header.alg);\n            // Convert JWK to CryptoKey\n            const publicKey = await crypto.subtle.importKey('jwk', signingKey, algorithm, true, [\n                'verify',\n            ]);\n            // Verify the signature\n            const isValid = await crypto.subtle.verify(algorithm, publicKey, signature, stringToUint8Array(`${rawHeader}.${rawPayload}`));\n            if (!isValid) {\n                throw new AuthInvalidJwtError('Invalid JWT signature');\n            }\n            // If verification succeeds, decode and return claims\n            return {\n                data: {\n                    claims: payload,\n                    header,\n                    signature,\n                },\n                error: null,\n            };\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    // --- Passkey Methods ---\n    /**\n     * Sign in with a passkey. Handles the full WebAuthn ceremony:\n     * 1. Fetches authentication challenge from server\n     * 2. Prompts user via navigator.credentials.get()\n     * 3. Verifies credential with server and creates session\n     *\n     * Requires `auth.experimental.passkey: true`.\n     *\n     * @category Auth\n     */\n    async signInWithPasskey(credentials) {\n        var _a, _b, _c;\n        assertPasskeyExperimentalEnabled(this.experimental);\n        try {\n            if (!browserSupportsWebAuthn()) {\n                return this._returnResult({\n                    data: null,\n                    error: new AuthUnknownError('Browser does not support WebAuthn', null),\n                });\n            }\n            // 1. Get challenge options from server\n            const { data: options, error: optionsError } = await this._startPasskeyAuthentication({\n                options: { captchaToken: (_a = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _a === void 0 ? void 0 : _a.captchaToken },\n            });\n            if (optionsError || !options) {\n                return this._returnResult({ data: null, error: optionsError });\n            }\n            // 2. Deserialize and prompt user via browser WebAuthn API\n            const publicKeyOptions = deserializeCredentialRequestOptions(options.options);\n            const signal = (_c = (_b = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _b === void 0 ? void 0 : _b.signal) !== null && _c !== void 0 ? _c : webAuthnAbortService.createNewAbortSignal();\n            const { data: credential, error: credentialError } = await getCredential({\n                publicKey: publicKeyOptions,\n                signal,\n            });\n            if (credentialError || !credential) {\n                return this._returnResult({\n                    data: null,\n                    error: credentialError !== null && credentialError !== void 0 ? credentialError : new AuthUnknownError('WebAuthn ceremony failed', null),\n                });\n            }\n            // 3. Serialize and verify with server\n            const serialized = serializeCredentialRequestResponse(credential);\n            return this._verifyPasskeyAuthentication({\n                challengeId: options.challenge_id,\n                credential: serialized,\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Register a passkey for the current authenticated user. Handles the full WebAuthn ceremony:\n     * 1. Fetches registration challenge from server\n     * 2. Prompts user via navigator.credentials.create()\n     * 3. Verifies credential with server\n     *\n     * Requires an active session. Requires `auth.experimental.passkey: true`.\n     *\n     * @category Auth\n     */\n    async registerPasskey(credentials) {\n        var _a, _b;\n        assertPasskeyExperimentalEnabled(this.experimental);\n        try {\n            if (!browserSupportsWebAuthn()) {\n                return this._returnResult({\n                    data: null,\n                    error: new AuthUnknownError('Browser does not support WebAuthn', null),\n                });\n            }\n            // 1. Get challenge options from server\n            const { data: options, error: optionsError } = await this._startPasskeyRegistration();\n            if (optionsError || !options) {\n                return this._returnResult({ data: null, error: optionsError });\n            }\n            // 2. Deserialize and prompt user via browser WebAuthn API\n            const publicKeyOptions = deserializeCredentialCreationOptions(options.options);\n            const signal = (_b = (_a = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _a === void 0 ? void 0 : _a.signal) !== null && _b !== void 0 ? _b : webAuthnAbortService.createNewAbortSignal();\n            const { data: credential, error: credentialError } = await createCredential({\n                publicKey: publicKeyOptions,\n                signal,\n            });\n            if (credentialError || !credential) {\n                return this._returnResult({\n                    data: null,\n                    error: credentialError !== null && credentialError !== void 0 ? credentialError : new AuthUnknownError('WebAuthn ceremony failed', null),\n                });\n            }\n            // 3. Serialize and verify with server\n            const serialized = serializeCredentialCreationResponse(credential);\n            return this._verifyPasskeyRegistration({\n                challengeId: options.challenge_id,\n                credential: serialized,\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Start passkey registration for the current authenticated user.\n     * Returns WebAuthn credential creation options to pass to navigator.credentials.create().\n     */\n    async _startPasskeyRegistration() {\n        assertPasskeyExperimentalEnabled(this.experimental);\n        try {\n            return await this._useSession(async (result) => {\n                const { data: { session }, error: sessionError, } = result;\n                if (sessionError) {\n                    return this._returnResult({ data: null, error: sessionError });\n                }\n                if (!session) {\n                    return this._returnResult({ data: null, error: new AuthSessionMissingError() });\n                }\n                const { data, error } = await _request(this.fetch, 'POST', `${this.url}/passkeys/registration/options`, {\n                    headers: this.headers,\n                    jwt: session.access_token,\n                    body: {},\n                });\n                if (error) {\n                    return this._returnResult({ data: null, error });\n                }\n                return this._returnResult({ data, error: null });\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Verify passkey registration with the credential response.\n     * The credentialResponse should be the serialized output of navigator.credentials.create().\n     */\n    async _verifyPasskeyRegistration(params) {\n        assertPasskeyExperimentalEnabled(this.experimental);\n        try {\n            return await this._useSession(async (result) => {\n                const { data: { session }, error: sessionError, } = result;\n                if (sessionError) {\n                    return this._returnResult({ data: null, error: sessionError });\n                }\n                if (!session) {\n                    return this._returnResult({ data: null, error: new AuthSessionMissingError() });\n                }\n                const { data, error } = await _request(this.fetch, 'POST', `${this.url}/passkeys/registration/verify`, {\n                    headers: this.headers,\n                    jwt: session.access_token,\n                    body: {\n                        challenge_id: params.challengeId,\n                        credential: params.credential,\n                    },\n                });\n                if (error) {\n                    return this._returnResult({ data: null, error });\n                }\n                return this._returnResult({ data, error: null });\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Start passkey authentication.\n     * Returns WebAuthn credential request options to pass to navigator.credentials.get().\n     */\n    async _startPasskeyAuthentication(params) {\n        var _a;\n        assertPasskeyExperimentalEnabled(this.experimental);\n        try {\n            const { data, error } = await _request(this.fetch, 'POST', `${this.url}/passkeys/authentication/options`, {\n                headers: this.headers,\n                body: {\n                    gotrue_meta_security: { captcha_token: (_a = params === null || params === void 0 ? void 0 : params.options) === null || _a === void 0 ? void 0 : _a.captchaToken },\n                },\n            });\n            if (error) {\n                return this._returnResult({ data: null, error });\n            }\n            return this._returnResult({ data, error: null });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Verify passkey authentication and create a session.\n     * The credential should be the serialized output of navigator.credentials.get().\n     */\n    async _verifyPasskeyAuthentication(params) {\n        assertPasskeyExperimentalEnabled(this.experimental);\n        try {\n            const { data, error } = await _request(this.fetch, 'POST', `${this.url}/passkeys/authentication/verify`, {\n                headers: this.headers,\n                body: {\n                    challenge_id: params.challengeId,\n                    credential: params.credential,\n                },\n                xform: _sessionResponse,\n            });\n            if (error) {\n                return this._returnResult({ data: null, error });\n            }\n            if (data.session) {\n                await this._saveSession(data.session);\n                await this._notifyAllSubscribers('SIGNED_IN', data.session);\n            }\n            return this._returnResult({ data, error: null });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * List all passkeys for the current user.\n     */\n    async _listPasskeys() {\n        assertPasskeyExperimentalEnabled(this.experimental);\n        try {\n            return await this._useSession(async (result) => {\n                const { data: { session }, error: sessionError, } = result;\n                if (sessionError) {\n                    return this._returnResult({ data: null, error: sessionError });\n                }\n                if (!session) {\n                    return this._returnResult({ data: null, error: new AuthSessionMissingError() });\n                }\n                const { data, error } = await _request(this.fetch, 'GET', `${this.url}/passkeys`, {\n                    headers: this.headers,\n                    jwt: session.access_token,\n                    xform: (data) => ({ data, error: null }),\n                });\n                if (error) {\n                    return this._returnResult({ data: null, error });\n                }\n                return this._returnResult({ data, error: null });\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Update a passkey.\n     */\n    async _updatePasskey(params) {\n        assertPasskeyExperimentalEnabled(this.experimental);\n        try {\n            return await this._useSession(async (result) => {\n                const { data: { session }, error: sessionError, } = result;\n                if (sessionError) {\n                    return this._returnResult({ data: null, error: sessionError });\n                }\n                if (!session) {\n                    return this._returnResult({ data: null, error: new AuthSessionMissingError() });\n                }\n                const { data, error } = await _request(this.fetch, 'PATCH', `${this.url}/passkeys/${params.passkeyId}`, {\n                    headers: this.headers,\n                    jwt: session.access_token,\n                    body: { friendly_name: params.friendlyName },\n                });\n                if (error) {\n                    return this._returnResult({ data: null, error });\n                }\n                return this._returnResult({ data, error: null });\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n    /**\n     * Delete a passkey.\n     */\n    async _deletePasskey(params) {\n        assertPasskeyExperimentalEnabled(this.experimental);\n        try {\n            return await this._useSession(async (result) => {\n                const { data: { session }, error: sessionError, } = result;\n                if (sessionError) {\n                    return this._returnResult({ data: null, error: sessionError });\n                }\n                if (!session) {\n                    return this._returnResult({ data: null, error: new AuthSessionMissingError() });\n                }\n                const { error } = await _request(this.fetch, 'DELETE', `${this.url}/passkeys/${params.passkeyId}`, {\n                    headers: this.headers,\n                    jwt: session.access_token,\n                    noResolveJson: true,\n                });\n                if (error) {\n                    return this._returnResult({ data: null, error });\n                }\n                return this._returnResult({ data: null, error: null });\n            });\n        }\n        catch (error) {\n            if (isAuthError(error)) {\n                return this._returnResult({ data: null, error });\n            }\n            throw error;\n        }\n    }\n}\nGoTrueClient.nextInstanceID = {};\nexport default GoTrueClient;\n//# sourceMappingURL=GoTrueClient.js.map","import GoTrueClient from './GoTrueClient';\nconst AuthClient = GoTrueClient;\nexport default AuthClient;\n//# sourceMappingURL=AuthClient.js.map","import { t as getTraceContextExtractor } from \"./tracingRegistry.mjs\";\nimport { FunctionRegion, FunctionsClient, FunctionsError, FunctionsFetchError, FunctionsHttpError, FunctionsRelayError } from \"@supabase/functions-js\";\nimport { PostgrestClient, PostgrestError } from \"@supabase/postgrest-js\";\nimport { RealtimeClient } from \"@supabase/realtime-js\";\nimport { StorageApiError, StorageClient } from \"@supabase/storage-js\";\nimport { AuthClient } from \"@supabase/auth-js\";\n\nexport * from \"@supabase/realtime-js\"\n\nexport * from \"@supabase/auth-js\"\n\n//#region src/lib/version.ts\nconst version = \"2.112.3\";\n\n//#endregion\n//#region src/lib/constants.ts\nlet JS_ENV = \"\";\nlet JS_RUNTIME_VERSION;\nif (typeof Deno !== \"undefined\") {\n\tvar _Deno$version;\n\tJS_ENV = \"deno\";\n\tJS_RUNTIME_VERSION = (_Deno$version = Deno.version) === null || _Deno$version === void 0 ? void 0 : _Deno$version.deno;\n} else if (typeof document !== \"undefined\") JS_ENV = \"web\";\nelse if (typeof navigator !== \"undefined\" && navigator.product === \"ReactNative\") JS_ENV = \"react-native\";\nelse {\n\tvar _process$version;\n\tJS_ENV = \"node\";\n\tconst _process = globalThis[\"process\"];\n\tJS_RUNTIME_VERSION = _process === null || _process === void 0 || (_process$version = _process[\"version\"]) === null || _process$version === void 0 ? void 0 : _process$version.replace(/^v/, \"\");\n}\nconst _runtimeMeta = [`runtime=${JS_ENV}`];\nif (JS_RUNTIME_VERSION) _runtimeMeta.push(`runtime-version=${JS_RUNTIME_VERSION}`);\nconst DEFAULT_HEADERS = { \"X-Client-Info\": `supabase-js/${version}; ${_runtimeMeta.join(\"; \")}` };\nconst DEFAULT_GLOBAL_OPTIONS = { headers: DEFAULT_HEADERS };\nconst DEFAULT_DB_OPTIONS = { schema: \"public\" };\nconst DEFAULT_AUTH_OPTIONS = {\n\tautoRefreshToken: true,\n\tpersistSession: true,\n\tdetectSessionInUrl: true,\n\tflowType: \"implicit\"\n};\nconst DEFAULT_REALTIME_OPTIONS = {};\nconst DEFAULT_TRACE_PROPAGATION_OPTIONS = {\n\tenabled: false,\n\trespectSamplingDecision: true\n};\n\n//#endregion\n//#region ../../shared/tracing/dist/module/parse.js\n/**\n* Parse W3C traceparent header according to the specification.\n*\n* The traceparent header format is: version-traceid-parentid-traceflags\n* - version: 2 hex digits (currently always \"00\")\n* - traceid: 32 hex digits (128-bit trace identifier)\n* - parentid: 16 hex digits (64-bit span/parent identifier)\n* - traceflags: 2 hex digits (8-bit flags, bit 0 is sampled flag)\n*\n* @param traceparent - The traceparent header value\n* @returns Parsed traceparent object, or null if invalid format\n*\n* @see https://www.w3.org/TR/trace-context/#traceparent-header\n*\n* @example\n* ```typescript\n* const parsed = parseTraceParent('00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01')\n*\n* console.log(parsed)\n* // {\n* //   version: '00',\n* //   traceId: '0af7651916cd43dd8448eb211c80319c',\n* //   parentId: 'b7ad6b7169203331',\n* //   traceFlags: '01',\n* //   isSampled: true\n* // }\n* ```\n*/\nfunction parseTraceParent(traceparent) {\n\tif (!traceparent || typeof traceparent !== \"string\") return null;\n\tconst parts = traceparent.split(\"-\");\n\tif (parts.length !== 4) return null;\n\tconst [version$1, traceId, parentId, traceFlags] = parts;\n\tif (version$1.length !== 2 || traceId.length !== 32 || parentId.length !== 16 || traceFlags.length !== 2) return null;\n\tconst hexRegex = /^[0-9a-f]+$/i;\n\tif (!hexRegex.test(version$1) || !hexRegex.test(traceId) || !hexRegex.test(parentId) || !hexRegex.test(traceFlags)) return null;\n\tif (traceId === \"00000000000000000000000000000000\" || parentId === \"0000000000000000\") return null;\n\treturn {\n\t\tversion: version$1,\n\t\ttraceId,\n\t\tparentId,\n\t\ttraceFlags,\n\t\tisSampled: (parseInt(traceFlags, 16) & 1) === 1\n\t};\n}\n\n//#endregion\n//#region ../../shared/tracing/dist/module/validate.js\n/**\n* Check if trace context should be propagated to the target URL.\n*\n* This function checks if the target URL matches any of the configured\n* propagation targets. Targets can be:\n* - String: Exact hostname match or wildcard domain (*.example.com)\n* - RegExp: Pattern matching hostname\n* - Function: Custom logic to determine if URL should receive trace context\n*\n* @param targetUrl - The URL to check\n* @param targets - Array of propagation targets\n* @returns True if trace context should be propagated, false otherwise\n*\n* @example\n* ```typescript\n* const targets = [\n*   'myproject.supabase.co',           // Exact match\n*   '*.supabase.co',                   // Wildcard domain\n*   /.*\\.supabase\\.co$/,               // Regex pattern\n*   (url) => url.hostname === 'localhost' // Custom function\n* ]\n*\n* shouldPropagateToTarget('https://myproject.supabase.co/rest/v1/table', targets)\n* // true\n*\n* shouldPropagateToTarget('https://evil.com/api', targets)\n* // false\n* ```\n*/\nfunction shouldPropagateToTarget(targetUrl, targets) {\n\tif (!targetUrl || !targets || targets.length === 0) return false;\n\tlet url;\n\tif (targetUrl instanceof URL) url = targetUrl;\n\telse try {\n\t\turl = new URL(targetUrl);\n\t} catch (error) {\n\t\treturn false;\n\t}\n\tfor (const target of targets) try {\n\t\tif (typeof target === \"string\") {\n\t\t\tif (matchStringTarget(url.hostname, target)) return true;\n\t\t} else if (target instanceof RegExp) {\n\t\t\tif (target.test(url.hostname)) return true;\n\t\t} else if (typeof target === \"function\") {\n\t\t\tif (target(url)) return true;\n\t\t}\n\t} catch (error) {\n\t\tcontinue;\n\t}\n\treturn false;\n}\n/**\n* Match hostname against string target (exact match or wildcard)\n*\n* @param hostname - The hostname to check\n* @param target - The target pattern (exact or wildcard)\n* @returns True if hostname matches target\n*/\nfunction matchStringTarget(hostname, target) {\n\tif (target === hostname) return true;\n\tif (target.startsWith(\"*.\")) {\n\t\tconst domain = target.slice(2);\n\t\tif (hostname.endsWith(domain)) {\n\t\t\tif (hostname === domain || hostname.endsWith(\".\" + domain)) return true;\n\t\t}\n\t}\n\treturn false;\n}\n\n//#endregion\n//#region ../../shared/tracing/dist/module/defaults.js\n/**\n* Generate default propagation targets based on the Supabase project URL.\n*\n* By default, trace context is only propagated to Supabase domains for\n* security. This prevents leaking trace context to potentially malicious\n* third-party services.\n*\n* Wildcard strings (e.g. `*.supabase.co`) are matched with linear string\n* operations rather than regex, avoiding ReDoS risk.\n*\n* @param supabaseUrl - The Supabase project URL\n* @returns Array of default propagation targets\n*/\nfunction getDefaultPropagationTargets(supabaseUrl) {\n\tconst targets = [];\n\ttry {\n\t\tconst url = new URL(supabaseUrl);\n\t\ttargets.push(url.hostname);\n\t} catch (error) {}\n\ttargets.push(\"*.supabase.co\", \"*.supabase.in\");\n\ttargets.push(\"localhost\", \"127.0.0.1\", \"[::1]\");\n\treturn targets;\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/typeof.js\nfunction _typeof(o) {\n\t\"@babel/helpers - typeof\";\n\treturn _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o$1) {\n\t\treturn typeof o$1;\n\t} : function(o$1) {\n\t\treturn o$1 && \"function\" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? \"symbol\" : typeof o$1;\n\t}, _typeof(o);\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/toPrimitive.js\nfunction toPrimitive(t, r) {\n\tif (\"object\" != _typeof(t) || !t) return t;\n\tvar e = t[Symbol.toPrimitive];\n\tif (void 0 !== e) {\n\t\tvar i = e.call(t, r || \"default\");\n\t\tif (\"object\" != _typeof(i)) return i;\n\t\tthrow new TypeError(\"@@toPrimitive must return a primitive value.\");\n\t}\n\treturn (\"string\" === r ? String : Number)(t);\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/toPropertyKey.js\nfunction toPropertyKey(t) {\n\tvar i = toPrimitive(t, \"string\");\n\treturn \"symbol\" == _typeof(i) ? i : i + \"\";\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/defineProperty.js\nfunction _defineProperty(e, r, t) {\n\treturn (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n\t\tvalue: t,\n\t\tenumerable: !0,\n\t\tconfigurable: !0,\n\t\twritable: !0\n\t}) : e[r] = t, e;\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.103.0/helpers/objectSpread2.js\nfunction ownKeys(e, r) {\n\tvar t = Object.keys(e);\n\tif (Object.getOwnPropertySymbols) {\n\t\tvar o = Object.getOwnPropertySymbols(e);\n\t\tr && (o = o.filter(function(r$1) {\n\t\t\treturn Object.getOwnPropertyDescriptor(e, r$1).enumerable;\n\t\t})), t.push.apply(t, o);\n\t}\n\treturn t;\n}\nfunction _objectSpread2(e) {\n\tfor (var r = 1; r < arguments.length; r++) {\n\t\tvar t = null != arguments[r] ? arguments[r] : {};\n\t\tr % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) {\n\t\t\t_defineProperty(e, r$1, t[r$1]);\n\t\t}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) {\n\t\t\tObject.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1));\n\t\t});\n\t}\n\treturn e;\n}\n\n//#endregion\n//#region src/lib/fetch.ts\nconst resolveFetch = (customFetch) => {\n\tif (customFetch) return (...args) => customFetch(...args);\n\treturn (...args) => fetch(...args);\n};\nconst resolveHeadersConstructor = () => {\n\treturn Headers;\n};\n/**\n* New-format Supabase API keys (`sb_publishable_…` / `sb_secret_…`) are not JWTs and\n* must never be sent as a Bearer token — they belong only in the `apikey` header.\n* All other keys (legacy JWT keys, `sb_temp_…` temporary keys, unrecognized `sb_`\n* subtypes) keep the Bearer fallback.\n*/\nconst isNewApiKey = (key) => key.startsWith(\"sb_publishable_\") || key.startsWith(\"sb_secret_\");\nconst TEMP_KEY_PREFIX = \"sb_temp_\";\nconst warnedKeySubtypes = /* @__PURE__ */ new Set();\n/**\n* Warn (once per subtype) when an `sb_` key isn't a subtype this SDK version recognizes.\n* Never throws — the server, not the SDK, decides key validity. The key value is never\n* included in the message.\n*/\nconst checkApiKeyFormat = (key) => {\n\tvar _key$match$, _key$match;\n\tif (!key.startsWith(\"sb_\") || isNewApiKey(key) || key.startsWith(TEMP_KEY_PREFIX)) return;\n\tconst subtype = (_key$match$ = (_key$match = key.match(/^sb_[a-zA-Z0-9]+_/)) === null || _key$match === void 0 ? void 0 : _key$match[0]) !== null && _key$match$ !== void 0 ? _key$match$ : \"unknown\";\n\tif (warnedKeySubtypes.has(subtype)) return;\n\twarnedKeySubtypes.add(subtype);\n\tconsole.warn(\"@supabase/supabase-js: Unrecognized Supabase API key format. The client will proceed and send this key as-is; if you see authentication errors you may need to upgrade @supabase/supabase-js to a version that recognizes this key type.\");\n};\nconst fetchWithAuth = (supabaseKey, supabaseUrl, getAccessToken, customFetch, tracePropagationOptions, options) => {\n\tconst fetch$1 = resolveFetch(customFetch);\n\tconst HeadersConstructor = resolveHeadersConstructor();\n\tconst traceEnabled = (tracePropagationOptions === null || tracePropagationOptions === void 0 ? void 0 : tracePropagationOptions.enabled) === true;\n\tconst respectSampling = (tracePropagationOptions === null || tracePropagationOptions === void 0 ? void 0 : tracePropagationOptions.respectSamplingDecision) !== false;\n\tconst traceTargets = traceEnabled ? getDefaultPropagationTargets(supabaseUrl) : null;\n\tconst allowKeyAsBearer = !((options === null || options === void 0 ? void 0 : options.omitApiKeyAsBearer) && isNewApiKey(supabaseKey));\n\treturn async (input, init) => {\n\t\tconst realToken = await getAccessToken();\n\t\tlet headers = new HeadersConstructor(init === null || init === void 0 ? void 0 : init.headers);\n\t\tif (!headers.has(\"apikey\")) headers.set(\"apikey\", supabaseKey);\n\t\tif (!headers.has(\"Authorization\")) {\n\t\t\tconst bearer = realToken !== null && realToken !== void 0 ? realToken : allowKeyAsBearer ? supabaseKey : null;\n\t\t\tif (bearer) headers.set(\"Authorization\", `Bearer ${bearer}`);\n\t\t}\n\t\tif (traceTargets) {\n\t\t\tconst traceHeaders = getTraceHeaders(input, traceTargets, respectSampling);\n\t\t\tif (traceHeaders) {\n\t\t\t\tif (traceHeaders.traceparent && !headers.has(\"traceparent\")) headers.set(\"traceparent\", traceHeaders.traceparent);\n\t\t\t\tif (traceHeaders.tracestate && !headers.has(\"tracestate\")) headers.set(\"tracestate\", traceHeaders.tracestate);\n\t\t\t\tif (traceHeaders.baggage && !headers.has(\"baggage\")) headers.set(\"baggage\", traceHeaders.baggage);\n\t\t\t}\n\t\t}\n\t\treturn fetch$1(input, _objectSpread2(_objectSpread2({}, init), {}, { headers }));\n\t};\n};\nlet warnedMissingTracingRuntime = false;\nlet warnedNonW3CPropagator = false;\nfunction getTraceHeaders(input, targets, respectSampling) {\n\tconst extractTraceContext = getTraceContextExtractor();\n\tif (!extractTraceContext) {\n\t\tif (!warnedMissingTracingRuntime) {\n\t\t\twarnedMissingTracingRuntime = true;\n\t\t\tconsole.warn(\"@supabase/supabase-js: tracePropagation is enabled but the tracing runtime is not loaded, so trace headers will not be attached. Add `import '@supabase/supabase-js/tracing'` at your application entry point (requires the OpenTelemetry API package to be installed). The CDN/UMD build does not support trace propagation.\");\n\t\t}\n\t\treturn null;\n\t}\n\tif (!shouldPropagateToTarget(typeof input === \"string\" ? input : input instanceof URL ? input : input.url, targets)) return null;\n\tconst traceContext = extractTraceContext();\n\tif (!traceContext || !traceContext.traceparent) {\n\t\tvar _traceContext$carrier;\n\t\tif ((traceContext === null || traceContext === void 0 || (_traceContext$carrier = traceContext.carrierKeys) === null || _traceContext$carrier === void 0 ? void 0 : _traceContext$carrier.length) && !warnedNonW3CPropagator) {\n\t\t\twarnedNonW3CPropagator = true;\n\t\t\tconst sentryHint = traceContext.carrierKeys.includes(\"sentry-trace\") ? \" Sentry detected: set `propagateTraceparent: true` in Sentry.init() to emit it.\" : \" Configure your tracing SDK to emit W3C trace context on outgoing requests.\";\n\t\t\tconsole.warn(`@supabase/supabase-js: tracePropagation is enabled and a tracing SDK is active, but its propagator wrote [${traceContext.carrierKeys.join(\", \")}] and no W3C traceparent header, so trace headers will not be attached.` + sentryHint);\n\t\t}\n\t\treturn null;\n\t}\n\tif (respectSampling) {\n\t\tconst parsed = parseTraceParent(traceContext.traceparent);\n\t\tif (parsed && !parsed.isSampled) return { traceparent: traceContext.traceparent };\n\t}\n\treturn traceContext;\n}\n\n//#endregion\n//#region src/lib/helpers.ts\nfunction normalizeTracePropagation(value) {\n\treturn typeof value === \"boolean\" ? { enabled: value } : value;\n}\nfunction ensureTrailingSlash(url) {\n\treturn url.endsWith(\"/\") ? url : url + \"/\";\n}\nfunction applySettingDefaults(options, defaults) {\n\tvar _DEFAULT_GLOBAL_OPTIO, _globalOptions$header, _ref, _tracePropagationOpti, _ref2, _tracePropagationOpti2;\n\tconst { db: dbOptions, auth: authOptions, realtime: realtimeOptions, global: globalOptions } = options;\n\tconst { db: DEFAULT_DB_OPTIONS$1, auth: DEFAULT_AUTH_OPTIONS$1, realtime: DEFAULT_REALTIME_OPTIONS$1, global: DEFAULT_GLOBAL_OPTIONS$1 } = defaults;\n\tconst tracePropagationOptions = normalizeTracePropagation(options.tracePropagation);\n\tconst DEFAULT_TRACE_PROPAGATION_OPTIONS$1 = normalizeTracePropagation(defaults.tracePropagation);\n\tconst result = {\n\t\tdb: _objectSpread2(_objectSpread2({}, DEFAULT_DB_OPTIONS$1), dbOptions),\n\t\tauth: _objectSpread2(_objectSpread2({}, DEFAULT_AUTH_OPTIONS$1), authOptions),\n\t\trealtime: _objectSpread2(_objectSpread2({}, DEFAULT_REALTIME_OPTIONS$1), realtimeOptions),\n\t\tstorage: {},\n\t\tglobal: _objectSpread2(_objectSpread2(_objectSpread2({}, DEFAULT_GLOBAL_OPTIONS$1), globalOptions), {}, { headers: _objectSpread2(_objectSpread2({}, (_DEFAULT_GLOBAL_OPTIO = DEFAULT_GLOBAL_OPTIONS$1 === null || DEFAULT_GLOBAL_OPTIONS$1 === void 0 ? void 0 : DEFAULT_GLOBAL_OPTIONS$1.headers) !== null && _DEFAULT_GLOBAL_OPTIO !== void 0 ? _DEFAULT_GLOBAL_OPTIO : {}), (_globalOptions$header = globalOptions === null || globalOptions === void 0 ? void 0 : globalOptions.headers) !== null && _globalOptions$header !== void 0 ? _globalOptions$header : {}) }),\n\t\ttracePropagation: {\n\t\t\tenabled: (_ref = (_tracePropagationOpti = tracePropagationOptions === null || tracePropagationOptions === void 0 ? void 0 : tracePropagationOptions.enabled) !== null && _tracePropagationOpti !== void 0 ? _tracePropagationOpti : DEFAULT_TRACE_PROPAGATION_OPTIONS$1 === null || DEFAULT_TRACE_PROPAGATION_OPTIONS$1 === void 0 ? void 0 : DEFAULT_TRACE_PROPAGATION_OPTIONS$1.enabled) !== null && _ref !== void 0 ? _ref : false,\n\t\t\trespectSamplingDecision: (_ref2 = (_tracePropagationOpti2 = tracePropagationOptions === null || tracePropagationOptions === void 0 ? void 0 : tracePropagationOptions.respectSamplingDecision) !== null && _tracePropagationOpti2 !== void 0 ? _tracePropagationOpti2 : DEFAULT_TRACE_PROPAGATION_OPTIONS$1 === null || DEFAULT_TRACE_PROPAGATION_OPTIONS$1 === void 0 ? void 0 : DEFAULT_TRACE_PROPAGATION_OPTIONS$1.respectSamplingDecision) !== null && _ref2 !== void 0 ? _ref2 : true\n\t\t},\n\t\taccessToken: async () => \"\"\n\t};\n\tif (options.accessToken) result.accessToken = options.accessToken;\n\telse delete result.accessToken;\n\treturn result;\n}\n/**\n* Validates a Supabase client URL\n*\n* @param {string} supabaseUrl - The Supabase client URL string.\n* @returns {URL} - The validated base URL.\n* @throws {Error}\n*/\nfunction validateSupabaseUrl(supabaseUrl) {\n\tconst trimmedUrl = supabaseUrl === null || supabaseUrl === void 0 ? void 0 : supabaseUrl.trim();\n\tif (!trimmedUrl) throw new Error(\"supabaseUrl is required.\");\n\tif (!trimmedUrl.match(/^https?:\\/\\//i)) throw new Error(\"Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL.\");\n\ttry {\n\t\treturn new URL(ensureTrailingSlash(trimmedUrl));\n\t} catch (_unused) {\n\t\tthrow Error(\"Invalid supabaseUrl: Provided URL is malformed.\");\n\t}\n}\n\n//#endregion\n//#region src/lib/SupabaseAuthClient.ts\nvar SupabaseAuthClient = class extends AuthClient {\n\tconstructor(options) {\n\t\tsuper(options);\n\t}\n};\n\n//#endregion\n//#region src/SupabaseClient.ts\n/**\n* Supabase Client.\n*\n* An isomorphic Javascript client for interacting with Postgres.\n*/\nvar SupabaseClient = class {\n\t/**\n\t* Create a new client for use in the browser.\n\t*\n\t* @category Initializing\n\t*\n\t* @param supabaseUrl The unique Supabase URL which is supplied when you create a new project in your project dashboard.\n\t* @param supabaseKey The unique Supabase Key which is supplied when you create a new project in your project dashboard.\n\t* @param options Optional configuration for the client:\n\t* - `db.schema` — You can switch in between schemas. The schema needs to be on the list of exposed schemas inside Supabase.\n\t* - `auth.autoRefreshToken` — Set to `true` if you want to automatically refresh the token before expiring.\n\t* - `auth.persistSession` — Set to `true` if you want to automatically save the user session into local storage.\n\t* - `auth.detectSessionInUrl` — Set to `true` if you want to automatically detect OAuth grants in the URL and sign in the user.\n\t* - `realtime` — Options passed along to the realtime-js constructor.\n\t* - `storage` — Options passed along to the storage-js constructor.\n\t* - `global.fetch` — A custom fetch implementation.\n\t* - `global.headers` — Any additional headers to send with each network request.\n\t*\n\t* @example Creating a client\n\t* ```js\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* // Create a single supabase client for interacting with your database\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* ```\n\t*\n\t* @example With a custom domain\n\t* ```js\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* // Use a custom domain as the supabase URL\n\t* const supabase = createClient('https://my-custom-domain.com', 'your-publishable-key')\n\t* ```\n\t*\n\t* @example With additional parameters\n\t* ```js\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const options = {\n\t*   db: {\n\t*     schema: 'public',\n\t*   },\n\t*   auth: {\n\t*     autoRefreshToken: true,\n\t*     persistSession: true,\n\t*     detectSessionInUrl: true\n\t*   },\n\t*   global: {\n\t*     headers: { 'x-my-custom-header': 'my-app-name' },\n\t*   },\n\t* }\n\t* const supabase = createClient(\"https://xyzcompany.supabase.co\", \"your-publishable-key\", options)\n\t* ```\n\t*\n\t* @exampleDescription With custom schemas\n\t* By default the API server points to the `public` schema. You can enable other database schemas within the Dashboard.\n\t* Go to [Settings > API > Exposed schemas](/dashboard/project/_/settings/api) and add the schema which you want to expose to the API.\n\t*\n\t* Note: each client connection can only access a single schema, so the code above can access the `other_schema` schema but cannot access the `public` schema.\n\t*\n\t* @example With custom schemas\n\t* ```js\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key', {\n\t*   // Provide a custom schema. Defaults to \"public\".\n\t*   db: { schema: 'other_schema' }\n\t* })\n\t* ```\n\t*\n\t* @exampleDescription Custom fetch implementation\n\t* `supabase-js` uses the runtime's global `fetch` to make HTTP requests,\n\t* but an alternative `fetch` implementation can be provided as an option.\n\t* This is useful in environments where the global `fetch` is unavailable or where you want to customize request behavior.\n\t*\n\t* @example Custom fetch implementation\n\t* ```js\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key', {\n\t*   global: { fetch: fetch.bind(globalThis) }\n\t* })\n\t* ```\n\t*\n\t* @exampleDescription React Native options with AsyncStorage\n\t* For React Native we recommend using `AsyncStorage` as the storage implementation for Supabase Auth.\n\t*\n\t* @example React Native options with AsyncStorage\n\t* ```js\n\t* import 'react-native-url-polyfill/auto'\n\t* import { createClient } from '@supabase/supabase-js'\n\t* import AsyncStorage from \"@react-native-async-storage/async-storage\";\n\t*\n\t* const supabase = createClient(\"https://xyzcompany.supabase.co\", \"your-publishable-key\", {\n\t*   auth: {\n\t*     storage: AsyncStorage,\n\t*     autoRefreshToken: true,\n\t*     persistSession: true,\n\t*     detectSessionInUrl: false,\n\t*   },\n\t* });\n\t* ```\n\t*\n\t* @exampleDescription React Native options with Expo SecureStore\n\t* If you wish to encrypt the user's session information, you can use `aes-js` and store the encryption key in Expo SecureStore.\n\t* The `aes-js` library, a reputable JavaScript-only implementation of the AES encryption algorithm in CTR mode.\n\t* A new 256-bit encryption key is generated using the `react-native-get-random-values` library.\n\t* This key is stored inside Expo's SecureStore, while the value is encrypted and placed inside AsyncStorage.\n\t*\n\t* Please make sure that:\n\t* - You keep the `expo-secure-store`, `aes-js` and `react-native-get-random-values` libraries up-to-date.\n\t* - Choose the correct [`SecureStoreOptions`](https://docs.expo.dev/versions/latest/sdk/securestore/#securestoreoptions) for your app's needs.\n\t*   E.g. [`SecureStore.WHEN_UNLOCKED`](https://docs.expo.dev/versions/latest/sdk/securestore/#securestorewhen_unlocked) regulates when the data can be accessed.\n\t* - Carefully consider optimizations or other modifications to the above example, as those can lead to introducing subtle security vulnerabilities.\n\t*\n\t* @example React Native options with Expo SecureStore\n\t* ```ts\n\t* import 'react-native-url-polyfill/auto'\n\t* import { createClient } from '@supabase/supabase-js'\n\t* import AsyncStorage from '@react-native-async-storage/async-storage';\n\t* import * as SecureStore from 'expo-secure-store';\n\t* import * as aesjs from 'aes-js';\n\t* import 'react-native-get-random-values';\n\t*\n\t* // As Expo's SecureStore does not support values larger than 2048\n\t* // bytes, an AES-256 key is generated and stored in SecureStore, while\n\t* // it is used to encrypt/decrypt values stored in AsyncStorage.\n\t* class LargeSecureStore {\n\t*   private async _encrypt(key: string, value: string) {\n\t*     const encryptionKey = crypto.getRandomValues(new Uint8Array(256 / 8));\n\t*\n\t*     const cipher = new aesjs.ModeOfOperation.ctr(encryptionKey, new aesjs.Counter(1));\n\t*     const encryptedBytes = cipher.encrypt(aesjs.utils.utf8.toBytes(value));\n\t*\n\t*     await SecureStore.setItemAsync(key, aesjs.utils.hex.fromBytes(encryptionKey));\n\t*\n\t*     return aesjs.utils.hex.fromBytes(encryptedBytes);\n\t*   }\n\t*\n\t*   private async _decrypt(key: string, value: string) {\n\t*     const encryptionKeyHex = await SecureStore.getItemAsync(key);\n\t*     if (!encryptionKeyHex) {\n\t*       return encryptionKeyHex;\n\t*     }\n\t*\n\t*     const cipher = new aesjs.ModeOfOperation.ctr(aesjs.utils.hex.toBytes(encryptionKeyHex), new aesjs.Counter(1));\n\t*     const decryptedBytes = cipher.decrypt(aesjs.utils.hex.toBytes(value));\n\t*\n\t*     return aesjs.utils.utf8.fromBytes(decryptedBytes);\n\t*   }\n\t*\n\t*   async getItem(key: string) {\n\t*     const encrypted = await AsyncStorage.getItem(key);\n\t*     if (!encrypted) { return encrypted; }\n\t*\n\t*     return await this._decrypt(key, encrypted);\n\t*   }\n\t*\n\t*   async removeItem(key: string) {\n\t*     await AsyncStorage.removeItem(key);\n\t*     await SecureStore.deleteItemAsync(key);\n\t*   }\n\t*\n\t*   async setItem(key: string, value: string) {\n\t*     const encrypted = await this._encrypt(key, value);\n\t*\n\t*     await AsyncStorage.setItem(key, encrypted);\n\t*   }\n\t* }\n\t*\n\t* const supabase = createClient(\"https://xyzcompany.supabase.co\", \"your-publishable-key\", {\n\t*   auth: {\n\t*     storage: new LargeSecureStore(),\n\t*     autoRefreshToken: true,\n\t*     persistSession: true,\n\t*     detectSessionInUrl: false,\n\t*   },\n\t* });\n\t* ```\n\t*\n\t* @example With a database query\n\t* ```ts\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t*\n\t* const { data } = await supabase.from('profiles').select('*')\n\t* ```\n\t*\n\t* @exampleDescription With OpenTelemetry tracing\n\t* Opt in to W3C trace context propagation so the `trace_id` from your\n\t* client-side spans is attached to Supabase requests and appears in API\n\t* Gateway and Edge Function logs. Requires `@opentelemetry/api` to be\n\t* installed in your application and the tracing runtime to be loaded via\n\t* `import '@supabase/supabase-js/tracing'`. See [Tracing with the JS SDK](https://supabase.com/docs/guides/telemetry/client-side-tracing).\n\t*\n\t* @example With OpenTelemetry tracing\n\t* ```ts\n\t* import '@supabase/supabase-js/tracing'\n\t* import { createClient } from '@supabase/supabase-js'\n\t* import { trace } from '@opentelemetry/api'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key', {\n\t*   tracePropagation: true,\n\t* })\n\t*\n\t* const tracer = trace.getTracer('my-app')\n\t*\n\t* await tracer.startActiveSpan('fetch-users', async (span) => {\n\t*   // Outgoing request carries the active trace context.\n\t*   const { data, error } = await supabase.from('users').select('*')\n\t*   span.end()\n\t* })\n\t* ```\n\t*/\n\tconstructor(supabaseUrl, supabaseKey, options) {\n\t\tvar _settings$auth$storag, _settings$global$head;\n\t\tthis.supabaseUrl = supabaseUrl;\n\t\tthis.supabaseKey = supabaseKey;\n\t\tconst baseUrl = validateSupabaseUrl(supabaseUrl);\n\t\tif (!supabaseKey) throw new Error(\"supabaseKey is required.\");\n\t\tcheckApiKeyFormat(supabaseKey);\n\t\tthis.realtimeUrl = new URL(\"realtime/v1\", baseUrl);\n\t\tthis.realtimeUrl.protocol = this.realtimeUrl.protocol.replace(\"http\", \"ws\");\n\t\tthis.authUrl = new URL(\"auth/v1\", baseUrl);\n\t\tthis.storageUrl = new URL(\"storage/v1\", baseUrl);\n\t\tthis.functionsUrl = new URL(\"functions/v1\", baseUrl);\n\t\tconst defaultStorageKey = `sb-${baseUrl.hostname.split(\".\")[0]}-auth-token`;\n\t\tconst DEFAULTS = {\n\t\t\tdb: DEFAULT_DB_OPTIONS,\n\t\t\trealtime: DEFAULT_REALTIME_OPTIONS,\n\t\t\tauth: _objectSpread2(_objectSpread2({}, DEFAULT_AUTH_OPTIONS), {}, { storageKey: defaultStorageKey }),\n\t\t\tglobal: DEFAULT_GLOBAL_OPTIONS,\n\t\t\ttracePropagation: DEFAULT_TRACE_PROPAGATION_OPTIONS\n\t\t};\n\t\tconst settings = applySettingDefaults(options !== null && options !== void 0 ? options : {}, DEFAULTS);\n\t\tthis.settings = settings;\n\t\tthis.storageKey = (_settings$auth$storag = settings.auth.storageKey) !== null && _settings$auth$storag !== void 0 ? _settings$auth$storag : \"\";\n\t\tthis.headers = (_settings$global$head = settings.global.headers) !== null && _settings$global$head !== void 0 ? _settings$global$head : {};\n\t\tif (!settings.accessToken) {\n\t\t\tvar _settings$auth;\n\t\t\tthis.auth = this._initSupabaseAuthClient((_settings$auth = settings.auth) !== null && _settings$auth !== void 0 ? _settings$auth : {}, this.headers, settings.global.fetch);\n\t\t} else {\n\t\t\tthis.accessToken = settings.accessToken;\n\t\t\tthis.auth = new Proxy({}, { get: (_, prop) => {\n\t\t\t\tthrow new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(prop)} is not possible`);\n\t\t\t} });\n\t\t}\n\t\tthis.fetch = fetchWithAuth(supabaseKey, supabaseUrl, this._getSessionToken.bind(this), settings.global.fetch, settings.tracePropagation);\n\t\tthis.functionsFetch = fetchWithAuth(supabaseKey, supabaseUrl, this._getSessionToken.bind(this), settings.global.fetch, settings.tracePropagation, { omitApiKeyAsBearer: true });\n\t\tthis.realtime = this._initRealtimeClient(_objectSpread2({\n\t\t\theaders: this.headers,\n\t\t\taccessToken: this._getAccessToken.bind(this),\n\t\t\tfetch: this.fetch\n\t\t}, settings.realtime));\n\t\tif (this.accessToken) Promise.resolve(this.accessToken()).then((token) => this.realtime.setAuth(token)).catch((e) => console.warn(\"Failed to set initial Realtime auth token:\", e));\n\t\tthis.rest = new PostgrestClient(new URL(\"rest/v1\", baseUrl).href, {\n\t\t\theaders: this.headers,\n\t\t\tschema: settings.db.schema,\n\t\t\tfetch: this.fetch,\n\t\t\ttimeout: settings.db.timeout,\n\t\t\turlLengthLimit: settings.db.urlLengthLimit,\n\t\t\tretry: settings.db.retry\n\t\t});\n\t\tthis.storage = new StorageClient(this.storageUrl.href, this.headers, this.fetch, options === null || options === void 0 ? void 0 : options.storage);\n\t\tif (!settings.accessToken) this._listenForAuthEvents();\n\t}\n\t/**\n\t* Supabase Functions allows you to deploy and invoke edge functions.\n\t*/\n\tget functions() {\n\t\treturn new FunctionsClient(this.functionsUrl.href, {\n\t\t\theaders: this.headers,\n\t\t\tcustomFetch: this.functionsFetch\n\t\t});\n\t}\n\t/**\n\t* Perform a query on a table or a view.\n\t*\n\t* @param relation - The table or view name to query\n\t*/\n\tfrom(relation) {\n\t\treturn this.rest.from(relation);\n\t}\n\t/**\n\t* Select a schema to query or perform an function (rpc) call.\n\t*\n\t* The schema needs to be on the list of exposed schemas inside Supabase.\n\t*\n\t* @param schema - The schema to query\n\t*/\n\tschema(schema) {\n\t\treturn this.rest.schema(schema);\n\t}\n\t/**\n\t* Perform a function call.\n\t*\n\t* @param fn - The function name to call\n\t* @param args - The arguments to pass to the function call\n\t* @param options - Named parameters\n\t* @param options.head - When set to `true`, `data` will not be returned.\n\t* Useful if you only need the count.\n\t* @param options.get - When set to `true`, the function will be called with\n\t* read-only access mode.\n\t* @param options.count - Count algorithm to use to count rows returned by the\n\t* function. Only applicable for [set-returning\n\t* functions](https://www.postgresql.org/docs/current/functions-srf.html).\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*/\n\trpc(fn, args = {}, options = {\n\t\thead: false,\n\t\tget: false,\n\t\tcount: void 0\n\t}) {\n\t\treturn this.rest.rpc(fn, args, options);\n\t}\n\t/**\n\t* Creates a Realtime channel with Broadcast, Presence, and Postgres Changes.\n\t*\n\t* @param {string} name - The name of the Realtime channel.\n\t* @param {Object} opts - The options to pass to the Realtime channel.\n\t*\n\t* @category Realtime\n\t*/\n\tchannel(name, opts = { config: {} }) {\n\t\treturn this.realtime.channel(name, opts);\n\t}\n\t/**\n\t* Returns all Realtime channels.\n\t*\n\t* @category Realtime\n\t*\n\t* @example Get all channels\n\t* ```js\n\t* const channels = supabase.getChannels()\n\t* ```\n\t*/\n\tgetChannels() {\n\t\treturn this.realtime.getChannels();\n\t}\n\t/**\n\t* Unsubscribes and removes Realtime channel from Realtime client.\n\t*\n\t* @param {RealtimeChannel} channel - The name of the Realtime channel.\n\t*\n\t*\n\t* @category Realtime\n\t*\n\t* @remarks\n\t* - Removing a channel is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed.\n\t*\n\t* @example Removes a channel\n\t* ```js\n\t* supabase.removeChannel(myChannel)\n\t* ```\n\t*/\n\tremoveChannel(channel) {\n\t\treturn this.realtime.removeChannel(channel);\n\t}\n\t/**\n\t* Unsubscribes and removes all Realtime channels from Realtime client.\n\t*\n\t* @category Realtime\n\t*\n\t* @remarks\n\t* - Removing channels is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed.\n\t*\n\t* @example Remove all channels\n\t* ```js\n\t* supabase.removeAllChannels()\n\t* ```\n\t*/\n\tremoveAllChannels() {\n\t\treturn this.realtime.removeAllChannels();\n\t}\n\t/**\n\t* The raw session token — the custom `accessToken` result or the signed-in user's JWT —\n\t* or `null` when there is no session. Unlike {@link _getAccessToken} it does not fall back\n\t* to `supabaseKey`, so callers can distinguish \"no session\" from \"has session\".\n\t*/\n\tasync _getSessionToken() {\n\t\tvar _this = this;\n\t\tvar _data$session$access_, _data$session;\n\t\tif (_this.accessToken) return await _this.accessToken();\n\t\tconst { data } = await _this.auth.getSession();\n\t\treturn (_data$session$access_ = (_data$session = data.session) === null || _data$session === void 0 ? void 0 : _data$session.access_token) !== null && _data$session$access_ !== void 0 ? _data$session$access_ : null;\n\t}\n\tasync _getAccessToken() {\n\t\tvar _this2 = this;\n\t\tvar _await$this$_getSessi;\n\t\treturn (_await$this$_getSessi = await _this2._getSessionToken()) !== null && _await$this$_getSessi !== void 0 ? _await$this$_getSessi : _this2.supabaseKey;\n\t}\n\t_initSupabaseAuthClient({ autoRefreshToken, persistSession, detectSessionInUrl, storage, userStorage, storageKey, flowType, lock, debug, throwOnError, experimental, lockAcquireTimeout, skipAutoInitialize }, headers, fetch$1) {\n\t\tconst authHeaders = {\n\t\t\tAuthorization: `Bearer ${this.supabaseKey}`,\n\t\t\tapikey: `${this.supabaseKey}`\n\t\t};\n\t\treturn new SupabaseAuthClient({\n\t\t\turl: this.authUrl.href,\n\t\t\theaders: _objectSpread2(_objectSpread2({}, authHeaders), headers),\n\t\t\tstorageKey,\n\t\t\tautoRefreshToken,\n\t\t\tpersistSession,\n\t\t\tdetectSessionInUrl,\n\t\t\tstorage,\n\t\t\tuserStorage,\n\t\t\tflowType,\n\t\t\tlock,\n\t\t\tdebug,\n\t\t\tthrowOnError,\n\t\t\texperimental,\n\t\t\tfetch: fetch$1,\n\t\t\tlockAcquireTimeout,\n\t\t\tskipAutoInitialize,\n\t\t\thasCustomAuthorizationHeader: Object.keys(this.headers).some((key) => key.toLowerCase() === \"authorization\")\n\t\t});\n\t}\n\t_initRealtimeClient(options) {\n\t\treturn new RealtimeClient(this.realtimeUrl.href, _objectSpread2(_objectSpread2({}, options), {}, { params: _objectSpread2(_objectSpread2({}, { apikey: this.supabaseKey }), options === null || options === void 0 ? void 0 : options.params) }));\n\t}\n\t_listenForAuthEvents() {\n\t\treturn this.auth.onAuthStateChange((event, session) => {\n\t\t\tthis._handleTokenChanged(event, \"CLIENT\", session === null || session === void 0 ? void 0 : session.access_token);\n\t\t});\n\t}\n\t_handleTokenChanged(event, source, token) {\n\t\tif ((event === \"TOKEN_REFRESHED\" || event === \"SIGNED_IN\" || event === \"INITIAL_SESSION\") && this.changedAccessToken !== token) {\n\t\t\tthis.changedAccessToken = token;\n\t\t\tthis.realtime.setAuth(token);\n\t\t} else if (event === \"SIGNED_OUT\") {\n\t\t\tthis.realtime.setAuth();\n\t\t\tif (source == \"STORAGE\") this.auth.signOut();\n\t\t\tthis.changedAccessToken = void 0;\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/index.ts\n/**\n* Creates a new Supabase Client.\n*\n* @example Creating a Supabase client\n* ```ts\n* import { createClient } from '@supabase/supabase-js'\n*\n* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n* const { data, error } = await supabase.from('profiles').select('*')\n* ```\n*/\nconst createClient = (supabaseUrl, supabaseKey, options) => {\n\treturn new SupabaseClient(supabaseUrl, supabaseKey, options);\n};\nfunction shouldShowDeprecationWarning() {\n\tif (typeof window !== \"undefined\" || globalThis[\"Deno\"] !== void 0) return false;\n\tconst _process = globalThis[\"process\"];\n\tif (!_process) return false;\n\tconst processVersion = _process[\"version\"];\n\tif (processVersion === void 0 || processVersion === null) return false;\n\tconst versionMatch = processVersion.match(/^v(\\d+)\\./);\n\tif (!versionMatch) return false;\n\treturn parseInt(versionMatch[1], 10) <= 20;\n}\nif (shouldShowDeprecationWarning()) console.warn(\"⚠️  Node.js 20 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 22 or later. For more information, visit: https://github.com/orgs/supabase/discussions/45715\");\n\n//#endregion\nexport { FunctionRegion, FunctionsError, FunctionsFetchError, FunctionsHttpError, FunctionsRelayError, PostgrestError, StorageApiError, SupabaseClient, createClient };\n//# sourceMappingURL=index.mjs.map","// This file is automatically generated. Do not edit it directly.\nimport { createClient } from '@supabase/supabase-js';\nimport type { Database } from './types';\n\nconst SUPABASE_URL = import.meta.env.VITE_SUPABASE_URL;\nconst SUPABASE_PUBLISHABLE_KEY = import.meta.env.VITE_SUPABASE_PUBLISHABLE_KEY;\n\n// Import the supabase client like this:\n// import { supabase } from \"@/integrations/supabase/client\";\n\nexport const supabase = createClient<Database>(SUPABASE_URL, SUPABASE_PUBLISHABLE_KEY, {\n  auth: {\n    storage: localStorage,\n    persistSession: true,\n    autoRefreshToken: true,\n  }\n});","import React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport { Button } from '@/components/ui/button';\nimport { Textarea } from '@/components/ui/textarea';\nimport { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useForm } from 'react-hook-form';\nimport * as z from 'zod';\nimport { useToast } from '@/hooks/use-toast';\nimport { supabase } from '@/integrations/supabase/client';\nimport MainLayout from '@/components/MainLayout';\n\nconst MAX_FEEDBACK_LENGTH = 5000;\n\nconst formSchema = z.object({\n  feedback: z.string().min(10, {\n    message: \"Feedback must be at least 10 characters.\",\n  }).max(MAX_FEEDBACK_LENGTH, {\n    message: `Feedback must not exceed ${MAX_FEEDBACK_LENGTH} characters.`,\n  }),\n});\n\nconst Feedback: React.FC = () => {\n  const navigate = useNavigate();\n  const { toast } = useToast();\n\n  const form = useForm<z.infer<typeof formSchema>>({\n    resolver: zodResolver(formSchema),\n    defaultValues: {\n      feedback: \"\",\n    },\n  });\n\n  const onSubmit = async (values: z.infer<typeof formSchema>): Promise<void> => {\n    try {\n      const { error } = await supabase\n        .from('feedback' as any)\n        .insert([\n          { message: values.feedback }\n        ] as any);\n\n      if (error) throw error;\n\n      toast({\n        title: \"Feedback Submitted\",\n        description: \"Thank you for your feedback!\",\n      });\n      navigate('/');\n    } catch (error) {\n      console.error('Error submitting feedback:', error);\n      toast({\n        title: \"Error\",\n        description: \"Failed to submit feedback. Please try again.\",\n        variant: \"destructive\",\n      });\n    }\n  };\n\n  return (\n    <MainLayout>\n      <div className=\"min-h-[calc(100vh-200px)] bg-background p-4 flex flex-col items-center justify-center\">\n        <div className=\"w-full max-w-md space-y-6\">\n          <div className=\"text-center\">\n            <h1 className=\"text-2xl font-bold text-foreground\">Submit Feedback</h1>\n            <p className=\"text-muted-foreground mt-2\">We value your input to improve our service</p>\n          </div>\n\n          <Form {...form}>\n            <form onSubmit={form.handleSubmit(onSubmit)} className=\"space-y-6\">\n              <FormField\n                control={form.control}\n                name=\"feedback\"\n                render={({ field }) => (\n                  <FormItem>\n                    <FormLabel>Your Feedback</FormLabel>\n                    <FormControl>\n                      <Textarea\n                        placeholder=\"Tell us what you think...\"\n                        className=\"min-h-[150px]\"\n                        maxLength={MAX_FEEDBACK_LENGTH}\n                        {...field}\n                      />\n                    </FormControl>\n                    <div className=\"flex justify-between items-center\">\n                      <FormMessage />\n                      <span className={`text-sm ${field.value.length > MAX_FEEDBACK_LENGTH * 0.9 ? 'text-destructive' : 'text-muted-foreground'}`}>\n                        {field.value.length}/{MAX_FEEDBACK_LENGTH}\n                      </span>\n                    </div>\n                  </FormItem>\n                )}\n              />\n              <div className=\"flex gap-4\">\n                <Button\n                  type=\"button\"\n                  variant=\"outline\"\n                  className=\"w-full\"\n                  onClick={() => navigate('/')}\n                >\n                  Cancel\n                </Button>\n                <Button type=\"submit\" className=\"w-full\">\n                  Submit Feedback\n                </Button>\n              </div>\n            </form>\n          </Form>\n        </div>\n      </div>\n    </MainLayout>\n  );\n};\n\nexport default Feedback;\n","import React from \"react\";\nimport { Helmet } from \"react-helmet-async\";\nimport MainLayout from \"@/components/MainLayout\";\nimport { Phone, MapPin, AlertTriangle, CheckCircle, XCircle, BookOpen } from \"lucide-react\";\n\nconst howToStructuredData = {\n  \"@context\": \"https://schema.org\",\n  \"@type\": \"HowTo\",\n  name: \"How to Teach Kids to Call 911/999\",\n  description:\n    \"Step-by-step guide for parents and teachers on teaching children when and how to call 911/999. Learn safe practice methods and address memorisation tips.\",\n  image: \"https://911callsimulator.com/og-image.png\",\n  totalTime: \"PT30M\",\n  estimatedCost: {\n    \"@type\": \"MonetaryAmount\",\n    currency: \"USD\",\n    value: \"0\",\n  },\n  supply: [\n    {\n      \"@type\": \"HowToSupply\",\n      name: \"Phone or tablet with microphone\",\n    },\n  ],\n  tool: [\n    {\n      \"@type\": \"HowToTool\",\n      name: \"911/999 Call Simulator\",\n    },\n  ],\n  step: [\n    {\n      \"@type\": \"HowToStep\",\n      name: \"Explain What 911 Is\",\n      text: \"Tell your child that 911/999 is a special phone number that connects them to helpers like police, firefighters, and paramedics who come when someone is in danger.\",\n      position: 1,\n    },\n    {\n      \"@type\": \"HowToStep\",\n      name: \"Show Them How to Dial\",\n      text: \"Practice finding and pressing 9-1-1 or 9-9-9 on your phone. Explain that on most phones, emergency calls work even without a password.\",\n      position: 2,\n    },\n    {\n      \"@type\": \"HowToStep\",\n      name: \"Teach Them to Stay Calm\",\n      text: \"Role-play staying calm. Practice taking deep breaths before speaking. The dispatcher needs to understand them clearly.\",\n      position: 3,\n    },\n    {\n      \"@type\": \"HowToStep\",\n      name: \"Practice the Key Information\",\n      text: \"Drill the essentials: their name, address, what's wrong, and where they are in the house. Keep it simple for young children.\",\n      position: 4,\n    },\n    {\n      \"@type\": \"HowToStep\",\n      name: \"Use This Simulator\",\n      text: \"Let them practice with our 911/999 simulator. It provides a safe, realistic experience without tying up real emergency lines.\",\n      position: 5,\n    },\n    {\n      \"@type\": \"HowToStep\",\n      name: \"Review Regularly\",\n      text: \"Like any skill, calling 911 requires practice. Review every few months to keep the knowledge fresh.\",\n      position: 6,\n    },\n  ],\n};\n\nconst Guide = () => {\n  return (\n    <MainLayout>\n      <Helmet>\n        <title>How to Teach Kids to Call 911/999 | Parents & Teachers Guide</title>\n        <meta\n          name=\"description\"\n          content=\"Step-by-step guide for parents and teachers on teaching children when and how to call 911. Learn safe practice methods and address memorization tips.\"\n        />\n        <script type=\"application/ld+json\">{JSON.stringify(howToStructuredData)}</script>\n      </Helmet>\n\n      <div className=\"container mx-auto px-4 py-12 max-w-4xl\">\n        <header className=\"text-center mb-12\">\n          <h1 className=\"text-4xl md:text-5xl font-bold text-foreground mb-4\">How to Teach Kids to Call 911/999</h1>\n          <p className=\"text-xl text-muted-foreground max-w-2xl mx-auto\">\n            A comprehensive guide for parents and teachers on preparing children for emergency situations\n          </p>\n        </header>\n\n        {/* Why This Matters */}\n        <section className=\"mb-12\">\n          <div className=\"bg-primary/5 border border-primary/20 rounded-2xl p-8\">\n            <div className=\"flex items-start gap-4\">\n              <div className=\"p-3 bg-primary/10 rounded-xl\">\n                <BookOpen className=\"h-6 w-6 text-primary\" />\n              </div>\n              <div>\n                <h2 className=\"text-2xl font-semibold text-foreground mb-3\">Why This Training Matters</h2>\n                <p className=\"text-muted-foreground leading-relaxed\">\n                  In an emergency, a child who knows how to call 911/999 can save a life—including their own. Studies\n                  show that children as young as 4 can learn to dial 911/999, but they need practice in a safe,\n                  controlled environment to build confidence and muscle memory.\n                </p>\n              </div>\n            </div>\n          </div>\n        </section>\n\n        {/* When to Call vs When Not to Call */}\n        <section className=\"mb-12\">\n          <h2 className=\"text-3xl font-bold text-foreground mb-8 text-center\">When to Call 911/999</h2>\n\n          <div className=\"grid md:grid-cols-2 gap-6\">\n            {/* When TO Call */}\n            <div className=\"bg-green-50 dark:bg-green-950/30 border border-green-200 dark:border-green-800 rounded-2xl p-6\">\n              <div className=\"flex items-center gap-3 mb-4\">\n                <CheckCircle className=\"h-6 w-6 text-green-600\" />\n                <h3 className=\"text-xl font-semibold text-green-800 dark:text-green-300\">Yes, Call 911 When:</h3>\n              </div>\n              <ul className=\"space-y-3\">\n                {[\n                  \"Someone is seriously hurt or very sick\",\n                  \"There is a fire or you smell smoke\",\n                  \"Someone is breaking into your home\",\n                  \"You see a serious car accident\",\n                  \"Someone is not breathing\",\n                  \"A grown-up is unconscious and won't wake up\",\n                  \"You feel unsafe and no adult can help\",\n                ].map((item, i) => (\n                  <li key={i} className=\"flex items-start gap-2 text-green-700 dark:text-green-400\">\n                    <span className=\"text-green-500 mt-1\">•</span>\n                    <span>{item}</span>\n                  </li>\n                ))}\n              </ul>\n            </div>\n\n            {/* When NOT to Call */}\n            <div className=\"bg-red-50 dark:bg-red-950/30 border border-red-200 dark:border-red-800 rounded-2xl p-6\">\n              <div className=\"flex items-center gap-3 mb-4\">\n                <XCircle className=\"h-6 w-6 text-red-600\" />\n                <h3 className=\"text-xl font-semibold text-red-800 dark:text-red-300\">Do NOT Call 911 For:</h3>\n              </div>\n              <ul className=\"space-y-3\">\n                {[\n                  \"Small cuts or minor injuries\",\n                  \"Lost pets or toys\",\n                  \"Homework help or questions\",\n                  \"To test if it works (except simulators like this)\",\n                  \"Sibling arguments or small fights\",\n                  \"Power outages (unless dangerous)\",\n                  \"Non-emergency police questions\",\n                ].map((item, i) => (\n                  <li key={i} className=\"flex items-start gap-2 text-red-700 dark:text-red-400\">\n                    <span className=\"text-red-500 mt-1\">•</span>\n                    <span>{item}</span>\n                  </li>\n                ))}\n              </ul>\n            </div>\n          </div>\n        </section>\n\n        {/* Teaching Their Address */}\n        <section className=\"mb-12\">\n          <div className=\"bg-accent/50 rounded-2xl p-8\">\n            <div className=\"flex items-start gap-4 mb-6\">\n              <div className=\"p-3 bg-primary/10 rounded-xl\">\n                <MapPin className=\"h-6 w-6 text-primary\" />\n              </div>\n              <h2 className=\"text-2xl font-semibold text-foreground\">Teaching Your Address</h2>\n            </div>\n\n            <p className=\"text-muted-foreground mb-6\">\n              One of the most critical pieces of information in an emergency is your home address. Here are proven\n              methods to help children memorize it:\n            </p>\n\n            <div className=\"grid md:grid-cols-2 gap-6\">\n              <div className=\"bg-background rounded-xl p-5 shadow-sm\">\n                <h4 className=\"font-semibold text-foreground mb-2\">🎵 Make It a Song</h4>\n                <p className=\"text-sm text-muted-foreground\">\n                  Set your address to a familiar tune like \"Twinkle Twinkle Little Star\" or create a simple rhyme.\n                </p>\n              </div>\n              <div className=\"bg-background rounded-xl p-5 shadow-sm\">\n                <h4 className=\"font-semibold text-foreground mb-2\">📝 Practice Writing</h4>\n                <p className=\"text-sm text-muted-foreground\">\n                  Have them write or trace their address regularly. Visual and kinetic learning reinforces memory.\n                </p>\n              </div>\n              <div className=\"bg-background rounded-xl p-5 shadow-sm\">\n                <h4 className=\"font-semibold text-foreground mb-2\">🎮 Quiz Games</h4>\n                <p className=\"text-sm text-muted-foreground\">\n                  Turn address practice into a game with small rewards for correct answers.\n                </p>\n              </div>\n              <div className=\"bg-background rounded-xl p-5 shadow-sm\">\n                <h4 className=\"font-semibold text-foreground mb-2\">🏠 Visual Cues</h4>\n                <p className=\"text-sm text-muted-foreground\">\n                  Post the address in their room. Point out the house number when coming home.\n                </p>\n              </div>\n            </div>\n          </div>\n        </section>\n\n        {/* Step-by-Step Guide */}\n        <section className=\"mb-12\">\n          <h2 className=\"text-3xl font-bold text-foreground mb-8 text-center\">Step-by-Step Teaching Guide</h2>\n\n          <div className=\"space-y-4\">\n            {[\n              {\n                step: 1,\n                title: \"Explain What 911 Is\",\n                desc: \"Tell your child that 911 is a special phone number that connects them to helpers like police, firefighters, and paramedics who come when someone is in danger.\",\n              },\n              {\n                step: 2,\n                title: \"Show Them How to Dial\",\n                desc: \"Practice finding and pressing 9-1-1 on your phone. Explain that on most phones, emergency calls work even without a password.\",\n              },\n              {\n                step: 3,\n                title: \"Teach Them to Stay Calm\",\n                desc: \"Role-play staying calm. Practice taking deep breaths before speaking. The dispatcher needs to understand them clearly.\",\n              },\n              {\n                step: 4,\n                title: \"Practice the Key Information\",\n                desc: \"Drill the essentials: their name, address, what's wrong, and where they are in the house. Keep it simple for young children.\",\n              },\n              {\n                step: 5,\n                title: \"Use This Simulator\",\n                desc: \"Let them practice with our 911/999 simulator. It provides a safe, realistic experience without tying up real emergency lines.\",\n              },\n              {\n                step: 6,\n                title: \"Review Regularly\",\n                desc: \"Like any skill, calling 911 requires practice. Review every few months to keep the knowledge fresh.\",\n              },\n            ].map((item) => (\n              <div key={item.step} className=\"flex gap-4 items-start bg-muted/30 rounded-xl p-5\">\n                <div className=\"flex-shrink-0 w-10 h-10 bg-primary text-primary-foreground rounded-full flex items-center justify-center font-bold\">\n                  {item.step}\n                </div>\n                <div>\n                  <h3 className=\"font-semibold text-foreground mb-1\">{item.title}</h3>\n                  <p className=\"text-muted-foreground text-sm\">{item.desc}</p>\n                </div>\n              </div>\n            ))}\n          </div>\n        </section>\n\n        {/* Why Use This Simulator */}\n        <section className=\"mb-12\">\n          <div className=\"bg-gradient-to-br from-primary/10 to-primary/5 border border-primary/20 rounded-2xl p-8 text-center\">\n            <Phone className=\"h-12 w-12 text-primary mx-auto mb-4\" />\n            <h2 className=\"text-2xl font-bold text-foreground mb-4\">Why Use This Simulator?</h2>\n            <div className=\"max-w-2xl mx-auto space-y-4 text-muted-foreground\">\n              <p>\n                <strong className=\"text-foreground\">Safe Practice:</strong> Children can practice as many times as\n                needed without accidentally calling real emergency services.\n              </p>\n              <p>\n                <strong className=\"text-foreground\">Realistic Experience:</strong> Our AI-powered dispatcher responds\n                just like a real 911 operator, asking the same questions in a calm, reassuring voice.\n              </p>\n              <p>\n                <strong className=\"text-foreground\">Build Confidence:</strong> Familiarity reduces fear. When children\n                know what to expect, they're more likely to act effectively in a real emergency.\n              </p>\n            </div>\n          </div>\n        </section>\n\n        {/* Important Reminder */}\n        <section>\n          <div className=\"bg-destructive/10 border border-destructive/30 rounded-2xl p-6 flex items-start gap-4\">\n            <AlertTriangle className=\"h-6 w-6 text-destructive flex-shrink-0 mt-1\" />\n            <div>\n              <h3 className=\"font-semibold text-destructive mb-2\">Important Reminder</h3>\n              <p className=\"text-muted-foreground\">\n                This website is for educational purposes only. It does not connect to real emergency services. If you\n                have an actual emergency, please dial 911 on your phone immediately.\n              </p>\n            </div>\n          </div>\n        </section>\n      </div>\n    </MainLayout>\n  );\n};\n\nexport default Guide;\n","import React from 'react';\nimport { Helmet } from 'react-helmet-async';\nimport MainLayout from '@/components/MainLayout';\nimport { Flame, Heart, Shield, AlertTriangle } from 'lucide-react';\n\nconst scenarios = [\n  {\n    icon: Flame,\n    title: \"Fire Emergency\",\n    color: \"orange\",\n    bgClass: \"bg-orange-50 dark:bg-orange-950/30\",\n    borderClass: \"border-orange-200 dark:border-orange-800\",\n    iconBg: \"bg-orange-100 dark:bg-orange-900\",\n    iconColor: \"text-orange-600\",\n    titleColor: \"text-orange-800 dark:text-orange-300\",\n    description: \"What to say when there's a fire or you see smoke\",\n    phrases: [\n      { say: \"There's a fire at my house!\", context: \"Start with the emergency\" },\n      { say: \"I see smoke coming from the kitchen.\", context: \"Describe what you see\" },\n      { say: \"The smoke alarm is going off.\", context: \"Mention any alerts\" },\n      { say: \"I'm getting out of the house now.\", context: \"Tell them you're evacuating\" },\n      { say: \"I'll meet the firefighters outside.\", context: \"Confirm you're safe\" },\n    ],\n    tips: [\n      \"Get out first, then call 911 if possible\",\n      \"If you can't get out, stay low under the smoke\",\n      \"Never go back inside for anything\",\n      \"Go to your meeting spot outside\"\n    ]\n  },\n  {\n    icon: Heart,\n    title: \"Medical Emergency\",\n    color: \"red\",\n    bgClass: \"bg-red-50 dark:bg-red-950/30\",\n    borderClass: \"border-red-200 dark:border-red-800\",\n    iconBg: \"bg-red-100 dark:bg-red-900\",\n    iconColor: \"text-red-600\",\n    titleColor: \"text-red-800 dark:text-red-300\",\n    description: \"What to say when someone is hurt or very sick\",\n    phrases: [\n      { say: \"Someone needs help! They're very sick.\", context: \"Explain it's medical\" },\n      { say: \"My [mom/dad/grandma] fell and won't wake up.\", context: \"Describe unconsciousness\" },\n      { say: \"They're having trouble breathing.\", context: \"Breathing problems\" },\n      { say: \"There's a lot of blood.\", context: \"Describe injuries\" },\n      { say: \"They're holding their chest and it hurts.\", context: \"Possible heart issue\" },\n    ],\n    tips: [\n      \"Stay with the person if it's safe\",\n      \"Don't move them unless there's danger\",\n      \"Follow the dispatcher's instructions\",\n      \"Keep talking to the person to comfort them\"\n    ]\n  },\n  {\n    icon: Shield,\n    title: \"Police / Danger\",\n    color: \"blue\",\n    bgClass: \"bg-blue-50 dark:bg-blue-950/30\",\n    borderClass: \"border-blue-200 dark:border-blue-800\",\n    iconBg: \"bg-blue-100 dark:bg-blue-900\",\n    iconColor: \"text-blue-600\",\n    titleColor: \"text-blue-800 dark:text-blue-300\",\n    description: \"What to say when you feel unsafe or see danger\",\n    phrases: [\n      { say: \"Someone is trying to get into our house.\", context: \"Report intruder\" },\n      { say: \"I'm hiding in my room.\", context: \"Tell them where you are\" },\n      { say: \"(whisper) I need help. Someone is in our house.\", context: \"If you need to be quiet\" },\n      { say: \"I saw someone breaking a car window.\", context: \"Report a crime\" },\n      { say: \"There's a stranger who won't leave.\", context: \"Suspicious person\" },\n    ],\n    tips: [\n      \"Hide somewhere safe if there's danger\",\n      \"It's okay to whisper if you need to be quiet\",\n      \"Lock doors if you can do so safely\",\n      \"Stay on the line until help arrives\"\n    ]\n  }\n];\n\nconst Scripts = () => {\n  return (\n    <MainLayout>\n      <Helmet>\n        <title>Emergency Call Scripts | What to Say When Calling 911</title>\n        <meta name=\"description\" content=\"Learn exactly what to say when calling 911 for fire, medical, or police emergencies. Practice scripts and phrases for children and adults.\" />\n      </Helmet>\n\n      <div className=\"container mx-auto px-4 py-12 max-w-6xl\">\n        <header className=\"text-center mb-12\">\n          <h1 className=\"text-4xl md:text-5xl font-bold text-foreground mb-4\">\n            Emergency Call Scripts\n          </h1>\n          <p className=\"text-xl text-muted-foreground max-w-2xl mx-auto\">\n            Learn exactly what to say in different emergency situations\n          </p>\n        </header>\n\n        {/* Key Reminder */}\n        <div className=\"bg-primary/5 border border-primary/20 rounded-2xl p-6 mb-12 text-center\">\n          <h2 className=\"text-lg font-semibold text-foreground mb-2\">Remember the Three Key Things</h2>\n          <div className=\"flex flex-wrap justify-center gap-4 text-muted-foreground\">\n            <span className=\"bg-background px-4 py-2 rounded-lg shadow-sm\">1️⃣ WHERE is the emergency?</span>\n            <span className=\"bg-background px-4 py-2 rounded-lg shadow-sm\">2️⃣ WHAT is happening?</span>\n            <span className=\"bg-background px-4 py-2 rounded-lg shadow-sm\">3️⃣ WHO needs help?</span>\n          </div>\n        </div>\n\n        {/* Scenario Cards */}\n        <div className=\"space-y-8\">\n          {scenarios.map((scenario) => {\n            const Icon = scenario.icon;\n            return (\n              <div \n                key={scenario.title}\n                className={`${scenario.bgClass} ${scenario.borderClass} border rounded-2xl overflow-hidden`}\n              >\n                <div className=\"p-6 md:p-8\">\n                  {/* Header */}\n                  <div className=\"flex items-center gap-4 mb-6\">\n                    <div className={`p-3 ${scenario.iconBg} rounded-xl`}>\n                      <Icon className={`h-8 w-8 ${scenario.iconColor}`} />\n                    </div>\n                    <div>\n                      <h2 className={`text-2xl font-bold ${scenario.titleColor}`}>{scenario.title}</h2>\n                      <p className=\"text-muted-foreground\">{scenario.description}</p>\n                    </div>\n                  </div>\n\n                  <div className=\"grid md:grid-cols-2 gap-6\">\n                    {/* What to Say */}\n                    <div>\n                      <h3 className=\"font-semibold text-foreground mb-4 flex items-center gap-2\">\n                        💬 What to Say\n                      </h3>\n                      <div className=\"space-y-3\">\n                        {scenario.phrases.map((phrase, i) => (\n                          <div key={i} className=\"bg-background rounded-lg p-4 shadow-sm\">\n                            <p className=\"font-medium text-foreground mb-1\">\"{phrase.say}\"</p>\n                            <p className=\"text-xs text-muted-foreground\">{phrase.context}</p>\n                          </div>\n                        ))}\n                      </div>\n                    </div>\n\n                    {/* Safety Tips */}\n                    <div>\n                      <h3 className=\"font-semibold text-foreground mb-4 flex items-center gap-2\">\n                        ✅ Safety Tips\n                      </h3>\n                      <div className=\"bg-background rounded-lg p-5 shadow-sm\">\n                        <ul className=\"space-y-3\">\n                          {scenario.tips.map((tip, i) => (\n                            <li key={i} className=\"flex items-start gap-2 text-muted-foreground\">\n                              <span className=\"text-green-500 mt-0.5\">•</span>\n                              <span>{tip}</span>\n                            </li>\n                          ))}\n                        </ul>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            );\n          })}\n        </div>\n\n        {/* Practice Prompt */}\n        <div className=\"mt-12 bg-gradient-to-br from-primary/10 to-primary/5 border border-primary/20 rounded-2xl p-8 text-center\">\n          <h2 className=\"text-2xl font-bold text-foreground mb-4\">Ready to Practice?</h2>\n          <p className=\"text-muted-foreground mb-6 max-w-xl mx-auto\">\n            Use our simulator to practice these scripts in a safe environment. \n            The AI dispatcher will respond just like a real 911/999 operator.\n          </p>\n          <a \n            href=\"/\" \n            className=\"inline-flex items-center gap-2 bg-primary text-primary-foreground px-6 py-3 rounded-lg font-medium hover:bg-primary/90 transition-colors\"\n          >\n            Try the Simulator\n          </a>\n        </div>\n\n        {/* Warning */}\n        <div className=\"mt-8 bg-destructive/10 border border-destructive/30 rounded-2xl p-6 flex items-start gap-4\">\n          <AlertTriangle className=\"h-6 w-6 text-destructive flex-shrink-0 mt-1\" />\n          <div>\n            <h3 className=\"font-semibold text-destructive mb-2\">For Real Emergencies</h3>\n            <p className=\"text-muted-foreground\">\n              This page is for educational purposes only. In a real emergency, dial 911 immediately on your phone. \n              Stay calm and follow the dispatcher's instructions.\n            </p>\n          </div>\n        </div>\n      </div>\n    </MainLayout>\n  );\n};\n\nexport default Scripts;\n","import React from 'react';\nimport { Helmet } from 'react-helmet-async';\nimport MainLayout from '@/components/MainLayout';\nimport { MapPin, HelpCircle, Clipboard, Clock, Phone, Users } from 'lucide-react';\n\nconst Protocol = () => {\n  return (\n    <MainLayout>\n      <Helmet>\n        <title>What Will 911 Ask You? | Dispatcher Protocol Explained</title>\n        <meta name=\"description\" content=\"Learn what questions 911 dispatchers ask and why. Understand the protocol so you can be prepared to give clear, helpful information in an emergency.\" />\n      </Helmet>\n\n      <div className=\"container mx-auto px-4 py-12 max-w-4xl\">\n        <header className=\"text-center mb-12\">\n          <h1 className=\"text-4xl md:text-5xl font-bold text-foreground mb-4\">\n            What Will 911 Ask You?\n          </h1>\n          <p className=\"text-xl text-muted-foreground max-w-2xl mx-auto\">\n            Understanding the dispatcher protocol helps you stay calm and provide life-saving information\n          </p>\n        </header>\n\n        {/* Introduction */}\n        <div className=\"bg-muted/50 rounded-2xl p-6 mb-12\">\n          <p className=\"text-muted-foreground leading-relaxed\">\n            When you call 911, a trained dispatcher will answer. Their job is to quickly understand your \n            emergency and send the right help. They follow a specific protocol to gather critical information \n            as fast as possible. Here's what to expect:\n          </p>\n        </div>\n\n        {/* The Three Golden Questions */}\n        <section className=\"mb-12\">\n          <h2 className=\"text-2xl font-bold text-foreground mb-6 text-center\">\n            The Three Golden Questions\n          </h2>\n\n          <div className=\"space-y-6\">\n            {/* Question 1: WHERE */}\n            <div className=\"bg-gradient-to-r from-primary/10 to-primary/5 border border-primary/20 rounded-2xl p-6\">\n              <div className=\"flex items-start gap-4\">\n                <div className=\"p-3 bg-primary text-primary-foreground rounded-xl flex-shrink-0\">\n                  <MapPin className=\"h-6 w-6\" />\n                </div>\n                <div className=\"flex-1\">\n                  <div className=\"flex items-center gap-2 mb-2\">\n                    <span className=\"bg-primary text-primary-foreground text-xs font-bold px-2 py-1 rounded\">FIRST</span>\n                    <h3 className=\"text-xl font-bold text-foreground\">WHERE is the emergency?</h3>\n                  </div>\n                  <p className=\"text-muted-foreground mb-4\">\n                    This is the MOST important question. Even if the call gets disconnected, dispatchers can send help \n                    if they know your location.\n                  </p>\n                  <div className=\"bg-background rounded-lg p-4\">\n                    <p className=\"text-sm font-medium text-foreground mb-2\">They will ask:</p>\n                    <ul className=\"text-sm text-muted-foreground space-y-1\">\n                      <li>• \"What is your address?\"</li>\n                      <li>• \"What city are you in?\"</li>\n                      <li>• \"Are you at a house, apartment, or business?\"</li>\n                      <li>• \"What's the nearest cross street?\"</li>\n                    </ul>\n                  </div>\n                </div>\n              </div>\n            </div>\n\n            {/* Question 2: WHAT */}\n            <div className=\"bg-gradient-to-r from-secondary/50 to-secondary/30 border border-secondary rounded-2xl p-6\">\n              <div className=\"flex items-start gap-4\">\n                <div className=\"p-3 bg-secondary-foreground/10 rounded-xl flex-shrink-0\">\n                  <HelpCircle className=\"h-6 w-6 text-foreground\" />\n                </div>\n                <div className=\"flex-1\">\n                  <div className=\"flex items-center gap-2 mb-2\">\n                    <span className=\"bg-foreground text-background text-xs font-bold px-2 py-1 rounded\">SECOND</span>\n                    <h3 className=\"text-xl font-bold text-foreground\">WHAT is happening?</h3>\n                  </div>\n                  <p className=\"text-muted-foreground mb-4\">\n                    The dispatcher needs to understand the type of emergency to send the right help—police, \n                    fire, or medical (or all three).\n                  </p>\n                  <div className=\"bg-background rounded-lg p-4\">\n                    <p className=\"text-sm font-medium text-foreground mb-2\">They will ask:</p>\n                    <ul className=\"text-sm text-muted-foreground space-y-1\">\n                      <li>• \"What's your emergency?\"</li>\n                      <li>• \"Is anyone hurt?\"</li>\n                      <li>• \"Is the person conscious and breathing?\"</li>\n                      <li>• \"Is the danger still present?\"</li>\n                    </ul>\n                  </div>\n                </div>\n              </div>\n            </div>\n\n            {/* Question 3: WHO */}\n            <div className=\"bg-gradient-to-r from-accent to-accent/50 border border-border rounded-2xl p-6\">\n              <div className=\"flex items-start gap-4\">\n                <div className=\"p-3 bg-muted rounded-xl flex-shrink-0\">\n                  <Users className=\"h-6 w-6 text-foreground\" />\n                </div>\n                <div className=\"flex-1\">\n                  <div className=\"flex items-center gap-2 mb-2\">\n                    <span className=\"bg-muted-foreground text-muted text-xs font-bold px-2 py-1 rounded\">THIRD</span>\n                    <h3 className=\"text-xl font-bold text-foreground\">WHO needs help?</h3>\n                  </div>\n                  <p className=\"text-muted-foreground mb-4\">\n                    Information about the person in distress helps responders prepare the right equipment \n                    and approach.\n                  </p>\n                  <div className=\"bg-background rounded-lg p-4\">\n                    <p className=\"text-sm font-medium text-foreground mb-2\">They will ask:</p>\n                    <ul className=\"text-sm text-muted-foreground space-y-1\">\n                      <li>• \"How old is the person?\"</li>\n                      <li>• \"What's your name?\"</li>\n                      <li>• \"What's your phone number?\"</li>\n                      <li>• \"How many people are involved?\"</li>\n                    </ul>\n                  </div>\n                </div>\n              </div>\n            </div>\n          </div>\n        </section>\n\n        {/* Pre-Arrival Instructions */}\n        <section className=\"mb-12\">\n          <h2 className=\"text-2xl font-bold text-foreground mb-6 flex items-center gap-3\">\n            <Clipboard className=\"h-7 w-7 text-primary\" />\n            Pre-Arrival Instructions\n          </h2>\n\n          <div className=\"bg-muted/30 rounded-2xl p-6\">\n            <p className=\"text-muted-foreground mb-6\">\n              While help is on the way, the dispatcher may give you instructions to help before responders arrive. \n              These are called \"pre-arrival instructions\" and can save lives.\n            </p>\n\n            <div className=\"grid md:grid-cols-2 gap-4\">\n              {[\n                {\n                  title: \"CPR Instructions\",\n                  desc: \"Step-by-step guidance for chest compressions if someone isn't breathing\"\n                },\n                {\n                  title: \"Choking Assistance\",\n                  desc: \"How to help someone who is choking on food or an object\"\n                },\n                {\n                  title: \"Bleeding Control\",\n                  desc: \"How to apply pressure to stop serious bleeding\"\n                },\n                {\n                  title: \"Fire Safety\",\n                  desc: \"How to safely exit, where to meet, staying low under smoke\"\n                },\n                {\n                  title: \"Intruder Safety\",\n                  desc: \"Where to hide, how to lock doors, staying quiet and safe\"\n                },\n                {\n                  title: \"Childbirth Assistance\",\n                  desc: \"Emergency guidance if a baby is coming before help arrives\"\n                }\n              ].map((item, i) => (\n                <div key={i} className=\"bg-background rounded-xl p-4 shadow-sm\">\n                  <h4 className=\"font-semibold text-foreground mb-1\">{item.title}</h4>\n                  <p className=\"text-sm text-muted-foreground\">{item.desc}</p>\n                </div>\n              ))}\n            </div>\n          </div>\n        </section>\n\n        {/* Stay on the Line */}\n        <section className=\"mb-12\">\n          <div className=\"bg-primary/5 border border-primary/20 rounded-2xl p-6 flex items-start gap-4\">\n            <Phone className=\"h-8 w-8 text-primary flex-shrink-0\" />\n            <div>\n              <h3 className=\"text-xl font-bold text-foreground mb-2\">Stay on the Line</h3>\n              <p className=\"text-muted-foreground mb-4\">\n                The dispatcher will tell you when it's okay to hang up. Staying on the line allows them to:\n              </p>\n              <ul className=\"text-muted-foreground space-y-2\">\n                <li className=\"flex items-start gap-2\">\n                  <span className=\"text-primary\">•</span>\n                  <span>Give you updates on when help will arrive</span>\n                </li>\n                <li className=\"flex items-start gap-2\">\n                  <span className=\"text-primary\">•</span>\n                  <span>Provide life-saving instructions in real-time</span>\n                </li>\n                <li className=\"flex items-start gap-2\">\n                  <span className=\"text-primary\">•</span>\n                  <span>Get additional information to help responders</span>\n                </li>\n                <li className=\"flex items-start gap-2\">\n                  <span className=\"text-primary\">•</span>\n                  <span>Call you back if disconnected</span>\n                </li>\n              </ul>\n            </div>\n          </div>\n        </section>\n\n        {/* Response Time */}\n        <section className=\"mb-12\">\n          <div className=\"bg-muted/30 rounded-2xl p-6 flex items-start gap-4\">\n            <Clock className=\"h-8 w-8 text-muted-foreground flex-shrink-0\" />\n            <div>\n              <h3 className=\"text-xl font-bold text-foreground mb-2\">What Happens Next?</h3>\n              <p className=\"text-muted-foreground\">\n                While you're still on the phone, the dispatcher is already sending help. Police, fire, \n                or ambulance teams are being notified and heading to your location. The clearer your \n                information, the faster they can find you.\n              </p>\n            </div>\n          </div>\n        </section>\n\n        {/* Practice CTA */}\n        <div className=\"bg-gradient-to-br from-primary/10 to-primary/5 border border-primary/20 rounded-2xl p-8 text-center\">\n          <h2 className=\"text-2xl font-bold text-foreground mb-4\">Practice Makes Prepared</h2>\n          <p className=\"text-muted-foreground mb-6 max-w-xl mx-auto\">\n            Now that you know what to expect, try our simulator to practice answering these questions \n            in a safe environment.\n          </p>\n          <a \n            href=\"/\" \n            className=\"inline-flex items-center gap-2 bg-primary text-primary-foreground px-6 py-3 rounded-lg font-medium hover:bg-primary/90 transition-colors\"\n          >\n            Try the Simulator\n          </a>\n        </div>\n      </div>\n    </MainLayout>\n  );\n};\n\nexport default Protocol;\n","\"use client\";\n\n// packages/react/collapsible/src/Collapsible.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar COLLAPSIBLE_NAME = \"Collapsible\";\nvar [createCollapsibleContext, createCollapsibleScope] = createContextScope(COLLAPSIBLE_NAME);\nvar [CollapsibleProvider, useCollapsibleContext] = createCollapsibleContext(COLLAPSIBLE_NAME);\nvar Collapsible = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      __scopeCollapsible,\n      open: openProp,\n      defaultOpen,\n      disabled,\n      onOpenChange,\n      ...collapsibleProps\n    } = props;\n    const [open = false, setOpen] = useControllableState({\n      prop: openProp,\n      defaultProp: defaultOpen,\n      onChange: onOpenChange\n    });\n    return /* @__PURE__ */ jsx(\n      CollapsibleProvider,\n      {\n        scope: __scopeCollapsible,\n        disabled,\n        contentId: useId(),\n        open,\n        onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n        children: /* @__PURE__ */ jsx(\n          Primitive.div,\n          {\n            \"data-state\": getState(open),\n            \"data-disabled\": disabled ? \"\" : void 0,\n            ...collapsibleProps,\n            ref: forwardedRef\n          }\n        )\n      }\n    );\n  }\n);\nCollapsible.displayName = COLLAPSIBLE_NAME;\nvar TRIGGER_NAME = \"CollapsibleTrigger\";\nvar CollapsibleTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeCollapsible, ...triggerProps } = props;\n    const context = useCollapsibleContext(TRIGGER_NAME, __scopeCollapsible);\n    return /* @__PURE__ */ jsx(\n      Primitive.button,\n      {\n        type: \"button\",\n        \"aria-controls\": context.contentId,\n        \"aria-expanded\": context.open || false,\n        \"data-state\": getState(context.open),\n        \"data-disabled\": context.disabled ? \"\" : void 0,\n        disabled: context.disabled,\n        ...triggerProps,\n        ref: forwardedRef,\n        onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n      }\n    );\n  }\n);\nCollapsibleTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"CollapsibleContent\";\nvar CollapsibleContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const { forceMount, ...contentProps } = props;\n    const context = useCollapsibleContext(CONTENT_NAME, props.__scopeCollapsible);\n    return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: ({ present }) => /* @__PURE__ */ jsx(CollapsibleContentImpl, { ...contentProps, ref: forwardedRef, present }) });\n  }\n);\nCollapsibleContent.displayName = CONTENT_NAME;\nvar CollapsibleContentImpl = React.forwardRef((props, forwardedRef) => {\n  const { __scopeCollapsible, present, children, ...contentProps } = props;\n  const context = useCollapsibleContext(CONTENT_NAME, __scopeCollapsible);\n  const [isPresent, setIsPresent] = React.useState(present);\n  const ref = React.useRef(null);\n  const composedRefs = useComposedRefs(forwardedRef, ref);\n  const heightRef = React.useRef(0);\n  const height = heightRef.current;\n  const widthRef = React.useRef(0);\n  const width = widthRef.current;\n  const isOpen = context.open || isPresent;\n  const isMountAnimationPreventedRef = React.useRef(isOpen);\n  const originalStylesRef = React.useRef();\n  React.useEffect(() => {\n    const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n    return () => cancelAnimationFrame(rAF);\n  }, []);\n  useLayoutEffect(() => {\n    const node = ref.current;\n    if (node) {\n      originalStylesRef.current = originalStylesRef.current || {\n        transitionDuration: node.style.transitionDuration,\n        animationName: node.style.animationName\n      };\n      node.style.transitionDuration = \"0s\";\n      node.style.animationName = \"none\";\n      const rect = node.getBoundingClientRect();\n      heightRef.current = rect.height;\n      widthRef.current = rect.width;\n      if (!isMountAnimationPreventedRef.current) {\n        node.style.transitionDuration = originalStylesRef.current.transitionDuration;\n        node.style.animationName = originalStylesRef.current.animationName;\n      }\n      setIsPresent(present);\n    }\n  }, [context.open, present]);\n  return /* @__PURE__ */ jsx(\n    Primitive.div,\n    {\n      \"data-state\": getState(context.open),\n      \"data-disabled\": context.disabled ? \"\" : void 0,\n      id: context.contentId,\n      hidden: !isOpen,\n      ...contentProps,\n      ref: composedRefs,\n      style: {\n        [`--radix-collapsible-content-height`]: height ? `${height}px` : void 0,\n        [`--radix-collapsible-content-width`]: width ? `${width}px` : void 0,\n        ...props.style\n      },\n      children: isOpen && children\n    }\n  );\n});\nfunction getState(open) {\n  return open ? \"open\" : \"closed\";\n}\nvar Root = Collapsible;\nvar Trigger = CollapsibleTrigger;\nvar Content = CollapsibleContent;\nexport {\n  Collapsible,\n  CollapsibleContent,\n  CollapsibleTrigger,\n  Content,\n  Root,\n  Trigger,\n  createCollapsibleScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/Direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n  const { dir, children } = props;\n  return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n  const globalDir = React.useContext(DirectionContext);\n  return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n  DirectionProvider,\n  Provider,\n  useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// packages/react/accordion/src/Accordion.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\";\nimport { createCollapsibleScope } from \"@radix-ui/react-collapsible\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ACCORDION_NAME = \"Accordion\";\nvar ACCORDION_KEYS = [\"Home\", \"End\", \"ArrowDown\", \"ArrowUp\", \"ArrowLeft\", \"ArrowRight\"];\nvar [Collection, useCollection, createCollectionScope] = createCollection(ACCORDION_NAME);\nvar [createAccordionContext, createAccordionScope] = createContextScope(ACCORDION_NAME, [\n  createCollectionScope,\n  createCollapsibleScope\n]);\nvar useCollapsibleScope = createCollapsibleScope();\nvar Accordion = React.forwardRef(\n  (props, forwardedRef) => {\n    const { type, ...accordionProps } = props;\n    const singleProps = accordionProps;\n    const multipleProps = accordionProps;\n    return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeAccordion, children: type === \"multiple\" ? /* @__PURE__ */ jsx(AccordionImplMultiple, { ...multipleProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(AccordionImplSingle, { ...singleProps, ref: forwardedRef }) });\n  }\n);\nAccordion.displayName = ACCORDION_NAME;\nvar [AccordionValueProvider, useAccordionValueContext] = createAccordionContext(ACCORDION_NAME);\nvar [AccordionCollapsibleProvider, useAccordionCollapsibleContext] = createAccordionContext(\n  ACCORDION_NAME,\n  { collapsible: false }\n);\nvar AccordionImplSingle = React.forwardRef(\n  (props, forwardedRef) => {\n    const {\n      value: valueProp,\n      defaultValue,\n      onValueChange = () => {\n      },\n      collapsible = false,\n      ...accordionSingleProps\n    } = props;\n    const [value, setValue] = useControllableState({\n      prop: valueProp,\n      defaultProp: defaultValue,\n      onChange: onValueChange\n    });\n    return /* @__PURE__ */ jsx(\n      AccordionValueProvider,\n      {\n        scope: props.__scopeAccordion,\n        value: value ? [value] : [],\n        onItemOpen: setValue,\n        onItemClose: React.useCallback(() => collapsible && setValue(\"\"), [collapsible, setValue]),\n        children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionSingleProps, ref: forwardedRef }) })\n      }\n    );\n  }\n);\nvar AccordionImplMultiple = React.forwardRef((props, forwardedRef) => {\n  const {\n    value: valueProp,\n    defaultValue,\n    onValueChange = () => {\n    },\n    ...accordionMultipleProps\n  } = props;\n  const [value = [], setValue] = useControllableState({\n    prop: valueProp,\n    defaultProp: defaultValue,\n    onChange: onValueChange\n  });\n  const handleItemOpen = React.useCallback(\n    (itemValue) => setValue((prevValue = []) => [...prevValue, itemValue]),\n    [setValue]\n  );\n  const handleItemClose = React.useCallback(\n    (itemValue) => setValue((prevValue = []) => prevValue.filter((value2) => value2 !== itemValue)),\n    [setValue]\n  );\n  return /* @__PURE__ */ jsx(\n    AccordionValueProvider,\n    {\n      scope: props.__scopeAccordion,\n      value,\n      onItemOpen: handleItemOpen,\n      onItemClose: handleItemClose,\n      children: /* @__PURE__ */ jsx(AccordionCollapsibleProvider, { scope: props.__scopeAccordion, collapsible: true, children: /* @__PURE__ */ jsx(AccordionImpl, { ...accordionMultipleProps, ref: forwardedRef }) })\n    }\n  );\n});\nvar [AccordionImplProvider, useAccordionContext] = createAccordionContext(ACCORDION_NAME);\nvar AccordionImpl = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeAccordion, disabled, dir, orientation = \"vertical\", ...accordionProps } = props;\n    const accordionRef = React.useRef(null);\n    const composedRefs = useComposedRefs(accordionRef, forwardedRef);\n    const getItems = useCollection(__scopeAccordion);\n    const direction = useDirection(dir);\n    const isDirectionLTR = direction === \"ltr\";\n    const handleKeyDown = composeEventHandlers(props.onKeyDown, (event) => {\n      if (!ACCORDION_KEYS.includes(event.key)) return;\n      const target = event.target;\n      const triggerCollection = getItems().filter((item) => !item.ref.current?.disabled);\n      const triggerIndex = triggerCollection.findIndex((item) => item.ref.current === target);\n      const triggerCount = triggerCollection.length;\n      if (triggerIndex === -1) return;\n      event.preventDefault();\n      let nextIndex = triggerIndex;\n      const homeIndex = 0;\n      const endIndex = triggerCount - 1;\n      const moveNext = () => {\n        nextIndex = triggerIndex + 1;\n        if (nextIndex > endIndex) {\n          nextIndex = homeIndex;\n        }\n      };\n      const movePrev = () => {\n        nextIndex = triggerIndex - 1;\n        if (nextIndex < homeIndex) {\n          nextIndex = endIndex;\n        }\n      };\n      switch (event.key) {\n        case \"Home\":\n          nextIndex = homeIndex;\n          break;\n        case \"End\":\n          nextIndex = endIndex;\n          break;\n        case \"ArrowRight\":\n          if (orientation === \"horizontal\") {\n            if (isDirectionLTR) {\n              moveNext();\n            } else {\n              movePrev();\n            }\n          }\n          break;\n        case \"ArrowDown\":\n          if (orientation === \"vertical\") {\n            moveNext();\n          }\n          break;\n        case \"ArrowLeft\":\n          if (orientation === \"horizontal\") {\n            if (isDirectionLTR) {\n              movePrev();\n            } else {\n              moveNext();\n            }\n          }\n          break;\n        case \"ArrowUp\":\n          if (orientation === \"vertical\") {\n            movePrev();\n          }\n          break;\n      }\n      const clampedIndex = nextIndex % triggerCount;\n      triggerCollection[clampedIndex].ref.current?.focus();\n    });\n    return /* @__PURE__ */ jsx(\n      AccordionImplProvider,\n      {\n        scope: __scopeAccordion,\n        disabled,\n        direction: dir,\n        orientation,\n        children: /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(\n          Primitive.div,\n          {\n            ...accordionProps,\n            \"data-orientation\": orientation,\n            ref: composedRefs,\n            onKeyDown: disabled ? void 0 : handleKeyDown\n          }\n        ) })\n      }\n    );\n  }\n);\nvar ITEM_NAME = \"AccordionItem\";\nvar [AccordionItemProvider, useAccordionItemContext] = createAccordionContext(ITEM_NAME);\nvar AccordionItem = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeAccordion, value, ...accordionItemProps } = props;\n    const accordionContext = useAccordionContext(ITEM_NAME, __scopeAccordion);\n    const valueContext = useAccordionValueContext(ITEM_NAME, __scopeAccordion);\n    const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n    const triggerId = useId();\n    const open = value && valueContext.value.includes(value) || false;\n    const disabled = accordionContext.disabled || props.disabled;\n    return /* @__PURE__ */ jsx(\n      AccordionItemProvider,\n      {\n        scope: __scopeAccordion,\n        open,\n        disabled,\n        triggerId,\n        children: /* @__PURE__ */ jsx(\n          CollapsiblePrimitive.Root,\n          {\n            \"data-orientation\": accordionContext.orientation,\n            \"data-state\": getState(open),\n            ...collapsibleScope,\n            ...accordionItemProps,\n            ref: forwardedRef,\n            disabled,\n            open,\n            onOpenChange: (open2) => {\n              if (open2) {\n                valueContext.onItemOpen(value);\n              } else {\n                valueContext.onItemClose(value);\n              }\n            }\n          }\n        )\n      }\n    );\n  }\n);\nAccordionItem.displayName = ITEM_NAME;\nvar HEADER_NAME = \"AccordionHeader\";\nvar AccordionHeader = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeAccordion, ...headerProps } = props;\n    const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n    const itemContext = useAccordionItemContext(HEADER_NAME, __scopeAccordion);\n    return /* @__PURE__ */ jsx(\n      Primitive.h3,\n      {\n        \"data-orientation\": accordionContext.orientation,\n        \"data-state\": getState(itemContext.open),\n        \"data-disabled\": itemContext.disabled ? \"\" : void 0,\n        ...headerProps,\n        ref: forwardedRef\n      }\n    );\n  }\n);\nAccordionHeader.displayName = HEADER_NAME;\nvar TRIGGER_NAME = \"AccordionTrigger\";\nvar AccordionTrigger = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeAccordion, ...triggerProps } = props;\n    const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n    const itemContext = useAccordionItemContext(TRIGGER_NAME, __scopeAccordion);\n    const collapsibleContext = useAccordionCollapsibleContext(TRIGGER_NAME, __scopeAccordion);\n    const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n    return /* @__PURE__ */ jsx(Collection.ItemSlot, { scope: __scopeAccordion, children: /* @__PURE__ */ jsx(\n      CollapsiblePrimitive.Trigger,\n      {\n        \"aria-disabled\": itemContext.open && !collapsibleContext.collapsible || void 0,\n        \"data-orientation\": accordionContext.orientation,\n        id: itemContext.triggerId,\n        ...collapsibleScope,\n        ...triggerProps,\n        ref: forwardedRef\n      }\n    ) });\n  }\n);\nAccordionTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"AccordionContent\";\nvar AccordionContent = React.forwardRef(\n  (props, forwardedRef) => {\n    const { __scopeAccordion, ...contentProps } = props;\n    const accordionContext = useAccordionContext(ACCORDION_NAME, __scopeAccordion);\n    const itemContext = useAccordionItemContext(CONTENT_NAME, __scopeAccordion);\n    const collapsibleScope = useCollapsibleScope(__scopeAccordion);\n    return /* @__PURE__ */ jsx(\n      CollapsiblePrimitive.Content,\n      {\n        role: \"region\",\n        \"aria-labelledby\": itemContext.triggerId,\n        \"data-orientation\": accordionContext.orientation,\n        ...collapsibleScope,\n        ...contentProps,\n        ref: forwardedRef,\n        style: {\n          [\"--radix-accordion-content-height\"]: \"var(--radix-collapsible-content-height)\",\n          [\"--radix-accordion-content-width\"]: \"var(--radix-collapsible-content-width)\",\n          ...props.style\n        }\n      }\n    );\n  }\n);\nAccordionContent.displayName = CONTENT_NAME;\nfunction getState(open) {\n  return open ? \"open\" : \"closed\";\n}\nvar Root2 = Accordion;\nvar Item = AccordionItem;\nvar Header = AccordionHeader;\nvar Trigger2 = AccordionTrigger;\nvar Content2 = AccordionContent;\nexport {\n  Accordion,\n  AccordionContent,\n  AccordionHeader,\n  AccordionItem,\n  AccordionTrigger,\n  Content2 as Content,\n  Header,\n  Item,\n  Root2 as Root,\n  Trigger2 as Trigger,\n  createAccordionScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { ChevronDown } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Accordion = AccordionPrimitive.Root\n\nconst AccordionItem = React.forwardRef<\n  React.ElementRef<typeof AccordionPrimitive.Item>,\n  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>\n>(({ className, ...props }, ref) => (\n  <AccordionPrimitive.Item\n    ref={ref}\n    className={cn(\"border-b\", className)}\n    {...props}\n  />\n))\nAccordionItem.displayName = \"AccordionItem\"\n\nconst AccordionTrigger = React.forwardRef<\n  React.ElementRef<typeof AccordionPrimitive.Trigger>,\n  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n  <AccordionPrimitive.Header className=\"flex\">\n    <AccordionPrimitive.Trigger\n      ref={ref}\n      className={cn(\n        \"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180\",\n        className\n      )}\n      {...props}\n    >\n      {children}\n      <ChevronDown className=\"h-4 w-4 shrink-0 transition-transform duration-200\" />\n    </AccordionPrimitive.Trigger>\n  </AccordionPrimitive.Header>\n))\nAccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName\n\nconst AccordionContent = React.forwardRef<\n  React.ElementRef<typeof AccordionPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Content>\n>(({ className, children, ...props }, ref) => (\n  <AccordionPrimitive.Content\n    ref={ref}\n    className=\"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down\"\n    {...props}\n  >\n    <div className={cn(\"pb-4 pt-0\", className)}>{children}</div>\n  </AccordionPrimitive.Content>\n))\n\nAccordionContent.displayName = AccordionPrimitive.Content.displayName\n\nexport { Accordion, AccordionItem, AccordionTrigger, AccordionContent }\n","import React from 'react';\nimport { Helmet } from 'react-helmet-async';\nimport MainLayout from '@/components/MainLayout';\nimport { AlertTriangle } from 'lucide-react';\nimport {\n  Accordion,\n  AccordionContent,\n  AccordionItem,\n  AccordionTrigger,\n} from '@/components/ui/accordion';\n\nconst faqs = [\n  {\n    question: \"Does this website actually call the police?\",\n    answer: \"NO. This is a simulation only. It connects to an AI voice agent for training purposes. No real emergency services are contacted. If you have a real emergency, hang up and dial 911 on your phone immediately.\",\n    important: true\n  },\n  {\n    question: \"Is this free to use?\",\n    answer: \"Yes! The 911/999 Call Simulator is completely free to use for educational purposes. We believe everyone should have access to emergency preparedness training, especially children and families.\"\n  },\n  {\n    question: \"Is my voice recorded?\",\n    answer: \"The simulator uses AI voice technology to create a realistic experience. While the AI processes your voice in real-time to respond appropriately, we do not permanently store or record your conversations. Your privacy is important to us.\"\n  },\n  {\n    question: \"What age is this appropriate for?\",\n    answer: \"This simulator is designed for children ages 4 and up, with adult supervision recommended for younger children. The AI dispatcher uses calm, reassuring language appropriate for all ages. Parents and teachers can use this tool to practice with children of any age.\"\n  },\n  {\n    question: \"Can I use this in a classroom or group setting?\",\n    answer: \"Absolutely! Teachers and group leaders are welcome to use this simulator as part of their safety curriculum. It's a great way to demonstrate 911 procedures to multiple children in a controlled, educational environment.\"\n  },\n  {\n    question: \"How realistic is the simulation?\",\n    answer: \"Our AI dispatcher is trained on real 911 protocols and asks the same questions a real dispatcher would ask: Where is your emergency? What's happening? Who needs help? The experience is designed to be educational while remaining appropriate for children.\"\n  },\n  {\n    question: \"What if my child gets scared during the simulation?\",\n    answer: \"The simulation is designed to be educational, not frightening. However, if your child feels uncomfortable, they can end the call at any time by pressing the hang-up button. We recommend staying with younger children during their first few practice sessions to provide comfort and guidance.\"\n  },\n  {\n    question: \"Does this work on all devices?\",\n    answer: \"Yes! The simulator works on smartphones, tablets, and computers with a microphone. For the best experience, we recommend using headphones and finding a quiet space to practice.\"\n  },\n  {\n    question: \"Can I practice different emergency scenarios?\",\n    answer: \"Yes! You can practice various scenarios including fires, medical emergencies, and safety concerns. The AI dispatcher will respond appropriately to whatever situation you describe. Check out our Scripts page for example phrases you can practice.\"\n  },\n  {\n    question: \"What should I do if I accidentally call real 911?\",\n    answer: \"If you accidentally dial the real 911 number, stay on the line and explain it was an accidental call. Do NOT hang up, as this may cause dispatchers to send emergency services to check on you. Simply say, 'I'm sorry, this was an accidental call. There is no emergency.'\"\n  },\n  {\n    question: \"Is there a limit to how many times I can practice?\",\n    answer: \"No! You can use the simulator as many times as you'd like. In fact, we encourage regular practice—just like fire drills, emergency calling skills stay sharp with repetition.\"\n  },\n  {\n    question: \"Who created this tool?\",\n    answer: \"This simulator was created by educators and technology professionals who believe in the importance of emergency preparedness education. Our goal is to help families and schools teach children critical life-saving skills in a safe, accessible way.\"\n  }\n];\n\nconst FAQ = () => {\n  const faqStructuredData = {\n    \"@context\": \"https://schema.org\",\n    \"@type\": \"FAQPage\",\n    \"mainEntity\": faqs.map(faq => ({\n      \"@type\": \"Question\",\n      \"name\": faq.question,\n      \"acceptedAnswer\": {\n        \"@type\": \"Answer\",\n        \"text\": faq.answer\n      }\n    }))\n  };\n\n  return (\n    <MainLayout>\n      <Helmet>\n        <title>Frequently Asked Questions | 911/999 Call Simulator FAQ</title>\n        <meta name=\"description\" content=\"Common questions about the 911/999 Call Simulator. Learn about safety, privacy, and how to use this educational tool for emergency preparedness training.\" />\n        <script type=\"application/ld+json\">\n          {JSON.stringify(faqStructuredData)}\n        </script>\n      </Helmet>\n\n      <div className=\"container mx-auto px-4 py-12 max-w-3xl\">\n        <header className=\"text-center mb-12\">\n          <h1 className=\"text-4xl md:text-5xl font-bold text-foreground mb-4\">\n            Frequently Asked Questions\n          </h1>\n          <p className=\"text-xl text-muted-foreground\">\n            Everything you need to know about the 911/999 Call Simulator\n          </p>\n        </header>\n\n        {/* Critical Notice */}\n        <div className=\"bg-destructive/10 border border-destructive/30 rounded-2xl p-6 mb-8 flex items-start gap-4\">\n          <AlertTriangle className=\"h-6 w-6 text-destructive flex-shrink-0 mt-1\" />\n          <div>\n            <h2 className=\"font-bold text-destructive mb-2\">Important Notice</h2>\n            <p className=\"text-muted-foreground\">\n              This is an educational simulation only. It does NOT connect to real emergency services. \n              For actual emergencies, always dial 911 on your phone.\n            </p>\n          </div>\n        </div>\n\n        {/* FAQ Accordion */}\n        <Accordion type=\"single\" collapsible className=\"space-y-4\">\n          {faqs.map((faq, index) => (\n            <AccordionItem \n              key={index} \n              value={`item-${index}`}\n              className={`border rounded-xl px-6 ${\n                faq.important \n                  ? 'bg-primary/5 border-primary/30' \n                  : 'bg-muted/30 border-border'\n              }`}\n            >\n              <AccordionTrigger className=\"text-left hover:no-underline py-4\">\n                <span className={`font-semibold ${faq.important ? 'text-primary' : 'text-foreground'}`}>\n                  {faq.question}\n                </span>\n              </AccordionTrigger>\n              <AccordionContent className=\"text-muted-foreground pb-4\">\n                {faq.answer}\n              </AccordionContent>\n            </AccordionItem>\n          ))}\n        </Accordion>\n\n        {/* Still Have Questions */}\n        <div className=\"mt-12 bg-muted/50 rounded-2xl p-8 text-center\">\n          <h2 className=\"text-xl font-bold text-foreground mb-3\">Still Have Questions?</h2>\n          <p className=\"text-muted-foreground mb-4\">\n            We're here to help! If you have a question that isn't answered above, \n            feel free to reach out.\n          </p>\n          <a \n            href=\"/feedback\" \n            className=\"inline-flex items-center gap-2 bg-primary text-primary-foreground px-6 py-3 rounded-lg font-medium hover:bg-primary/90 transition-colors\"\n          >\n            Send Us Feedback\n          </a>\n        </div>\n      </div>\n    </MainLayout>\n  );\n};\n\nexport default FAQ;\n","import React from 'react';\nimport { Helmet } from 'react-helmet-async';\nimport MainLayout from '@/components/MainLayout';\nimport { Phone, Flame, Shield, Heart, ExternalLink, AlertTriangle, BookOpen } from 'lucide-react';\n\nconst resourceCategories = [\n  {\n    icon: Heart,\n    title: \"Poison Control\",\n    color: \"purple\",\n    bgClass: \"bg-purple-50 dark:bg-purple-950/30\",\n    borderClass: \"border-purple-200 dark:border-purple-800\",\n    iconBg: \"bg-purple-100 dark:bg-purple-900\",\n    iconColor: \"text-purple-600\",\n    resources: [\n      {\n        name: \"National Poison Control Center\",\n        phone: \"1-800-222-1222\",\n        description: \"24/7 hotline for poison emergencies and questions. Free and confidential.\",\n        url: \"https://www.poison.org\"\n      },\n      {\n        name: \"Poison Help Online Tool\",\n        description: \"Get guidance on what to do if someone swallows, inhales, or touches something harmful.\",\n        url: \"https://www.poisonhelp.org\"\n      }\n    ]\n  },\n  {\n    icon: Shield,\n    title: \"Non-Emergency Police\",\n    color: \"blue\",\n    bgClass: \"bg-blue-50 dark:bg-blue-950/30\",\n    borderClass: \"border-blue-200 dark:border-blue-800\",\n    iconBg: \"bg-blue-100 dark:bg-blue-900\",\n    iconColor: \"text-blue-600\",\n    resources: [\n      {\n        name: \"Local Police Non-Emergency Line\",\n        description: \"For non-urgent reports like noise complaints, minor vandalism, or general questions. Look up your local police department's non-emergency number.\",\n        note: \"Search: '[Your City] police non-emergency number'\"\n      },\n      {\n        name: \"Crime Tips Hotlines\",\n        description: \"Many cities have anonymous tip lines for reporting suspicious activity.\",\n        note: \"Search: '[Your City] crime stoppers'\"\n      }\n    ]\n  },\n  {\n    icon: Flame,\n    title: \"Fire Safety\",\n    color: \"orange\",\n    bgClass: \"bg-orange-50 dark:bg-orange-950/30\",\n    borderClass: \"border-orange-200 dark:border-orange-800\",\n    iconBg: \"bg-orange-100 dark:bg-orange-900\",\n    iconColor: \"text-orange-600\",\n    resources: [\n      {\n        name: \"National Fire Protection Association (NFPA)\",\n        description: \"Fire safety tips, escape planning, and educational resources for families.\",\n        url: \"https://www.nfpa.org/education\"\n      },\n      {\n        name: \"Sparky the Fire Dog\",\n        description: \"Kid-friendly fire safety education with games and activities.\",\n        url: \"https://www.sparky.org\"\n      },\n      {\n        name: \"Safe Kids Worldwide - Fire Safety\",\n        description: \"Prevention tips and resources for keeping children safe from fires.\",\n        url: \"https://www.safekids.org\"\n      }\n    ]\n  },\n  {\n    icon: Heart,\n    title: \"Medical Resources\",\n    color: \"red\",\n    bgClass: \"bg-red-50 dark:bg-red-950/30\",\n    borderClass: \"border-red-200 dark:border-red-800\",\n    iconBg: \"bg-red-100 dark:bg-red-900\",\n    iconColor: \"text-red-600\",\n    resources: [\n      {\n        name: \"American Red Cross - First Aid\",\n        description: \"Learn first aid, CPR, and emergency preparedness through courses and resources.\",\n        url: \"https://www.redcross.org/take-a-class\"\n      },\n      {\n        name: \"American Heart Association - CPR\",\n        description: \"CPR training resources and information about hands-only CPR.\",\n        url: \"https://www.heart.org/en/cpr\"\n      },\n      {\n        name: \"Nurse Hotlines\",\n        description: \"Many health insurance providers offer 24/7 nurse advice lines. Check your insurance card for the number.\",\n        note: \"Check your insurance card for nurse hotline number\"\n      }\n    ]\n  },\n  {\n    icon: BookOpen,\n    title: \"Educational Resources\",\n    color: \"green\",\n    bgClass: \"bg-green-50 dark:bg-green-950/30\",\n    borderClass: \"border-green-200 dark:border-green-800\",\n    iconBg: \"bg-green-100 dark:bg-green-900\",\n    iconColor: \"text-green-600\",\n    resources: [\n      {\n        name: \"Ready.gov - Kids Section\",\n        description: \"FEMA's official resource for teaching kids about emergency preparedness.\",\n        url: \"https://www.ready.gov/kids\"\n      },\n      {\n        name: \"9-1-1 for Kids\",\n        description: \"Educational organization dedicated to teaching children about emergency services.\",\n        url: \"https://www.911forkids.com\"\n      },\n      {\n        name: \"National Safety Council\",\n        description: \"Safety resources for home, work, and community.\",\n        url: \"https://www.nsc.org\"\n      }\n    ]\n  }\n];\n\nconst Resources = () => {\n  return (\n    <MainLayout>\n      <Helmet>\n        <title>Emergency Resources | Helpful Numbers & Safety Links</title>\n        <meta name=\"description\" content=\"Essential emergency resources including Poison Control, non-emergency police lines, fire safety tips, and educational materials for families.\" />\n      </Helmet>\n\n      <div className=\"container mx-auto px-4 py-12 max-w-5xl\">\n        <header className=\"text-center mb-12\">\n          <h1 className=\"text-4xl md:text-5xl font-bold text-foreground mb-4\">\n            Emergency Resources\n          </h1>\n          <p className=\"text-xl text-muted-foreground max-w-2xl mx-auto\">\n            Helpful numbers, websites, and safety information for families\n          </p>\n        </header>\n\n        {/* Emergency Banner */}\n        <div className=\"bg-destructive text-destructive-foreground rounded-2xl p-6 mb-12 flex items-center justify-center gap-4\">\n          <AlertTriangle className=\"h-8 w-8\" />\n          <div className=\"text-center\">\n            <p className=\"font-bold text-lg\">For Life-Threatening Emergencies</p>\n            <p className=\"text-3xl font-bold\">Call 911</p>\n          </div>\n          <AlertTriangle className=\"h-8 w-8\" />\n        </div>\n\n        {/* Resource Categories */}\n        <div className=\"space-y-8\">\n          {resourceCategories.map((category) => {\n            const Icon = category.icon;\n            return (\n              <div \n                key={category.title}\n                className={`${category.bgClass} ${category.borderClass} border rounded-2xl overflow-hidden`}\n              >\n                <div className=\"p-6 md:p-8\">\n                  {/* Header */}\n                  <div className=\"flex items-center gap-4 mb-6\">\n                    <div className={`p-3 ${category.iconBg} rounded-xl`}>\n                      <Icon className={`h-7 w-7 ${category.iconColor}`} />\n                    </div>\n                    <h2 className=\"text-2xl font-bold text-foreground\">{category.title}</h2>\n                  </div>\n\n                  {/* Resources Grid */}\n                  <div className=\"grid md:grid-cols-2 gap-4\">\n                    {category.resources.map((resource, i) => (\n                      <div key={i} className=\"bg-background rounded-xl p-5 shadow-sm\">\n                        <div className=\"flex items-start justify-between gap-2 mb-2\">\n                          <h3 className=\"font-semibold text-foreground\">{resource.name}</h3>\n                          {resource.url && (\n                            <a \n                              href={resource.url} \n                              target=\"_blank\" \n                              rel=\"noopener noreferrer\"\n                              className=\"text-primary hover:text-primary/80 flex-shrink-0\"\n                              aria-label={`Visit ${resource.name}`}\n                            >\n                              <ExternalLink className=\"h-4 w-4\" />\n                            </a>\n                          )}\n                        </div>\n                        \n                        {resource.phone && (\n                          <a \n                            href={`tel:${resource.phone.replace(/-/g, '')}`}\n                            className=\"inline-flex items-center gap-2 text-primary font-bold text-lg mb-2 hover:underline\"\n                          >\n                            <Phone className=\"h-4 w-4\" />\n                            {resource.phone}\n                          </a>\n                        )}\n                        \n                        <p className=\"text-sm text-muted-foreground\">{resource.description}</p>\n                        \n                        {resource.note && (\n                          <p className=\"text-xs text-muted-foreground/70 mt-2 italic\">\n                            💡 {resource.note}\n                          </p>\n                        )}\n                      </div>\n                    ))}\n                  </div>\n                </div>\n              </div>\n            );\n          })}\n        </div>\n\n        {/* Disclaimer */}\n        <div className=\"mt-12 bg-muted/50 rounded-2xl p-6 text-center\">\n          <p className=\"text-muted-foreground text-sm\">\n            The resources listed above are provided for educational purposes. Links may change over time. \n            Always verify information and contact your local emergency services for the most accurate numbers \n            in your area.\n          </p>\n        </div>\n\n        {/* Practice CTA */}\n        <div className=\"mt-8 bg-gradient-to-br from-primary/10 to-primary/5 border border-primary/20 rounded-2xl p-8 text-center\">\n          <h2 className=\"text-2xl font-bold text-foreground mb-4\">Ready to Practice?</h2>\n          <p className=\"text-muted-foreground mb-6 max-w-xl mx-auto\">\n            Use our 911/999 simulator to practice emergency calls in a safe environment.\n          </p>\n          <a \n            href=\"/\" \n            className=\"inline-flex items-center gap-2 bg-primary text-primary-foreground px-6 py-3 rounded-lg font-medium hover:bg-primary/90 transition-colors\"\n          >\n            Try the Simulator\n          </a>\n        </div>\n      </div>\n    </MainLayout>\n  );\n};\n\nexport default Resources;\n","export default \"__VITE_ASSET__CkXV2MMP__\"","import React from \"react\";\nimport { Helmet } from \"react-helmet-async\";\nimport { Link } from \"react-router-dom\";\nimport { ArrowLeft } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport MainLayout from \"@/components/MainLayout\";\nimport simonPhoto from \"@/assets/simon-photo.jpeg\";\n\nconst About = () => {\n  return (\n    <MainLayout>\n      <Helmet>\n        <title>About | 911/999 Call Simulator</title>\n        <meta\n          name=\"description\"\n          content=\"Learn about Simon, the creator of 911/999 Call Simulator - a safety tool built to help children learn emergency response.\"\n        />\n      </Helmet>\n      <div className=\"py-8 px-4\">\n        <article className=\"max-w-2xl mx-auto\">\n          {/* Header */}\n          <header className=\"mb-4\">\n            <h1 className=\"font-serif text-4xl md:text-5xl font-bold text-foreground mb-1\">About Me</h1>\n            <p className=\"font-serif text-xl md:text-2xl text-muted-foreground italic\">\n              Architecting Solutions. Mitigating Risk. Saving Lives.\n            </p>\n          </header>\n\n          {/* Profile Section - 2 Column Layout */}\n          <div className=\"flex flex-col-reverse md:flex-row items-start gap-6 mb-4\">\n            {/* Left Column - Text */}\n            <div className=\"flex-1\">\n              <div className=\"flex items-center gap-3 mb-4\">\n                <h2 className=\"text-xl md:text-2xl font-bold text-foreground\">Hi, I'm Simon</h2>\n                <a\n                  href=\"https://www.linkedin.com/in/newton-simon/\"\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                  className=\"transition-opacity hover:opacity-80\"\n                  aria-label=\"Simon's LinkedIn Profile\"\n                >\n                  <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"#0077b5\" className=\"h-5 w-5\">\n                    <path d=\"M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a2.062 2.062 0 01-2.063-2.065 2.064 2.064 0 112.063 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z\" />\n                  </svg>\n                </a>\n              </div>\n              <p className=\"text-lg text-foreground/90\">\n                I am a Senior Project Manager who believes that the best technology doesn't just solve business\n                problems—it solves human ones.\n              </p>\n            </div>\n\n            {/* Right Column - Image */}\n            <div className=\"flex-shrink-0\">\n              <img\n                src={simonPhoto}\n                alt=\"Simon - Creator of 911/999 Call Simulator\"\n                className=\"w-24 h-24 md:w-32 md:h-32 rounded-lg object-cover shadow-lg mx-auto md:mx-0\"\n              />\n            </div>\n          </div>\n\n          {/* Body content */}\n          <div className=\"prose prose-lg max-w-none text-foreground/90 space-y-6\">\n            <p>\n              My career is defined by building complex enterprise systems, but this project—\n              <strong>911/999 Call Simulator</strong>—was born from a much simpler, yet terrifying requirement:{\" \"}\n              <strong>My own family's safety.</strong>\n            </p>\n\n            <h3 className=\"font-serif text-2xl font-bold text-foreground mt-10 mb-4\">The Risk Assessment</h3>\n\n            <p>\n              As a father to a 6-year-old daughter, I identified a critical \"Single Point of Failure\" in our household\n              safety plan. If I were to have an accident and become incapacitated, my daughter would be the sole\n              responder.\n            </p>\n\n            <p>\n              I implemented mitigation strategies—standard role-play scenarios—but I immediately hit a hard constraint:{\" \"}\n              <strong>The Simulation Gap.</strong>\n            </p>\n\n            <p>\n              We could talk about calling 911, but we couldn't <em>actually</em> dial it. This meant her training lacked\n              the tactile reality needed to ensure performance under stress.\n            </p>\n\n            <h3 className=\"font-serif text-2xl font-bold text-foreground mt-10 mb-4\">The Agile Solution</h3>\n\n            <p>\n              I approached this gap the same way I approach any enterprise roadblock:{\" \"}\n              <strong>Build a Proof of Concept (POC).</strong>\n            </p>\n\n            <p>\n              Adhering to PMP best practices, I avoided \"Gold Plating\" (adding unnecessary features that look cool but\n              add no value). Instead, I focused on the <strong>MVP (Minimum Viable Product)</strong>:\n            </p>\n\n            <ul className=\"list-disc pl-6 space-y-2\">\n              <li>\n                <strong>The Requirement:</strong> A realistic dialler that connects to a voice agent.\n              </li>\n              <li>\n                <strong>The Tech Stack:</strong> Low-code/No-code tools for rapid deployment.\n              </li>\n              <li>\n                <strong>The Execution:</strong> I built the simulator to test the core hypothesis—that interactive AI\n                could bridge the gap between role-play and reality.\n              </li>\n            </ul>\n\n            <p>\n              As I often tell my teams: <em>\"We can build anything, but not everything.\"</em> I chose to build what\n              mattered most.\n            </p>\n\n            <h3 className=\"font-serif text-2xl font-bold text-foreground mt-10 mb-4\">Value Delivery</h3>\n\n            <p>The result is a tool that delivers measurable value:</p>\n\n            <ol className=\"list-decimal pl-6 space-y-2\">\n              <li>\n                <strong>Confidence:</strong> Removes the fear of the unknown for children.\n              </li>\n              <li>\n                <strong>Competence:</strong> Teaches the specific \"handshake\" protocol of emergency calls.\n              </li>\n              <li>\n                <strong>Outcome:</strong> A potential reduction in \"Time to Response\" during a real medical emergency.\n              </li>\n            </ol>\n\n            <p>\n              Whether I'm delivering physical or cloud infrastructure or a safety tool for toddlers, my goal is the\n              same: <strong>Identify the problem, avoid the noise, and deliver the solution.</strong>\n            </p>\n          </div>\n\n          <hr className=\"my-12 border-border\" />\n\n          {/* Footer action */}\n          <div className=\"flex justify-center\">\n            <Button asChild size=\"lg\">\n              <Link to=\"/\">\n                <ArrowLeft className=\"mr-2 h-4 w-4\" />\n                Back to Simulator\n              </Link>\n            </Button>\n          </div>\n        </article>\n      </div>\n    </MainLayout>\n  );\n};\n\nexport default About;\n","import React from \"react\";\nimport { Helmet } from \"react-helmet-async\";\nimport { Link } from \"react-router-dom\";\nimport { ArrowLeft } from \"lucide-react\";\nimport { Button } from \"@/components/ui/button\";\nimport MainLayout from \"@/components/MainLayout\";\n\nconst Privacy = () => {\n  return (\n    <MainLayout>\n      <Helmet>\n        <title>Privacy Policy | 911/999 Call Simulator</title>\n        <meta\n          name=\"description\"\n          content=\"Privacy Policy for 911/999 Call Simulator — what data is processed, by whom, and what your rights are.\"\n        />\n        {/* Canonical is set globally by SeoCanonical so each domain self-canonicalises. */}\n      </Helmet>\n      <div className=\"py-16 px-4\">\n        <article className=\"max-w-2xl mx-auto\">\n          <header className=\"text-center mb-12\">\n            <h1 className=\"text-4xl md:text-5xl font-bold text-foreground mb-4\">Privacy Policy</h1>\n            <p className=\"text-sm text-gray-500\">Last updated: April 2026</p>\n          </header>\n\n          <div className=\"prose prose-lg max-w-none text-foreground/90 space-y-6\">\n            <h2 className=\"text-2xl font-bold text-foreground mt-8 mb-4\">Overview</h2>\n            <p>\n              911/999 Call Simulator (\"we,\" \"our,\" or \"us\") is a free educational tool that lets children practise\n              calling emergency services with an AI-powered dispatcher. This page explains exactly what happens to\n              data when you use the tool — including the third parties involved.\n            </p>\n            <p>\n              Operator: <strong>Product-nomad</strong> (independent, UK-based). Contact via the{\" \"}\n              <Link to=\"/about\" className=\"text-primary hover:underline\">About page</Link>.\n            </p>\n\n            <h2 className=\"text-2xl font-bold text-foreground mt-8 mb-4\">What we don't do</h2>\n            <ul className=\"list-disc pl-6 space-y-2\">\n              <li>We don't ask you to create an account.</li>\n              <li>We don't store or replay voice conversations on our servers.</li>\n              <li>We don't sell, rent, or share personal data with third parties for marketing.</li>\n              <li>We don't connect to real emergency services. The simulator is role-play only.</li>\n            </ul>\n\n            <h2 className=\"text-2xl font-bold text-foreground mt-8 mb-4\">What does happen to your voice</h2>\n            <p>\n              When a child speaks during a simulated call, audio streams in real time over a WebRTC connection from\n              the browser to <strong>ElevenLabs</strong> (an AI voice and conversation provider). ElevenLabs performs\n              speech-to-text, the dispatcher response, and text-to-speech, then streams audio back. We do not store\n              this audio. ElevenLabs' own retention and use of conversation data is governed by their privacy policy:{\" \"}\n              <a\n                href=\"https://elevenlabs.io/privacy-policy\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"text-primary hover:underline\"\n              >\n                elevenlabs.io/privacy-policy\n              </a>\n              .\n            </p>\n            <p>\n              <strong>To be explicit:</strong> voice data does leave the device when the simulator is in use. If\n              that's not acceptable, do not use the simulator.\n            </p>\n\n            <h2 className=\"text-2xl font-bold text-foreground mt-8 mb-4\">Sub-processors</h2>\n            <p>The following third parties process data on our behalf when you use the site:</p>\n            <ul className=\"list-disc pl-6 space-y-2\">\n              <li>\n                <strong>ElevenLabs</strong> — live voice and dialogue (as described above).\n              </li>\n              <li>\n                <strong>Supabase</strong> — hosts a small server-side function that issues short-lived session\n                tokens, plus a rate-limiting table that records a one-way hash of your IP address (not the IP itself)\n                for up to 60 minutes to prevent abuse.\n              </li>\n              <li>\n                <strong>Google Analytics</strong> — anonymous, aggregated traffic statistics (page views, session\n                duration). No first-party identifiers.\n              </li>\n              <li>\n                <strong>Google AdSense</strong> — advertising. We do not run first-party advertising or share\n                personal data with advertisers; ad selection is handled by Google subject to their policies.\n              </li>\n              <li>\n                <strong>Cloudflare and/or Vercel</strong> — hosting, CDN, and basic security headers.\n              </li>\n            </ul>\n\n            <h2 className=\"text-2xl font-bold text-foreground mt-8 mb-4\">Children's privacy</h2>\n            <p>\n              This tool is designed for children aged roughly 5–12, used <em>under adult supervision</em>. We do not\n              knowingly collect personal data from children:\n            </p>\n            <ul className=\"list-disc pl-6 space-y-2\">\n              <li>No accounts, no logins, no profiles.</li>\n              <li>No persistent identifiers tied to a child user.</li>\n              <li>\n                Voice conversations are scenario-driven; the dispatcher is configured to keep the role-play\n                educational and age-appropriate.\n              </li>\n              <li>\n                We do not enable personalised advertising for users under the age of 18 in jurisdictions where this\n                requires explicit consent (the AdSense account is configured in line with Google's children-content\n                policies).\n              </li>\n            </ul>\n            <p>\n              <strong>Parents and guardians:</strong> if you have any concern about a session or want to ask what was\n              processed, contact us via the{\" \"}\n              <Link to=\"/about\" className=\"text-primary hover:underline\">About page</Link>.\n            </p>\n\n            <h2 className=\"text-2xl font-bold text-foreground mt-8 mb-4\">Cookies and tracking</h2>\n            <p>The site uses:</p>\n            <ul className=\"list-disc pl-6 space-y-2\">\n              <li>\n                <strong>Strictly necessary cookies</strong> for the cookie-banner choice itself.\n              </li>\n              <li>\n                <strong>Analytics and advertising cookies</strong> via Google Analytics and Google AdSense, subject\n                to your choice on the cookie banner.\n              </li>\n            </ul>\n            <p className=\"text-sm text-gray-500\">\n              Known limitation: the analytics and advertising scripts currently load on page-load before the cookie\n              banner choice is registered. Bringing this strictly in line with UK PECR / GDPR is on our roadmap; until\n              then you can block these by declining the banner, by using browser-level privacy settings, or by\n              installing a content blocker.\n            </p>\n\n            <h2 className=\"text-2xl font-bold text-foreground mt-8 mb-4\">Your rights (UK GDPR)</h2>\n            <p>If you are in the UK or EU, you have the right to:</p>\n            <ul className=\"list-disc pl-6 space-y-2\">\n              <li>Ask what data we hold about you (we generally hold none, by design).</li>\n              <li>Ask us to erase any data we do hold.</li>\n              <li>Object to the use of analytics or advertising cookies via the cookie banner or your browser.</li>\n              <li>\n                Lodge a complaint with the UK Information Commissioner's Office:{\" \"}\n                <a\n                  href=\"https://ico.org.uk/make-a-complaint/\"\n                  target=\"_blank\"\n                  rel=\"noopener noreferrer\"\n                  className=\"text-primary hover:underline\"\n                >\n                  ico.org.uk/make-a-complaint\n                </a>\n                .\n              </li>\n            </ul>\n\n            <h2 className=\"text-2xl font-bold text-foreground mt-8 mb-4\">Data security</h2>\n            <p>\n              The server-side credentials that connect to ElevenLabs are held in the Supabase Edge Function\n              environment, never in client code. The token-mint endpoint enforces a per-IP-hash rate limit and a CORS\n              allowlist. The technical posture is documented in the public threat model:{\" \"}\n              <a\n                href=\"https://github.com/Product-nomad/emergency-voice-link/blob/main/THREAT_MODEL.md\"\n                target=\"_blank\"\n                rel=\"noopener noreferrer\"\n                className=\"text-primary hover:underline\"\n              >\n                THREAT_MODEL.md\n              </a>\n              .\n            </p>\n\n            <h2 className=\"text-2xl font-bold text-foreground mt-8 mb-4\">Changes to this policy</h2>\n            <p>\n              We may update this Privacy Policy as the tool evolves. Material changes will be reflected in the\n              \"Last updated\" date at the top and noted in the project's public CHANGELOG.\n            </p>\n\n            <h2 className=\"text-2xl font-bold text-foreground mt-8 mb-4\">Contact</h2>\n            <p>\n              Questions or requests? Visit the{\" \"}\n              <Link to=\"/about\" className=\"text-primary hover:underline\">About page</Link> for contact details.\n            </p>\n          </div>\n\n          <hr className=\"my-12 border-border\" />\n\n          <div className=\"flex justify-center\">\n            <Button asChild size=\"lg\">\n              <Link to=\"/\">\n                <ArrowLeft className=\"mr-2 h-4 w-4\" />\n                Back to Simulator\n              </Link>\n            </Button>\n          </div>\n        </article>\n      </div>\n    </MainLayout>\n  );\n};\n\nexport default Privacy;\n","import { Helmet } from \"react-helmet-async\";\nimport { useLocation } from \"react-router-dom\";\nimport { US_DOMAIN, UK_DOMAIN, getCurrentDomainBase } from \"@/utils/domain\";\n\n/**\n * Per-domain canonical + hreflang for the three-domain deployment\n * (911callsimulator.com → US, 999callsimulator.com → UK,\n * 999callbuddy.com → UK alt).\n *\n * Mounted once at the top of the app. Each domain self-canonicalises:\n * a visitor on any of the three domains sees a `<link rel=\"canonical\">`\n * pointing at that same domain, so search engines credit ranking\n * signal to the domain that was actually visited instead of funnelling\n * it all to 911callsimulator.com.\n *\n * `hreflang` alternates only ever point at the two \"primary\" domains\n * (en-US → 911, en-GB → 999callsimulator) — 999callbuddy.com is an\n * alternate UK domain, not a distinct locale, so it isn't listed as\n * an hreflang target (a language/region should have one canonical\n * hreflang destination, not two competing ones).\n *\n * Individual page components must NOT set their own `<link rel=\"canonical\">`\n * inside `<Helmet>` or this top-level value will be overridden / duplicated.\n */\nconst SeoCanonical = () => {\n  const { pathname } = useLocation();\n\n  // Determine current host. SSR-safe fallback to US domain.\n  const host = typeof window !== \"undefined\" ? window.location.hostname : \"\";\n  const baseForCurrent = getCurrentDomainBase(host);\n\n  const canonical = `${baseForCurrent}${pathname}`;\n  const usHref = `${US_DOMAIN}${pathname}`;\n  const ukHref = `${UK_DOMAIN}${pathname}`;\n\n  return (\n    <Helmet>\n      <link rel=\"canonical\" href={canonical} />\n      <link rel=\"alternate\" hrefLang=\"en-US\" href={usHref} />\n      <link rel=\"alternate\" hrefLang=\"en-GB\" href={ukHref} />\n      <link rel=\"alternate\" hrefLang=\"x-default\" href={usHref} />\n    </Helmet>\n  );\n};\n\nexport default SeoCanonical;\n","import { useEffect, useState } from \"react\";\nimport { Toaster } from \"@/components/ui/toaster\";\nimport { Toaster as Sonner } from \"@/components/ui/sonner\";\nimport { TooltipProvider } from \"@/components/ui/tooltip\";\nimport { QueryClient, QueryClientProvider } from \"@tanstack/react-query\";\nimport { BrowserRouter, Routes, Route } from \"react-router-dom\";\nimport { HelmetProvider } from \"react-helmet-async\";\nimport { Analytics } from \"@vercel/analytics/react\";\nimport { ConversationProvider } from \"@elevenlabs/react\";\nimport Index from \"./pages/Index\";\nimport Feedback from \"./pages/Feedback\";\nimport Guide from \"./pages/Guide\";\nimport Scripts from \"./pages/Scripts\";\nimport Protocol from \"./pages/Protocol\";\nimport FAQ from \"./pages/FAQ\";\nimport Resources from \"./pages/Resources\";\nimport About from \"./pages/About\";\nimport Privacy from \"./pages/Privacy\";\nimport SeoCanonical from \"./components/SeoCanonical\";\nimport {\n  CONSENT_CHANGE_EVENT,\n  getConsentState,\n  loadAnalyticsIfConsented,\n} from \"./utils/consent\";\n\nconst queryClient = new QueryClient();\n\nconst App = () => {\n  // If the user accepted cookies in a prior session, load analytics\n  // immediately. New visitors see the cookie banner first; analytics\n  // only loads when they click Accept.\n  const [analyticsConsented, setAnalyticsConsented] = useState(\n    () => typeof window !== \"undefined\" && getConsentState(window.localStorage) === \"accepted\",\n  );\n\n  useEffect(() => {\n    loadAnalyticsIfConsented();\n\n    const syncConsent = () =>\n      setAnalyticsConsented(getConsentState(window.localStorage) === \"accepted\");\n    window.addEventListener(CONSENT_CHANGE_EVENT, syncConsent);\n    return () => window.removeEventListener(CONSENT_CHANGE_EVENT, syncConsent);\n  }, []);\n\n  return (\n    <HelmetProvider>\n      <QueryClientProvider client={queryClient}>\n        <ConversationProvider>\n          <TooltipProvider>\n            <Toaster />\n            <Sonner />\n            <BrowserRouter>\n              <SeoCanonical />\n              <Routes>\n                <Route path=\"/\" element={<Index />} />\n                <Route path=\"/feedback\" element={<Feedback />} />\n                <Route path=\"/guide\" element={<Guide />} />\n                <Route path=\"/scripts\" element={<Scripts />} />\n                <Route path=\"/protocol\" element={<Protocol />} />\n                <Route path=\"/faq\" element={<FAQ />} />\n                <Route path=\"/resources\" element={<Resources />} />\n                <Route path=\"/about\" element={<About />} />\n                <Route path=\"/privacy\" element={<Privacy />} />\n              </Routes>\n            </BrowserRouter>\n            {analyticsConsented && <Analytics />}\n          </TooltipProvider>\n        </ConversationProvider>\n      </QueryClientProvider>\n    </HelmetProvider>\n  );\n};\n\nexport default App;\n","import { createRoot } from 'react-dom/client'\nimport App from './App.tsx'\nimport './index.css'\n\ncreateRoot(document.getElementById(\"root\")!).render(<App />);\n"],"names":["l","n","p","q","r","t","u","v","w","x","y","z","A","a","B","C","D","E","b","e","F","G","H","I","J","K","L","M","d","c","k","h","g","f","m","N","O","escape","P","Q","R","S","T","U","V","W","X","react_production_min","reactModule","require$$0","reactJsxRuntime_production_min","jsxRuntimeModule","exports","schedulerModule","aa","ca","require$$1","da","ea","fa","ha","ia","ja","ka","la","ma","oa","pa","qa","ra","sa","ta","ua","va","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","Ra","Sa","Ta","Ua","Va","Wa","Xa","Ya","Za","ab","bb","cb","db","eb","fb","gb","hb","ib","jb","kb","lb","mb","nb","ob","pb","qb","rb","sb","tb","ub","vb","wb","xb","yb","zb","Ab","Bb","Cb","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","Rb","Sb","Tb","Ub","Vb","Wb","Xb","Yb","Zb","$b","ac","bc","cc","dc","ec","fc","gc","hc","ic","jc","kc","lc","mc","oc","nc","pc","qc","rc","sc","tc","uc","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","Rc","Sc","Tc","Uc","Vc","Wc","Xc","Yc","Zc","$c","ad","bd","cd","dd","ed","fd","gd","hd","id","jd","kd","ld","md","nd","od","pd","qd","rd","sd","td","ud","vd","wd","xd","yd","Ad","zd","Bd","Cd","Dd","Ed","Fd","Gd","Hd","Id","Jd","Kd","Ld","Md","Nd","Od","Pd","Qd","Rd","Sd","Td","Ud","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","de","ee","fe","ge","he","ie","je","ke","le","me","ne","oe","pe","qe","re","se","te","ue","ve","we","xe","ye","ze","Ae","Be","Ce","De","Ee","Fe","Ge","He","Ie","Je","Ke","Le","Me","Ne","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","cf","df","ef","ff","gf","hf","jf","kf","lf","mf","nf","of","pf","qf","rf","sf","tf","uf","vf","wf","na","xa","$a","ba","xf","yf","zf","Af","Bf","Cf","Df","Ef","Ff","Gf","Hf","Jf","If","Kf","Lf","Mf","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","zg","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Hg","Ig","Jg","Kg","Lg","Mg","Ng","Og","Pg","Qg","Rg","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","hh","ih","jh","kh","lh","mh","nh","oh","ph","qh","rh","sh","th","uh","vh","wh","xh","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","di","ei","fi","gi","hi","ii","ji","ki","li","mi","ni","oi","pi","qi","ri","si","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","Ci","Di","Ei","Fi","Gi","Hi","Ii","Ji","Ki","Li","Mi","Ni","Oi","Pi","Qi","Ri","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","aj","bj","cj","dj","ej","fj","gj","hj","ij","jj","kj","lj","mj","nj","oj","pj","qj","rj","sj","tj","uj","vj","wj","xj","yj","zj","Aj","Bj","Cj","Dj","Ej","Fj","Gj","Hj","Ij","Jj","Kj","Lj","Mj","Nj","Oj","Pj","Qj","Rj","Sj","Tj","Uj","Vj","Wj","Xj","Yj","Zj","ak","bk","ck","dk","ek","fk","gk","hk","ik","jk","kk","lk","mk","nk","ok","Y","Z","pk","qk","rk","sk","tk","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","Ek","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","Pk","Qk","Rk","Sk","Tk","Uk","Vk","Wk","Xk","Yk","Zk","$k","al","bl","cl","dl","el","fl","gl","hl","il","jl","kl","ll","ml","nl","ol","pl","ql","rl","sl","tl","ul","vl","reactDom_production_min","checkDCE","err","reactDomModule","createRoot","TOAST_LIMIT","TOAST_REMOVE_DELAY","count","genId","toastTimeouts","addToRemoveQueue","toastId","timeout","dispatch","reducer","state","action","toast","listeners","memoryState","listener","props","update","dismiss","open","useToast","setState","React.useState","React.useEffect","index","composeEventHandlers","originalEventHandler","ourEventHandler","checkForDefaultPrevented","event","setRef","ref","value","composeRefs","refs","node","useComposedRefs","React.useCallback","createContextScope","scopeName","createContextScopeDeps","defaultContexts","createContext3","rootComponentName","defaultContext","BaseContext","React.createContext","Provider","scope","children","context","Context","React.useMemo","jsx","useContext2","consumerName","React.useContext","createScope","scopeContexts","contexts","composeContextScopes","scopes","baseScope","scopeHooks","createScope2","overrideScopes","nextScopes","nextScopes2","useScope","currentScope","Slot","React.forwardRef","forwardedRef","slotProps","childrenArray","React.Children","slottable","isSlottable","newElement","newChildren","child","React.isValidElement","SlotClone","React.cloneElement","childrenRef","getElementRef","mergeProps","Slottable","Fragment","childProps","overrideProps","propName","slotPropValue","childPropValue","args","element","getter","_a","mayWarn","_b","createCollection","name","PROVIDER_NAME","createCollectionContext","createCollectionScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","React","itemMap","COLLECTION_SLOT_NAME","CollectionSlot","composedRefs","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","NODES","Primitive","primitive","Node","asChild","primitiveProps","Comp","dispatchDiscreteCustomEvent","target","ReactDOM.flushSync","useCallbackRef","callback","callbackRef","React.useRef","useEscapeKeydown","onEscapeKeyDownProp","ownerDocument","onEscapeKeyDown","handleKeyDown","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","DismissableLayer","disableOutsidePointerEvents","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","setNode","force","node2","layers","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","isBodyPointerEventsDisabled","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","branch","focusOutside","useFocusOutside","dispatchUpdate","handleUpdate","BRANCH_NAME","DismissableLayerBranch","handlePointerDownOutside","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent2","handleAndDispatchCustomEvent","eventDetail","timerId","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","handler","detail","discrete","Root","Branch","useLayoutEffect2","React.useLayoutEffect","PORTAL_NAME","Portal","containerProp","portalProps","mounted","setMounted","useLayoutEffect","container","ReactDOM","useStateMachine","initialState","machine","React.useReducer","Presence","present","presence","usePresence","React2.Children","React2.cloneElement","React2.useState","stylesRef","React2.useRef","prevPresentRef","prevAnimationNameRef","send","React2.useEffect","currentAnimationName","getAnimationName","styles","wasPresent","prevAnimationName","handleAnimationEnd","isCurrentAnimation","handleAnimationStart","React2.useCallback","useControllableState","prop","defaultProp","onChange","uncontrolledProp","setUncontrolledProp","useUncontrolledState","isControlled","handleChange","setValue","nextValue","value2","uncontrolledState","prevValueRef","NAME","VisuallyHidden","Collection","createToastContext","createToastScope","ToastProviderProvider","useToastProviderContext","ToastProvider","__scopeToast","label","duration","swipeDirection","swipeThreshold","viewport","setViewport","toastCount","setToastCount","isFocusedToastEscapeKeyDownRef","isClosePausedRef","prevCount","VIEWPORT_NAME","VIEWPORT_DEFAULT_HOTKEY","VIEWPORT_PAUSE","VIEWPORT_RESUME","ToastViewport","hotkey","viewportProps","getItems","wrapperRef","headFocusProxyRef","tailFocusProxyRef","hotkeyLabel","hasToasts","key","wrapper","handlePause","pauseEvent","handleResume","resumeEvent","handleFocusOutResume","handlePointerLeaveResume","getSortedTabbableCandidates","tabbingDirection","tabbableCandidates","toastItem","toastNode","toastTabbableCandidates","getTabbableCandidates","isMetaKey","focusedElement","isTabbingBackwards","sortedCandidates","candidate","focusFirst","_c","jsxs","DismissableLayer.Branch","FocusProxy","FOCUS_PROXY_NAME","onFocusFromOutsideViewport","proxyProps","prevFocusedElement","TOAST_NAME","TOAST_SWIPE_START","TOAST_SWIPE_MOVE","TOAST_SWIPE_CANCEL","TOAST_SWIPE_END","Toast","forceMount","openProp","defaultOpen","onOpenChange","toastProps","setOpen","ToastImpl","ToastInteractiveProvider","useToastInteractiveContext","type","durationProp","onClose","onPause","onResume","onSwipeStart","onSwipeMove","onSwipeCancel","onSwipeEnd","pointerStartRef","swipeDeltaRef","closeTimerStartTimeRef","closeTimerRemainingTimeRef","closeTimerRef","onToastAdd","onToastRemove","handleClose","startTimer","duration2","elapsedTime","announceTextContent","getAnnounceTextContent","ToastAnnounce","ReactDOM.createPortal","DismissableLayer.Root","hasSwipeMoveStarted","isHorizontalSwipe","clamp","clampedX","clampedY","moveStartBuffer","delta","isDeltaInDirection","event2","announceProps","renderAnnounceText","setRenderAnnounceText","isAnnounced","setIsAnnounced","useNextFrame","timer","TITLE_NAME","ToastTitle","titleProps","DESCRIPTION_NAME","ToastDescription","descriptionProps","ACTION_NAME","ToastAction","altText","actionProps","ToastAnnounceExclude","ToastClose","CLOSE_NAME","closeProps","interactiveContext","announceExcludeProps","textContent","isHTMLElement","isHidden","isExcluded","currentTarget","direction","threshold","deltaX","deltaY","isDeltaX","fn","raf1","raf2","nodes","walker","isHiddenInput","candidates","previouslyFocusedElement","Viewport","Root2","Title","Description","Action","Close","o","clsx","falsyToString","cx","cva","base","config","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","toKebabCase","string","mergeClasses","classes","className","array","defaultAttributes","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","iconNode","rest","createElement","tag","attrs","createLucideIcon","iconName","Component","ArrowLeft","BookOpen","ChevronDown","CircleCheckBig","CircleHelp","CircleX","Clipboard","Clock","ExternalLink","Flame","Heart","House","LoaderCircle","MapPin","Menu","Mic","PhoneOff","Phone","Shield","TriangleAlert","User","Users","CLASS_PART_SEPARATOR","createClassGroupUtils","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","property","theme","prefix","getPrefixedClassGroupEntries","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","path","currentClassPartObject","pathPart","func","classGroupEntries","prefixedClassGroup","createLruCache","maxCacheSize","cacheSize","cache","previousCache","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","classGroupsInConflict","classNames","result","originalClassName","variantModifier","modifierId","classId","conflictGroups","i","group","twJoin","argument","resolvedValue","toValue","mix","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitraryNumber","isInteger","isPercent","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","testValue","getDefaultConfig","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","twMerge","cn","inputs","ToastPrimitives.Provider","ToastPrimitives.Viewport","toastVariants","ToastPrimitives.Root","ToastPrimitives.Action","ToastPrimitives.Close","ToastPrimitives.Title","ToastPrimitives.Description","Toaster","toasts","title","description","t.createContext","j","t.useContext","t.memo","$","t.createElement","Ct","s","$t","_t","Wt","Ut","Ft","It","Dt","kt","ct","ut","Ot","Vt","Kt","Xt","ft","qt","Qt","Zt","yt","xt","vt","wt","Tt","St","Rt","Et","Nt","Pt","tt","et","ot","at","nt","st","rt","_","Mt","At","Lt","mt","pt","gt","zt","ht","bt","jt","lt","Yt","dt","Bt","Ht","Gt","useTheme","Sonner","useReactId","useId","deterministicId","setId","reactId","sides","min","max","round","floor","createCoords","oppositeSideMap","oppositeAlignmentMap","start","end","evaluate","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","getSideList","side","isStart","lr","getOppositeAxisPlacements","flipAlignment","list","expandPaddingObject","getPaddingObject","rectToClientRect","rect","width","height","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","computePosition","strategy","middleware","platform","validMiddleware","statefulPlacement","middlewareData","resetCount","nextX","nextY","data","reset","detectOverflow","options","_await$platform$isEle","elements","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","offset","shouldAddOffset","alignmentOffset","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflow","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","resetPlacement","_overflowsData$filter2","currentSideAxis","getSideOffsets","isAnySideFullyClipped","hide","offsets","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","limitShift","rawOffset","computedOffset","len","limitMin","limitMax","_middlewareData$offse2","isOriginSide","_state$middlewareData","_state$middlewareData2","apply","heightSide","widthSide","maximumClippingHeight","maximumClippingWidth","overflowAvailableHeight","overflowAvailableWidth","noShift","availableHeight","availableWidth","xMin","xMax","yMin","yMax","nextDimensions","hasWindow","getNodeName","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","isTableElement","isTopLayer","selector","isContainingBlock","elementOrCss","webkit","isWebKit","css","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","left","top","convertOffsetParentRelativeRectToViewportRelativeRect","documentElement","topLayer","scroll","isOffsetParentAnElement","offsetRect","getClientRects","getWindowScrollBarX","leftScroll","getDocumentRect","html","body","getViewportRect","visualViewport","visualViewportBased","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstClippingAncestor","clippingRect","accRect","getDimensions","getRectRelativeToOffsetParent","htmlX","htmlY","htmlRect","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","observeMove","onMove","io","timeoutId","root","cleanup","_io","refresh","skip","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","entries","ratio","autoUpdate","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","size$1","hide$1","arrow$1","limitShift$1","mergedOptions","platformWithCache","computePosition$1","useEffect","deepEqual","keys","getDPR","roundByDPR","dpr","useLatestRef","useFloating","externalReference","externalFloating","transform","whileElementsMounted","setData","latestMiddleware","setLatestMiddleware","_reference","_setReference","_floating","_setFloating","setReference","referenceRef","setFloating","floatingRef","floatingEl","dataRef","hasWhileElementsMounted","whileElementsMountedRef","platformRef","openRef","fullData","isMountedRef","floatingStyles","initialStyles","isRef","arrow$2","deps","Arrow","arrowProps","useSize","setSize","entry","borderSizeEntry","borderSize","POPPER_NAME","createPopperContext","createPopperScope","PopperProvider","usePopperContext","ANCHOR_NAME","PopperAnchor","__scopePopper","virtualRef","anchorProps","CONTENT_NAME","PopperContentProvider","useContentContext","PopperContent","sideOffset","align","alignOffset","arrowPadding","avoidCollisions","collisionBoundary","collisionPaddingProp","sticky","hideWhenDetached","updatePositionStrategy","onPlaced","contentProps","content","setContent","setArrow","arrowSize","arrowWidth","arrowHeight","desiredPlacement","collisionPadding","hasExplicitBoundaries","isNotNull","isPositioned","anchorWidth","anchorHeight","contentStyle","floatingUIarrow","transformOrigin","placedSide","placedAlign","getSideAndAlignFromPlacement","handlePlaced","arrowX","arrowY","cannotCenterArrow","contentZIndex","setContentZIndex","_d","_e","_f","ARROW_NAME","OPPOSITE_SIDE","PopperArrow","contentContext","baseSide","ArrowPrimitive.Root","isArrowHidden","noArrowAlign","arrowXCenter","arrowYCenter","Anchor","Content","ownerWindow","currentFillMode","createTooltipContext","createTooltipScope","usePopperScope","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","TooltipProvider","__scopeTooltip","delayDuration","skipDelayDuration","disableHoverableContent","isOpenDelayed","setIsOpenDelayed","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","inTransit","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","TRIGGER_NAME","TooltipTrigger","triggerProps","providerContext","popperScope","isPointerDownRef","hasPointerMoveOpenedRef","handlePointerUp","PopperPrimitive.Anchor","PortalProvider","usePortalContext","TooltipContent","portalContext","TooltipContentImpl","TooltipContentHoverable","pointerGraceArea","setPointerGraceArea","trigger","onPointerInTransitChange","handleRemoveGraceArea","handleCreateGraceArea","hoverTarget","exitPoint","exitSide","getExitSideFromRect","paddedExitPoints","getPaddedExitPoints","hoverTargetPoints","getPointsFromRect","graceArea","getHull","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","pointerPosition","hasEnteredTarget","isPointerOutsideGraceArea","isPointInPolygon","VisuallyHiddenContentContextProvider","useVisuallyHiddenContentContext","ariaLabel","handleScroll","PopperPrimitive.Content","VisuallyHiddenPrimitive.Root","TooltipArrow","PopperPrimitive.Arrow","point","bottom","right","polygon","inside","points","newPoints","getHullPresorted","upperHull","lowerHull","Content2","TooltipPrimitive.Provider","TooltipPrimitive.Content","Subscribable","isServer","noop","functionalUpdate","updater","input","isValidTimeout","timeUntilStale","updatedAt","staleTime","resolveStaleTime","query","resolveEnabled","enabled","matchQuery","filters","exact","fetchStatus","predicate","queryKey","stale","hashQueryKeyByOptions","partialMatchKey","isActive","matchMutation","mutation","status","mutationKey","hashKey","val","isPlainObject","replaceEqualDeep","isPlainArray","aItems","aSize","bItems","bSize","copy","equalItems","hasObjectPrototype","ctor","prot","sleep","resolve","replaceData","prevData","addToEnd","items","item","newItems","addToStart","skipToken","ensureQueryFn","fetchOptions","FocusManager","__privateAdd","_focused","_cleanup","_setup","__privateSet","onFocus","__privateGet","setup","focused","isFocused","focusManager","OnlineManager","_online","onOnline","onlineListener","offlineListener","online","onlineManager","defaultRetryDelay","failureCount","canFetch","networkMode","CancelledError","isCancelledError","createRetryer","isRetryCancelled","isResolved","continueFn","promiseResolve","promiseReject","promise","outerResolve","outerReject","cancel","cancelOptions","reject","cancelRetry","continueRetry","canContinue","canStart","pause","continueResolve","run","promiseOrValue","initialPromise","error","retry","retryDelay","delay","shouldRetry","createNotifyManager","queue","transactions","notifyFn","batchNotifyFn","scheduleFn","schedule","flush","originalQueue","notifyManager","Removable","_gcTimeout","newGcTime","Query","_Query_instances","_initialState","_revertState","_cache","_retryer","_defaultOptions","_abortSignalConsumed","getDefaultState","newData","__privateMethod","dispatch_fn","setStateOptions","observer","abortController","addSignalProperty","object","fetchFn","queryFn","queryFnContext","onError","fetchState","hasData","initialDataUpdatedAt","QueryCache","_queries","client","queryHash","queryInMap","defaultedFilters","queries","Mutation","_Mutation_instances","_observers","_mutationCache","variables","restored","isPaused","_h","_g","_j","_i","_l","_k","_n","_m","_p","_o","_r","_q","_s","MutationCache","_mutations","_mutationId","__privateWrapper","scopeFor","mutations","firstPendingMutation","foundMutation","pausedMutations","infiniteQueryBehavior","pages","oldPages","oldPageParams","currentPage","cancelled","fetchPage","previous","page","maxPages","addTo","pageParamFn","getPreviousPageParam","getNextPageParam","oldData","remainingPages","pageParams","lastIndex","QueryClient","_queryCache","_queryDefaults","_mutationDefaults","_mountCount","_unsubscribeFocus","_unsubscribeOnline","cachedData","defaultedOptions","queryCache","refetchFilters","defaultedCancelOptions","promises","defaults","queryDefault","QueryClientContext","QueryClientProvider","_extends","source","PopStateEventType","createBrowserHistory","createBrowserLocation","window","globalHistory","pathname","search","hash","createLocation","createBrowserHref","to","createPath","getUrlBasedHistory","invariant","message","warning","cond","createKey","getHistoryState","location","current","parsePath","parsedPath","hashIndex","searchIndex","getLocation","createHref","validateLocation","v5Compat","getIndex","handlePop","history","push","historyState","url","replace","createURL","href","ResultType","matchRoutes","routes","locationArg","basename","matchRoutesImpl","allowPartial","stripBasename","branches","flattenRoutes","rankRouteBranches","matches","decoded","decodePath","matchRouteBranch","parentsMeta","parentPath","flattenRoute","route","relativePath","meta","joinPaths","routesMeta","computeScore","_route$path","exploded","explodeOptionalSegments","segments","first","isOptional","required","restExploded","subpath","compareIndexes","paramRe","dynamicSegmentValue","indexRouteValue","emptySegmentValue","staticSegmentValue","splatPenalty","isSplat","initialScore","score","segment","matchedParams","matchedPathname","remainingPathname","match","matchPath","normalizePathname","pattern","matcher","compiledParams","compilePath","pathnameBase","captureGroups","memo","paramName","splatValue","caseSensitive","params","regexpSource","startIndex","nextChar","resolvePath","fromPathname","toPathname","resolvePathname","normalizeSearch","normalizeHash","getInvalidPathError","char","field","dest","getPathContributingMatches","getResolveToMatches","v7_relativeSplatPath","pathMatches","idx","resolveTo","toArg","routePathnames","locationPathname","isPathRelative","isEmptyPath","from","routePathnameIndex","toSegments","hasExplicitTrailingSlash","hasCurrentTrailingSlash","paths","isRouteErrorResponse","validMutationMethodsArr","validRequestMethodsArr","DataRouterContext","DataRouterStateContext","NavigationContext","LocationContext","RouteContext","RouteErrorContext","useHref","_temp","relative","useInRouterContext","UNSAFE_invariant","navigator","useResolvedPath","joinedPathname","useLocation","useIsomorphicLayoutEffect","useNavigate","isDataRoute","useNavigateStable","useNavigateUnstable","dataRouterContext","future","routePathnamesJson","UNSAFE_getResolveToMatches","activeRef","_temp2","useRoutes","useRoutesImpl","dataRouterState","parentMatches","routeMatch","parentParams","parentPathnameBase","locationFromContext","_parsedLocationArg$pa","parsedLocationArg","parentSegments","renderedMatches","_renderMatches","React.createElement","DefaultErrorComponent","useRouteError","stack","preStyles","React.Fragment","defaultErrorElement","RenderErrorBoundary","React.Component","errorInfo","RenderedRoute","routeContext","_dataRouterState","_future","errors","errorIndex","renderFallback","fallbackIndex","loaderData","needsToRunLoader","outlet","shouldRenderHydrateFallback","errorElement","hydrateFallbackElement","getChildren","DataRouterHook","DataRouterStateHook","useDataRouterContext","hookName","ctx","useDataRouterState","useRouteContext","useCurrentRouteId","thisRoute","_state$errors","routeId","router","Route","_props","Router","_ref5","basenameProp","locationProp","navigationType","staticProp","navigationContext","locationContext","trailingPathname","Routes","_ref6","createRoutesFromChildren","treePath","_objectWithoutPropertiesLoose","excluded","sourceKeys","isModifiedEvent","shouldProcessLinkClick","_excluded","REACT_ROUTER_VERSION","START_TRANSITION","startTransitionImpl","BrowserRouter","_ref4","historyRef","setStateImpl","v7_startTransition","newState","isBrowser","ABSOLUTE_URL_REGEX","Link","_ref7","onClick","reloadDocument","preventScrollReset","unstable_viewTransition","UNSAFE_NavigationContext","absoluteHref","isExternal","currentUrl","targetUrl","internalOnClick","useLinkClickHandler","handleClick","replaceProp","navigate","hasElementType","hasMap","hasSet","hasArrayBuffer","equal","it","reactFastCompare","condition","format","argIndex","browser","shallowequal","objA","objB","compare","compareContext","ret","keysA","keysB","bHasOwnProperty","valueA","valueB","TAG_NAMES","TAG_NAMES2","SEO_PRIORITY_TAGS","VALID_TAG_NAMES","REACT_TAG_MAP","HTML_TAG_MAP","carry","HELMET_ATTRIBUTE","HELMET_PROPS","getInnermostProperty","propsList","getTitleFromPropsList","innermostTitle","innermostTemplate","innermostDefaultTitle","getOnChangeClientState","getAttributesFromPropsList","tagType","tagAttrs","getBaseTagFromPropsList","primaryAttributes","innermostBaseTag","lowerCaseAttributeKey","warn","msg","getTagsFromPropsList","tagName","approvedSeenTags","approvedTags","instanceTags","instanceSeenTags","primaryAttributeKey","keys2","attributeKey","tagUnion","getAnyTrueFromPropsList","checkedTag","reducePropsToState","flattenArray","possibleArray","checkIfPropsMatch","toMatch","prioritizer","elementsList","propsToMatch","elementAttrs","without","obj","SELF_CLOSING_TAGS","encodeSpecialCharacters","str","encode","generateElementAttributesAsString","attributes","attr","generateTitleAsString","attributeString","flattenedTitle","generateTagsAsString","tags","attributeHtml","attribute","tagContent","isSelfClosing","convertElementAttributesToReactProps","initProps","mapped","generateTitleAsReactComponent","_type","generateTagsAsReactComponent","mappedTag","mappedAttribute","getMethodsForTag","getPriorityMethods","metaTags","linkTags","scriptTags","link","script","mapStateOnServer","baseTag","bodyAttributes","htmlAttributes","noscriptTags","styleTags","titleAttributes","prioritizeSeoTags","priorityMethods","server_default","instances","isDocument","HelmetData","canUseDOM","__publicField","serverState","instance","defaultValue","React2","HelmetProvider","updateTags","headElement","tagNodes","oldTags","newTags","indexToDelete","existingTag","updateAttributes","elementTag","helmetAttributeString","helmetAttributes","attributesToRemove","attributeKeys","indexToSave","updateTitle","commitTagChanges","onChangeClientState","tagUpdates","addedTags","removedTags","_helmetCallback","handleStateChangeOnClient","client_default","HelmetDispatcher","Component2","nextProps","shallowEqual","helmetInstances","setHelmet","Helmet","Component3","fastCompare","nestedChildren","arrayTypeChildren","newChildProps","newProps","newFlattenedProps","arrayChildName","nestedChild","React3","helmetData","version","initQueue","detectEnvironment","env","setMode","mode","getMode","isDevelopment","getScriptSrc","inject","src","errorMessage","pageview","getBasePath","define_process_env_default","Analytics","isJsonObject","assertJsonObject","extractApiErrorMessage","response","rawDetail","SessionConnectionError","HTTPS_API_ORIGIN","uploadFile","conversationId","rawOrigin","file","filenameOverride","origin","filename","file_id","CALLBACK_KEYS","END_CALL_DETAILS","isTextOnly","textOnlyOverride","textOnly","BaseConversation","connection","details","parsedEvent","partialOptions","canSendFeedback","formattedResult","_event","errorEvent","errorType","like","eventId","text","toolCallId","isApproved","deepMerge","objects","accVal","objVal","mergeOptions","configs","parseLocation","getOriginForLocation","getLivekitUrlForLocation","PACKAGE_VERSION","sourceInfo","setSourceInfo","BaseConnection","info","parseFormat","formatPart","sampleRatePart","sampleRate","isValidSocketEvent","_mergeNamespaces","assert","FLOAT32_MAX","FLOAT32_MIN","UINT32_MAX","INT32_MAX","INT32_MIN","assertInt32","arg","assertUInt32","assertFloat32","enumTypeSymbol","getEnumType","enumObject","setEnumType","typeName","values","opt","makeEnumType","_opt","names","numbers","normalValues","normalizeEnumValue","no","makeEnum","Message","other","bytes","jsonValue","jsonString","json","bin","writer","makeMessageType","runtime","fields","localName","varint64read","lowBits","highBits","middleByte","varint64write","lo","hasNext","byte","splitBits","hasMoreBits","TWO_PWR_32_DBL","int64FromString","dec","minus","add1e6digit","begin","digit1e6","negate","newBits","int64ToString","bits","negative","uInt64ToString","toUnsigned","low","mid","high","digitA","digitB","digitC","decimalFrom1e7WithLeadingZeros","digit1e7","partial","varint32write","varint32read","readBytes","makeInt64Support","dv","MIN","MAX","UMIN","UMAX","assertInt64String","assertUInt64String","protoInt64","ScalarType","LongType","scalarEquals","scalarZeroValue","longType","isScalarZeroValue","WireType","BinaryWriter","textEncoder","chunk","prev","fieldNo","view","sign","BinaryReader","buf","textDecoder","wireType","zze","makeExtension","extendee","createExtensionContainer","extension","initExtensionField","ext","filterUnknownFields","unknownFields","encTable","decTable","protoBase64","base64Str","es","bytePos","groupPos","base64","getExtension","assertExtendee","ufs","get","setExtension","readOpt","writeOpt","hasExtension","reader","messageType","isFieldSet","clearField","implicitPresence","isMessage","actualType","wrapField","jsonReadDefaults","jsonWriteDefaults","makeReadOptions$1","makeWriteOptions$1","tokenNull","tokenIgnoredUnknownEnum","makeJsonFormat","debugJsonValue","oneofSeen","registry","jsonKey","seen","readField$1","found","canEmitFieldDefaultValue","writeField$1","readScalar$1","emitDefaultValues","writeScalar$1","parentType","targetArray","jsonItem","enumValue","readEnum","targetMap","jsonMapKey","jsonMapValue","readMapKey","currentValue","scalarValue","nullAsZeroValue","float","int32","long","uLong","ignoreUnknownFields","jsonObj","entryKey","entryValue","enumType","writeEnum","jsonArr","enumAsInteger","unknownFieldsSymbol","readDefaults","writeDefaults","makeReadOptions","makeWriteOptions","makeBinaryFormat","lengthOrEndTagFieldNo","delimitedMessageEncoding","readField","writeField","repeated","scalarType","read","readScalar","readScalarLTString","arr","readMessageField","mapKey","mapVal","readMapEntry","delimited","writePacked","writeScalar","writeMapEntry","keyValue","writeMessageField","method","scalarTypeInfo","makeUtilCommon","member","sourceField","toU8Arr","any","cloneSingularField","makeProtoRuntime","syntax","newFieldList","initFields","InternalFieldList","normalizer","jsonName","localFieldName","protoName","inOneof","protoCamelCase","safeObjectProperty","safeMessageProperty","localOneofName","fieldJsonName","snakeCase","capNext","reservedObjectProperties","reservedMessageProperties","fallback","InternalOneofInfo","normalizeFieldInfos","fieldInfos","packedByDefault","ooname","proto3","Timestamp","ms","nanosStr","date","MetricsBatch","TimeSeriesMetric","EventMetric","MetricSample","BackupCodecPolicy$1","TrackType","TrackSource","VideoQuality$1","ConnectionQuality$1","ClientConfigSetting","DisconnectReason","ReconnectReason","SubscriptionError","AudioTrackFeature","Room$1","Codec","TimedVersion","ParticipantPermission","ParticipantInfo","ParticipantInfo_State","TrackInfo","ParticipantInfo_Kind","ParticipantInfo_KindDetail","Encryption_Type","SimulcastCodecInfo","VideoLayer","VideoLayer_Mode","DataPacket","DataPacket_Kind","UserPacket","ActiveSpeakerUpdate","SipDTMF","Transcription","ChatMessage","RpcRequest","RpcAck","RpcResponse","DataStream_Header","DataStream_Chunk","DataStream_Trailer","EncryptedPacket","EncryptedPacketPayload","SpeakerInfo","TranscriptionSegment","RpcError$1","ParticipantTracks","ServerInfo","ServerInfo_Edition","ClientInfo","ClientInfo_SDK","ClientConfiguration","VideoConfiguration","DisabledCodecs","DataStream_OperationType","DataStream_TextHeader","DataStream_ByteHeader","SubscribedAudioCodec","SignalTarget","StreamState","CandidateProtocol","SignalRequest","SessionDescription","TrickleRequest","AddTrackRequest","MuteTrackRequest","UpdateSubscription","UpdateTrackSettings","LeaveRequest","UpdateVideoLayers","SubscriptionPermission","SyncState","SimulateScenario","UpdateParticipantMetadata","Ping","UpdateLocalAudioTrack","UpdateLocalVideoTrack","SignalResponse","JoinResponse","ParticipantUpdate","TrackPublishedResponse","SpeakersChanged","RoomUpdate","ConnectionQualityUpdate","StreamStateUpdate","SubscribedQualityUpdate","SubscriptionPermissionUpdate","TrackUnpublishedResponse","ReconnectResponse","Pong","SubscriptionResponse","RequestResponse","TrackSubscribed","RoomMovedResponse","MediaSectionsRequirement","SubscribedAudioCodecUpdate","SimulcastCodec","ICEServer","LeaveRequest_Action","RegionSettings","ConnectionQualityInfo","StreamStateInfo","SubscribedQuality","SubscribedCodec","TrackPermission","DataChannelInfo","DataChannelReceiveState","RegionInfo","RequestResponse_Reason","ConnectionSettings","JoinRequest","WrappedJoinRequest","WrappedJoinRequest_Compression","getDefaultExportFromCjs","loglevel$1","loglevel","hasRequiredLoglevel","requireLoglevel","module","definition","undefinedType","isIE","logMethods","_loggersByName","defaultLogger","bindMethod","methodName","traceForIE","realMethod","replaceLoggingMethods","level","enableLoggingWhenConsoleArrives","defaultMethodFactory","_level","_loggerName","Logger","factory","self","inheritedLevel","defaultLevel","userLevel","storageKey","persistLevelIfPossible","levelNum","levelName","getPersistedLevel","storedLevel","cookie","cookieName","clearPersistedLevel","normalizeLevel","persist","childName","initialLevel","logger","_log","loglevelExports","LogLevel","LoggerNames","livekitLogger","getLogger","workerLogger","maxRetryDelay","DEFAULT_RETRY_DELAYS_IN_MS","DefaultReconnectPolicy","retryDelays","__rest","__awaiter","thisArg","_arguments","generator","adopt","fulfilled","step","rejected","__values","__asyncValues","verb","settle","events","hasRequiredEvents","requireEvents","ReflectApply","receiver","ReflectOwnKeys","ProcessEmitWarning","NumberIsNaN","EventEmitter","once","defaultMaxListeners","checkListener","_getMaxListeners","that","doError","er","arrayClone","_addListener","prepend","existing","onceWrapper","_onceWrap","wrapped","position","originalListener","spliceOne","_listeners","unwrap","evlistener","unwrapListeners","emitter","listenerCount","errorListener","resolver","eventTargetAgnosticAddListener","addErrorHandlerIfEventEmitter","flags","wrapListener","eventsExports","logDisabled_","deprecationWarnings_","extractVersion","uastring","expr","pos","wrapPeerConnectionEvent","eventNameToWrap","proto","nativeAddEventListener","nativeEventName","wrappedCallback","modifiedEvent","nativeRemoveEventListener","unwrappedCb","disableLog","bool","disableWarnings","log","deprecated","oldMethod","newMethod","detectBrowser","chromium","brand","isObject$1","compactObject","accumulator","isObj","isEmptyObject","walkStats","stats","resultSet","filterStats","track","outbound","streamStatsType","filteredResult","trackStats","trackStat","logging","shimGetUserMedia$2","browserDetails","constraintsToChrome_","oldname_","shimConstraints_","constraints","remap","face","getSupportedFacingModeLies","devices","dev","shimError_","getUserMedia_","onSuccess","origGetUserMedia","cs","stream","shimMediaStream","shimOnTrack$1","origSetRemoteDescription","shimGetSendersWithDtmf","shimSenderWithDtmf","origAddTrack","sender","origRemoveTrack","origAddStream","origRemoveStream","origGetSenders","senders","shimSenderReceiverGetStats","origGetReceivers","receivers","origGetStats","shimAddTrackRemoveTrackWithNative","streamId","existingSenders","newSenders","newSender","shimAddTrackRemoveTrack","origGetLocalStreams","nativeStreams","newStream","streams","oldStream","replaceInternalStreamId","sdp","internalId","externalStream","internalStream","replaceExternalStreamId","nativeMethod","methodObj","desc","origSetLocalDescription","origLocalDescription","streamid","shimPeerConnection$1","fixNegotiationNeeded","chromeShim","shimGetUserMedia$1","MediaStreamTrack","nativeGetUserMedia","nativeGetSettings","nativeApplyConstraints","shimGetDisplayMedia","preferredMediaSource","shimOnTrack","shimPeerConnection","modernStatsTypes","nativeGetStats","onSucc","onErr","stat","shimSenderGetStats","shimReceiverGetStats","shimRemoveStream","shimRTCDataChannel","shimAddTransceiver","origAddTransceiver","sendEncodings","shouldPerformCheck","encodingParam","transceiver","shimGetParameters","origGetParameters","shimCreateOffer","origCreateOffer","shimCreateAnswer","origCreateAnswer","firefoxShim","shimLocalStreamsAPI","_addTrack","_len","_key","tracks","shimRemoteStreamsAPI","shimCallbacksAPI","prototype","setLocalDescription","setRemoteDescription","addIceCandidate","successCallback","failureCallback","withCallback","shimGetUserMedia","mediaDevices","_getUserMedia","shimConstraints","errcb","shimRTCIceServerUrls","OrigPeerConnection","pcConfig","pcConstraints","newIceServers","server","shimTrackEventTransceiver","shimCreateOfferLegacy","offerOptions","audioTransceiver","videoTransceiver","shimAudioContext","safariShim","sdp$1","hasRequiredSdp","requireSdp","SDPUtils","blob","line","part","sections","parts","component","parsed","codec","channels","headerExtension","kv","lines","sp","colon","ssrc","mediaSection","sessionpart","setupType","fp","parameters","keyParams","ufrag","pwd","mline","rtpmapline","fmtps","wildcardRtcpFb","existingFeedback","kind","caps","maxptime","encodingParameters","hasRed","hasUlpfec","ssrcs","primarySsrc","secondarySsrc","flows","encParam","bandwidth","rtcpParameters","remoteSsrc","rsize","mux","spec","planB","msidParts","maxSizeLine","maxMessageSize","sctpPort","sctpMapLines","media","sctp","output","sessId","sessVer","sessUser","sessionId","sdpExports","shimRTCIceCandidate","NativeRTCIceCandidate","nativeCandidate","parsedCandidate","shimRTCIceCandidateRelayProtocol","shimMaxMessageSize","sctpInDescription","mLine","getRemoteFirefoxVersion","getCanSendMaxMessageSize","remoteIsFirefox","canSendMaxMessageSize","getMaxMessageSize","sdpSemantics","isFirefox","canSendMMS","remoteMMS","shimSendThrowTypeError","wrapDcSend","origDataChannelSend","origCreateDataChannel","dataChannel","shimConnectionState","origMethod","newEvent","removeExtmapAllowMixed","nativeSRD","shimAddIceCandidateNullOrEmpty","nativeAddIceCandidate","shimParameterlessSetLocalDescription","nativeSetLocalDescription","commonShim","adapterFactory","adapter","commonVersionIdentifier","getBrowser","userAgent","browsersList","test","getMatch","getOSVersion","exp","version$1","protocolVersion","LivekitError","code","ConnectionErrorReason","ConnectionError","reason","DeviceUnsupportedError","TrackInvalidError","UnsupportedServer","UnexpectedConnectionState","NegotiationError","PublishTrackError","SignalRequestError","DataStreamErrorReason","DataStreamError","SignalReconnectError","MediaDeviceFailure","getFailure","CriticalTimers","RoomEvent","ParticipantEvent","EngineEvent","TrackEvent","cloneDeep","VideoPreset","widthOrOptions","maxBitrate","maxFramerate","priority","backupVideoCodecs","videoCodecs","isBackupVideoCodec","backup","isBackupCodec","BackupCodecPolicy","AudioPresets","VideoPresets","VideoPresets43","ScreenSharePresets","mergeDefaultOptions","audioDefaults","videoDefaults","optionsWithoutProcessor","audioProcessor","videoProcessor","extractProcessorsFromOptions","defaultAudioProcessor","defaultVideoProcessor","clonedOptions","mergeObjectWithoutOverwriting","mainObject","objectToMerge","constraintsForOptions","videoOptions","detectSilence","track_1","timeOffset","getNewAudioContext","analyser","bufferLength","dataArray","someNoise","sample","AudioContext","audioContext","kindToSource","Track","sourceToKind","screenCaptureToDisplayMediaStreamOptions","videoConstraints","isSafari","mimeTypeToVideoCodecString","mimeType","getTrackPublicationInfo","infos","getLogContextFromTrack","supportsSynchronizationSources","diffAttributes","oldValues","newValues","allKeys","diff","newOptions","getTrackSourceFromProto","areDimensionsSmaller","layerDimensionsFor","trackInfo","quality","BACKGROUND_REACTION_DELAY","recycledElements","VideoQuality","mediaTrack","loggerOptions","elementType","attachToElement","allMediaStreamTracks","hasAudio","tr","detachTrack","detached","elm","shouldCache","isWeb","mediaStream","existingTracks","isFireFox","Kind","Source","StreamState$1","kindToProto","kindFromProto","sourceToProto","sourceFromProto","streamStateFromProto","ddExtensionURI","unpackStreamId","packed","supportsTransceiver","supportsAddTrack","supportsAV1","capabilities","hasAV1","supportsVP9","compareVersions","hasVP9","isSVCCodec","supportsSetSinkId","isSafariBased","isBrowserSupported","isChromiumBased","isSafari17Based","isSafariSvcApi","isMobile","isE2EESimulcastSupported","supportedSafariVersion","isReactNative","isCloud","serverUrl","extractProjectFromUrl","getLKReactNativeInfo","getReactNativeOs","getDevicePixelRatio","v1","v2","parts1","parts2","p1","p2","roDispatchCallback","ioDispatchCallback","getResizeObserver","intersectionObserver","getIntersectionObserver","getClientInfo","createDummyVideoStreamTrack","paintContent","canvas","dummyStream","dummyTrack","emptyAudioStreamTrack","getEmptyAudioStreamTrack","oscillator","gain","dst","Future","futureBase","onFinally","isVideoCodec","maybeCodec","unwrapConstraint","constraint","toWebsocketUrl","toHttpUrl","extractTranscriptionSegments","transcription","firstReceivedTimesMap","language","startTime","endTime","final","firstReceivedTime","lastReceivedTime","extractChatMessage","timestamp","editTimestamp","getDisconnectReasonFromConnectionError","bigIntToNumber","numberToBigInt","isLocalTrack","isAudioTrack","isVideoTrack","isLocalVideoTrack","isLocalAudioTrack","isRemoteTrack","isRemotePub","pub","isRemoteVideoTrack","isLocalParticipant","splitUtf8","encoded","extractMaxAgeFromRequestHeaders","headers","cacheControl","maxAge","createRtcUrl","searchParams","urlObj","appendUrlPath","createValidateUrl","rtcWsUrl","ensureTrailingSlash","parseSignalResponse","getAbortReasonAsString","signal","defaultMessage","DECRYPTION_FAILURE_TOLERANCE","E2EE_FLAG","SALT","KEY_PROVIDER_DEFAULTS","KeyProviderEvent","KeyHandlerEvent","EncryptionEvent","CryptorEvent","isE2EESupported","isInsertableStreamSupported","isScriptTransformSupported","asEncryptablePacket","packet","BaseKeyProvider","ratchetResult","participantId","keyIndex","participantIdentity","keyInfo","CryptorErrorReason","E2EEManager","dcEncryptionEnabled","ev","decryptFuture","encryptFuture","participant","room","trailer","engine","rtpMap","keyProvider","ConnectionState","publication","uuid","payload","iv","enableMsg","map","remoteId","trackId","writable","readable","receiverStreams","senderStreams","CONNECTION_BACKOFF_MIN_MS","CONNECTION_BACKOFF_MAX_MS","BackOffStrategy","urlString","projectName","defaultId","DeviceManager","kind_1","_this","requestPermissions","device","noLabel","isRelevant","permissionsToAcquire","deviceId","groupId","defaultDevice","QueueTaskStatus","AsyncQueue","task","taskInfo","unlock","WebSocketStream","ws","closeWithInfo","controller","rejectHandler","closePromise","res","closeEv","_ref2","passThroughQueueSignals","canPassThroughQueue","req","canPass","SignalConnectionState","MAX_WS_CLOSE_TIME","SignalClient","useJSON","token","opts","abortSignal","sid","clientInfo","createJoinRequestConnectionParams","createConnectionParams","rtcUrl","validateUrl","alreadyAborted","abortHandler","eventOrError","cleanupAbortHandlers","wsTimeout","handleSignalConnected","firstMessage","redactedUrl","closeInfo","signalReader","firstSignalResponse","validation","firstMessageToProcess","done","resp","updateState","offer","offerId","toProtoSessionDescription","answer","trackSid","muted","metadata_1","name_1","metadata","_this2","requestId","settings","sub","sync","allParticipants","trackPermissions","scenario","features","message_1","_this3","fromQueue","pingHandled","fromProtoSessionDescription","onCloseCallback","timeoutHandle","isReconnect","rsd","joinRequest","wrappedJoinRequest","DataPacketBuffer","sequence","bufferedAmount","TTLMap","ttl","now","expiresAt","valueMap","lib","parser","grammar","hasRequiredGrammar","requireGrammar","grammar$1","objs","hasRequiredParser","requireParser","exports$1","toIntIfInt","attachProperties","rawName","parseReg","needsBlank","keyLocation","validLine","session","paramReducer","scid","paused","hasRequiredWriter","requireWriter","formatRegExp","formatStr","makeLine","defaultOuterOrder","defaultInnerOrder","outerOrder","innerOrder","hasRequiredLib","requireLib","libExports","startBitrateForSVC","debounceInterval","PCEvents","PCTransport","mungedSDP","stereoMids","nackMids","extractStereoAndNackAudioFromOffer","sdpParsed","getMidString","trackbr","codecPayload","rtp","fmtpFound","fmtp","currentSD","ensureIPAddrMatchVersion","ensureAudioNackAndStereo","startBitrate","dataChannelDict","mediaStreamTrack","transceiverInit","rtcConfig","selectedCandidatePairId","candidatePairs","selectedID","munged","remote","originalSdp","maxID","opusPayload","isV6","defaultVideoCodec","publishDefaults","roomOptionDefaults","roomConnectOptionDefaults","PCTransportState","PCTransportManager","previousState","connectionStates","require","publisher","iceRestart","transport","negotiationTimeout","matchingTransceiver","transports","pcTransport_1","abortController_1","pcTransport","connectTimeout","DEFAULT_MAX_AGE_MS","STOP_REFETCH_DELAY_MS","RegionUrlProvider","regionSettingsResponse","getCloudConfigUrl","maxAgeInMs","newSettings","hostname","tracker","currentTracker","cachedSettings","regionsLeft","region","attempted","nextRegion","RpcError","truncateBytes","MAX_PAYLOAD_BYTES","byteLength","maxBytes","encoder","monitorFrequency","computeBitrate","currentStats","prevStats","bytesNow","bytesPrev","isMediaRecorderAvailable","FallbackRecorder","RecorderBase","LocalTrackRecorder","dataListener","streamController","isClosed","onStop","arrayBuffer","isRecordingSupported","DEFAULT_DIMENSIONS_TIMEOUT","PRE_CONNECT_BUFFER_TIMEOUT","LocalTrack","userProvidedTrack","newTrack","processedTrack","started","dims","normalize","userProvidedOrOptions","stopProcessor","facingMode","otherConstraints","streamConstraints","_super","processor_1","processor","showProcessedStreamLocally","processorElement","processorOptions","_this4","keepElement","_this5","timeslice","LocalAudioTrack","deviceHasChanged","audioStats","trackIsSilent","mediaTrackToLocalTrack","LocalVideoTrack","presets169","presets43","presetsScreenShare","defaultSimulcastPresets169","defaultSimulcastPresets43","computeDefaultScreenShareSimulcastPresets","fromPreset","videoRids","computeVideoEncodings","isScreenShare","videoEncoding","useSimulcast","scalabilityMode","videoCodec","determineAppropriateEncoding","sourceFramerate","original","sm","ScalabilityMode","encodings","bitratesRatio","requireScale","presets","sortPresets","defaultSimulcastLayers","midPreset","lowPreset","encodingsFromPresets","computeTrackBackupEncodings","presetsForResolution","encoding","preset","aspect","canSetPriority","topFramerate","notifyOnce","aEnc","bEnc","results","getDefaultDegradationPreference","refreshSubscribedCodecAfterNewCodec","statsMap","isCpuConstrained","totalBitrate","signalClient","e_1","e_1_1","e_2","e_2_1","vs","maxQuality","qualities","e_3","e_3_1","e_4","e_4_1","preference","simulcastCodecInfo","codecs","codecs_1","codecs_1_1","e_5","newCodecs","setPublishingLayersForSender","e_5_1","isSvc","senderEncodings","senderLock","isSVC","logContext","hasChanged","rid","videoQualityForRid","subscribedQuality","videoLayersFromEncodings","svc","encodingSM","resRatio","lossyDataChannel","reliableDataChannel","minReconnectWait","leaveReconnect","reliabeReceiveStateTTL","lossyDataChannelBufferThresholdMin","lossyDataChannelBufferThresholdMax","PCState","RTCEngine","channel","buffer","dp","lastSeq","decryptedData","decryptedPacket","newDp","applyUserDataCompat","channelKind","disconnectReason","disconnect","onRestarted","onDisconnected","updates","joinResponse","dcCleanup","publicationTimeout","provider","connectionState","publisherState","subscriberState","shouldEmit","isSignalSevered","isPCSevered","supportOptionalDatachannel","midToTrackId","requirement","leave","serverResponse","rtcIceServers","iceServer","rtcIceServer","simulcastTrack","recoverable","regionUrl","nextRegionUrl","destinationIdentity","encryptablePacket","encryptedData","lastMessageSeq","onClosing","subscriber","transportName","needNegotiation","targetChannel","handleClosed","rtpTypes","remoteTracks","localTracks","previousPublisherOffer","previousPublisherAnswer","previousSubscriberOffer","previousSubscriberAnswer","autoSubscribe","trackSids","trackSidsDisabled","seq","getInfo","protocol","newObj","oldObj","destinationIdentities","BaseStreamReader","doneReceiving","totalByteSize","outOfBandFailureRejectingFuture","ByteStreamReader","currentProgress","rejectingSignalFuture","activeSignal","onAbort","chunks","iterator","iterator_1","iterator_1_1","TextStreamReader","totalChunkCount","previousChunkAtIndex","decoder","decodedResult","finalString","iterator_2","iterator_2_1","IncomingDataStreamManager","topic","textStreamsBeingSentByDisconnectingParticipant","byteStreamsBeingSentByDisconnectingParticipant","abnormalEndError","encryptionType","streamHeader","streamHandlerCallback","fileBuffer","textBuffer","BaseStreamWriter","writableStream","TextStreamWriter","ByteStreamWriter","STREAM_CHUNK_SIZE","OutgoingDataStreamManager","totalTextLength","fileIds","progresses","handleProgress","progress","totalProgress","header","chunkId","textByteChunk","chunkPacket","trailerPacket","onEngineClose","writeMutex","logLocal","byteOffset","subChunk","RemoteTrack","onRemoveTrack","delayInSeconds","loop","sources","rtpTimestamp","RemoteAudioTrack","audioOutput","volume","highestVolume","needsNewWebAudioConnection","lastNode","receiverStats","REACTION_DELAY","RemoteVideoTrack","adaptiveStreamSettings","elementInfo","HTMLElementInfo","stopElementInfos","detachedElements","codecID","forceEmit","lastVisibilityChange","backgroundPause","isPiPMode","isVisible","maxWidth","maxHeight","pixelDensity","currentElementWidth","currentElementHeight","visible","isIntersecting","isElementInPiP","isElementInViewport","viewportWindow","hidden","TrackPublication","SubscriptionStatus","PermissionStatus","LocalTrackPublication","createLocalTracks","attemptExactMatch","internalOptions","retryAudioOptions","retryVideoOptions","mediaPromise","isAudio","trackOptions","trackConstraints","conOrBool","newDeviceId","createLocalVideoTrack","createLocalAudioTrack","ConnectionQuality","qualityFromProto","Participant","identity","changed","prevMetadata","permissions","prevPermissions","speaking","prevQuality","trackPermissionToProto","perms","LocalParticipant","roomRpcHandlers","roomOutgoingDataStreamManager","targetRequest","rpcResponse","rpcAck","newCodecs_1","newCodecs_1_1","unpublished","currentPermissions","isRejected","publishOptions","pendingTrack","localTrack","publishPromises","screenAudioTrack","mergedOptionsWithProcessors","screenVideo","screenAudio","options_1","isRepublish","defaultConstraints","deviceKind","existingPublication","isStereoInput","isStereo","publishPromise","publicationTimedOut","canPublish","canPublishSources","publishedTrack","audioFeatures","disableDtx","defaultRes","negotiate","trackTransceiver","addTrackPromise","negotiateErr","primaryCodecMime","updatedCodec","constrainedTrack","agentActiveTimeout","agent","stream_1","stream_1_1","stopOnUnpublish","pubLogContext","negotiationNeeded","trackSender","restartTracks","localPubs","data_1","userPacket","digit","editText","originalMessage","_ref3","responseTimeout","effectiveTimeout","ackTimeoutId","responseTimeoutId","responsePayload","responseError","allParticipantsAllowed","participantTrackPermissions","pendingIdentity","mutedOnServer","publishPromiseEntry","RemoteTrackPublication","dimensions","subscribed","prevStatus","prevPermission","fps","prevTrack","allowed","prevMetadataMuted","previousStatus","currentStatus","previousPermissionStatus","minDimensions","maxQualityLayer","RemoteParticipant","previousTrack","audioPublication","triesLeft","isVideo","validTracks","newTracks","existingTrackOfSource","sendUnpublish","CONNECTION_RECONCILE_FREQUENCY_MS","Room","unlockDisconnect","connectFn","nextUrl","regionFetchError","connectOptions","roomOptions","serverInfo","resultingError","args_1","stopTracks","audioId","dummyAudioEl","participantInfos","remoteParticipant","speakers","activeSpeakers","seenSids","speaker","speakerUpdates","lastSpeakers","streamStateUpdate","streamState","newStreamState","rpc","dtmf","_remoteParticipant","chatMessage","metrics","oldRoom","changedAttributes","e2eeOptions","handleRoomUpdate","roomInfo","subscribedSid","trackPublication","roomMoved","postAction","onLeave","deviceId_1","success","shouldTriggerImmediateDeviceChange","deviceConstraint","prevDeviceId","isMuted","reconnectedHandler","participantSid","shouldStopTracks","callerIdentity","previousDevices","availableDevices","availableDevice","previousDevice","kinds","targetSource","targetPublication","devicesOfKind","activeDevice","deviceInfo","newContextIsRunning","existingParticipant","consecutiveFailures","_len2","_key2","participantOptions","camPub","audioPub","dummyVideo","videoTrack","audioTrack","_len3","_key3","minimizedArgs","mapArgs","CheckStatus","Checker","onComplete","hasReconnecting","hasReconnected","CloudRegionCheck","regionProvider","regionStats","seenUrls","bestRegion","chunkSize","numChunks","chunkData","TEST_DURATION","ConnectionProtocolCheck","udpStats","tcpStats","hue","animate","protocolStats","interval","PublishAudioCheck","numPackets","PublishVideoCheck","video","isAllBlack","ReconnectCheck","reconnectingTriggered","reconnected","reconnectResolver","reconnectTimeout","handleReconnecting","TURNCheck","joinRes","hasTLS","hasTURN","hasSTUN","WebRTCCheck","hasTcp","hasIpv4Udp","prevTrickle","isIPPrivate","address","second","WebSocketCheck","ConnectionCheck","nextId","checkId","check","_defineProperty","_toPropertyKey","_toPrimitive","JOSEError","_Error$captureStackTr","JWTClaimValidationFailed","claim","JWTExpired","JOSEAlgNotAllowed","JOSENotSupported","JWEDecryptionFailed","JWEInvalid","JWSInvalid","JWTInvalid","JWKInvalid","JWKSInvalid","JWKSNoMatchingKey","JWKSMultipleMatchingKeys","JWKSTimeout","JWSSignatureVerificationFailed","CONVERSATION_INITIATION_CLIENT_DATA_TYPE","constructOverrides","overridesEvent","arrayBufferToBase64","base64ToArrayBuffer","binaryString","NO_VOLUME","MIN_VOICE_FREQUENCY","MAX_VOICE_FREQUENCY","resampleVoiceRange","raw","binCount","hzPerBin","minBin","maxBin","voiceBinCount","outLen","audioAdapterFactory","setWebRTCAudioAdapterFactory","createAudioAdapter","DEFAULT_LIVEKIT_WS_URL","AUDIO_VOLUME_THRESHOLD","convertWssToHttps","WebRTCConnection","inputFormat","outputFormat","inputDeviceId","micTrackPublication","outputDeviceId","_resetDuration","conversationToken","configOrigin","livekitUrl","micEnabled","onConnected","micTrack","_participant","_publication","remoteAudioTrack","onAudioData","audioData","maxVolume","base64Audio","currentMicTrackPublication","recoveryError","setupStrategy","setSetupStrategy","setupWebRTCSession","MAIN_PROTOCOL","WSS_API_ORIGIN","WSS_API_PATHNAME","WebSocketConnection","socket","closeCode","closeReason","protocols","conversationConfig","conversation_id","agent_output_audio_format","user_input_audio_format","hadListeners","pending","audioEvent","determineConnectionType","hasSignedUrl","createConnection","connectionType","URLCache","createWorkletModuleLoader","sourceCode","worklet","cachedUrl","blobURL","moduleURL","loadAudioConcatProcessor","LIBSAMPLERATE_JS","addLibsamplerateModule","customPath","libsamplerateUrl","calculateVolume","frequencyData","createAnalyserVolumeProvider","rawData","voiceData","isIosDevice","isAndroidDevice","maybePrimeIosPlayback","audioElement","primeFrameCount","silentBuffer","MediaDeviceOutput","workletPaths","libsampleratePath","supportsSampleRateConstraint","destination","resetDuration","loadRawAudioProcessor","DEFAULT_INPUT_CHUNK_DURATION_MS","MediaDeviceInput","inputStream","mediaStreamSource","preferHeadphonesForIosDevices","inputChunkDurationMs","idealDevice","keyword","newInputStream","attachInputToConnection","rawAudioPcmData","attachConnectionToOutput","DEFAULT_DELAY","resolveDelay","delayConfig","applyDelay","delayMs","STASH_TTL_MS","UNLOCK_EVENTS","stashedAudioContext","discardTimer","unlockListenerInstalled","unlockAudioContext","scheduleStashDiscard","discardStashedAudioContext","clearStashDiscardTimer","unlockIosAudioForSession","installIosAudioUnlockListener","onUserGesture","takeUnlockedAudioContext","detectPlatform","requestWakeLock","setupWebSocketIO","detachInput","detachOutput","webSessionSetup","useWakeLock","wakeLock","preliminaryInputStream","unlockedAudioContext","ioError","visibilityChangeHandler","lock","originalDetach","WebAudioAdapter","volumeProvider","assertRuntimeCompatibility","EMPTY_FREQUENCY_DATA","TextConversation","fullOptions","conversation","_VoiceConversation","playbackEventTarget","cleanUp","clampedVolume","sessionSetup","VoiceConversation","RealtimeEvents","AudioFormat","CommitStrategy","Conversation","ConversationContext","createContext","useRawConversation","useContext","useRawConversationRef","useRegisterCallbacks","callbacks","registerCallbacks","callbacksRef","useRef","activeKeyToken","activeKeys","stableCallbacks","ConversationControlsContext","ConversationControlsProvider","conversationRef","getConversation","useCallback","sendUserMessage","sendMultimodalMessage","sendContextualUpdate","sendUserActivity","sendMCPToolApprovalResult","setVolume","changeInputDevice","changeOutputDevice","getInputByteFrequencyData","getOutputByteFrequencyData","getInputVolume","getOutputVolume","getId","useMemo","_jsx","useConversationControls","ConversationStatusContext","ConversationStatusProvider","setStatus","useState","setMessage","newStatus","useConversationStatus","ConversationInputContext","ConversationInputProvider","controlledIsMuted","onMutedChange","uncontrolledIsMuted","setUncontrolledIsMuted","setMuted","useConversationInput","ConversationModeContext","ConversationModeProvider","newMode","useConversationMode","ConversationFeedbackContext","ConversationFeedbackProvider","setCanSendFeedback","newValue","sendFeedback","useConversationFeedback","buildClientTools","optionTools","clientTools","ConversationClientToolsContext","ConversationClientToolsProvider","clientToolsRegistry","clientToolsRef","registerClientTool","ListenerSet","assertFunction","ListenerMap","removers","set","remove","useStableCallbacks","callbackRefs","activeKeySet","SUB_PROVIDERS_WITHOUT_PROPS","ConversationProvider","defaultOptions","lockRef","startSessionIdRef","shouldEndRef","defaultOptionsRef","listenerMap","setConversation","startSession","startSessionId","resolvedServerLocation","calculatedLivekitUrl","defaultConfig","sessionOptions","userOnConversationCreated","isStaleStartSession","startSessionOptions","conv","endSession","pendingConnection","contextValue","wrappedChildren","nested","useConversation","micMuted","hookOptions","hookOptionsRef","controls","isSpeaking","isListening","sessionConfig","VALID_EMERGENCY_NUMBERS","MAX_DIAL_LENGTH","DIAL_PAD_DIGITS","TOKEN_VALIDITY_MS","tokenCache","fetchPromise","prefetchToken","getCachedToken","clearTokenCache","warmupConnection","usePhoneSimulator","onValidCall","number","setNumber","handleDigitPress","clearNumber","isValidNumber","handleCall","buttonVariants","Button","DialPad","onDigitPress","disabled","DisplayScreen","placeholder","CallButton","onCall","onClear","DisclaimerHeader","subtitle","CallStatusIndicator","callPhase","Loader2","CallDuration","seconds","formatDuration","totalSeconds","mins","secs","EmergencyDialer","useRingingSound","audioContextRef","oscillatorRef","gainNodeRef","isPlayingRef","ringIntervalRef","createRingTone","gainNode","startRinging","playRingBurst","osc2","gain2","stopRinging","total","trackConversion","phoneNumber","trackCallLatency","tokenMs","connectedMs","trackAgentResponseLatency","latencyMs","VAD_SPEECH_THRESHOLD","useEmergencyCall","onCallEnd","callDuration","setCallDuration","setCallPhase","connectionError","setConnectionError","timerRef","startTimeRef","tokenMsRef","lastSpeechEndRef","awaitingResponseRef","vadScore","responseMs","startCall","micPromise","fetchedToken","handleEndCall","EmergencyCall","onEnd","HomepageContent","AlertTriangle","createContext2","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FOCUS_SCOPE_NAME","FocusScope","trapped","onMountAutoFocusProp","onUnmountAutoFocusProp","scopeProps","setContainer","onMountAutoFocus","onUnmountAutoFocus","lastFocusedElementRef","focusScope","handleFocusIn2","focus","handleFocusOut2","relatedTarget","handleMutations2","mutationObserver","focusScopesStack","mountEvent","removeLinks","unmountEvent","isTabKey","container2","last","getTabbableEdges","select","findVisible","upTo","isSelectableInput","createFocusScopesStack","activeFocusScope","arrayRemove","updatedArray","useFocusGuards","edgeGuards","createFocusGuard","__assign","__spreadArray","pack","ar","zeroRightClassName","fullWidthClassName","noScrollbarsClassName","removedBarSizeVariable","assignRef","initialValue","currentValues","useMergeRefs","oldValue","prevRefs_1","nextRefs_1","current_1","ItoI","innerCreateMedium","assigned","medium","cbs","pendingQueue","executeQueue","cycle","filter","createSidecarMedium","SideCar","sideCar","Target","exportSidecar","exported","effectCar","nothing","RemoveScroll","parentRef","setCallbacks","forwardProps","removeScrollBar","shards","noIsolation","inert","allowPinchZoom","Container","gapMode","containerRef","containerProps","getNonce","makeStyleTag","nonce","injectStyles","insertStyleTag","head","stylesheetSingleton","counter","stylesheet","style","styleHookSingleton","sheet","isDynamic","styleSingleton","useStyle","Sheet","dynamic","zeroGap","parse","getOffset","getGapWidth","documentWidth","windowWidth","Style","lockAttribute","getStyles","allowRelative","important","getCurrentUseCounter","useLockAttribute","newCounter","RemoveScrollBar","noRelative","noImportant","passiveSupported","nonPassive","alwaysContainsScroll","elementCanBeScrolled","elementCouldBeVScrolled","elementCouldBeHScrolled","locationCouldBeScrolled","isScrollable","elementCouldBeScrolled","getScrollVariables","scrollHeight","clientHeight","getVScrollVariables","scrollTop","getHScrollVariables","scrollLeft","scrollWidth","clientWidth","getDirectionFactor","endTarget","sourceDelta","noOverscroll","directionFactor","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","scroll_1","capacity","elementScroll","getTouchXY","getDeltaXY","extractRef","deltaCompare","generateStyle","idCounter","lockStack","RemoveScrollSideCar","shouldPreventQueue","touchStartRef","activeAxis","lastProps","allow_1","shouldCancelEvent","parent","touch","touchStart","currentAxis","moveDirection","canBeScrolledInMainDirection","cancelingAxis","shouldPrevent","sourceEvent","shardNodes","shouldStop","shouldCancel","should","getOutermostShadowParent","scrollTouchStart","scrollWheel","scrollTouchMove","inst","shadowParent","ReactRemoveScroll","getDefaultParent","originalTarget","sampleTarget","counterMap","uncontrolledNodes","markerMap","lockCount","unwrapHost","correctTargets","targets","correctedTarget","applyAttributeToOthers","markerName","controlAttribute","markerCounter","hiddenNodes","elementsToKeep","elementsToStop","keep","deep","alreadyHidden","counterValue","markerValue","hideOthers","activeParentNode","DIALOG_NAME","createDialogContext","createDialogScope","DialogProvider","useDialogContext","Dialog","__scopeDialog","modal","triggerRef","contentRef","prevOpen","DialogTrigger","composedTriggerRef","getState","DialogPortal","PortalPrimitive","OVERLAY_NAME","DialogOverlay","overlayProps","DialogOverlayImpl","DialogContent","DialogContentModal","DialogContentNonModal","DialogContentImpl","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","trapFocus","onOpenAutoFocus","onCloseAutoFocus","TitleWarning","DescriptionWarning","DialogTitle","DialogDescription","DialogClose","TITLE_WARNING_NAME","WarningProvider","useWarningContext","titleId","titleWarningContext","MESSAGE","DESCRIPTION_WARNING_NAME","descriptionId","describedById","Trigger","Overlay","SheetPrimitive.Root","SheetTrigger","SheetPrimitive.Trigger","SheetPortal","SheetPrimitive.Portal","SheetOverlay","SheetPrimitive.Overlay","sheetVariants","SheetContent","SheetPrimitive.Content","SheetPrimitive.Close","SheetHeader","SheetTitle","SheetPrimitive.Title","SheetDescription","SheetPrimitive.Description","navLinks","Home","HelpCircle","Navigation","KofiWidget","Footer","CONSENT_KEY","CONSENT_CHANGE_EVENT","GA_MEASUREMENT_ID","ADSENSE_CLIENT_ID","getConsentState","storage","setConsent","injectScript","analyticsLoaded","loadAnalytics","_args","loadAnalyticsIfConsented","CookieBanner","setVisible","handleReset","handleAccept","handleDecline","MainLayout","showFooter","US_DOMAIN","UK_DOMAIN","UK_ALT_DOMAIN","getCurrentDomainBase","getStructuredData","Index","activeCall","setActiveCall","host","structuredData","handleStartCall","Textarea","isCheckBoxInput","isDateObject","isNullOrUndefined","isObjectType","isObject","getEventValue","getNodeParentName","isNameInFieldArray","tempObject","prototypeCopy","cloneObject","isArray","compact","isUndefined","isBoolean","isKey","stringToPath","tempPath","objValue","EVENTS","VALIDATION_MODE","INPUT_VALIDATION_RULES","HookFormContext","useFormContext","FormProvider","getProxyFormState","formState","control","localProxyFormState","isRoot","shouldRenderFormState","formStateData","_proxyFormState","updateFormState","convertToArrayPayload","shouldSubscribeByName","signalName","currentName","useSubscribe","subscription","useFormState","methods","_mounted","_localProxyFormState","_name","isString","generateWatchOutput","_names","formValues","isGlobal","fieldName","useWatch","updateValue","useController","shouldUnregister","isArrayField","_registerProps","_shouldUnregisterField","updateMounted","Controller","appendErrors","validateAllFieldCriteria","getValidationModes","isWatched","isBlurEvent","watchName","iterateFieldsByAction","fieldsNames","abortEarly","currentField","updateFieldArrayRootError","fieldArrayErrors","isFileInput","isFunction","owner","isRadioInput","isRegex","defaultResult","validResult","getCheckboxValue","option","defaultReturn","getRadioValue","getValidateError","getValueAndMessage","validationData","validateField","shouldUseNativeValidation","isFieldArray","maxLength","minLength","validate","valueAsNumber","mount","inputValue","inputRef","setCustomValidity","isRadio","isCheckBox","isRadioOrCheckbox","isEmpty","appendErrorsCurry","getMinMaxMessage","exceedMax","maxLengthMessage","minLengthMessage","maxType","minType","exceedMin","maxOutput","minOutput","valueNumber","valueDate","convertTimeToDate","time","isTime","isWeek","maxLengthOutput","minLengthOutput","patternValue","validateError","validationResult","baseGet","updatePath","isEmptyArray","unset","childObject","createSubject","isPrimitive","object1","object2","keys1","val1","val2","isMultipleSelect","live","objectHasFunction","markFieldsDirty","isParentNodeArray","getDirtyFieldsFromDefaultValues","dirtyFieldsFromValues","getDirtyFields","defaultValues","getFieldValueAs","valueAsDate","setValueAs","getFieldValue","getResolverOptions","_fields","criteriaMode","getRuleValue","rule","ASYNC_FUNCTION","hasPromiseValidation","fieldReference","validateFunction","hasValidation","schemaErrorLookup","foundError","skipValidation","isTouched","isSubmitted","reValidateMode","unsetEmptyArray","createFormControl","_options","_formState","_defaultValues","_formValues","_state","delayErrorCallback","_subjects","validationModeBeforeSubmit","validationModeAfterSubmit","shouldDisplayAllAssociatedErrors","debounce","wait","_updateValid","shouldUpdateValid","isValid","_executeSchema","executeBuiltInValidation","_updateIsValidating","isValidating","_updateFieldArray","shouldSetValues","shouldUpdateFieldsAndState","fieldValues","touchedFields","_getDirty","updateErrors","_setErrors","updateValidAndValue","shouldSkipSetValueAs","setFieldValue","updateTouchAndDirty","fieldValue","shouldDirty","shouldRender","shouldUpdateField","isPreviousDirty","disabledField","isCurrentFieldPristine","isPreviousFieldTouched","shouldRenderByError","fieldState","previousFieldError","updatedFormState","executeSchemaAndUpdateState","shouldOnlyCheckValid","isFieldArrayRoot","isPromiseFunction","fieldError","_removeUnmounted","unregister","getValues","_getWatch","_getFieldArray","optionRef","checkboxRef","radioRef","setValues","fieldKey","cloneValue","isFieldValueUpdated","getCurrentFieldValue","_updateIsFieldValueUpdated","shouldSkipValidation","watched","previousErrorLookupResult","errorLookupResult","_focusInput","fieldNames","getFieldState","clearErrors","inputName","setError","currentError","currentRef","restOfErrorTree","watch","_updateDisabledField","register","disabledIsDefined","fieldRef","radioOrCheckbox","_focusError","_disableForm","handleSubmit","onValid","onInvalid","onValidError","resetField","_reset","keepStateOptions","updatedValues","cloneUpdatedValues","isEmptyResetValues","form","useForm","_formControl","_values","isDirty","Label","labelVariants","LabelPrimitive.Root","Form","FormFieldContext","FormField","useFormField","fieldContext","itemContext","FormItemContext","FormItem","React.useId","FormLabel","formItemId","FormControl","formDescriptionId","formMessageId","FormDescription","FormMessage","util","assertIs","_arg","assertNever","_x","validKeys","filtered","checker","joinValues","objectUtil","ZodParsedType","getParsedType","ZodIssueCode","ZodError","issues","subs","actualProto","_mapper","mapper","issue","fieldErrors","processError","curr","formErrors","errorMap","_ctx","overrideErrorMap","getErrorMap","makeIssue","errorMaps","issueData","fullPath","fullIssue","maps","addIssueToContext","overrideMap","ParseStatus","arrayValue","INVALID","pairs","syncPairs","pair","finalObject","DIRTY","OK","isAborted","isAsync","__classPrivateFieldGet","__classPrivateFieldSet","errorUtil","_ZodEnum_cache","_ZodNativeEnum_cache","ParseInputLazyPath","handleResult","processCreateParams","invalid_type_error","required_error","iss","ZodType","def","maybeAsyncResult","getIssueProperties","refinementData","refinement","ZodEffects","ZodFirstPartyTypeKind","ZodOptional","ZodNullable","ZodArray","ZodPromise","ZodUnion","incoming","ZodIntersection","defaultValueFunc","ZodDefault","ZodBranded","catchValueFunc","ZodCatch","This","ZodPipeline","ZodReadonly","cuidRegex","cuid2Regex","ulidRegex","uuidRegex","nanoidRegex","durationRegex","emailRegex","_emojiRegex","emojiRegex","ipv4Regex","ipv6Regex","base64Regex","dateRegexSource","dateRegex","timeRegexSource","regex","timeRegex","datetimeRegex","isValidIP","ip","ZodString","tooBig","tooSmall","floatSafeRemainder","valDecCount","stepDecCount","decCount","valInt","stepInt","ZodNumber","inclusive","ZodBigInt","ZodBoolean","ZodDate","minDate","maxDate","ZodSymbol","ZodUndefined","ZodNull","ZodAny","ZodUnknown","ZodNever","ZodVoid","schema","deepPartialify","ZodObject","newShape","fieldSchema","ZodTuple","shape","shapeKeys","extraKeys","keyValidator","unknownKeys","catchall","defaultError","augmentation","merging","mask","newField","createZodEnum","handleResults","unionErrors","childCtx","dirty","types","getDiscriminator","ZodLazy","ZodLiteral","ZodEnum","ZodNativeEnum","ZodDiscriminatedUnion","discriminator","discriminatorValue","optionsMap","discriminatorValues","mergeValues","aType","bType","bKeys","sharedKeys","sharedValue","newArray","itemA","itemB","handleParsed","parsedLeft","parsedRight","merged","itemIndex","schemas","ZodRecord","keyType","valueType","third","ZodMap","finalMap","ZodSet","finalizeSet","parsedSet","minSize","maxSize","ZodFunction","makeArgsIssue","makeReturnsIssue","returns","parsedArgs","parsedReturns","returnType","expectedValues","enumValues","newDef","nativeEnumValues","promisified","effect","checkCtx","processed","executeRefinement","inner","preprocess","newCtx","ZodNaN","inResult","freeze","stringType","objectType","EXTRACTOR_KEY","getTraceContextExtractor","resolveFetch","customFetch","FunctionsError","FunctionsFetchError","FunctionsRelayError","FunctionsHttpError","FunctionRegion","FunctionsClient","functionName_1","functionName","timeoutController","functionArgs","_headers","hasContentTypeHeader","effectiveSignal","fetchError","isRelayError","responseType","DEFAULT_MAX_RETRIES","getRetryDelay","attemptIndex","RETRYABLE_STATUS_CODES","RETRYABLE_METHODS","PostgrestError","_typeof","o$1","toPrimitive","toPropertyKey","ownKeys","r$1","_objectSpread2","attemptCount","retryEnabled","PostgrestBuilder","builder","_builder$shouldThrowO","_builder$isMaybeSingl","_builder$shouldStripN","_builder$urlLengthLim","_builder$retry","onfulfilled","onrejected","currentAccept","_fetch","res$1","_res$headers$get","_res$headers","retryAfterHeader","_fetchError$name2","errorDetails","hint","cause","_cause$message","_cause$code","_fetchError$name","_cause$name","causeMessage","causeCode","_fetchError$stack","urlLength","statusText","_this$headers$get2","_res$headers$get2","_this$headers$get","countHeader","contentRange","_error$hint","PostgrestTransformBuilder","columns","quoted","cleanedColumns","column","ascending","nullsFirst","foreignTable","referencedTable","existingOrder","rows","keyOffset","keyLimit","analyze","verbose","buffers","wal","forMediatype","PostgrestReservedCharsRegexp","PostgrestFilterBuilder","patterns","cleanedValues","range","typePart","configPart","operator","PostgrestQueryBuilder","fetch$1","urlLengthLimit","defaultToNull","_this$fetch","uniqueColumns","onConflict","ignoreDuplicates","_this$fetch2","_this$fetch3","_this$fetch4","PostgrestClient","originalFetch","init","existingSignal","relation","_isObject","_hasObjectArg","WebSocketFactory","_process","processVersions","DEFAULT_VERSION","VSN_1_0_0","VSN_2_0_0","DEFAULT_VSN","DEFAULT_TIMEOUT","MAX_PUSH_BUFFER_SIZE","CHANNEL_STATES","CHANNEL_EVENTS","CONNECTION_STATE","Serializer","allowedMetadataKeys","userPayload","encodedUserPayload","encodingType","encodedPayload","joinRef","userEvent","metaLength","combined","rawPayload","jsonPayload","join_ref","topicSize","userEventSize","metadataSize","payloadEncoding","parsedPayload","PostgresTypes","convertChangeData","record","skipTypes","rec_key","convertColumn","columnName","colType","convertCell","dataType","toArray","toBoolean","toNumber","toJson","toTimestampString","parsedValue","lastIdx","closeBrace","valTrim","httpEndpointURL","socketUrl","wsUrl","closure","globalSelf","phxWindow","global","WS_CLOSE_NORMAL","MAX_LONGPOLL_BATCH_SIZE","SOCKET_STATES","TRANSPORTS","XHR_STATES","AUTH_TOKEN_PREFIX","Push","Timer","timerCalc","Channel","pushEvent","bind","leavePush","_binding","_payload","handledPayload","eventBindings","Ajax","endPoint","ontimeout","parentKey","queryStr","paramKey","paramVal","binary","LongPoll","wasClean","messages","next","batch","onCallerTimeout","_Presence","onJoin","onSync","by","currentState","joins","leaves","newPresence","currentPresence","newRefs","curRefs","joinedMetas","leftMetas","joinedRefs","curMetas","leftPresence","refsToRemove","presences","chooser","pres","cleaned","serializer_default","joinRefBytes","refBytes","topicBytes","eventBytes","headerBytes","joinRefSize","eventSize","refSize","Socket","envSessionStorage","awaitingConnectionOnPageShow","tries","newTransport","uri","onMsgRef","fallbackTransport","fallbackThreshold","established","primaryTransport","errorRef","fallbackTransportName","fallbackTransportName2","rtt","connToClose","conn","transportBefore","establishedBefore","chanParams","chan","newRef","rawMessage","latency","dupChannel","PresenceAdapter","phoenixOptions","phoenixPresenceOptions","onJoinPayload","onLeavePayload","cloneState","transformState","currentPresences","parseCurrentPresences","newPresences","leftPresences","descriptors","transformedPresence","REALTIME_PRESENCE_LISTEN_EVENTS","RealtimePresence","normalizeChannelError","ChannelAdapter","phoenixParams","phoenixChannelParams","refNumber","removedPush","oldPayload","filterBindings","needsQuoting","quote","serializeScalar","serialized","serializeIsValue","serialize","RealtimePostgresFilterBuilder","REALTIME_POSTGRES_CHANGES_LISTEN_EVENT","REALTIME_LISTEN_TYPES","REALTIME_SUBSCRIBE_STATES","RealtimeChannel","broadcast","isPrivate","postgres_changes","presence_enabled","accessTokenPayload","clientPostgresBindings","bindingsLen","newPostgresBindings","clientPostgresBinding","table","serverPostgresFilter","stateCheck","typeCheck","isBinary","errorBody","endpoint_payload","typeLower","filterValue","binding","bindId","bindEvent","close","join","postgresChanges","commit_timestamp","serverValue","clientValue","selectA","selectB","records","Transformers.convertChangeData","SocketAdapter","CONNECTION_TIMEOUTS","RECONNECT_INTERVALS","DEFAULT_RECONNECT_FALLBACK","createMemorySessionStorage","store","resolveSessionStorage","WORKER_SCRIPT","RealtimeClient","socketAdapterOptions","realtimeTopic","exists","authGeneration","authPromise","tokenToSend","isManualToken","heartbeatCallback","objectUrl","result_url","defaultEncode","defaultDecode","vsn","IcebergError","buildUrl","baseUrl","buildAuthHeaders","auth","createFetchClient","authHeaders","isJson","errBody","errorDetail","namespaceToPath","namespace","NamespaceOperations","ns","request","namespaceToPath2","TableOperations","accessDelegation","IcebergRestCatalog","StorageError","statusCode","isStorageError","StorageApiError","StorageUnknownError","originalError","setHeader","nameLower","normalizeHeaders","recursiveToCamel","newKey","isValidBucketName","bucketName","encodeStoragePath","_getErrorMessage","handleError","_getRequestParams","_contentType","contentType","_handleRequest","fetcher","createFetchApi","defaultApi","post","put","vectorsApi","BaseApiClient","operation","_Symbol$toStringTag$1","StreamDownloadBuilder","downloadFn","shouldThrowOnError","onfinally","_Symbol$toStringTag","BlobDownloadBuilder","DEFAULT_SEARCH_OPTIONS","DEFAULT_FILE_OPTIONS","StorageFileApi","bucketId","fileBody","fileOptions","cleanPath","_path","fromPath","toPath","_this6","_this7","expiresIn","_this8","hasTransform","queryString","_this9","datum","renderPath","_this10","_this11","_error$originalError","_this12","_this13","_this14","sortBy","_this15","DEFAULT_HEADERS","StorageBucketApi","finalUrl","finalHeaders","StorageAnalyticsClient","queryParams","catalog","VectorIndexApi","vectorBucketName","indexName","VectorDataApi","VectorBucketApi","StorageVectorsClient","VectorBucketScope","_superprop_getCreateBucket","_superprop_getGetBucket","_superprop_getListBuckets","_superprop_getDeleteBucket","_superprop_getCreateIndex","_superprop_getListIndexes","_superprop_getGetIndex","_superprop_getDeleteIndex","VectorIndexScope","_superprop_getPutVectors","_superprop_getGetVectors","_superprop_getListVectors","_superprop_getQueryVectors","_superprop_getDeleteVectors","StorageClient","AUTO_REFRESH_TICK_DURATION_MS","AUTO_REFRESH_TICK_THRESHOLD","EXPIRY_MARGIN_MS","REFRESH_FAILURE_COOLDOWN_MS","GOTRUE_URL","STORAGE_KEY","API_VERSION_HEADER_NAME","API_VERSIONS","BASE64URL_REGEX","PKCE_FLOW_ID_PARAM","PKCE_MAX_CONCURRENT_FLOWS","JWKS_TTL","AuthError","isAuthError","AuthApiError","isAuthApiError","AuthUnknownError","CustomAuthError","AuthSessionMissingError","isAuthSessionMissingError","AuthInvalidTokenResponseError","AuthInvalidCredentialsError","AuthImplicitGrantRedirectError","isAuthImplicitGrantRedirectError","AuthPKCEGrantCodeExchangeError","AuthPKCECodeVerifierMissingError","AuthRetryableFetchError","isAuthRetryableFetchError","AuthRefreshDiscardedError","isAuthRefreshDiscardedError","AuthWeakPasswordError","reasons","AuthInvalidJwtError","TO_BASE64URL","IGNORE_BASE64URL","FROM_BASE64URL","charMap","byteToBase64URL","emit","byteFromBase64URL","charCode","stringFromBase64URL","utf8Emit","codepoint","utf8State","b64State","byteEmit","stringFromUTF8","codepointToUTF8","stringToUTF8","highSurrogate","leadingBit","base64UrlToUint8Array","onByte","stringToUint8Array","bytesToBase64URL","onChar","generateCallbackId","localStorageWriteTests","supportsLocalStorage","randomKey","parseParametersFromURL","looksLikeFetchResponse","maybeResponse","setItemAsync","getItemAsync","removeItemAsync","Deferred","rej","decodeJWT","accept","retryable","isRetryable","attempt","dec2hex","generatePKCEVerifier","charSet","charSetLen","verifier","sha256","randomString","encodedData","generatePKCEChallenge","hashed","PKCE_FLOW_ID_PATTERN","validatePKCEFlowId","flowId","generatePKCEFlowId","pkceVerifierSlotKey","pkceFlowIndexKey","getPKCEFlowIndex","storePKCEVerifier","onEvictFlow","evicted","retrievePKCEVerifier","removePKCEVerifier","legacyKey","slotKey","slotValue","remaining","removeAllPKCEVerifiers","appendFlowIdToRedirectTo","redirectTo","fragment","queryIndex","getCodeChallengeAndMethod","isPasswordRecovery","codeVerifier","storedCodeVerifier","codeChallenge","API_VERSION_REGEX","parseResponseAPIVersion","apiVersion","validateExp","timeNow","getAlgorithm","alg","UUID_REGEX","validateUUID","assertPasskeyExperimentalEnabled","experimental","userNotAvailableProxy","proxyTarget","sProp","_target","insecureUserWarningProxy","user","suppressWarningRef","deepClone","NETWORK_ERROR_CODES","errorCode","responseAPIVersion","_request","qs","requestParams","_sessionResponse","hasSession","_sessionResponsePassword","_userResponse","_ssoResponse","_generateLinkResponse","action_link","email_otp","hashed_token","redirect_to","verification_type","properties","_noResolveJsonResponse","SIGN_OUT_SCOPES","GoTrueAdminApi","fetch","jwt","email","pagination","users","links","rel","uid","shouldSoftDelete","factors","clients","clientId","identifier","memoryLocalStorageAdapter","LockAcquireTimeoutError","polyfillGlobalThis","getAddress","fromHex","hex","toHex","createSiweMessage","chainId","domain","expirationTime","issuedAt","notBefore","resources","scheme","statement","suffix","resource","WebAuthnError","WebAuthnUnknownError","identifyRegistrationError","publicKey","effectiveDomain","isValidDomain","identifyAuthenticationError","WebAuthnAbortService","abortError","newController","webAuthnAbortService","deserializeCredentialCreationOptions","challengeStr","userOpts","excludeCredentials","restOptions","challenge","cred","deserializeCredentialRequestOptions","allowCredentials","serializeCredentialCreationResponse","credential","credentialWithAttachment","serializeCredentialRequestResponse","clientExtensionResults","assertionResponse","browserSupportsWebAuthn","createCredential","getCredential","DEFAULT_CREATION_OPTIONS","DEFAULT_REQUEST_OPTIONS","isArrayBufferLike","mergeCredentialCreationOptions","baseOptions","overrides","mergeCredentialRequestOptions","WebAuthnApi","factorId","webauthn","friendlyName","challengeResponse","challengeError","nameToUse","userData","fallbackName","challengeId","rpId","rpOrigins","factor","enrollError","DEFAULT_OPTIONS","GLOBAL_JWKS","GoTrueClient","callbackUrlType","redirectType","credentials","password","codeChallengeMethod","phone","invalidTokenError","authCode","chain","signature","wallet","resolvedWallet","windowAny","accounts","accs","chainIdHex","siweMessage","outputToProcess","maybeSignature","hasExplicitFlowId","requestedFlowId","storageItem","access_token","captchaToken","sessionError","endpoint","acquireTimeout","waitOn","currentSession","maybeSession","hasExpired","maybeUser","stillStored","sessionData","userError","refreshedSession","provider_token","provider_refresh_token","refresh_token","expires_in","expires_at","token_type","actuallyExpiresIn","removeCurrentSession","accessToken","urlFlowId","refreshToken","debugName","startedAt","nextBackOffInterval","separateUser","expiresWithMargin","getUserError","storedAtStart","storedAfter","discarded","epochBeforeSave","storedNow","sessionToProcess","userIsProxy","mainSessionData","clonedMainSessionData","clonedSession","ticker","expiresInTicks","calledFromInitialize","urlParams","flowParams","evictedFlowId","challengeData","currentLevel","nextLevel","currentAuthenticationMethods","authorizationId","kid","jwks","jwk","rawHeader","signingKey","algorithm","optionsError","publicKeyOptions","credentialError","AuthClient","JS_ENV","JS_RUNTIME_VERSION","_Deno$version","_process$version","_runtimeMeta","DEFAULT_GLOBAL_OPTIONS","DEFAULT_DB_OPTIONS","DEFAULT_AUTH_OPTIONS","DEFAULT_REALTIME_OPTIONS","DEFAULT_TRACE_PROPAGATION_OPTIONS","parseTraceParent","traceparent","traceId","parentId","traceFlags","hexRegex","shouldPropagateToTarget","matchStringTarget","getDefaultPropagationTargets","supabaseUrl","resolveHeadersConstructor","isNewApiKey","TEMP_KEY_PREFIX","warnedKeySubtypes","checkApiKeyFormat","_key$match$","_key$match","subtype","fetchWithAuth","supabaseKey","getAccessToken","tracePropagationOptions","HeadersConstructor","traceEnabled","respectSampling","traceTargets","allowKeyAsBearer","realToken","bearer","traceHeaders","getTraceHeaders","warnedMissingTracingRuntime","warnedNonW3CPropagator","extractTraceContext","traceContext","_traceContext$carrier","sentryHint","normalizeTracePropagation","applySettingDefaults","_DEFAULT_GLOBAL_OPTIO","_globalOptions$header","_tracePropagationOpti","_tracePropagationOpti2","dbOptions","authOptions","realtimeOptions","globalOptions","DEFAULT_DB_OPTIONS$1","DEFAULT_AUTH_OPTIONS$1","DEFAULT_REALTIME_OPTIONS$1","DEFAULT_GLOBAL_OPTIONS$1","DEFAULT_TRACE_PROPAGATION_OPTIONS$1","validateSupabaseUrl","trimmedUrl","SupabaseAuthClient","SupabaseClient","_settings$auth$storag","_settings$global$head","defaultStorageKey","DEFAULTS","_settings$auth","_data$session$access_","_data$session","_await$this$_getSessi","autoRefreshToken","persistSession","detectSessionInUrl","userStorage","flowType","debug","throwOnError","lockAcquireTimeout","skipAutoInitialize","createClient","shouldShowDeprecationWarning","processVersion","versionMatch","SUPABASE_URL","SUPABASE_PUBLISHABLE_KEY","supabase","MAX_FEEDBACK_LENGTH","formSchema","z.object","z.string","Feedback","zodResolver","onSubmit","howToStructuredData","Guide","CheckCircle","XCircle","scenarios","Scripts","phrase","tip","Protocol","COLLAPSIBLE_NAME","createCollapsibleContext","createCollapsibleScope","CollapsibleProvider","useCollapsibleContext","Collapsible","__scopeCollapsible","collapsibleProps","CollapsibleTrigger","CollapsibleContent","CollapsibleContentImpl","isPresent","setIsPresent","heightRef","widthRef","isOpen","isMountAnimationPreventedRef","originalStylesRef","rAF","DirectionContext","useDirection","localDir","globalDir","ACCORDION_NAME","ACCORDION_KEYS","createAccordionContext","createAccordionScope","useCollapsibleScope","Accordion","accordionProps","singleProps","multipleProps","AccordionImplMultiple","AccordionImplSingle","AccordionValueProvider","useAccordionValueContext","AccordionCollapsibleProvider","useAccordionCollapsibleContext","valueProp","onValueChange","collapsible","accordionSingleProps","AccordionImpl","accordionMultipleProps","handleItemOpen","itemValue","prevValue","handleItemClose","AccordionImplProvider","useAccordionContext","__scopeAccordion","dir","orientation","accordionRef","isDirectionLTR","triggerCollection","triggerIndex","triggerCount","homeIndex","endIndex","moveNext","movePrev","clampedIndex","ITEM_NAME","AccordionItemProvider","useAccordionItemContext","AccordionItem","accordionItemProps","accordionContext","valueContext","collapsibleScope","triggerId","CollapsiblePrimitive.Root","open2","HEADER_NAME","AccordionHeader","headerProps","AccordionTrigger","collapsibleContext","CollapsiblePrimitive.Trigger","AccordionContent","CollapsiblePrimitive.Content","Item","Header","Trigger2","AccordionPrimitive.Root","AccordionPrimitive.Item","AccordionPrimitive.Header","AccordionPrimitive.Trigger","AccordionPrimitive.Content","faqs","FAQ","faqStructuredData","faq","resourceCategories","Resources","category","simonPhoto","About","Privacy","SeoCanonical","canonical","usHref","ukHref","queryClient","App","analyticsConsented","setAnalyticsConsented","syncConsent"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,58,59,61,62,63,64,65,66,67,68,69,70,71,72,73,74,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,209,210,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,260,261,262]}