@davait/aipictury 1.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE.md +77 -0
  2. package/README.md +39 -0
  3. package/ext/about.js +209 -0
  4. package/ext/account.js +242 -0
  5. package/ext/accountUi.js +287 -0
  6. package/ext/agent.js +1929 -0
  7. package/ext/browser.js +263 -0
  8. package/ext/cloud.js +385 -0
  9. package/ext/context.js +241 -0
  10. package/ext/deps.js +142 -0
  11. package/ext/dialogs.js +803 -0
  12. package/ext/diff.js +150 -0
  13. package/ext/extension.js +2483 -0
  14. package/ext/feedback.js +55 -0
  15. package/ext/files.js +565 -0
  16. package/ext/firestore.js +131 -0
  17. package/ext/gpuRun.js +77 -0
  18. package/ext/gpuServer.js +76 -0
  19. package/ext/hooks.js +153 -0
  20. package/ext/log.js +29 -0
  21. package/ext/lsp.js +122 -0
  22. package/ext/mcp.js +469 -0
  23. package/ext/mcpAuth.js +128 -0
  24. package/ext/media/vendor/firebase-config.json +9 -0
  25. package/ext/media/vendor/signin.js +1 -0
  26. package/ext/mediagen.js +174 -0
  27. package/ext/memory.js +117 -0
  28. package/ext/notebook.js +82 -0
  29. package/ext/package.json +1234 -0
  30. package/ext/paths.js +50 -0
  31. package/ext/permissions.js +229 -0
  32. package/ext/plans.js +110 -0
  33. package/ext/plugins.js +243 -0
  34. package/ext/prefs.js +157 -0
  35. package/ext/remote.js +170 -0
  36. package/ext/review.js +126 -0
  37. package/ext/sandbox.js +79 -0
  38. package/ext/scheduler.js +87 -0
  39. package/ext/sessions.js +228 -0
  40. package/ext/sessionsView.js +449 -0
  41. package/ext/shell.js +357 -0
  42. package/ext/storage.js +80 -0
  43. package/ext/tasklist.js +112 -0
  44. package/ext/text.js +31 -0
  45. package/ext/tools.js +781 -0
  46. package/ext/usage.js +77 -0
  47. package/ext/voice.js +135 -0
  48. package/ext/workbench.js +162 -0
  49. package/ext/workflow.js +51 -0
  50. package/ext/worktree.js +83 -0
  51. package/main.js +758 -0
  52. package/package.json +43 -0
  53. package/terminal.js +124 -0
  54. package/vscode-shim.js +231 -0
@@ -0,0 +1 @@
1
+ var vn=()=>{};var An=function(n){let e=[],t=0;for(let i=0;i<n.length;i++){let r=n.charCodeAt(i);r<128?e[t++]=r:r<2048?(e[t++]=r>>6|192,e[t++]=r&63|128):(r&64512)===55296&&i+1<n.length&&(n.charCodeAt(i+1)&64512)===56320?(r=65536+((r&1023)<<10)+(n.charCodeAt(++i)&1023),e[t++]=r>>18|240,e[t++]=r>>12&63|128,e[t++]=r>>6&63|128,e[t++]=r&63|128):(e[t++]=r>>12|224,e[t++]=r>>6&63|128,e[t++]=r&63|128)}return e},ar=function(n){let e=[],t=0,i=0;for(;t<n.length;){let r=n[t++];if(r<128)e[i++]=String.fromCharCode(r);else if(r>191&&r<224){let s=n[t++];e[i++]=String.fromCharCode((r&31)<<6|s&63)}else if(r>239&&r<365){let s=n[t++],o=n[t++],a=n[t++],c=((r&7)<<18|(s&63)<<12|(o&63)<<6|a&63)-65536;e[i++]=String.fromCharCode(55296+(c>>10)),e[i++]=String.fromCharCode(56320+(c&1023))}else{let s=n[t++],o=n[t++];e[i++]=String.fromCharCode((r&15)<<12|(s&63)<<6|o&63)}}return e.join("")},Sn={byteToCharMap_:null,charToByteMap_:null,byteToCharMapWebSafe_:null,charToByteMapWebSafe_:null,ENCODED_VALS_BASE:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",get ENCODED_VALS(){return this.ENCODED_VALS_BASE+"+/="},get ENCODED_VALS_WEBSAFE(){return this.ENCODED_VALS_BASE+"-_."},HAS_NATIVE_SUPPORT:typeof atob=="function",encodeByteArray(n,e){if(!Array.isArray(n))throw Error("encodeByteArray takes an array as a parameter");this.init_();let t=e?this.byteToCharMapWebSafe_:this.byteToCharMap_,i=[];for(let r=0;r<n.length;r+=3){let s=n[r],o=r+1<n.length,a=o?n[r+1]:0,c=r+2<n.length,u=c?n[r+2]:0,d=s>>2,h=(s&3)<<4|a>>4,p=(a&15)<<2|u>>6,k=u&63;c||(k=64,o||(p=64)),i.push(t[d],t[h],t[p],t[k])}return i.join("")},encodeString(n,e){return this.HAS_NATIVE_SUPPORT&&!e?btoa(n):this.encodeByteArray(An(n),e)},decodeString(n,e){return this.HAS_NATIVE_SUPPORT&&!e?atob(n):ar(this.decodeStringToByteArray(n,e))},decodeStringToByteArray(n,e){this.init_();let t=e?this.charToByteMapWebSafe_:this.charToByteMap_,i=[];for(let r=0;r<n.length;){let s=t[n.charAt(r++)],a=r<n.length?t[n.charAt(r)]:0;++r;let u=r<n.length?t[n.charAt(r)]:64;++r;let h=r<n.length?t[n.charAt(r)]:64;if(++r,s==null||a==null||u==null||h==null)throw new gt;let p=s<<2|a>>4;if(i.push(p),u!==64){let k=a<<4&240|u>>2;if(i.push(k),h!==64){let W=u<<6&192|h;i.push(W)}}}return i},init_(){if(!this.byteToCharMap_){this.byteToCharMap_={},this.charToByteMap_={},this.byteToCharMapWebSafe_={},this.charToByteMapWebSafe_={};for(let n=0;n<this.ENCODED_VALS.length;n++)this.byteToCharMap_[n]=this.ENCODED_VALS.charAt(n),this.charToByteMap_[this.byteToCharMap_[n]]=n,this.byteToCharMapWebSafe_[n]=this.ENCODED_VALS_WEBSAFE.charAt(n),this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[n]]=n,n>=this.ENCODED_VALS_BASE.length&&(this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(n)]=n,this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(n)]=n)}}},gt=class extends Error{constructor(){super(...arguments),this.name="DecodeBase64StringError"}},cr=function(n){let e=An(n);return Sn.encodeByteArray(e,!0)},It=function(n){return cr(n).replace(/\./g,"")},Re=function(n){try{return Sn.decodeString(n,!0)}catch(e){console.error("base64Decode failed: ",e)}return null};function ur(){if(typeof self<"u")return self;if(typeof window<"u")return window;if(typeof global<"u")return global;throw new Error("Unable to locate global object.")}var lr=()=>ur().__FIREBASE_DEFAULTS__,dr=()=>{if(typeof process>"u"||typeof process.env>"u")return;let n=process.env.__FIREBASE_DEFAULTS__;if(n)return JSON.parse(n)},hr=()=>{if(typeof document>"u")return;let n;try{n=document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/)}catch{return}let e=n&&Re(n[1]);return e&&JSON.parse(e)},Et=()=>{try{return vn()||lr()||dr()||hr()}catch(n){console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${n}`);return}},Rn=n=>Et()?.emulatorHosts?.[n];var yt=()=>Et()?.config,wt=n=>Et()?.[`_${n}`];var Q=class{constructor(){this.reject=()=>{},this.resolve=()=>{},this.promise=new Promise((e,t)=>{this.resolve=e,this.reject=t})}wrapCallback(e){return(t,i)=>{t?this.reject(t):this.resolve(i),typeof e=="function"&&(this.promise.catch(()=>{}),e.length===1?e(t):e(t,i))}}};function I(){return typeof navigator<"u"&&typeof navigator.userAgent=="string"?navigator.userAgent:""}function Pn(){return typeof window<"u"&&!!(window.cordova||window.phonegap||window.PhoneGap)&&/ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(I())}function kn(){return typeof navigator<"u"&&navigator.userAgent==="Cloudflare-Workers"}function Cn(){let n=typeof chrome=="object"?chrome.runtime:typeof browser=="object"?browser.runtime:void 0;return typeof n=="object"&&n.id!==void 0}function Nn(){return typeof navigator=="object"&&navigator.product==="ReactNative"}function On(){let n=I();return n.indexOf("MSIE ")>=0||n.indexOf("Trident/")>=0}function Dn(){try{return typeof indexedDB=="object"}catch{return!1}}function Ln(){return new Promise((n,e)=>{try{let t=!0,i="validate-browser-context-for-indexeddb-analytics-module",r=self.indexedDB.open(i);r.onsuccess=()=>{r.result.close(),t||self.indexedDB.deleteDatabase(i),n(!0)},r.onupgradeneeded=()=>{t=!1},r.onerror=()=>{e(r.error?.message||"")}}catch(t){e(t)}})}var fr="FirebaseError",T=class n extends Error{constructor(e,t,i){super(t),this.code=e,this.customData=i,this.name=fr,Object.setPrototypeOf(this,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,C.prototype.create)}},C=class{constructor(e,t,i){this.service=e,this.serviceName=t,this.errors=i}create(e,...t){let i=t[0]||{},r=`${this.service}/${e}`,s=this.errors[e],o=s?pr(s,i):"Error",a=`${this.serviceName}: ${o} (${r}).`;return new T(r,a,i)}};function pr(n,e){try{let t=0,i="";for(;t<n.length;){let r=n.indexOf("{$",t);if(r===-1){i+=n.substring(t);break}let s=n.indexOf("}",r+2);if(s===-1){i+=n.substring(t);break}let o=n.substring(r+2,s),a=e[o];i+=n.substring(t,r)+(a!=null?String(a):`<${o}?>`),t=s+1}return i}catch{return n}}function Mn(n){for(let e in n)if(Object.prototype.hasOwnProperty.call(n,e))return!1;return!0}function U(n,e){if(n===e)return!0;let t=Object.keys(n),i=Object.keys(e);for(let r of t){if(!i.includes(r))return!1;let s=n[r],o=e[r];if(bn(s)&&bn(o)){if(!U(s,o))return!1}else if(s!==o)return!1}for(let r of i)if(!t.includes(r))return!1;return!0}function bn(n){return n!==null&&typeof n=="object"}function Z(n){let e=[];for(let[t,i]of Object.entries(n))Array.isArray(i)?i.forEach(r=>{e.push(encodeURIComponent(t)+"="+encodeURIComponent(r))}):e.push(encodeURIComponent(t)+"="+encodeURIComponent(i));return e.length?"&"+e.join("&"):""}function ee(n){let e={};return n.replace(/^\?/,"").split("&").forEach(i=>{if(i){let[r,s]=i.split("=");e[decodeURIComponent(r)]=decodeURIComponent(s)}}),e}function te(n){let e=n.indexOf("?");if(!e)return"";let t=n.indexOf("#",e);return n.substring(e,t>0?t:void 0)}function Un(n,e){let t=new _t(n,e);return t.subscribe.bind(t)}var _t=class{constructor(e,t){this.observers=[],this.unsubscribes=[],this.observerCount=0,this.task=Promise.resolve(),this.finalized=!1,this.onNoObservers=t,this.task.then(()=>{e(this)}).catch(i=>{this.error(i)})}next(e){this.forEachObserver(t=>{t.next(e)})}error(e){this.forEachObserver(t=>{t.error(e)}),this.close(e)}complete(){this.forEachObserver(e=>{e.complete()}),this.close()}subscribe(e,t,i){let r;if(e===void 0&&t===void 0&&i===void 0)throw new Error("Missing Observer.");mr(e,["next","error","complete"])?r=e:r={next:e,error:t,complete:i},r.next===void 0&&(r.next=mt),r.error===void 0&&(r.error=mt),r.complete===void 0&&(r.complete=mt);let s=this.unsubscribeOne.bind(this,this.observers.length);return this.finalized&&this.task.then(()=>{try{this.finalError?r.error(this.finalError):r.complete()}catch{}}),this.observers.push(r),s}unsubscribeOne(e){this.observers===void 0||this.observers[e]===void 0||(delete this.observers[e],this.observerCount-=1,this.observerCount===0&&this.onNoObservers!==void 0&&this.onNoObservers(this))}forEachObserver(e){if(!this.finalized)for(let t=0;t<this.observers.length;t++)this.sendOne(t,e)}sendOne(e,t){this.task.then(()=>{if(this.observers!==void 0&&this.observers[e]!==void 0)try{t(this.observers[e])}catch(i){typeof console<"u"&&console.error&&console.error(i)}})}close(e){this.finalized||(this.finalized=!0,e!==void 0&&(this.finalError=e),this.task.then(()=>{this.observers=void 0,this.onNoObservers=void 0}))}};function mr(n,e){if(typeof n!="object"||n===null)return!1;for(let t of e)if(t in n&&typeof n[t]=="function")return!0;return!1}function mt(){}var ba=14400*1e3;function y(n){return n&&n._delegate?n._delegate:n}function Pe(n){try{return(n.startsWith("http://")||n.startsWith("https://")?new URL(n).hostname:n).endsWith(".cloudworkstations.dev")}catch{return!1}}async function xn(n){return(await fetch(n,{credentials:"include"})).ok}var A=class{constructor(e,t,i){this.name=e,this.instanceFactory=t,this.type=i,this.multipleInstances=!1,this.serviceProps={},this.instantiationMode="LAZY",this.onInstanceCreated=null}setInstantiationMode(e){return this.instantiationMode=e,this}setMultipleInstances(e){return this.multipleInstances=e,this}setServiceProps(e){return this.serviceProps=e,this}setInstanceCreatedCallback(e){return this.onInstanceCreated=e,this}};var B="[DEFAULT]";var Tt=class{constructor(e,t){this.name=e,this.container=t,this.component=null,this.instances=new Map,this.instancesDeferred=new Map,this.instancesOptions=new Map,this.onInitCallbacks=new Map}get(e){let t=this.normalizeInstanceIdentifier(e);if(!this.instancesDeferred.has(t)){let i=new Q;if(this.instancesDeferred.set(t,i),this.isInitialized(t)||this.shouldAutoInitialize())try{let r=this.getOrInitializeService({instanceIdentifier:t});r&&i.resolve(r)}catch{}}return this.instancesDeferred.get(t).promise}getImmediate(e){let t=this.normalizeInstanceIdentifier(e?.identifier),i=e?.optional??!1;if(this.isInitialized(t)||this.shouldAutoInitialize())try{return this.getOrInitializeService({instanceIdentifier:t})}catch(r){if(i)return null;throw r}else{if(i)return null;throw Error(`Service ${this.name} is not available`)}}getComponent(){return this.component}setComponent(e){if(e.name!==this.name)throw Error(`Mismatching Component ${e.name} for Provider ${this.name}.`);if(this.component)throw Error(`Component for ${this.name} has already been provided`);if(this.component=e,!!this.shouldAutoInitialize()){if(_r(e))try{this.getOrInitializeService({instanceIdentifier:B})}catch{}for(let[t,i]of this.instancesDeferred.entries()){let r=this.normalizeInstanceIdentifier(t);try{let s=this.getOrInitializeService({instanceIdentifier:r});i.resolve(s)}catch{}}}}clearInstance(e=B){this.instancesDeferred.delete(e),this.instancesOptions.delete(e),this.instances.delete(e)}async delete(){let e=Array.from(this.instances.values());await Promise.all([...e.filter(t=>"INTERNAL"in t).map(t=>t.INTERNAL.delete()),...e.filter(t=>"_delete"in t).map(t=>t._delete())])}isComponentSet(){return this.component!=null}isInitialized(e=B){return this.instances.has(e)}getOptions(e=B){return this.instancesOptions.get(e)||{}}initialize(e={}){let{options:t={}}=e,i=this.normalizeInstanceIdentifier(e.instanceIdentifier);if(this.isInitialized(i))throw Error(`${this.name}(${i}) has already been initialized`);if(!this.isComponentSet())throw Error(`Component ${this.name} has not been registered yet`);let r=this.getOrInitializeService({instanceIdentifier:i,options:t});for(let[s,o]of this.instancesDeferred.entries()){let a=this.normalizeInstanceIdentifier(s);i===a&&o.resolve(r)}return r}onInit(e,t){let i=this.normalizeInstanceIdentifier(t),r=this.onInitCallbacks.get(i)??new Set;r.add(e),this.onInitCallbacks.set(i,r);let s=this.instances.get(i);return s&&e(s,i),()=>{r.delete(e)}}invokeOnInitCallbacks(e,t){let i=this.onInitCallbacks.get(t);if(i)for(let r of i)try{r(e,t)}catch{}}getOrInitializeService({instanceIdentifier:e,options:t={}}){let i=this.instances.get(e);if(!i&&this.component&&(i=this.component.instanceFactory(this.container,{instanceIdentifier:gr(e),options:t}),this.instances.set(e,i),this.instancesOptions.set(e,t),this.invokeOnInitCallbacks(i,e),this.component.onInstanceCreated))try{this.component.onInstanceCreated(this.container,e,i)}catch{}return i||null}normalizeInstanceIdentifier(e=B){return this.component?this.component.multipleInstances?e:B:e}shouldAutoInitialize(){return!!this.component&&this.component.instantiationMode!=="EXPLICIT"}};function gr(n){return n===B?void 0:n}function _r(n){return n.instantiationMode==="EAGER"}var ke=class{constructor(e){this.name=e,this.providers=new Map}addComponent(e){let t=this.getProvider(e.name);if(t.isComponentSet())throw new Error(`Component ${e.name} has already been registered with ${this.name}`);t.setComponent(e)}addOrOverwriteComponent(e){this.getProvider(e.name).isComponentSet()&&this.providers.delete(e.name),this.addComponent(e)}getProvider(e){if(this.providers.has(e))return this.providers.get(e);let t=new Tt(e,this);return this.providers.set(e,t),t}getProviders(){return Array.from(this.providers.values())}};var Ir=[],f;(function(n){n[n.DEBUG=0]="DEBUG",n[n.VERBOSE=1]="VERBOSE",n[n.INFO=2]="INFO",n[n.WARN=3]="WARN",n[n.ERROR=4]="ERROR",n[n.SILENT=5]="SILENT"})(f||(f={}));var Er={debug:f.DEBUG,verbose:f.VERBOSE,info:f.INFO,warn:f.WARN,error:f.ERROR,silent:f.SILENT},yr=f.INFO,wr={[f.DEBUG]:"log",[f.VERBOSE]:"log",[f.INFO]:"info",[f.WARN]:"warn",[f.ERROR]:"error"},Tr=(n,e,...t)=>{if(e<n.logLevel)return;let i=new Date().toISOString(),r=wr[e];if(r)console[r](`[${i}] ${n.name}:`,...t);else throw new Error(`Attempted to log a message with an invalid logType (value: ${e})`)},ne=class{constructor(e){this.name=e,this._logLevel=yr,this._logHandler=Tr,this._userLogHandler=null,Ir.push(this)}get logLevel(){return this._logLevel}set logLevel(e){if(!(e in f))throw new TypeError(`Invalid value "${e}" assigned to \`logLevel\``);this._logLevel=e}setLogLevel(e){this._logLevel=typeof e=="string"?Er[e]:e}get logHandler(){return this._logHandler}set logHandler(e){if(typeof e!="function")throw new TypeError("Value assigned to `logHandler` must be a function");this._logHandler=e}get userLogHandler(){return this._userLogHandler}set userLogHandler(e){this._userLogHandler=e}debug(...e){this._userLogHandler&&this._userLogHandler(this,f.DEBUG,...e),this._logHandler(this,f.DEBUG,...e)}log(...e){this._userLogHandler&&this._userLogHandler(this,f.VERBOSE,...e),this._logHandler(this,f.VERBOSE,...e)}info(...e){this._userLogHandler&&this._userLogHandler(this,f.INFO,...e),this._logHandler(this,f.INFO,...e)}warn(...e){this._userLogHandler&&this._userLogHandler(this,f.WARN,...e),this._logHandler(this,f.WARN,...e)}error(...e){this._userLogHandler&&this._userLogHandler(this,f.ERROR,...e),this._logHandler(this,f.ERROR,...e)}};var vr=(n,e)=>e.some(t=>n instanceof t),Fn,Vn;function br(){return Fn||(Fn=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction])}function Ar(){return Vn||(Vn=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])}var Hn=new WeakMap,bt=new WeakMap,Wn=new WeakMap,vt=new WeakMap,St=new WeakMap;function Sr(n){let e=new Promise((t,i)=>{let r=()=>{n.removeEventListener("success",s),n.removeEventListener("error",o)},s=()=>{t(S(n.result)),r()},o=()=>{i(n.error),r()};n.addEventListener("success",s),n.addEventListener("error",o)});return e.then(t=>{t instanceof IDBCursor&&Hn.set(t,n)}).catch(()=>{}),St.set(e,n),e}function Rr(n){if(bt.has(n))return;let e=new Promise((t,i)=>{let r=()=>{n.removeEventListener("complete",s),n.removeEventListener("error",o),n.removeEventListener("abort",o)},s=()=>{t(),r()},o=()=>{i(n.error||new DOMException("AbortError","AbortError")),r()};n.addEventListener("complete",s),n.addEventListener("error",o),n.addEventListener("abort",o)});bt.set(n,e)}var At={get(n,e,t){if(n instanceof IDBTransaction){if(e==="done")return bt.get(n);if(e==="objectStoreNames")return n.objectStoreNames||Wn.get(n);if(e==="store")return t.objectStoreNames[1]?void 0:t.objectStore(t.objectStoreNames[0])}return S(n[e])},set(n,e,t){return n[e]=t,!0},has(n,e){return n instanceof IDBTransaction&&(e==="done"||e==="store")?!0:e in n}};function Bn(n){At=n(At)}function Pr(n){return n===IDBDatabase.prototype.transaction&&!("objectStoreNames"in IDBTransaction.prototype)?function(e,...t){let i=n.call(Ce(this),e,...t);return Wn.set(i,e.sort?e.sort():[e]),S(i)}:Ar().includes(n)?function(...e){return n.apply(Ce(this),e),S(Hn.get(this))}:function(...e){return S(n.apply(Ce(this),e))}}function kr(n){return typeof n=="function"?Pr(n):(n instanceof IDBTransaction&&Rr(n),vr(n,br())?new Proxy(n,At):n)}function S(n){if(n instanceof IDBRequest)return Sr(n);if(vt.has(n))return vt.get(n);let e=kr(n);return e!==n&&(vt.set(n,e),St.set(e,n)),e}var Ce=n=>St.get(n);function zn(n,e,{blocked:t,upgrade:i,blocking:r,terminated:s}={}){let o=indexedDB.open(n,e),a=S(o);return i&&o.addEventListener("upgradeneeded",c=>{i(S(o.result),c.oldVersion,c.newVersion,S(o.transaction),c)}),t&&o.addEventListener("blocked",c=>t(c.oldVersion,c.newVersion,c)),a.then(c=>{s&&c.addEventListener("close",()=>s()),r&&c.addEventListener("versionchange",u=>r(u.oldVersion,u.newVersion,u))}).catch(()=>{}),a}var Cr=["get","getKey","getAll","getAllKeys","count"],Nr=["put","add","delete","clear"],Rt=new Map;function $n(n,e){if(!(n instanceof IDBDatabase&&!(e in n)&&typeof e=="string"))return;if(Rt.get(e))return Rt.get(e);let t=e.replace(/FromIndex$/,""),i=e!==t,r=Nr.includes(t);if(!(t in(i?IDBIndex:IDBObjectStore).prototype)||!(r||Cr.includes(t)))return;let s=async function(o,...a){let c=this.transaction(o,r?"readwrite":"readonly"),u=c.store;return i&&(u=u.index(a.shift())),(await Promise.all([u[t](...a),r&&c.done]))[0]};return Rt.set(e,s),s}Bn(n=>({...n,get:(e,t,i)=>$n(e,t)||n.get(e,t,i),has:(e,t)=>!!$n(e,t)||n.has(e,t)}));var kt=class{constructor(e){this.container=e}getPlatformInfoString(){return this.container.getProviders().map(t=>{if(Or(t)){let i=t.getImmediate();return`${i.library}/${i.version}`}else return null}).filter(t=>t).join(" ")}};function Or(n){return n.getComponent()?.type==="VERSION"}var Ct="@firebase/app",jn="0.16.2";var O=new ne("@firebase/app"),Dr="@firebase/app-compat",Lr="@firebase/analytics-compat",Mr="@firebase/analytics",Ur="@firebase/app-check-compat",xr="@firebase/app-check",Fr="@firebase/auth",Vr="@firebase/auth-compat",Hr="@firebase/database",Wr="@firebase/data-connect",Br="@firebase/database-compat",$r="@firebase/functions",zr="@firebase/functions-compat",jr="@firebase/installations",qr="@firebase/installations-compat",Gr="@firebase/messaging",Kr="@firebase/messaging-compat",Jr="@firebase/performance",Yr="@firebase/performance-compat",Xr="@firebase/remote-config",Qr="@firebase/remote-config-compat",Zr="@firebase/storage",es="@firebase/storage-compat",ts="@firebase/firestore",ns="@firebase/ai",is="@firebase/firestore-compat",rs="firebase",ss="12.19.0";var Nt="[DEFAULT]",os={[Ct]:"fire-core",[Dr]:"fire-core-compat",[Mr]:"fire-analytics",[Lr]:"fire-analytics-compat",[xr]:"fire-app-check",[Ur]:"fire-app-check-compat",[Fr]:"fire-auth",[Vr]:"fire-auth-compat",[Hr]:"fire-rtdb",[Wr]:"fire-data-connect",[Br]:"fire-rtdb-compat",[$r]:"fire-fn",[zr]:"fire-fn-compat",[jr]:"fire-iid",[qr]:"fire-iid-compat",[Gr]:"fire-fcm",[Kr]:"fire-fcm-compat",[Jr]:"fire-perf",[Yr]:"fire-perf-compat",[Xr]:"fire-rc",[Qr]:"fire-rc-compat",[Zr]:"fire-gcs",[es]:"fire-gcs-compat",[ts]:"fire-fst",[is]:"fire-fst-compat",[ns]:"fire-vertex","fire-js":"fire-js",[rs]:"fire-js-all"};var Ne=new Map,as=new Map,Ot=new Map;function qn(n,e){try{n.container.addComponent(e)}catch(t){O.debug(`Component ${e.name} failed to register with FirebaseApp ${n.name}`,t)}}function ie(n){let e=n.name;if(Ot.has(e))return O.debug(`There were multiple attempts to register component ${e}.`),!1;Ot.set(e,n);for(let t of Ne.values())qn(t,n);for(let t of as.values())qn(t,n);return!0}function Ut(n,e){let t=n.container.getProvider("heartbeat").getImmediate({optional:!0});return t&&t.triggerHeartbeat(),n.container.getProvider(e)}function E(n){return n==null?!1:n.settings!==void 0}var cs={"no-app":"No Firebase App '{$appName}' has been created - call initializeApp() first","bad-app-name":"Illegal App name: '{$appName}'","duplicate-app":"Firebase App named '{$appName}' already exists with different {$mismatchedParam}. Existing: '{$oldValue}'. New: '{$newValue}'.","app-deleted":"Firebase App named '{$appName}' already deleted","server-app-deleted":"Firebase Server App has been deleted","no-options":"Need to provide options, when not being deployed to hosting via source.","invalid-app-argument":"firebase.{$appName}() takes either no argument or a Firebase App instance.","invalid-log-argument":"First argument to `onLog` must be null or a function.","idb-open":"Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.","idb-get":"Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.","idb-set":"Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.","idb-delete":"Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.","finalization-registry-not-supported":"FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.","invalid-server-app-environment":"FirebaseServerApp is not for use in browser environments."},N=new C("app","Firebase",cs);var Dt=class{constructor(e,t,i){this._isDeleted=!1,this._options={...e},this._config={...t},this._name=t.name,this._automaticDataCollectionEnabled=t.automaticDataCollectionEnabled,this._container=i,this.container.addComponent(new A("app",()=>this,"PUBLIC"))}get automaticDataCollectionEnabled(){return this.checkDestroyed(),this._automaticDataCollectionEnabled}set automaticDataCollectionEnabled(e){this.checkDestroyed(),this._automaticDataCollectionEnabled=e}get name(){return this.checkDestroyed(),this._name}get options(){return this.checkDestroyed(),this._options}get config(){return this.checkDestroyed(),this._config}get container(){return this._container}get isDeleted(){return this._isDeleted}set isDeleted(e){this._isDeleted=e}checkDestroyed(){if(this.isDeleted)throw N.create("app-deleted",{appName:this._name})}};var re=ss;function xt(n,e={}){let t=n;typeof e!="object"&&(e={name:e});let i={name:Nt,automaticDataCollectionEnabled:!0,...e},r=i.name;if(typeof r!="string"||!r)throw N.create("bad-app-name",{appName:String(r)});if(t||(t=yt()),!t)throw N.create("no-options");let s=Ne.get(r);if(s)if(U(t,s.options)){if(U(i,s.config))return s;throw N.create("duplicate-app",{appName:r,mismatchedParam:"config",oldValue:JSON.stringify(s.config),newValue:JSON.stringify(i)})}else throw N.create("duplicate-app",{appName:r,mismatchedParam:"options",oldValue:JSON.stringify(s.options),newValue:JSON.stringify(t)});let o=new ke(r);for(let c of Ot.values())o.addComponent(c);let a=new Dt(t,i,o);return Ne.set(r,a),a}function Yn(n=Nt){let e=Ne.get(n);if(!e&&n===Nt&&yt())return xt();if(!e)throw N.create("no-app",{appName:n});return e}function x(n,e,t){let i=os[n]??n;t&&(i+=`-${t}`);let r=i.match(/\s|\//),s=e.match(/\s|\//);if(r||s){let o=[`Unable to register library "${i}" with version "${e}":`];r&&o.push(`library name "${i}" contains illegal characters (whitespace or "/")`),r&&s&&o.push("and"),s&&o.push(`version name "${e}" contains illegal characters (whitespace or "/")`),O.warn(o.join(" "));return}ie(new A(`${i}-version`,()=>({library:i,version:e}),"VERSION"))}var us="firebase-heartbeat-database",ls=1,ce="firebase-heartbeat-store",Pt=null;function Xn(){return Pt||(Pt=zn(us,ls,{upgrade:(n,e)=>{switch(e){case 0:try{n.createObjectStore(ce)}catch(t){console.warn(t)}}}}).catch(n=>{throw N.create("idb-open",{originalErrorMessage:n.message})})),Pt}async function ds(n){try{let t=(await Xn()).transaction(ce),i=await t.objectStore(ce).get(Qn(n));return await t.done,i}catch(e){if(e instanceof T)O.warn(e.message);else{let t=N.create("idb-get",{originalErrorMessage:e?.message});O.warn(t.message)}}}async function Gn(n,e){try{let i=(await Xn()).transaction(ce,"readwrite");await i.objectStore(ce).put(e,Qn(n)),await i.done}catch(t){if(t instanceof T)O.warn(t.message);else{let i=N.create("idb-set",{originalErrorMessage:t?.message});O.warn(i.message)}}}function Qn(n){return`${n.name}!${n.options.appId}`}var hs=1024,fs=30,Lt=class{constructor(e){this.container=e,this._heartbeatsCache=null;let t=this.container.getProvider("app").getImmediate();this._storage=new Mt(t),this._heartbeatsCachePromise=this._storage.read().then(i=>(this._heartbeatsCache=i,i))}async triggerHeartbeat(){try{let t=this.container.getProvider("platform-logger").getImmediate().getPlatformInfoString(),i=Kn();if(this._heartbeatsCache?.heartbeats==null&&(this._heartbeatsCache=await this._heartbeatsCachePromise,this._heartbeatsCache?.heartbeats==null)||this._heartbeatsCache.lastSentHeartbeatDate===i||this._heartbeatsCache.heartbeats.some(r=>r.date===i))return;if(this._heartbeatsCache.heartbeats.push({date:i,agent:t}),this._heartbeatsCache.heartbeats.length>fs){let r=ms(this._heartbeatsCache.heartbeats);this._heartbeatsCache.heartbeats.splice(r,1)}return this._storage.overwrite(this._heartbeatsCache)}catch(e){O.warn(e)}}async getHeartbeatsHeader(){try{if(this._heartbeatsCache===null&&await this._heartbeatsCachePromise,this._heartbeatsCache?.heartbeats==null||this._heartbeatsCache.heartbeats.length===0)return"";let e=Kn(),{heartbeatsToSend:t,unsentEntries:i}=ps(this._heartbeatsCache.heartbeats),r=It(JSON.stringify({version:2,heartbeats:t}));return this._heartbeatsCache.lastSentHeartbeatDate=e,i.length>0?(this._heartbeatsCache.heartbeats=i,await this._storage.overwrite(this._heartbeatsCache)):(this._heartbeatsCache.heartbeats=[],this._storage.overwrite(this._heartbeatsCache)),r}catch(e){return O.warn(e),""}}};function Kn(){return new Date().toISOString().substring(0,10)}function ps(n,e=hs){let t=[],i=n.slice();for(let r of n){let s=t.find(o=>o.agent===r.agent);if(s){if(s.dates.push(r.date),Jn(t)>e){s.dates.pop();break}}else if(t.push({agent:r.agent,dates:[r.date]}),Jn(t)>e){t.pop();break}i=i.slice(1)}return{heartbeatsToSend:t,unsentEntries:i}}var Mt=class{constructor(e){this.app=e,this._canUseIndexedDBPromise=this.runIndexedDBEnvironmentCheck()}async runIndexedDBEnvironmentCheck(){return Dn()?Ln().then(()=>!0).catch(()=>!1):!1}async read(){if(await this._canUseIndexedDBPromise){let t=await ds(this.app);return t?.heartbeats?t:{heartbeats:[]}}else return{heartbeats:[]}}async overwrite(e){if(await this._canUseIndexedDBPromise){let i=await this.read();return Gn(this.app,{lastSentHeartbeatDate:e.lastSentHeartbeatDate??i.lastSentHeartbeatDate,heartbeats:e.heartbeats})}else return}async add(e){if(await this._canUseIndexedDBPromise){let i=await this.read();return Gn(this.app,{lastSentHeartbeatDate:e.lastSentHeartbeatDate??i.lastSentHeartbeatDate,heartbeats:[...i.heartbeats,...e.heartbeats]})}else return}};function Jn(n){return It(JSON.stringify({version:2,heartbeats:n})).length}function ms(n){if(n.length===0)return-1;let e=0,t=n[0].date;for(let i=1;i<n.length;i++)n[i].date<t&&(t=n[i].date,e=i);return e}function gs(n){ie(new A("platform-logger",e=>new kt(e),"PRIVATE")),ie(new A("heartbeat",e=>new Lt(e),"PRIVATE")),x(Ct,jn,n),x(Ct,jn,"esm2020"),x("fire-js","")}gs("");var _s="firebase",Is="12.19.0";x(_s,Is,"app");function Ii(){return{"dependent-sdk-initialized-before-auth":"Another Firebase SDK was initialized and is trying to use Auth before Auth is initialized. Please be sure to call `initializeAuth` or `getAuth` before starting any other Firebase SDK."}}var Ei=Ii,yi=new C("auth","Firebase",Ii());var Ve=new ne("@firebase/auth");function De(n,...e){Ve.logLevel<=f.WARN&&Ve.warn(`Auth (${re}): ${n}`,...e)}function Le(n,...e){Ve.logLevel<=f.ERROR&&Ve.error(`Auth (${re}): ${n}`,...e)}function w(n,...e){throw on(n,...e)}function v(n,...e){return on(n,...e)}function ct(n,e,t){let i={...Ei(),[e]:t};return new C("auth","Firebase",i).create(e,{appName:n.name})}function L(n){return ct(n,"operation-not-supported-in-this-environment","Operations that alter the current user are not supported in conjunction with FirebaseServerApp")}function Es(n,e,t){let i=t;if(!(e instanceof i))throw i.name!==e.constructor.name&&w(n,"argument-error"),ct(n,"argument-error",`Type of ${e.constructor.name} does not match expected instance.Did you pass a reference from a different Auth SDK?`)}function on(n,...e){if(typeof n!="string"){let t=e[0],i=[...e.slice(1)];return i[0]&&(i[0].appName=n.name),n._errorFactory.create(t,...i)}return yi.create(n,...e)}function l(n,e,...t){if(!n)throw on(e,...t)}function R(n){let e="INTERNAL ASSERTION FAILED: "+n;throw Le(e),new Error(e)}function M(n,e){n||R(e)}function $t(){return typeof self<"u"&&self.location?.href||""}function ys(){return Zn()==="http:"||Zn()==="https:"}function Zn(){return typeof self<"u"&&self.location?.protocol||null}function ws(){return typeof navigator<"u"&&navigator&&"onLine"in navigator&&typeof navigator.onLine=="boolean"&&(ys()||Cn()||"connection"in navigator)?navigator.onLine:!0}function Ts(){if(typeof navigator>"u")return null;let n=navigator;return n.languages&&n.languages[0]||n.language||null}var z=class{constructor(e,t){this.shortDelay=e,this.longDelay=t,M(t>e,"Short delay should be less than long delay!"),this.isMobile=Pn()||Nn()}get(){return ws()?this.isMobile?this.longDelay:this.shortDelay:Math.min(5e3,this.shortDelay)}};function an(n,e){M(n.emulator,"Emulator should always be set here");let{url:t}=n.emulator;return e?`${t}${e.startsWith("/")?e.slice(1):e}`:t}var He=class{static initialize(e,t,i){this.fetchImpl=e,t&&(this.headersImpl=t),i&&(this.responseImpl=i)}static fetch(){if(this.fetchImpl)return this.fetchImpl;if(typeof self<"u"&&"fetch"in self)return self.fetch;if(typeof globalThis<"u"&&globalThis.fetch)return globalThis.fetch;if(typeof fetch<"u")return fetch;R("Could not find fetch implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill")}static headers(){if(this.headersImpl)return this.headersImpl;if(typeof self<"u"&&"Headers"in self)return self.Headers;if(typeof globalThis<"u"&&globalThis.Headers)return globalThis.Headers;if(typeof Headers<"u")return Headers;R("Could not find Headers implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill")}static response(){if(this.responseImpl)return this.responseImpl;if(typeof self<"u"&&"Response"in self)return self.Response;if(typeof globalThis<"u"&&globalThis.Response)return globalThis.Response;if(typeof Response<"u")return Response;R("Could not find Response implementation, make sure you call FetchProvider.initialize() with an appropriate polyfill")}};var vs={CREDENTIAL_MISMATCH:"custom-token-mismatch",MISSING_CUSTOM_TOKEN:"internal-error",INVALID_IDENTIFIER:"invalid-email",MISSING_CONTINUE_URI:"internal-error",INVALID_PASSWORD:"wrong-password",MISSING_PASSWORD:"missing-password",INVALID_LOGIN_CREDENTIALS:"invalid-credential",EMAIL_EXISTS:"email-already-in-use",PASSWORD_LOGIN_DISABLED:"operation-not-allowed",INVALID_IDP_RESPONSE:"invalid-credential",INVALID_PENDING_TOKEN:"invalid-credential",FEDERATED_USER_ID_ALREADY_LINKED:"credential-already-in-use",MISSING_REQ_TYPE:"internal-error",EMAIL_NOT_FOUND:"user-not-found",RESET_PASSWORD_EXCEED_LIMIT:"too-many-requests",EXPIRED_OOB_CODE:"expired-action-code",INVALID_OOB_CODE:"invalid-action-code",MISSING_OOB_CODE:"internal-error",CREDENTIAL_TOO_OLD_LOGIN_AGAIN:"requires-recent-login",INVALID_ID_TOKEN:"invalid-user-token",TOKEN_EXPIRED:"user-token-expired",USER_NOT_FOUND:"user-token-expired",TOO_MANY_ATTEMPTS_TRY_LATER:"too-many-requests",PASSWORD_DOES_NOT_MEET_REQUIREMENTS:"password-does-not-meet-requirements",INVALID_CODE:"invalid-verification-code",INVALID_SESSION_INFO:"invalid-verification-id",INVALID_TEMPORARY_PROOF:"invalid-credential",MISSING_SESSION_INFO:"missing-verification-id",SESSION_EXPIRED:"code-expired",MISSING_ANDROID_PACKAGE_NAME:"missing-android-pkg-name",UNAUTHORIZED_DOMAIN:"unauthorized-continue-uri",INVALID_OAUTH_CLIENT_ID:"invalid-oauth-client-id",ADMIN_ONLY_OPERATION:"admin-restricted-operation",INVALID_MFA_PENDING_CREDENTIAL:"invalid-multi-factor-session",MFA_ENROLLMENT_NOT_FOUND:"multi-factor-info-not-found",MISSING_MFA_ENROLLMENT_ID:"missing-multi-factor-info",MISSING_MFA_PENDING_CREDENTIAL:"missing-multi-factor-session",SECOND_FACTOR_EXISTS:"second-factor-already-in-use",SECOND_FACTOR_LIMIT_EXCEEDED:"maximum-second-factor-count-exceeded",BLOCKING_FUNCTION_ERROR_RESPONSE:"internal-error",RECAPTCHA_NOT_ENABLED:"recaptcha-not-enabled",MISSING_RECAPTCHA_TOKEN:"missing-recaptcha-token",INVALID_RECAPTCHA_TOKEN:"invalid-recaptcha-token",INVALID_RECAPTCHA_ACTION:"invalid-recaptcha-action",MISSING_CLIENT_TYPE:"missing-client-type",MISSING_RECAPTCHA_VERSION:"missing-recaptcha-version",INVALID_RECAPTCHA_VERSION:"invalid-recaptcha-version",INVALID_REQ_TYPE:"invalid-req-type"};var bs=["/v1/accounts:signInWithCustomToken","/v1/accounts:signInWithEmailLink","/v1/accounts:signInWithIdp","/v1/accounts:signInWithPassword","/v1/accounts:signInWithPhoneNumber","/v1/token"],As=new z(3e4,6e4);function g(n,e){return n.tenantId&&!e.tenantId?{...e,tenantId:n.tenantId}:e}async function _(n,e,t,i,r={}){return wi(n,r,async()=>{let s={},o={};i&&(e==="GET"?o=i:s={body:JSON.stringify(i)});let a=Z({...o,key:n.config.apiKey}).slice(1),c=await n._getAdditionalHeaders();c["Content-Type"]="application/json",n.languageCode&&(c["X-Firebase-Locale"]=n.languageCode);let u={method:e,headers:c,...s};return kn()||(u.referrerPolicy="strict-origin-when-cross-origin"),n.emulatorConfig&&Pe(n.emulatorConfig.host)&&(u.credentials="include"),He.fetch()(await Ti(n,n.config.apiHost,t,a),u)})}async function wi(n,e,t){n._canInitEmulator=!1;let i={...vs,...e};try{let r=new zt(n),s=await Promise.race([t(),r.promise]);r.clearNetworkTimeout();let o=await s.json();if("needConfirmation"in o)throw le(n,"account-exists-with-different-credential",o);if(s.ok&&!("errorMessage"in o))return o;{let a=s.ok?o.errorMessage:o.error.message,[c,u]=a.split(" : ");if(c==="FEDERATED_USER_ID_ALREADY_LINKED")throw le(n,"credential-already-in-use",o);if(c==="EMAIL_EXISTS")throw le(n,"email-already-in-use",o);if(c==="USER_DISABLED")throw le(n,"user-disabled",o);let d=i[c]||c.toLowerCase().replace(/[_\s]+/g,"-");if(u)throw ct(n,d,u);w(n,d)}}catch(r){if(r instanceof T)throw r;w(n,"network-request-failed",{message:String(r)})}}async function H(n,e,t,i,r={}){let s=await _(n,e,t,i,r);return"mfaPendingCredential"in s&&w(n,"multi-factor-auth-required",{_serverResponse:s}),s}async function Ti(n,e,t,i){let r=`${e}${t}?${i}`,s=n,o=s.config.emulator?an(n.config,r):`${n.config.apiScheme}://${r}`;return bs.includes(t)&&(await s._persistenceManagerAvailable,s._getPersistenceType()==="COOKIE")?s._getPersistence()._getFinalTarget(o).toString():o}function Ss(n){switch(n){case"ENFORCE":return"ENFORCE";case"AUDIT":return"AUDIT";case"OFF":return"OFF";default:return"ENFORCEMENT_STATE_UNSPECIFIED"}}var zt=class{clearNetworkTimeout(){clearTimeout(this.timer)}constructor(e){this.auth=e,this.timer=null,this.promise=new Promise((t,i)=>{this.timer=setTimeout(()=>i(v(this.auth,"network-request-failed")),As.get())})}};function le(n,e,t){let i={appName:n.name};t.email&&(i.email=t.email),t.phoneNumber&&(i.phoneNumber=t.phoneNumber);let r=v(n,e,i);return r.customData._tokenResponse=t,r}function ei(n){return n!==void 0&&n.enterprise!==void 0}var We=class{constructor(e){if(this.siteKey="",this.recaptchaEnforcementState=[],e.recaptchaKey===void 0)throw new Error("recaptchaKey undefined");this.siteKey=e.recaptchaKey.split("/")[3],this.recaptchaEnforcementState=e.recaptchaEnforcementState}getProviderEnforcementState(e){if(!this.recaptchaEnforcementState||this.recaptchaEnforcementState.length===0)return null;for(let t of this.recaptchaEnforcementState)if(t.provider&&t.provider===e)return Ss(t.enforcementState);return null}isProviderEnabled(e){return this.getProviderEnforcementState(e)==="ENFORCE"||this.getProviderEnforcementState(e)==="AUDIT"}isAnyProviderEnabled(){return this.isProviderEnabled("EMAIL_PASSWORD_PROVIDER")||this.isProviderEnabled("PHONE_PROVIDER")}};async function vi(n,e){return _(n,"GET","/v2/recaptchaConfig",g(n,e))}async function Rs(n,e){return _(n,"POST","/v1/accounts:delete",e)}async function Be(n,e){return _(n,"POST","/v1/accounts:lookup",e)}function de(n){if(n)try{let e=new Date(Number(n));if(!isNaN(e.getTime()))return e.toUTCString()}catch{}}async function bi(n,e=!1){let t=y(n),i=await t.getIdToken(e),r=cn(i);l(r&&r.exp&&r.auth_time&&r.iat,t.auth,"internal-error");let s=typeof r.firebase=="object"?r.firebase:void 0,o=s?.sign_in_provider;return{claims:r,token:i,authTime:de(Ft(r.auth_time)),issuedAtTime:de(Ft(r.iat)),expirationTime:de(Ft(r.exp)),signInProvider:o||null,signInSecondFactor:s?.sign_in_second_factor||null}}function Ft(n){return Number(n)*1e3}function cn(n){let[e,t,i]=n.split(".");if(e===void 0||t===void 0||i===void 0)return Le("JWT malformed, contained fewer than 3 sections"),null;try{let r=Re(t);return r?JSON.parse(r):(Le("Failed to decode base64 JWT payload"),null)}catch(r){return Le("Caught error parsing JWT payload as JSON",r?.toString()),null}}function ti(n){let e=cn(n);return l(e,"internal-error"),l(typeof e.exp<"u","internal-error"),l(typeof e.iat<"u","internal-error"),Number(e.exp)-Number(e.iat)}async function oe(n,e,t=!1){if(t)return e;try{return await e}catch(i){throw i instanceof T&&Ps(i)&&n.auth.currentUser===n&&await n.auth.signOut(),i}}function Ps({code:n}){return n==="auth/user-disabled"||n==="auth/user-token-expired"}var jt=class{constructor(e){this.user=e,this.isRunning=!1,this.timerId=null,this.errorBackoff=3e4}_start(){this.isRunning||(this.isRunning=!0,this.schedule())}_stop(){this.isRunning&&(this.isRunning=!1,this.timerId!==null&&clearTimeout(this.timerId))}getInterval(e){if(e){let t=this.errorBackoff;return this.errorBackoff=Math.min(this.errorBackoff*2,96e4),t}else{this.errorBackoff=3e4;let i=(this.user.stsTokenManager.expirationTime??0)-Date.now()-3e5;return Math.max(0,i)}}schedule(e=!1){if(!this.isRunning)return;let t=this.getInterval(e);this.timerId=setTimeout(async()=>{await this.iteration()},t)}async iteration(){try{await this.user.getIdToken(!0)}catch(e){e?.code==="auth/network-request-failed"&&this.schedule(!0);return}this.schedule()}};var me=class{constructor(e,t){this.createdAt=e,this.lastLoginAt=t,this._initializeTime()}_initializeTime(){this.lastSignInTime=de(this.lastLoginAt),this.creationTime=de(this.createdAt)}_copy(e){this.createdAt=e.createdAt,this.lastLoginAt=e.lastLoginAt,this._initializeTime()}toJSON(){return{createdAt:this.createdAt,lastLoginAt:this.lastLoginAt}}};async function $e(n){let e=n.auth,t=await n.getIdToken(),i=await oe(n,Be(e,{idToken:t}));l(i?.users.length,e,"internal-error");let r=i.users[0];n._notifyReloadListener(r);let s=r.providerUserInfo?.length?Si(r.providerUserInfo):[],o=ks(n.providerData,s),a=n.isAnonymous,c=!(n.email&&r.passwordHash)&&!o?.length,u=a?c:!1,d={uid:r.localId,displayName:r.displayName||null,photoURL:r.photoUrl||null,email:r.email||null,emailVerified:r.emailVerified||!1,phoneNumber:r.phoneNumber||null,tenantId:r.tenantId||null,providerData:o,metadata:new me(r.createdAt,r.lastLoginAt),isAnonymous:u};Object.assign(n,d)}async function Ai(n){let e=y(n);await $e(e),await e.auth._persistUserIfCurrent(e),e.auth._notifyListenersIfCurrent(e)}function ks(n,e){return[...n.filter(i=>!e.some(r=>r.providerId===i.providerId)),...e]}function Si(n){return n.map(({providerId:e,...t})=>({providerId:e,uid:t.rawId||"",displayName:t.displayName||null,email:t.email||null,phoneNumber:t.phoneNumber||null,photoURL:t.photoUrl||null}))}async function Cs(n,e){let t=await wi(n,{},async()=>{let i=Z({grant_type:"refresh_token",refresh_token:e}).slice(1),{tokenApiHost:r,apiKey:s}=n.config,o=await Ti(n,r,"/v1/token",`key=${s}`),a=await n._getAdditionalHeaders();a["Content-Type"]="application/x-www-form-urlencoded";let c={method:"POST",headers:a,body:i};return n.emulatorConfig&&Pe(n.emulatorConfig.host)&&(c.credentials="include"),He.fetch()(o,c)});return{accessToken:t.access_token,expiresIn:t.expires_in,refreshToken:t.refresh_token}}async function Ns(n,e){return _(n,"POST","/v2/accounts:revokeToken",g(n,e))}var he=class n{constructor(){this.refreshToken=null,this.accessToken=null,this.expirationTime=null}get isExpired(){return!this.expirationTime||Date.now()>this.expirationTime-3e4}updateFromServerResponse(e){l(e.idToken,"internal-error"),l(typeof e.idToken<"u","internal-error"),l(typeof e.refreshToken<"u","internal-error");let t="expiresIn"in e&&typeof e.expiresIn<"u"?Number(e.expiresIn):ti(e.idToken);this.updateTokensAndExpiration(e.idToken,e.refreshToken,t)}updateFromIdToken(e){l(e.length!==0,"internal-error");let t=ti(e);this.updateTokensAndExpiration(e,null,t)}async getToken(e,t=!1){return!t&&this.accessToken&&!this.isExpired?this.accessToken:(l(this.refreshToken,e,"user-token-expired"),this.refreshToken?(await this.refresh(e,this.refreshToken),this.accessToken):null)}clearRefreshToken(){this.refreshToken=null}async refresh(e,t){let{accessToken:i,refreshToken:r,expiresIn:s}=await Cs(e,t);this.updateTokensAndExpiration(i,r,Number(s))}updateTokensAndExpiration(e,t,i){this.refreshToken=t||null,this.accessToken=e||null,this.expirationTime=Date.now()+i*1e3}static fromJSON(e,t){let{refreshToken:i,accessToken:r,expirationTime:s}=t,o=new n;return i&&(l(typeof i=="string","internal-error",{appName:e}),o.refreshToken=i),r&&(l(typeof r=="string","internal-error",{appName:e}),o.accessToken=r),s&&(l(typeof s=="number","internal-error",{appName:e}),o.expirationTime=s),o}toJSON(){return{refreshToken:this.refreshToken,accessToken:this.accessToken,expirationTime:this.expirationTime}}_assign(e){this.accessToken=e.accessToken,this.refreshToken=e.refreshToken,this.expirationTime=e.expirationTime}_clone(){return Object.assign(new n,this.toJSON())}_performRefresh(){return R("not implemented")}};function F(n,e){l(typeof n=="string"||typeof n>"u","internal-error",{appName:e})}var V=class n{constructor({uid:e,auth:t,stsTokenManager:i,...r}){this.providerId="firebase",this.proactiveRefresh=new jt(this),this.reloadUserInfo=null,this.reloadListener=null,this.uid=e,this.auth=t,this.stsTokenManager=i,this.accessToken=i.accessToken,this.displayName=r.displayName||null,this.email=r.email||null,this.emailVerified=r.emailVerified||!1,this.phoneNumber=r.phoneNumber||null,this.photoURL=r.photoURL||null,this.isAnonymous=r.isAnonymous||!1,this.tenantId=r.tenantId||null,this.providerData=r.providerData?[...r.providerData]:[],this.metadata=new me(r.createdAt||void 0,r.lastLoginAt||void 0)}async getIdToken(e){let t=await oe(this,this.stsTokenManager.getToken(this.auth,e));return l(t,this.auth,"internal-error"),this.accessToken!==t&&(this.accessToken=t,await this.auth._persistUserIfCurrent(this),this.auth._notifyListenersIfCurrent(this)),t}getIdTokenResult(e){return bi(this,e)}reload(){return Ai(this)}_assign(e){this!==e&&(l(this.uid===e.uid,this.auth,"internal-error"),this.displayName=e.displayName,this.photoURL=e.photoURL,this.email=e.email,this.emailVerified=e.emailVerified,this.phoneNumber=e.phoneNumber,this.isAnonymous=e.isAnonymous,this.tenantId=e.tenantId,this.providerData=e.providerData.map(t=>({...t})),this.metadata._copy(e.metadata),this.stsTokenManager._assign(e.stsTokenManager))}_clone(e){let t=new n({...this,auth:e,stsTokenManager:this.stsTokenManager._clone()});return t.metadata._copy(this.metadata),t}_onReload(e){l(!this.reloadListener,this.auth,"internal-error"),this.reloadListener=e,this.reloadUserInfo&&(this._notifyReloadListener(this.reloadUserInfo),this.reloadUserInfo=null)}_notifyReloadListener(e){this.reloadListener?this.reloadListener(e):this.reloadUserInfo=e}_startProactiveRefresh(){this.proactiveRefresh._start()}_stopProactiveRefresh(){this.proactiveRefresh._stop()}async _updateTokensIfNecessary(e,t=!1){let i=!1;e.idToken&&e.idToken!==this.stsTokenManager.accessToken&&(this.stsTokenManager.updateFromServerResponse(e),i=!0),t&&await $e(this),await this.auth._persistUserIfCurrent(this),i&&this.auth._notifyListenersIfCurrent(this)}async delete(){if(E(this.auth.app))return Promise.reject(L(this.auth));let e=await this.getIdToken();return await oe(this,Rs(this.auth,{idToken:e})),this.stsTokenManager.clearRefreshToken(),this.auth.signOut()}toJSON(){return{uid:this.uid,email:this.email||void 0,emailVerified:this.emailVerified,displayName:this.displayName||void 0,isAnonymous:this.isAnonymous,photoURL:this.photoURL||void 0,phoneNumber:this.phoneNumber||void 0,tenantId:this.tenantId||void 0,providerData:this.providerData.map(e=>({...e})),stsTokenManager:this.stsTokenManager.toJSON(),_redirectEventId:this._redirectEventId,...this.metadata.toJSON(),apiKey:this.auth.config.apiKey,appName:this.auth.name}}get refreshToken(){return this.stsTokenManager.refreshToken||""}static _fromJSON(e,t){let i=t.displayName??void 0,r=t.email??void 0,s=t.phoneNumber??void 0,o=t.photoURL??void 0,a=t.tenantId??void 0,c=t._redirectEventId??void 0,u=t.createdAt??void 0,d=t.lastLoginAt??void 0,{uid:h,emailVerified:p,isAnonymous:k,providerData:W,stsTokenManager:Tn}=t;l(h&&Tn,e,"internal-error");let sr=he.fromJSON(this.name,Tn);l(typeof h=="string",e,"internal-error"),F(i,e.name),F(r,e.name),l(typeof p=="boolean",e,"internal-error"),l(typeof k=="boolean",e,"internal-error"),F(s,e.name),F(o,e.name),F(a,e.name),F(c,e.name),F(u,e.name),F(d,e.name);let pt=new n({uid:h,auth:e,email:r,emailVerified:p,displayName:i,isAnonymous:k,photoURL:o,phoneNumber:s,tenantId:a,stsTokenManager:sr,createdAt:u,lastLoginAt:d});return W&&Array.isArray(W)&&(pt.providerData=W.map(or=>({...or}))),c&&(pt._redirectEventId=c),pt}static async _fromIdTokenResponse(e,t,i=!1){let r=new he;r.updateFromServerResponse(t);let s=new n({uid:t.localId,auth:e,stsTokenManager:r,isAnonymous:i});return await $e(s),s}static async _fromGetAccountInfoResponse(e,t,i){let r=t.users[0];l(r.localId!==void 0,"internal-error");let s=r.providerUserInfo!==void 0?Si(r.providerUserInfo):[],o=!(r.email&&r.passwordHash)&&!s?.length,a=new he;a.updateFromIdToken(i);let c=new n({uid:r.localId,auth:e,stsTokenManager:a,isAnonymous:o}),u={uid:r.localId,displayName:r.displayName||null,photoURL:r.photoUrl||null,email:r.email||null,emailVerified:r.emailVerified||!1,phoneNumber:r.phoneNumber||null,tenantId:r.tenantId||null,providerData:s,metadata:new me(r.createdAt,r.lastLoginAt),isAnonymous:!(r.email&&r.passwordHash)&&!s?.length};return Object.assign(c,u),c}};var ni=new Map;function D(n){M(n instanceof Function,"Expected a class definition");let e=ni.get(n);return e?(M(e instanceof n,"Instance stored in cache mismatched with class"),e):(e=new n,ni.set(n,e),e)}var ze=class{constructor(){this.type="NONE",this.storage={}}async _isAvailable(){return!0}async _set(e,t){this.storage[e]=t}async _get(e){let t=this.storage[e];return t===void 0?null:t}async _remove(e){delete this.storage[e]}_addListener(e,t){}_removeListener(e,t){}};ze.type="NONE";var ge=ze;function Me(n,e,t){return`firebase:${n}:${e}:${t}`}var fe=class n{constructor(e,t,i){this.persistence=e,this.auth=t,this.userKey=i;let{config:r,name:s}=this.auth;this.fullUserKey=Me(this.userKey,r.apiKey,s),this.fullPersistenceKey=Me("persistence",r.apiKey,s),this.boundEventHandler=t._onStorageEvent.bind(t);try{this.persistence._addListener(this.fullUserKey,this.boundEventHandler)}catch{}}setCurrentUser(e){return this.persistence._set(this.fullUserKey,e.toJSON())}async getCurrentUser(){let e=await this.persistence._get(this.fullUserKey);if(!e)return null;if(typeof e=="string"){let t=await Be(this.auth,{idToken:e}).catch(()=>{});return t?V._fromGetAccountInfoResponse(this.auth,t,e):null}return V._fromJSON(this.auth,e)}removeCurrentUser(){return this.persistence._remove(this.fullUserKey)}savePersistenceForRedirect(){return this.persistence._set(this.fullPersistenceKey,this.persistence.type)}async setPersistence(e){if(this.persistence===e)return;let t=await this.getCurrentUser();if(await this.removeCurrentUser(),this.persistence=e,t)return this.setCurrentUser(t)}delete(){try{this.persistence._removeListener(this.fullUserKey,this.boundEventHandler)}catch{}}static async create(e,t,i="authUser"){if(!t.length)return new n(D(ge),e,i);let r=(await Promise.all(t.map(async u=>{try{if(await u._isAvailable())return u}catch{return}}))).filter(u=>u),s=r[0]||D(ge),o=Me(i,e.config.apiKey,e.name),a=null;for(let u of t)try{let d=await u._get(o);if(d){let h;if(typeof d=="string"){let p=await Be(e,{idToken:d}).catch(()=>{});if(!p)break;h=await V._fromGetAccountInfoResponse(e,p,d)}else h=V._fromJSON(e,d);u!==s&&(a=h),s=u;break}}catch{}let c=r.filter(u=>u._shouldAllowMigration);return!s._shouldAllowMigration||!c.length?new n(s,e,i):(s=c[0],a&&await s._set(o,a.toJSON()),await Promise.all(t.map(async u=>{if(u!==s)try{await u._remove(o)}catch{}})),new n(s,e,i))}};function ii(n){let e=n.toLowerCase();if(e.includes("opera/")||e.includes("opr/")||e.includes("opios/"))return"Opera";if(Ci(e))return"IEMobile";if(e.includes("msie")||e.includes("trident/"))return"IE";if(e.includes("edge/"))return"Edge";if(Ri(e))return"Firefox";if(e.includes("silk/"))return"Silk";if(Oi(e))return"Blackberry";if(Di(e))return"Webos";if(Pi(e))return"Safari";if((e.includes("chrome/")||ki(e))&&!e.includes("edge/"))return"Chrome";if(Ni(e))return"Android";{let t=/([a-zA-Z\d\.]+)\/[a-zA-Z\d\.]*$/,i=n.match(t);if(i?.length===2)return i[1]}return"Other"}function Ri(n=I()){return/firefox\//i.test(n)}function Pi(n=I()){let e=n.toLowerCase();return e.includes("safari/")&&!e.includes("chrome/")&&!e.includes("crios/")&&!e.includes("android")}function ki(n=I()){return/crios\//i.test(n)}function Ci(n=I()){return/iemobile/i.test(n)}function Ni(n=I()){return/android/i.test(n)}function Oi(n=I()){return/blackberry/i.test(n)}function Di(n=I()){return/webos/i.test(n)}function un(n=I()){return/iphone|ipad|ipod/i.test(n)||/macintosh/i.test(n)&&/mobile/i.test(n)}function Os(n=I()){return un(n)&&!!window.navigator?.standalone}function Ds(){return On()&&document.documentMode===10}function Li(n=I()){return un(n)||Ni(n)||Di(n)||Oi(n)||/windows phone/i.test(n)||Ci(n)}function Mi(n,e=[]){let t;switch(n){case"Browser":t=ii(I());break;case"Worker":t=`${ii(I())}-${n}`;break;default:t=n}let i=e.length?e.join(","):"FirebaseCore-web";return`${t}/JsCore/${re}/${i}`}var qt=class{constructor(e){this.auth=e,this.queue=[]}pushCallback(e,t){let i=s=>new Promise((o,a)=>{try{let c=e(s);o(c)}catch(c){a(c)}});i.onAbort=t,this.queue.push(i);let r=this.queue.length-1;return()=>{this.queue[r]=()=>Promise.resolve()}}async runMiddleware(e){if(this.auth.currentUser===e)return;let t=[];try{for(let i of this.queue)await i(e),i.onAbort&&t.push(i.onAbort)}catch(i){t.reverse();for(let r of t)try{r()}catch{}throw this.auth._errorFactory.create("login-blocked",{originalMessage:i?.message})}}};async function Ls(n,e={}){return _(n,"GET","/v2/passwordPolicy",g(n,e))}var Ms=6,Gt=class{constructor(e){let t=e.customStrengthOptions;this.customStrengthOptions={},this.customStrengthOptions.minPasswordLength=t.minPasswordLength??Ms,t.maxPasswordLength&&(this.customStrengthOptions.maxPasswordLength=t.maxPasswordLength),t.containsLowercaseCharacter!==void 0&&(this.customStrengthOptions.containsLowercaseLetter=t.containsLowercaseCharacter),t.containsUppercaseCharacter!==void 0&&(this.customStrengthOptions.containsUppercaseLetter=t.containsUppercaseCharacter),t.containsNumericCharacter!==void 0&&(this.customStrengthOptions.containsNumericCharacter=t.containsNumericCharacter),t.containsNonAlphanumericCharacter!==void 0&&(this.customStrengthOptions.containsNonAlphanumericCharacter=t.containsNonAlphanumericCharacter),this.enforcementState=e.enforcementState,this.enforcementState==="ENFORCEMENT_STATE_UNSPECIFIED"&&(this.enforcementState="OFF"),this.allowedNonAlphanumericCharacters=e.allowedNonAlphanumericCharacters?.join("")??"",this.forceUpgradeOnSignin=e.forceUpgradeOnSignin??!1,this.schemaVersion=e.schemaVersion}validatePassword(e){let t={isValid:!0,passwordPolicy:this};return this.validatePasswordLengthOptions(e,t),this.validatePasswordCharacterOptions(e,t),t.isValid&&(t.isValid=t.meetsMinPasswordLength??!0),t.isValid&&(t.isValid=t.meetsMaxPasswordLength??!0),t.isValid&&(t.isValid=t.containsLowercaseLetter??!0),t.isValid&&(t.isValid=t.containsUppercaseLetter??!0),t.isValid&&(t.isValid=t.containsNumericCharacter??!0),t.isValid&&(t.isValid=t.containsNonAlphanumericCharacter??!0),t}validatePasswordLengthOptions(e,t){let i=this.customStrengthOptions.minPasswordLength,r=this.customStrengthOptions.maxPasswordLength;i&&(t.meetsMinPasswordLength=e.length>=i),r&&(t.meetsMaxPasswordLength=e.length<=r)}validatePasswordCharacterOptions(e,t){this.updatePasswordCharacterOptionsStatuses(t,!1,!1,!1,!1);let i;for(let r=0;r<e.length;r++)i=e.charAt(r),this.updatePasswordCharacterOptionsStatuses(t,i>="a"&&i<="z",i>="A"&&i<="Z",i>="0"&&i<="9",this.allowedNonAlphanumericCharacters.includes(i))}updatePasswordCharacterOptionsStatuses(e,t,i,r,s){this.customStrengthOptions.containsLowercaseLetter&&(e.containsLowercaseLetter||(e.containsLowercaseLetter=t)),this.customStrengthOptions.containsUppercaseLetter&&(e.containsUppercaseLetter||(e.containsUppercaseLetter=i)),this.customStrengthOptions.containsNumericCharacter&&(e.containsNumericCharacter||(e.containsNumericCharacter=r)),this.customStrengthOptions.containsNonAlphanumericCharacter&&(e.containsNonAlphanumericCharacter||(e.containsNonAlphanumericCharacter=s))}};var Kt=class{constructor(e,t,i,r){this.app=e,this.heartbeatServiceProvider=t,this.appCheckServiceProvider=i,this.config=r,this.currentUser=null,this.emulatorConfig=null,this.operations=Promise.resolve(),this.authStateSubscription=new je(this),this.idTokenSubscription=new je(this),this.beforeStateQueue=new qt(this),this.redirectUser=null,this.isProactiveRefreshEnabled=!1,this.EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION=1,this._canInitEmulator=!0,this._isInitialized=!1,this._deleted=!1,this._initializationPromise=null,this._popupRedirectResolver=null,this._errorFactory=yi,this._agentRecaptchaConfig=null,this._tenantRecaptchaConfigs={},this._projectPasswordPolicy=null,this._tenantPasswordPolicies={},this._resolvePersistenceManagerAvailable=void 0,this.lastNotifiedUid=void 0,this.languageCode=null,this.tenantId=null,this.settings={appVerificationDisabledForTesting:!1},this.frameworks=[],this.name=e.name,this.clientVersion=r.sdkClientVersion,this._persistenceManagerAvailable=new Promise(s=>this._resolvePersistenceManagerAvailable=s)}_initializeWithPersistence(e,t){return t&&(this._popupRedirectResolver=D(t)),this._initializationPromise=this.queue(async()=>{if(!this._deleted){try{this.persistenceManager=await fe.create(this,e)}catch(i){De(`Failed to initialize persistence: ${i}`),this.persistenceManager=await fe.create(this,[])}finally{this._resolvePersistenceManagerAvailable?.()}if(!this._deleted){if(this._popupRedirectResolver?._shouldInitProactively)try{await this._popupRedirectResolver._initialize(this)}catch{}try{await this.initializeCurrentUser(t)}catch(i){De(`Failed to initialize current user: ${i}`),await this.directlySetCurrentUser(null).catch(()=>{})}this.lastNotifiedUid=this.currentUser?.uid||null,!this._deleted&&(this._isInitialized=!0)}}}),this._initializationPromise}async _onStorageEvent(){if(this._deleted)return;let e=await this.assertedPersistence.getCurrentUser();if(!(!this.currentUser&&!e)){if(this.currentUser&&e&&this.currentUser.uid===e.uid){this._currentUser._assign(e),await this.currentUser.getIdToken();return}await this._updateCurrentUser(e,!0)}}async initializeCurrentUserFromIdToken(e){try{let t=await Be(this,{idToken:e}),i=await V._fromGetAccountInfoResponse(this,t,e);await this.directlySetCurrentUser(i)}catch(t){console.warn("FirebaseServerApp could not login user with provided authIdToken: ",t),await this.directlySetCurrentUser(null)}}async initializeCurrentUser(e){if(E(this.app)){let s=this.app.settings.authIdToken;return s?new Promise(o=>{setTimeout(()=>this.initializeCurrentUserFromIdToken(s).then(o,o))}):this.directlySetCurrentUser(null)}let t=await this.assertedPersistence.getCurrentUser(),i=t,r=!1;if(e&&this.config.authDomain){await this.getOrInitRedirectPersistenceManager();let s=this.redirectUser?._redirectEventId,o=i?._redirectEventId,a=await this.tryRedirectSignIn(e);(!s||s===o)&&a?.user&&(i=a.user,r=!0)}if(!i)return this.directlySetCurrentUser(null);if(!i._redirectEventId){if(r)try{await this.beforeStateQueue.runMiddleware(i)}catch(s){i=t,this._popupRedirectResolver._overrideRedirectResult(this,()=>Promise.reject(s))}return i?this.reloadAndSetCurrentUserOrClear(i):this.directlySetCurrentUser(null)}return l(this._popupRedirectResolver,this,"argument-error"),await this.getOrInitRedirectPersistenceManager(),this.redirectUser&&this.redirectUser._redirectEventId===i._redirectEventId?this.directlySetCurrentUser(i):this.reloadAndSetCurrentUserOrClear(i)}async tryRedirectSignIn(e){let t=null;try{t=await this._popupRedirectResolver._completeRedirectFn(this,e,!0)}catch{await this._setRedirectUser(null)}return t}async reloadAndSetCurrentUserOrClear(e){try{await $e(e)}catch(t){if(t?.code!=="auth/network-request-failed")return this.directlySetCurrentUser(null)}return this.directlySetCurrentUser(e)}useDeviceLanguage(){this.languageCode=Ts()}async _delete(){this._deleted=!0}async updateCurrentUser(e){if(E(this.app))return Promise.reject(L(this));let t=e?y(e):null;return t&&l(t.auth.config.apiKey===this.config.apiKey,this,"invalid-user-token"),this._updateCurrentUser(t&&t._clone(this))}async _updateCurrentUser(e,t=!1){if(!this._deleted)return e&&l(this.tenantId===e.tenantId,this,"tenant-id-mismatch"),t||await this.beforeStateQueue.runMiddleware(e),this.queue(async()=>{await this.directlySetCurrentUser(e),this.notifyAuthListeners()})}async signOut(){return E(this.app)?Promise.reject(L(this)):(await this.beforeStateQueue.runMiddleware(null),(this.redirectPersistenceManager||this._popupRedirectResolver)&&await this._setRedirectUser(null),this._updateCurrentUser(null,!0))}setPersistence(e){return E(this.app)?Promise.reject(L(this)):this.queue(async()=>{await this.assertedPersistence.setPersistence(D(e))})}_getRecaptchaConfig(){return this.tenantId==null?this._agentRecaptchaConfig:this._tenantRecaptchaConfigs[this.tenantId]}async validatePassword(e){this._getPasswordPolicyInternal()||await this._updatePasswordPolicy();let t=this._getPasswordPolicyInternal();return t.schemaVersion!==this.EXPECTED_PASSWORD_POLICY_SCHEMA_VERSION?Promise.reject(this._errorFactory.create("unsupported-password-policy-schema-version",{})):t.validatePassword(e)}_getPasswordPolicyInternal(){return this.tenantId===null?this._projectPasswordPolicy:this._tenantPasswordPolicies[this.tenantId]}async _updatePasswordPolicy(){let e=await Ls(this),t=new Gt(e);this.tenantId===null?this._projectPasswordPolicy=t:this._tenantPasswordPolicies[this.tenantId]=t}_getPersistenceType(){return this.assertedPersistence.persistence.type}_getPersistence(){return this.assertedPersistence.persistence}_updateErrorMap(e){this._errorFactory=new C("auth","Firebase",e())}onAuthStateChanged(e,t,i){return this.registerStateListener(this.authStateSubscription,e,t,i)}beforeAuthStateChanged(e,t){return this.beforeStateQueue.pushCallback(e,t)}onIdTokenChanged(e,t,i){return this.registerStateListener(this.idTokenSubscription,e,t,i)}authStateReady(){return new Promise((e,t)=>{if(this.currentUser)e();else{let i=this.onAuthStateChanged(()=>{i(),e()},t)}})}async revokeAccessToken(e){if(this.currentUser){let t=await this.currentUser.getIdToken(),i={providerId:"apple.com",tokenType:"ACCESS_TOKEN",token:e,idToken:t};this.tenantId!=null&&(i.tenantId=this.tenantId),await Ns(this,i)}}toJSON(){return{apiKey:this.config.apiKey,authDomain:this.config.authDomain,appName:this.name,currentUser:this._currentUser?.toJSON()}}async _setRedirectUser(e,t){let i=await this.getOrInitRedirectPersistenceManager(t);return e===null?i.removeCurrentUser():i.setCurrentUser(e)}async getOrInitRedirectPersistenceManager(e){if(!this.redirectPersistenceManager){let t=e&&D(e)||this._popupRedirectResolver;l(t,this,"argument-error"),this.redirectPersistenceManager=await fe.create(this,[D(t._redirectPersistence)],"redirectUser"),this.redirectUser=await this.redirectPersistenceManager.getCurrentUser()}return this.redirectPersistenceManager}async _redirectUserForId(e){return this._isInitialized&&await this.queue(async()=>{}),this._currentUser?._redirectEventId===e?this._currentUser:this.redirectUser?._redirectEventId===e?this.redirectUser:null}async _persistUserIfCurrent(e){if(e===this.currentUser)return this.queue(async()=>this.directlySetCurrentUser(e))}_notifyListenersIfCurrent(e){e===this.currentUser&&this.notifyAuthListeners()}_key(){return`${this.config.authDomain}:${this.config.apiKey}:${this.name}`}_startProactiveRefresh(){this.isProactiveRefreshEnabled=!0,this.currentUser&&this._currentUser._startProactiveRefresh()}_stopProactiveRefresh(){this.isProactiveRefreshEnabled=!1,this.currentUser&&this._currentUser._stopProactiveRefresh()}get _currentUser(){return this.currentUser}notifyAuthListeners(){if(!this._isInitialized)return;this.idTokenSubscription.next(this.currentUser);let e=this.currentUser?.uid??null;this.lastNotifiedUid!==e&&(this.lastNotifiedUid=e,this.authStateSubscription.next(this.currentUser))}registerStateListener(e,t,i,r){if(this._deleted)return()=>{};let s=typeof t=="function"?t:t.next.bind(t),o=!1,a=this._isInitialized?Promise.resolve():this._initializationPromise;if(l(a,this,"internal-error"),a.then(()=>{o||s(this.currentUser)}).catch(c=>{if(!o)if(typeof t!="function"&&t.error)t.error(c);else if(i)i(c);else throw c}),typeof t=="function"){let c=e.addObserver(t,i,r);return()=>{o=!0,c()}}else{let c=e.addObserver(t);return()=>{o=!0,c()}}}async directlySetCurrentUser(e){if(this.currentUser&&this.currentUser!==e&&this._currentUser._stopProactiveRefresh(),e&&this.isProactiveRefreshEnabled&&e._startProactiveRefresh(),this.currentUser=e,this.persistenceManager)try{e?await this.persistenceManager.setCurrentUser(e):await this.persistenceManager.removeCurrentUser()}catch(t){let i=t?.message||String(t),r=ct(this,"internal-error",`An internal AuthError has occurred: ${i}`);throw r.customData={originalError:t},r}}queue(e){return this.operations=this.operations.then(e,e),this.operations}get assertedPersistence(){return l(this.persistenceManager,this,"internal-error"),this.persistenceManager}_logFramework(e){!e||this.frameworks.includes(e)||(this.frameworks.push(e),this.frameworks.sort(),this.clientVersion=Mi(this.config.clientPlatform,this._getFrameworks()))}_getFrameworks(){return this.frameworks}async _getAdditionalHeaders(){let e={"X-Client-Version":this.clientVersion};this.app.options.appId&&(e["X-Firebase-gmpid"]=this.app.options.appId);let t=await this.heartbeatServiceProvider.getImmediate({optional:!0})?.getHeartbeatsHeader();t&&(e["X-Firebase-Client"]=t);let i=await this._getAppCheckToken();return i&&(e["X-Firebase-AppCheck"]=i),e}async _getAppCheckToken(){if(E(this.app)&&this.app.settings.appCheckToken)return this.app.settings.appCheckToken;let e=await this.appCheckServiceProvider.getImmediate({optional:!0})?.getToken();return e?.error&&De(`Error while retrieving App Check token: ${e.error}`),e?.token}};function b(n){return y(n)}var je=class{constructor(e){this.auth=e,this.observer=null,this.addObserver=Un(t=>this.observer=t)}get next(){return l(this.observer,this.auth,"internal-error"),this.observer.next.bind(this.observer)}};var ut={async loadJS(){throw new Error("Unable to load external scripts")},recaptchaV2Script:"",recaptchaEnterpriseScript:"",gapiScript:""};function Us(n){ut=n}function Ui(n){return ut.loadJS(n)}function xs(){return ut.recaptchaEnterpriseScript}function Fs(){return ut.gapiScript}function xi(n){return`__${n}${Math.floor(Math.random()*1e6)}`}var Jt=class{constructor(){this.enterprise=new Yt}ready(e){e()}execute(e,t){return Promise.resolve("token")}render(e,t){return""}},Yt=class{ready(e){e()}execute(e,t){return Promise.resolve("token")}render(e,t){return""}};var Vs="recaptcha-enterprise",pe="NO_RECAPTCHA",ri="onFirebaseAuthREInstanceReady",_e=class n{constructor(e){this.type=Vs,this.auth=b(e)}async verify(e="verify",t=!1){async function i(s){if(!t){if(s.tenantId==null&&s._agentRecaptchaConfig!=null)return s._agentRecaptchaConfig.siteKey;if(s.tenantId!=null&&s._tenantRecaptchaConfigs[s.tenantId]!==void 0)return s._tenantRecaptchaConfigs[s.tenantId].siteKey}return new Promise(async(o,a)=>{vi(s,{clientType:"CLIENT_TYPE_WEB",version:"RECAPTCHA_ENTERPRISE"}).then(c=>{if(c.recaptchaKey===void 0)a(new Error("recaptcha Enterprise site key undefined"));else{let u=new We(c);return s.tenantId==null?s._agentRecaptchaConfig=u:s._tenantRecaptchaConfigs[s.tenantId]=u,o(u.siteKey)}}).catch(c=>{a(c)})})}function r(s,o,a){let c=window.grecaptcha;ei(c)?c.enterprise.ready(()=>{c.enterprise.execute(s,{action:e}).then(u=>{o(u)}).catch(()=>{o(pe)})}):a(Error("No reCAPTCHA enterprise script loaded."))}return this.auth.settings.appVerificationDisabledForTesting?new Jt().execute("siteKey",{action:"verify"}):new Promise((s,o)=>{i(this.auth).then(async a=>{if(!t&&ei(window.grecaptcha)&&n.scriptInjectionDeferred)await n.scriptInjectionDeferred.promise,r(a,s,o);else{if(typeof window>"u"){o(new Error("RecaptchaVerifier is only supported in browser"));return}let c=xs();c.length!==0&&(c+=a+`&onload=${ri}`),n.scriptInjectionDeferred=new Q,window[ri]=()=>{n.scriptInjectionDeferred?.resolve()},Ui(c).then(()=>n.scriptInjectionDeferred?.promise).then(()=>{r(a,s,o)}).catch(u=>{o(u)})}}).catch(a=>{o(a)})})}};_e.scriptInjectionDeferred=null;async function ue(n,e,t,i=!1,r=!1){let s=new _e(n),o;if(r)o=pe;else try{o=await s.verify(t)}catch{o=await s.verify(t,!0)}let a={...e};if(t==="mfaSmsEnrollment"||t==="mfaSmsSignIn"){if("phoneEnrollmentInfo"in a){let c=a.phoneEnrollmentInfo.phoneNumber,u=a.phoneEnrollmentInfo.recaptchaToken;Object.assign(a,{phoneEnrollmentInfo:{phoneNumber:c,recaptchaToken:u,captchaResponse:o,clientType:"CLIENT_TYPE_WEB",recaptchaVersion:"RECAPTCHA_ENTERPRISE"}})}else if("phoneSignInInfo"in a){let c=a.phoneSignInInfo.recaptchaToken;Object.assign(a,{phoneSignInInfo:{recaptchaToken:c,captchaResponse:o,clientType:"CLIENT_TYPE_WEB",recaptchaVersion:"RECAPTCHA_ENTERPRISE"}})}return a}return i?Object.assign(a,{captchaResp:o}):Object.assign(a,{captchaResponse:o}),Object.assign(a,{clientType:"CLIENT_TYPE_WEB"}),Object.assign(a,{recaptchaVersion:"RECAPTCHA_ENTERPRISE"}),a}async function $(n,e,t,i,r){if(r==="EMAIL_PASSWORD_PROVIDER")if(n._getRecaptchaConfig()?.isProviderEnabled("EMAIL_PASSWORD_PROVIDER")){let s=await ue(n,e,t,t==="getOobCode");return i(n,s)}else return i(n,e).catch(async s=>{if(s.code==="auth/missing-recaptcha-token"){console.log(`${t} is protected by reCAPTCHA Enterprise for this project. Automatically triggering the reCAPTCHA flow and restarting the flow.`);let o=await ue(n,e,t,t==="getOobCode");return i(n,o)}else return Promise.reject(s)});else if(r==="PHONE_PROVIDER")if(n._getRecaptchaConfig()?.isProviderEnabled("PHONE_PROVIDER")){let s=await ue(n,e,t);return i(n,s).catch(async o=>{if(n._getRecaptchaConfig()?.getProviderEnforcementState("PHONE_PROVIDER")==="AUDIT"&&(o.code==="auth/missing-recaptcha-token"||o.code==="auth/invalid-app-credential")){console.log(`Failed to verify with reCAPTCHA Enterprise. Automatically triggering the reCAPTCHA v2 flow to complete the ${t} flow.`);let a=await ue(n,e,t,!1,!0);return i(n,a)}return Promise.reject(o)})}else{let s=await ue(n,e,t,!1,!0);return i(n,s)}else return Promise.reject(r+" provider is not supported.")}async function Hs(n){let e=b(n),t=await vi(e,{clientType:"CLIENT_TYPE_WEB",version:"RECAPTCHA_ENTERPRISE"}),i=new We(t);e.tenantId==null?e._agentRecaptchaConfig=i:e._tenantRecaptchaConfigs[e.tenantId]=i,i.isAnyProviderEnabled()&&new _e(e).verify()}function Fi(n,e){let t=Ut(n,"auth");if(t.isInitialized()){let r=t.getImmediate(),s=t.getOptions();if(U(s,e??{}))return r;w(r,"already-initialized")}return t.initialize({options:e})}function Ws(n,e){let t=e?.persistence||[],i=(Array.isArray(t)?t:[t]).map(D);e?.errorMap&&n._updateErrorMap(e.errorMap),n._initializeWithPersistence(i,e?.popupRedirectResolver)}function lt(n,e,t){let i=b(n);l(/^https?:\/\//.test(e),i,"invalid-emulator-scheme");let r=!!t?.disableWarnings,s=Vi(e),{host:o,port:a}=Bs(e),c=a===null?"":`:${a}`,u={url:`${s}//${o}${c}/`},d=Object.freeze({host:o,port:a,protocol:s.replace(":",""),options:Object.freeze({disableWarnings:r})});if(!i._canInitEmulator){l(i.config.emulator&&i.emulatorConfig,i,"emulator-config-failed"),l(U(u,i.config.emulator)&&U(d,i.emulatorConfig),i,"emulator-config-failed");return}i.config.emulator=u,i.emulatorConfig=d,i.settings.appVerificationDisabledForTesting=!0,Pe(o)?xn(`${s}//${o}${c}`):r||$s()}function Vi(n){let e=n.indexOf(":");return e<0?"":n.substr(0,e+1)}function Bs(n){let e=Vi(n),t=/(\/\/)?([^?#/]+)/.exec(n.substr(e.length));if(!t)return{host:"",port:null};let i=t[2].split("@").pop()||"",r=/^(\[[^\]]+\])(:|$)/.exec(i);if(r){let s=r[1];return{host:s,port:si(i.substr(s.length+1))}}else{let[s,o]=i.split(":");return{host:s,port:si(o)}}}function si(n){if(!n)return null;let e=Number(n);return isNaN(e)?null:e}function $s(){function n(){let e=document.createElement("p"),t=e.style;e.innerText="Running in emulator mode. Do not use with production credentials.",t.position="fixed",t.width="100%",t.backgroundColor="#ffffff",t.border=".1em solid #000000",t.color="#b50000",t.bottom="0px",t.left="0px",t.margin="0px",t.zIndex="10000",t.textAlign="center",e.classList.add("firebase-emulator-warning"),document.body.appendChild(e)}typeof console<"u"&&typeof console.info=="function"&&console.info("WARNING: You are using the Auth Emulator, which is intended for local testing only. Do not use with production credentials."),typeof window<"u"&&typeof document<"u"&&(document.readyState==="loading"?window.addEventListener("DOMContentLoaded",n):n())}var j=class{constructor(e,t){this.providerId=e,this.signInMethod=t}toJSON(){return R("not implemented")}_getIdTokenResponse(e){return R("not implemented")}_linkToIdToken(e,t){return R("not implemented")}_getReauthenticationResolver(e){return R("not implemented")}};async function zs(n,e){return _(n,"POST","/v1/accounts:signUp",e)}async function js(n,e){return H(n,"POST","/v1/accounts:signInWithPassword",g(n,e))}async function Hi(n,e){return _(n,"POST","/v1/accounts:sendOobCode",g(n,e))}async function qs(n,e){return Hi(n,e)}async function Gs(n,e){return Hi(n,e)}async function Ks(n,e){return H(n,"POST","/v1/accounts:signInWithEmailLink",g(n,e))}async function Js(n,e){return H(n,"POST","/v1/accounts:signInWithEmailLink",g(n,e))}var Ie=class n extends j{constructor(e,t,i,r=null){super("password",i),this._email=e,this._password=t,this._tenantId=r}static _fromEmailAndPassword(e,t){return new n(e,t,"password")}static _fromEmailAndCode(e,t,i=null){return new n(e,t,"emailLink",i)}toJSON(){return{email:this._email,password:this._password,signInMethod:this.signInMethod,tenantId:this._tenantId}}static fromJSON(e){let t=typeof e=="string"?JSON.parse(e):e;if(t?.email&&t?.password){if(t.signInMethod==="password")return this._fromEmailAndPassword(t.email,t.password);if(t.signInMethod==="emailLink")return this._fromEmailAndCode(t.email,t.password,t.tenantId)}return null}async _getIdTokenResponse(e){switch(this.signInMethod){case"password":let t={returnSecureToken:!0,email:this._email,password:this._password,clientType:"CLIENT_TYPE_WEB"};return $(e,t,"signInWithPassword",js,"EMAIL_PASSWORD_PROVIDER");case"emailLink":return Ks(e,{email:this._email,oobCode:this._password});default:w(e,"internal-error")}}async _linkToIdToken(e,t){switch(this.signInMethod){case"password":let i={idToken:t,returnSecureToken:!0,email:this._email,password:this._password,clientType:"CLIENT_TYPE_WEB"};return $(e,i,"signUpPassword",zs,"EMAIL_PASSWORD_PROVIDER");case"emailLink":return Js(e,{idToken:t,email:this._email,oobCode:this._password});default:w(e,"internal-error")}}_getReauthenticationResolver(e){return this._getIdTokenResponse(e)}};async function se(n,e){return H(n,"POST","/v1/accounts:signInWithIdp",g(n,e))}var Ys="http://localhost",q=class n extends j{constructor(){super(...arguments),this.pendingToken=null}static _fromParams(e){let t=new n(e.providerId,e.signInMethod);return e.idToken||e.accessToken?(e.idToken&&(t.idToken=e.idToken),e.accessToken&&(t.accessToken=e.accessToken),e.nonce&&!e.pendingToken&&(t.nonce=e.nonce),e.pendingToken&&(t.pendingToken=e.pendingToken)):e.oauthToken&&e.oauthTokenSecret?(t.accessToken=e.oauthToken,t.secret=e.oauthTokenSecret):w("argument-error"),t}toJSON(){return{idToken:this.idToken,accessToken:this.accessToken,secret:this.secret,nonce:this.nonce,pendingToken:this.pendingToken,providerId:this.providerId,signInMethod:this.signInMethod}}static fromJSON(e){let t=typeof e=="string"?JSON.parse(e):e,{providerId:i,signInMethod:r,...s}=t;if(!i||!r)return null;let o=new n(i,r);return o.idToken=s.idToken||void 0,o.accessToken=s.accessToken||void 0,o.secret=s.secret,o.nonce=s.nonce,o.pendingToken=s.pendingToken||null,o}_getIdTokenResponse(e){let t=this.buildRequest();return se(e,t)}_linkToIdToken(e,t){let i=this.buildRequest();return i.idToken=t,se(e,i)}_getReauthenticationResolver(e){let t=this.buildRequest();return t.autoCreate=!1,se(e,t)}buildRequest(){let e={requestUri:Ys,returnSecureToken:!0};if(this.pendingToken)e.pendingToken=this.pendingToken;else{let t={};this.idToken&&(t.id_token=this.idToken),this.accessToken&&(t.access_token=this.accessToken),this.secret&&(t.oauth_token_secret=this.secret),t.providerId=this.providerId,this.nonce&&!this.pendingToken&&(t.nonce=this.nonce),e.postBody=Z(t)}return e}};async function oi(n,e){return _(n,"POST","/v1/accounts:sendVerificationCode",g(n,e))}async function Xs(n,e){return H(n,"POST","/v1/accounts:signInWithPhoneNumber",g(n,e))}async function Qs(n,e){let t=await H(n,"POST","/v1/accounts:signInWithPhoneNumber",g(n,e));if(t.temporaryProof)throw le(n,"account-exists-with-different-credential",t);return t}var Zs={USER_NOT_FOUND:"user-not-found"};async function eo(n,e){let t={...e,operation:"REAUTH"};return H(n,"POST","/v1/accounts:signInWithPhoneNumber",g(n,t),Zs)}var Ee=class n extends j{constructor(e){super("phone","phone"),this.params=e}static _fromVerification(e,t){return new n({verificationId:e,verificationCode:t})}static _fromTokenResponse(e,t){return new n({phoneNumber:e,temporaryProof:t})}_getIdTokenResponse(e){return Xs(e,this._makeVerificationRequest())}_linkToIdToken(e,t){return Qs(e,{idToken:t,...this._makeVerificationRequest()})}_getReauthenticationResolver(e){return eo(e,this._makeVerificationRequest())}_makeVerificationRequest(){let{temporaryProof:e,phoneNumber:t,verificationId:i,verificationCode:r}=this.params;return e&&t?{temporaryProof:e,phoneNumber:t}:{sessionInfo:i,code:r}}toJSON(){let e={providerId:this.providerId};return this.params.phoneNumber&&(e.phoneNumber=this.params.phoneNumber),this.params.temporaryProof&&(e.temporaryProof=this.params.temporaryProof),this.params.verificationCode&&(e.verificationCode=this.params.verificationCode),this.params.verificationId&&(e.verificationId=this.params.verificationId),e}static fromJSON(e){typeof e=="string"&&(e=JSON.parse(e));let{verificationId:t,verificationCode:i,phoneNumber:r,temporaryProof:s}=e;return!i&&!t&&!r&&!s?null:new n({verificationId:t,verificationCode:i,phoneNumber:r,temporaryProof:s})}};function to(n){switch(n){case"recoverEmail":return"RECOVER_EMAIL";case"resetPassword":return"PASSWORD_RESET";case"signIn":return"EMAIL_SIGNIN";case"verifyEmail":return"VERIFY_EMAIL";case"verifyAndChangeEmail":return"VERIFY_AND_CHANGE_EMAIL";case"revertSecondFactorAddition":return"REVERT_SECOND_FACTOR_ADDITION";default:return null}}function no(n){let e=ee(te(n)).link,t=e?ee(te(e)).deep_link_id:null,i=ee(te(n)).deep_link_id;return(i?ee(te(i)).link:null)||i||t||e||n}var qe=class n{constructor(e){let t=ee(te(e)),i=t.apiKey??null,r=t.oobCode??null,s=to(t.mode??null);l(i&&r&&s,"argument-error"),this.apiKey=i,this.operation=s,this.code=r,this.continueUrl=t.continueUrl??null,this.languageCode=t.lang??null,this.tenantId=t.tenantId??null}static parseLink(e){let t=no(e);try{return new n(t)}catch{return null}}};var G=class n{constructor(){this.providerId=n.PROVIDER_ID}static credential(e,t){return Ie._fromEmailAndPassword(e,t)}static credentialWithLink(e,t){let i=qe.parseLink(t);return l(i,"argument-error"),Ie._fromEmailAndCode(e,i.code,i.tenantId)}};G.PROVIDER_ID="password";G.EMAIL_PASSWORD_SIGN_IN_METHOD="password";G.EMAIL_LINK_SIGN_IN_METHOD="emailLink";var ye=class{constructor(e){this.providerId=e,this.defaultLanguageCode=null,this.customParameters={}}setDefaultLanguage(e){this.defaultLanguageCode=e}setCustomParameters(e){return this.customParameters=e,this}getCustomParameters(){return this.customParameters}};var K=class extends ye{constructor(){super(...arguments),this.scopes=[]}addScope(e){return this.scopes.includes(e)||this.scopes.push(e),this}getScopes(){return[...this.scopes]}};var we=class n extends K{constructor(){super("facebook.com")}static credential(e){return q._fromParams({providerId:n.PROVIDER_ID,signInMethod:n.FACEBOOK_SIGN_IN_METHOD,accessToken:e})}static credentialFromResult(e){return n.credentialFromTaggedObject(e)}static credentialFromError(e){return n.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e||!("oauthAccessToken"in e)||!e.oauthAccessToken)return null;try{return n.credential(e.oauthAccessToken)}catch{return null}}};we.FACEBOOK_SIGN_IN_METHOD="facebook.com";we.PROVIDER_ID="facebook.com";var J=class n extends K{constructor(){super("google.com"),this.addScope("profile")}static credential(e,t){return q._fromParams({providerId:n.PROVIDER_ID,signInMethod:n.GOOGLE_SIGN_IN_METHOD,idToken:e,accessToken:t})}static credentialFromResult(e){return n.credentialFromTaggedObject(e)}static credentialFromError(e){return n.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e)return null;let{oauthIdToken:t,oauthAccessToken:i}=e;if(!t&&!i)return null;try{return n.credential(t,i)}catch{return null}}};J.GOOGLE_SIGN_IN_METHOD="google.com";J.PROVIDER_ID="google.com";var Te=class n extends K{constructor(){super("github.com")}static credential(e){return q._fromParams({providerId:n.PROVIDER_ID,signInMethod:n.GITHUB_SIGN_IN_METHOD,accessToken:e})}static credentialFromResult(e){return n.credentialFromTaggedObject(e)}static credentialFromError(e){return n.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e||!("oauthAccessToken"in e)||!e.oauthAccessToken)return null;try{return n.credential(e.oauthAccessToken)}catch{return null}}};Te.GITHUB_SIGN_IN_METHOD="github.com";Te.PROVIDER_ID="github.com";var ve=class n extends K{constructor(){super("twitter.com")}static credential(e,t){return q._fromParams({providerId:n.PROVIDER_ID,signInMethod:n.TWITTER_SIGN_IN_METHOD,oauthToken:e,oauthTokenSecret:t})}static credentialFromResult(e){return n.credentialFromTaggedObject(e)}static credentialFromError(e){return n.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e)return null;let{oauthAccessToken:t,oauthTokenSecret:i}=e;if(!t||!i)return null;try{return n.credential(t,i)}catch{return null}}};ve.TWITTER_SIGN_IN_METHOD="twitter.com";ve.PROVIDER_ID="twitter.com";async function io(n,e){return H(n,"POST","/v1/accounts:signUp",g(n,e))}var ae=class n{constructor(e){this.user=e.user,this.providerId=e.providerId,this._tokenResponse=e._tokenResponse,this.operationType=e.operationType}static async _fromIdTokenResponse(e,t,i,r=!1){let s=await V._fromIdTokenResponse(e,i,r),o=ai(i);return new n({user:s,providerId:o,_tokenResponse:i,operationType:t})}static async _forOperation(e,t,i){await e._updateTokensIfNecessary(i,!0);let r=ai(i);return new n({user:e,providerId:r,_tokenResponse:i,operationType:t})}};function ai(n){return n.providerId?n.providerId:"phoneNumber"in n?"phone":null}var Xt=class n extends T{constructor(e,t,i,r){super(t.code,t.message),this.operationType=i,this.user=r,Object.setPrototypeOf(this,n.prototype),this.customData={appName:e.name,tenantId:e.tenantId??void 0,_serverResponse:t.customData._serverResponse,operationType:i}}static _fromErrorAndOperation(e,t,i,r){return new n(e,t,i,r)}};function Wi(n,e,t,i){return(e==="reauthenticate"?t._getReauthenticationResolver(n):t._getIdTokenResponse(n)).catch(s=>{throw s.code==="auth/multi-factor-auth-required"?Xt._fromErrorAndOperation(n,s,e,i):s})}async function ro(n,e,t=!1){let i=await oe(n,e._linkToIdToken(n.auth,await n.getIdToken()),t);return ae._forOperation(n,"link",i)}async function so(n,e,t=!1){let{auth:i}=n;if(E(i.app))return Promise.reject(L(i));let r="reauthenticate";try{let s=await oe(n,Wi(i,r,e,n),t);l(s.idToken,i,"internal-error");let o=cn(s.idToken);l(o,i,"internal-error");let{sub:a}=o;return l(n.uid===a,i,"user-mismatch"),ae._forOperation(n,r,s)}catch(s){throw s?.code==="auth/user-not-found"&&w(i,"user-mismatch"),s}}async function Bi(n,e,t=!1){if(E(n.app))return Promise.reject(L(n));let i="signIn",r=await Wi(n,i,e),s=await ae._fromIdTokenResponse(n,i,r);return t||await n._updateCurrentUser(s.user),s}async function $i(n,e){return Bi(b(n),e)}function zi(n,e,t){l(t.url?.length>0,n,"invalid-continue-uri"),l(typeof t.dynamicLinkDomain>"u"||t.dynamicLinkDomain.length>0,n,"invalid-dynamic-link-domain"),l(typeof t.linkDomain>"u"||t.linkDomain.length>0,n,"invalid-hosting-link-domain"),e.continueUrl=t.url,e.dynamicLinkDomain=t.dynamicLinkDomain,e.linkDomain=t.linkDomain,e.canHandleCodeInApp=t.handleCodeInApp,t.iOS&&(l(t.iOS.bundleId.length>0,n,"missing-ios-bundle-id"),e.iOSBundleId=t.iOS.bundleId),t.android&&(l(t.android.packageName.length>0,n,"missing-android-pkg-name"),e.androidInstallApp=t.android.installApp,e.androidMinimumVersionCode=t.android.minimumVersion,e.androidPackageName=t.android.packageName)}async function ji(n){let e=b(n);e._getPasswordPolicyInternal()&&await e._updatePasswordPolicy()}async function ln(n,e,t){let i=b(n),r={requestType:"PASSWORD_RESET",email:e,clientType:"CLIENT_TYPE_WEB"};t&&zi(i,r,t),await $(i,r,"getOobCode",Gs,"EMAIL_PASSWORD_PROVIDER")}async function dn(n,e,t){if(E(n.app))return Promise.reject(L(n));let i=b(n),o=await $(i,{returnSecureToken:!0,email:e,password:t,clientType:"CLIENT_TYPE_WEB"},"signUpPassword",io,"EMAIL_PASSWORD_PROVIDER").catch(c=>{throw c.code==="auth/password-does-not-meet-requirements"&&ji(n),c}),a=await ae._fromIdTokenResponse(i,"signIn",o);return await i._updateCurrentUser(a.user),a}function hn(n,e,t){return E(n.app)?Promise.reject(L(n)):$i(y(n),G.credential(e,t)).catch(async i=>{throw i.code==="auth/password-does-not-meet-requirements"&&ji(n),i})}async function fn(n,e){let t=y(n),r={requestType:"VERIFY_EMAIL",idToken:await n.getIdToken()};e&&zi(t.auth,r,e);let{email:s}=await qs(t.auth,r);s!==n.email&&await n.reload()}async function oo(n,e){return _(n,"POST","/v1/accounts:update",e)}async function pn(n,e){let{displayName:t,photoURL:i}=e;if(t===void 0&&i===void 0)return;let r=y(n),o={idToken:await r.getIdToken(),displayName:t,photoUrl:i,returnSecureToken:!0},a=await oe(r,oo(r.auth,o));r.displayName=a.displayName||null,r.photoURL=a.photoUrl||null;let c=r.providerData.find(({providerId:u})=>u==="password");c&&(c.displayName=r.displayName,c.photoURL=r.photoURL),await r._updateTokensIfNecessary(a)}function mn(n,e){return y(n).setPersistence(e)}function qi(n,e,t,i){return y(n).onIdTokenChanged(e,t,i)}function Gi(n,e,t){return y(n).beforeAuthStateChanged(e,t)}function ci(n,e){return _(n,"POST","/v2/accounts/mfaEnrollment:start",g(n,e))}function ao(n,e){return _(n,"POST","/v2/accounts/mfaEnrollment:finalize",g(n,e))}function co(n,e){return _(n,"POST","/v2/accounts/mfaEnrollment:start",g(n,e))}function uo(n,e){return _(n,"POST","/v2/accounts/mfaEnrollment:finalize",g(n,e))}var Ge="__sak";var Ke=class{constructor(e,t){this.storageRetriever=e,this.type=t}_isAvailable(){try{return this.storage?(this.storage.setItem(Ge,"1"),this.storage.removeItem(Ge),Promise.resolve(!0)):Promise.resolve(!1)}catch{return Promise.resolve(!1)}}_set(e,t){return this.storage.setItem(e,JSON.stringify(t)),Promise.resolve()}_get(e){let t=this.storage.getItem(e);return Promise.resolve(t?JSON.parse(t):null)}_remove(e){return this.storage.removeItem(e),Promise.resolve()}get storage(){return this.storageRetriever()}};var lo=1e3,ho=10,Je=class extends Ke{constructor(){super(()=>window.localStorage,"LOCAL"),this.boundEventHandler=(e,t)=>this.onStorageEvent(e,t),this.listeners={},this.localCache={},this.pollTimer=null,this.fallbackToPolling=Li(),this._shouldAllowMigration=!0}forAllChangedKeys(e){for(let t of Object.keys(this.listeners)){let i=this.storage.getItem(t),r=this.localCache[t];i!==r&&e(t,r,i)}}onStorageEvent(e,t=!1){if(!e.key){this.forAllChangedKeys((o,a,c)=>{this.notifyListeners(o,c)});return}let i=e.key;t?this.detachListener():this.stopPolling();let r=()=>{let o=this.storage.getItem(i);!t&&this.localCache[i]===o||this.notifyListeners(i,o)},s=this.storage.getItem(i);Ds()&&s!==e.newValue&&e.newValue!==e.oldValue?setTimeout(r,ho):r()}notifyListeners(e,t){this.localCache[e]=t;let i=this.listeners[e];if(i)for(let r of Array.from(i))r(t&&JSON.parse(t))}startPolling(){this.stopPolling(),this.pollTimer=setInterval(()=>{this.forAllChangedKeys((e,t,i)=>{this.onStorageEvent(new StorageEvent("storage",{key:e,oldValue:t,newValue:i}),!0)})},lo)}stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)}attachListener(){window.addEventListener("storage",this.boundEventHandler)}detachListener(){window.removeEventListener("storage",this.boundEventHandler)}_addListener(e,t){Object.keys(this.listeners).length===0&&(this.fallbackToPolling?this.startPolling():this.attachListener()),this.listeners[e]||(this.listeners[e]=new Set,this.localCache[e]=this.storage.getItem(e)),this.listeners[e].add(t)}_removeListener(e,t){this.listeners[e]&&(this.listeners[e].delete(t),this.listeners[e].size===0&&delete this.listeners[e]),Object.keys(this.listeners).length===0&&(this.detachListener(),this.stopPolling())}async _set(e,t){await super._set(e,t),this.localCache[e]=JSON.stringify(t)}async _get(e){let t=await super._get(e);return this.localCache[e]=JSON.stringify(t),t}async _remove(e){await super._remove(e),delete this.localCache[e]}};Je.type="LOCAL";var Ki=Je;var fo=1e3;function Vt(n){let e=n.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),t=RegExp(`${e}=([^;]+)`);return document.cookie.match(t)?.[1]??null}function Ht(n){return`${window.location.protocol==="http:"?"__dev_":"__HOST-"}FIREBASE_${n.split(":")[3]}`}var Qt=class{constructor(){this.type="COOKIE",this.listenerUnsubscribes=new Map}_getFinalTarget(e){if(typeof window===void 0)return e;let t=new URL(`${window.location.origin}/__cookies__`);return t.searchParams.set("finalTarget",e),t}async _isAvailable(){return typeof isSecureContext=="boolean"&&!isSecureContext||typeof navigator>"u"||typeof document>"u"?!1:navigator.cookieEnabled??!0}async _set(e,t){}async _get(e){if(!this._isAvailable())return null;let t=Ht(e);return window.cookieStore?(await window.cookieStore.get(t))?.value:Vt(t)}async _remove(e){if(!this._isAvailable()||!await this._get(e))return;let i=Ht(e);document.cookie=`${i}=;Max-Age=34560000;Partitioned;Secure;SameSite=Strict;Path=/;Priority=High`,await fetch("/__cookies__",{method:"DELETE"}).catch(()=>{})}_addListener(e,t){if(!this._isAvailable())return;let i=Ht(e);if(window.cookieStore){let a=(u=>{let d=u.changed.find(p=>p.name===i);d&&t(d.value),u.deleted.find(p=>p.name===i)&&t(null)}),c=()=>window.cookieStore.removeEventListener("change",a);return this.listenerUnsubscribes.set(t,c),window.cookieStore.addEventListener("change",a)}let r=Vt(i),s=setInterval(()=>{let a=Vt(i);a!==r&&(t(a),r=a)},fo),o=()=>clearInterval(s);this.listenerUnsubscribes.set(t,o)}_removeListener(e,t){let i=this.listenerUnsubscribes.get(t);i&&(i(),this.listenerUnsubscribes.delete(t))}};Qt.type="COOKIE";var Ye=class extends Ke{constructor(){super(()=>window.sessionStorage,"SESSION")}_addListener(e,t){}_removeListener(e,t){}};Ye.type="SESSION";var gn=Ye;function po(n){return Promise.all(n.map(async e=>{try{return{fulfilled:!0,value:await e}}catch(t){return{fulfilled:!1,reason:t}}}))}var Xe=class n{constructor(e){this.eventTarget=e,this.handlersMap={},this.boundEventHandler=this.handleEvent.bind(this)}static _getInstance(e){let t=this.receivers.find(r=>r.isListeningto(e));if(t)return t;let i=new n(e);return this.receivers.push(i),i}isListeningto(e){return this.eventTarget===e}async handleEvent(e){let t=e,{eventId:i,eventType:r,data:s}=t.data,o=this.handlersMap[r];if(!o?.size)return;t.ports[0].postMessage({status:"ack",eventId:i,eventType:r});let a=Array.from(o).map(async u=>u(t.origin,s)),c=await po(a);t.ports[0].postMessage({status:"done",eventId:i,eventType:r,response:c})}_subscribe(e,t){Object.keys(this.handlersMap).length===0&&this.eventTarget.addEventListener("message",this.boundEventHandler),this.handlersMap[e]||(this.handlersMap[e]=new Set),this.handlersMap[e].add(t)}_unsubscribe(e,t){this.handlersMap[e]&&t&&this.handlersMap[e].delete(t),(!t||this.handlersMap[e].size===0)&&delete this.handlersMap[e],Object.keys(this.handlersMap).length===0&&this.eventTarget.removeEventListener("message",this.boundEventHandler)}};Xe.receivers=[];function _n(n="",e=10){let t="";for(let i=0;i<e;i++)t+=Math.floor(Math.random()*10);return n+t}var Zt=class{constructor(e){this.target=e,this.handlers=new Set}removeMessageHandler(e){e.messageChannel&&(e.messageChannel.port1.removeEventListener("message",e.onMessage),e.messageChannel.port1.close()),this.handlers.delete(e)}async _send(e,t,i=50){let r=typeof MessageChannel<"u"?new MessageChannel:null;if(!r)throw new Error("connection_unavailable");let s,o;return new Promise((a,c)=>{let u=_n("",20);r.port1.start();let d=setTimeout(()=>{c(new Error("unsupported_event"))},i);o={messageChannel:r,onMessage(h){let p=h;if(p.data.eventId===u)switch(p.data.status){case"ack":clearTimeout(d),s=setTimeout(()=>{c(new Error("timeout"))},3e3);break;case"done":clearTimeout(s),a(p.data.response);break;default:clearTimeout(d),clearTimeout(s),c(new Error("invalid_response"));break}}},this.handlers.add(o),r.port1.addEventListener("message",o.onMessage),this.target.postMessage({eventType:e,eventId:u,data:t},[r.port2])}).finally(()=>{o&&this.removeMessageHandler(o)})}};function P(){return window}function mo(n){P().location.href=n}function Ji(){return typeof P().WorkerGlobalScope<"u"&&typeof P().importScripts=="function"}async function go(){if(!navigator?.serviceWorker)return null;try{return(await navigator.serviceWorker.ready).active}catch{return null}}function _o(){return navigator?.serviceWorker?.controller||null}function Io(){return Ji()?self:null}var Yi="firebaseLocalStorageDb",Eo=1,Qe="firebaseLocalStorage",Xi="fbase_key",Y=class{constructor(e){this.request=e}toPromise(){return new Promise((e,t)=>{this.request.addEventListener("success",()=>{e(this.request.result)}),this.request.addEventListener("error",()=>{t(this.request.error)})})}};function dt(n,e){return n.transaction([Qe],e?"readwrite":"readonly").objectStore(Qe)}function yo(){let n=indexedDB.deleteDatabase(Yi);return new Y(n).toPromise()}function Qi(){let n=indexedDB.open(Yi,Eo);return new Promise((e,t)=>{n.addEventListener("error",()=>{t(n.error)}),n.addEventListener("upgradeneeded",()=>{let i=n.result;try{i.createObjectStore(Qe,{keyPath:Xi})}catch(r){t(r)}}),n.addEventListener("success",async()=>{let i=n.result;i.objectStoreNames.contains(Qe)?e(i):(i.close(),await yo(),e(await Qi()))})})}async function ui(n,e,t){let i=dt(n,!0).put({[Xi]:e,value:t});return new Y(i).toPromise()}async function wo(n,e){let t=dt(n,!1).get(e),i=await new Y(t).toPromise();return i===void 0?null:i.value}function li(n,e){let t=dt(n,!0).delete(e);return new Y(t).toPromise()}var To=800,vo=3,Ze=class{registerLifecycleListeners(){typeof window<"u"&&typeof window.addEventListener=="function"&&(window.addEventListener("pagehide",this.onPageHide),window.addEventListener("pageshow",this.onPageShow))}unregisterLifecycleListeners(){typeof window<"u"&&typeof window.removeEventListener=="function"&&(window.removeEventListener("pagehide",this.onPageHide),window.removeEventListener("pageshow",this.onPageShow))}constructor(){this.type="LOCAL",this.dbPromise=null,this._shouldAllowMigration=!0,this.listeners={},this.localCache={},this.pollTimer=null,this.isClosing=!1,this.pendingWrites=0,this.receiver=null,this.sender=null,this.serviceWorkerReceiverAvailable=!1,this.activeServiceWorker=null,this.onPageHide=()=>{this.isClosing=!0,this.stopPolling(),this.dbPromise&&(this.dbPromise.then(e=>e.close()).catch(()=>{}),this.dbPromise=null)},this.onPageShow=()=>{this.isClosing&&(this.isClosing=!1,Object.keys(this.listeners).length>0&&this.startPolling())},this._workerInitializationPromise=this.initializeServiceWorkerMessaging().then(()=>{},()=>{})}async _openDb(){return this.dbPromise?this.dbPromise:(this.dbPromise=Qi(),this.dbPromise.catch(()=>{this.dbPromise=null}),this.dbPromise)}async _withRetries(e){let t=0;for(;;)try{let i=await this._openDb();return await e(i)}catch(i){if(t++>vo)throw i;if(this.dbPromise){let r=this.dbPromise;this.dbPromise=null;try{(await r).close()}catch{}}}}async initializeServiceWorkerMessaging(){return Ji()?this.initializeReceiver():this.initializeSender()}async initializeReceiver(){this.receiver=Xe._getInstance(Io()),this.receiver._subscribe("keyChanged",async(e,t)=>({keyProcessed:(await this._poll()).includes(t.key)})),this.receiver._subscribe("ping",async(e,t)=>["keyChanged"])}async initializeSender(){if(this.activeServiceWorker=await go(),!this.activeServiceWorker)return;this.sender=new Zt(this.activeServiceWorker);let e=await this.sender._send("ping",{},800);e&&e[0]?.fulfilled&&e[0]?.value.includes("keyChanged")&&(this.serviceWorkerReceiverAvailable=!0)}async notifyServiceWorker(e){if(!(!this.sender||!this.activeServiceWorker||_o()!==this.activeServiceWorker))try{await this.sender._send("keyChanged",{key:e},this.serviceWorkerReceiverAvailable?800:50)}catch{}}async _isAvailable(){try{return indexedDB?(await this._withRetries(async e=>{await ui(e,Ge,"1"),await li(e,Ge)}),!0):!1}catch{}return!1}async _withPendingWrite(e){this.pendingWrites++;try{await e()}finally{this.pendingWrites--}}async _set(e,t){return this._withPendingWrite(async()=>(await this._withRetries(i=>ui(i,e,t)),this.localCache[e]=t,this.notifyServiceWorker(e)))}async _get(e){let t=await this._withRetries(i=>wo(i,e));return this.localCache[e]=t,t}async _remove(e){return this._withPendingWrite(async()=>(await this._withRetries(t=>li(t,e)),delete this.localCache[e],this.notifyServiceWorker(e)))}async _poll(){if(this.isClosing)return[];try{let e=await this._withRetries(r=>{let s=dt(r,!1).getAll();return new Y(s).toPromise()});if(this.isClosing)return[];if(!e)return[];if(this.pendingWrites!==0)return[];let t=[],i=new Set;if(e.length!==0)for(let{fbase_key:r,value:s}of e)i.add(r),JSON.stringify(this.localCache[r])!==JSON.stringify(s)&&(this.notifyListeners(r,s),t.push(r));for(let r of Object.keys(this.localCache))this.localCache[r]&&!i.has(r)&&(this.notifyListeners(r,null),t.push(r));return t}catch(e){return this.isClosing||De(`Firebase Auth cross-tab polling failed with error: ${e}`),[]}}notifyListeners(e,t){this.localCache[e]=t;let i=this.listeners[e];if(i)for(let r of Array.from(i))r(t)}startPolling(){this.stopPolling(),this.pollTimer=setInterval(async()=>this._poll(),To)}stopPolling(){this.pollTimer&&(clearInterval(this.pollTimer),this.pollTimer=null)}_addListener(e,t){Object.keys(this.listeners).length===0&&(this.startPolling(),this.registerLifecycleListeners()),this.listeners[e]||(this.listeners[e]=new Set,this._get(e)),this.listeners[e].add(t)}_removeListener(e,t){this.listeners[e]&&(this.listeners[e].delete(t),this.listeners[e].size===0&&delete this.listeners[e]),Object.keys(this.listeners).length===0&&(this.stopPolling(),this.unregisterLifecycleListeners())}};Ze.type="LOCAL";var Zi=Ze;function di(n,e){return _(n,"POST","/v2/accounts/mfaSignIn:start",g(n,e))}function bo(n,e){return _(n,"POST","/v2/accounts/mfaSignIn:finalize",g(n,e))}function Ao(n,e){return _(n,"POST","/v2/accounts/mfaSignIn:finalize",g(n,e))}var Ya=xi("rcb"),Xa=new z(3e4,6e4);var Ue="recaptcha";async function So(n,e,t){if(!n._getRecaptchaConfig())try{await Hs(n)}catch{console.log("Failed to initialize reCAPTCHA Enterprise config. Triggering the reCAPTCHA v2 verification.")}try{let i;if(typeof e=="string"?i={phoneNumber:e}:i=e,"session"in i){let r=i.session;if("phoneNumber"in i){l(r.type==="enroll",n,"internal-error");let s={idToken:r.credential,phoneEnrollmentInfo:{phoneNumber:i.phoneNumber,clientType:"CLIENT_TYPE_WEB"}};return(await $(n,s,"mfaSmsEnrollment",async(u,d)=>{if(d.phoneEnrollmentInfo.captchaResponse===pe){l(t?.type===Ue,u,"argument-error");let h=await Wt(u,d,t);return ci(u,h)}return ci(u,d)},"PHONE_PROVIDER").catch(u=>Promise.reject(u))).phoneSessionInfo.sessionInfo}else{l(r.type==="signin",n,"internal-error");let s=i.multiFactorHint?.uid||i.multiFactorUid;l(s,n,"missing-multi-factor-info");let o={mfaPendingCredential:r.credential,mfaEnrollmentId:s,phoneSignInInfo:{clientType:"CLIENT_TYPE_WEB"}};return(await $(n,o,"mfaSmsSignIn",async(d,h)=>{if(h.phoneSignInInfo.captchaResponse===pe){l(t?.type===Ue,d,"argument-error");let p=await Wt(d,h,t);return di(d,p)}return di(d,h)},"PHONE_PROVIDER").catch(d=>Promise.reject(d))).phoneResponseInfo.sessionInfo}}else{let r={phoneNumber:i.phoneNumber,clientType:"CLIENT_TYPE_WEB"};return(await $(n,r,"sendVerificationCode",async(c,u)=>{if(u.captchaResponse===pe){l(t?.type===Ue,c,"argument-error");let d=await Wt(c,u,t);return oi(c,d)}return oi(c,u)},"PHONE_PROVIDER").catch(c=>Promise.reject(c))).sessionInfo}}finally{t?._reset()}}async function Wt(n,e,t){l(t.type===Ue,n,"argument-error");let i=await t.verify();l(typeof i=="string",n,"argument-error");let r={...e};if("phoneEnrollmentInfo"in r){let s=r.phoneEnrollmentInfo.phoneNumber,o=r.phoneEnrollmentInfo.captchaResponse,a=r.phoneEnrollmentInfo.clientType,c=r.phoneEnrollmentInfo.recaptchaVersion;return Object.assign(r,{phoneEnrollmentInfo:{phoneNumber:s,recaptchaToken:i,captchaResponse:o,clientType:a,recaptchaVersion:c}}),r}else if("phoneSignInInfo"in r){let s=r.phoneSignInInfo.captchaResponse,o=r.phoneSignInInfo.clientType,a=r.phoneSignInInfo.recaptchaVersion;return Object.assign(r,{phoneSignInInfo:{recaptchaToken:i,captchaResponse:s,clientType:o,recaptchaVersion:a}}),r}else return Object.assign(r,{recaptchaToken:i}),r}var be=class n{constructor(e){this.providerId=n.PROVIDER_ID,this.auth=b(e)}verifyPhoneNumber(e,t){return So(this.auth,e,y(t))}static credential(e,t){return Ee._fromVerification(e,t)}static credentialFromResult(e){let t=e;return n.credentialFromTaggedObject(t)}static credentialFromError(e){return n.credentialFromTaggedObject(e.customData||{})}static credentialFromTaggedObject({_tokenResponse:e}){if(!e)return null;let{phoneNumber:t,temporaryProof:i}=e;return t&&i?Ee._fromTokenResponse(t,i):null}};be.PROVIDER_ID="phone";be.PHONE_SIGN_IN_METHOD="phone";function er(n,e){return e?D(e):(l(n._popupRedirectResolver,n,"argument-error"),n._popupRedirectResolver)}var Ae=class extends j{constructor(e){super("custom","custom"),this.params=e}_getIdTokenResponse(e){return se(e,this._buildIdpRequest())}_linkToIdToken(e,t){return se(e,this._buildIdpRequest(t))}_getReauthenticationResolver(e){return se(e,this._buildIdpRequest())}_buildIdpRequest(e){let t={requestUri:this.params.requestUri,sessionId:this.params.sessionId,postBody:this.params.postBody,tenantId:this.params.tenantId,pendingToken:this.params.pendingToken,returnSecureToken:!0,returnIdpCredential:!0};return e&&(t.idToken=e),t}};function Ro(n){return Bi(n.auth,new Ae(n),n.bypassAuthState)}function Po(n){let{auth:e,user:t}=n;return l(t,e,"internal-error"),so(t,new Ae(n),n.bypassAuthState)}async function ko(n){let{auth:e,user:t}=n;return l(t,e,"internal-error"),ro(t,new Ae(n),n.bypassAuthState)}var et=class{constructor(e,t,i,r,s=!1){this.auth=e,this.resolver=i,this.user=r,this.bypassAuthState=s,this.pendingPromise=null,this.eventManager=null,this.filter=Array.isArray(t)?t:[t]}execute(){return new Promise(async(e,t)=>{this.pendingPromise={resolve:e,reject:t};try{this.eventManager=await this.resolver._initialize(this.auth),await this.onExecution(),this.eventManager.registerConsumer(this)}catch(i){this.reject(i)}})}async onAuthEvent(e){let{urlResponse:t,sessionId:i,postBody:r,tenantId:s,error:o,type:a}=e;if(o){this.reject(o);return}let c={auth:this.auth,requestUri:t,sessionId:i,tenantId:s||void 0,postBody:r||void 0,user:this.user,bypassAuthState:this.bypassAuthState};try{this.resolve(await this.getIdpTask(a)(c))}catch(u){this.reject(u)}}onError(e){this.reject(e)}getIdpTask(e){switch(e){case"signInViaPopup":case"signInViaRedirect":return Ro;case"linkViaPopup":case"linkViaRedirect":return ko;case"reauthViaPopup":case"reauthViaRedirect":return Po;default:w(this.auth,"internal-error")}}resolve(e){M(this.pendingPromise,"Pending promise was never set"),this.pendingPromise.resolve(e),this.unregisterAndCleanUp()}reject(e){M(this.pendingPromise,"Pending promise was never set"),this.pendingPromise.reject(e),this.unregisterAndCleanUp()}unregisterAndCleanUp(){this.eventManager&&this.eventManager.unregisterConsumer(this),this.pendingPromise=null,this.cleanUp()}};var Co=new z(2e3,1e4);async function In(n,e,t){if(E(n.app))return Promise.reject(v(n,"operation-not-supported-in-this-environment"));let i=b(n);Es(n,e,ye);let r=er(i,t);return new tt(i,"signInViaPopup",e,r).executeNotNull()}var tt=class n extends et{constructor(e,t,i,r,s){super(e,t,r,s),this.provider=i,this.authWindow=null,this.pollId=null,n.currentPopupAction&&n.currentPopupAction.cancel(),n.currentPopupAction=this}async executeNotNull(){let e=await this.execute();return l(e,this.auth,"internal-error"),e}async onExecution(){M(this.filter.length===1,"Popup operations only handle one event");let e=_n();this.authWindow=await this.resolver._openPopup(this.auth,this.provider,this.filter[0],e),this.authWindow.associatedEvent=e,this.resolver._originValidation(this.auth).catch(t=>{this.reject(t)}),this.resolver._isIframeWebStorageSupported(this.auth,t=>{t||this.reject(v(this.auth,"web-storage-unsupported"))}),this.pollUserCancellation()}get eventId(){return this.authWindow?.associatedEvent||null}cancel(){this.reject(v(this.auth,"cancelled-popup-request"))}cleanUp(){this.authWindow&&this.authWindow.close(),this.pollId&&window.clearTimeout(this.pollId),this.authWindow=null,this.pollId=null,n.currentPopupAction=null}pollUserCancellation(){let e=()=>{if(this.authWindow?.window?.closed){this.pollId=window.setTimeout(()=>{this.pollId=null,this.reject(v(this.auth,"popup-closed-by-user"))},8e3);return}this.pollId=window.setTimeout(e,Co.get())};e()}};tt.currentPopupAction=null;var No="pendingRedirect",xe=new Map,en=class extends et{constructor(e,t,i=!1){super(e,["signInViaRedirect","linkViaRedirect","reauthViaRedirect","unknown"],t,void 0,i),this.eventId=null}async execute(){let e=xe.get(this.auth._key());if(!e){try{let i=await Oo(this.resolver,this.auth)?await super.execute():null;e=()=>Promise.resolve(i)}catch(t){e=()=>Promise.reject(t)}xe.set(this.auth._key(),e)}return this.bypassAuthState||xe.set(this.auth._key(),()=>Promise.resolve(null)),e()}async onAuthEvent(e){if(e.type==="signInViaRedirect")return super.onAuthEvent(e);if(e.type==="unknown"){this.resolve(null);return}if(e.eventId){let t=await this.auth._redirectUserForId(e.eventId);if(t)return this.user=t,super.onAuthEvent(e);this.resolve(null)}}async onExecution(){}cleanUp(){}};async function Oo(n,e){let t=Mo(e),i=Lo(n);if(!await i._isAvailable())return!1;let r=await i._get(t)==="true";return await i._remove(t),r}function Do(n,e){xe.set(n._key(),e)}function Lo(n){return D(n._redirectPersistence)}function Mo(n){return Me(No,n.config.apiKey,n.name)}async function Uo(n,e,t=!1){if(E(n.app))return Promise.reject(L(n));let i=b(n),r=er(i,e),o=await new en(i,r,t).execute();return o&&!t&&(delete o.user._redirectEventId,await i._persistUserIfCurrent(o.user),await i._setRedirectUser(null,e)),o}var xo=600*1e3,tn=class{constructor(e){this.auth=e,this.cachedEventUids=new Set,this.consumers=new Set,this.queuedRedirectEvent=null,this.hasHandledPotentialRedirect=!1,this.lastProcessedEventTime=Date.now()}registerConsumer(e){this.consumers.add(e),this.queuedRedirectEvent&&this.isEventForConsumer(this.queuedRedirectEvent,e)&&(this.sendToConsumer(this.queuedRedirectEvent,e),this.saveEventToCache(this.queuedRedirectEvent),this.queuedRedirectEvent=null)}unregisterConsumer(e){this.consumers.delete(e)}onEvent(e){if(this.hasEventBeenHandled(e))return!1;let t=!1;return this.consumers.forEach(i=>{this.isEventForConsumer(e,i)&&(t=!0,this.sendToConsumer(e,i),this.saveEventToCache(e))}),this.hasHandledPotentialRedirect||!Fo(e)||(this.hasHandledPotentialRedirect=!0,t||(this.queuedRedirectEvent=e,t=!0)),t}sendToConsumer(e,t){if(e.error&&!tr(e)){let i=e.error.code?.split("auth/")[1]||"internal-error";t.onError(v(this.auth,i))}else t.onAuthEvent(e)}isEventForConsumer(e,t){let i=t.eventId===null||!!e.eventId&&e.eventId===t.eventId;return t.filter.includes(e.type)&&i}hasEventBeenHandled(e){return Date.now()-this.lastProcessedEventTime>=xo&&this.cachedEventUids.clear(),this.cachedEventUids.has(hi(e))}saveEventToCache(e){this.cachedEventUids.add(hi(e)),this.lastProcessedEventTime=Date.now()}};function hi(n){return[n.type,n.eventId,n.sessionId,n.tenantId].filter(e=>e).join("-")}function tr({type:n,error:e}){return n==="unknown"&&e?.code==="auth/no-auth-event"}function Fo(n){switch(n.type){case"signInViaRedirect":case"linkViaRedirect":case"reauthViaRedirect":return!0;case"unknown":return tr(n);default:return!1}}async function Vo(n,e={}){return _(n,"GET","/v1/projects",e)}var Ho=/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/,Wo=/^https?/;async function Bo(n){if(n.config.emulator)return;let{authorizedDomains:e}=await Vo(n);for(let t of e)try{if($o(t))return}catch{}w(n,"unauthorized-domain")}function $o(n){let e=$t(),{protocol:t,hostname:i}=new URL(e);if(n.startsWith("chrome-extension://")){let o=new URL(n);return o.hostname===""&&i===""?t==="chrome-extension:"&&n.replace("chrome-extension://","")===e.replace("chrome-extension://",""):t==="chrome-extension:"&&o.hostname===i}if(!Wo.test(t))return!1;if(Ho.test(n))return i===n;let r=n.replace(/\./g,"\\.");return new RegExp("^(.+\\."+r+"|"+r+")$","i").test(i)}var zo=new z(3e4,6e4);function fi(){let n=P().___jsl;if(n?.H){for(let e of Object.keys(n.H))if(n.H[e].r=n.H[e].r||[],n.H[e].L=n.H[e].L||[],n.H[e].r=[...n.H[e].L],n.CP)for(let t=0;t<n.CP.length;t++)n.CP[t]=null}}function jo(n){return new Promise((e,t)=>{function i(){fi(),gapi.load("gapi.iframes",{callback:()=>{e(gapi.iframes.getContext())},ontimeout:()=>{fi(),t(v(n,"network-request-failed"))},timeout:zo.get()})}if(P().gapi?.iframes?.Iframe)e(gapi.iframes.getContext());else if(P().gapi?.load)i();else{let r=xi("iframefcb");return P()[r]=()=>{gapi.load?i():t(v(n,"network-request-failed"))},Ui(`${Fs()}?onload=${r}`).catch(s=>t(s))}}).catch(e=>{throw Fe=null,e})}var Fe=null;function qo(n){return Fe=Fe||jo(n),Fe}var Go=new z(5e3,15e3),Ko="__/auth/iframe",Jo="emulator/auth/iframe",Yo={style:{position:"absolute",top:"-100px",width:"1px",height:"1px"},"aria-hidden":"true",tabindex:"-1"},Xo=new Map([["identitytoolkit.googleapis.com","p"],["staging-identitytoolkit.sandbox.googleapis.com","s"],["test-identitytoolkit.sandbox.googleapis.com","t"]]);function Qo(n){let e=n.config;l(e.authDomain,n,"auth-domain-config-required");let t=e.emulator?an(e,Jo):`https://${n.config.authDomain}/${Ko}`,i={apiKey:e.apiKey,appName:n.name,v:re},r=Xo.get(n.config.apiHost);r&&(i.eid=r);let s=n._getFrameworks();return s.length&&(i.fw=s.join(",")),`${t}?${Z(i).slice(1)}`}async function Zo(n){let e=await qo(n),t=P().gapi;return l(t,n,"internal-error"),e.open({where:document.body,url:Qo(n),messageHandlersFilter:t.iframes.CROSS_ORIGIN_IFRAMES_FILTER,attributes:Yo,dontclear:!0},i=>new Promise(async(r,s)=>{await i.restyle({setHideOnLeave:!1});let o=v(n,"network-request-failed"),a=P().setTimeout(()=>{s(o)},Go.get());function c(){P().clearTimeout(a),r(i)}i.ping(c).then(c,()=>{s(o)})}))}var ea={location:"yes",resizable:"yes",statusbar:"yes",toolbar:"no"},ta=500,na=600,ia="_blank",ra="http://localhost",nt=class{constructor(e){this.window=e,this.associatedEvent=null}close(){if(this.window)try{this.window.close()}catch{}}};function sa(n,e,t,i=ta,r=na){let s=Math.max((window.screen.availHeight-r)/2,0).toString(),o=Math.max((window.screen.availWidth-i)/2,0).toString(),a="",c={...ea,width:i.toString(),height:r.toString(),top:s,left:o},u=I().toLowerCase();t&&(a=ki(u)?ia:t),Ri(u)&&(e=e||ra,c.scrollbars="yes");let d=Object.entries(c).reduce((p,[k,W])=>`${p}${k}=${W},`,"");if(Os(u)&&a!=="_self")return oa(e||"",a),new nt(null);let h=window.open(e||"",a,d);l(h,n,"popup-blocked");try{h.focus()}catch{}return new nt(h)}function oa(n,e){let t=document.createElement("a");t.href=n,t.target=e;let i=document.createEvent("MouseEvent");i.initMouseEvent("click",!0,!0,window,1,0,0,0,0,!1,!1,!1,!1,1,null),t.dispatchEvent(i)}var aa="__/auth/handler",ca="emulator/auth/handler",ua=encodeURIComponent("fac");async function pi(n,e,t,i,r,s){l(n.config.authDomain,n,"auth-domain-config-required"),l(n.config.apiKey,n,"invalid-api-key");let o={apiKey:n.config.apiKey,appName:n.name,authType:t,redirectUrl:i,v:re,eventId:r};if(e instanceof ye){e.setDefaultLanguage(n.languageCode),o.providerId=e.providerId||"",Mn(e.getCustomParameters())||(o.customParameters=JSON.stringify(e.getCustomParameters()));for(let[d,h]of Object.entries(s||{}))o[d]=h}if(e instanceof K){let d=e.getScopes().filter(h=>h!=="");d.length>0&&(o.scopes=d.join(","))}n.tenantId&&(o.tid=n.tenantId);let a=o;for(let d of Object.keys(a))a[d]===void 0&&delete a[d];let c=await n._getAppCheckToken(),u=c?`#${ua}=${encodeURIComponent(c)}`:"";return`${la(n)}?${Z(a).slice(1)}${u}`}function la({config:n}){return n.emulator?an(n,ca):`https://${n.authDomain}/${aa}`}var Bt="webStorageSupport",nn=class{constructor(){this.eventManagers={},this.iframes={},this.originValidationPromises={},this._redirectPersistence=gn,this._completeRedirectFn=Uo,this._overrideRedirectResult=Do}async _openPopup(e,t,i,r){M(this.eventManagers[e._key()]?.manager,"_initialize() not called before _openPopup()");let s=await pi(e,t,i,$t(),r);return sa(e,s,_n())}async _openRedirect(e,t,i,r){await this._originValidation(e);let s=await pi(e,t,i,$t(),r);return mo(s),new Promise(()=>{})}_initialize(e){let t=e._key();if(this.eventManagers[t]){let{manager:r,promise:s}=this.eventManagers[t];return r?Promise.resolve(r):(M(s,"If manager is not set, promise should be"),s)}let i=this.initAndGetManager(e);return this.eventManagers[t]={promise:i},i.catch(()=>{delete this.eventManagers[t]}),i}async initAndGetManager(e){let t=await Zo(e),i=new tn(e);return t.register("authEvent",r=>(l(r?.authEvent,e,"invalid-auth-event"),{status:i.onEvent(r.authEvent)?"ACK":"ERROR"}),gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER),this.eventManagers[e._key()]={manager:i},this.iframes[e._key()]=t,i}_isIframeWebStorageSupported(e,t){this.iframes[e._key()].send(Bt,{type:Bt},r=>{let s=r?.[0]?.[Bt];s!==void 0&&t(!!s),w(e,"internal-error")},gapi.iframes.CROSS_ORIGIN_IFRAMES_FILTER)}_originValidation(e){let t=e._key();return this.originValidationPromises[t]||(this.originValidationPromises[t]=Bo(e)),this.originValidationPromises[t]}get _shouldInitProactively(){return Li()||Pi()||un()}},nr=nn,it=class{constructor(e){this.factorId=e}_process(e,t,i){switch(t.type){case"enroll":return this._finalizeEnroll(e,t.credential,i);case"signin":return this._finalizeSignIn(e,t.credential);default:return R("unexpected MultiFactorSessionType")}}},rn=class n extends it{constructor(e){super("phone"),this.credential=e}static _fromCredential(e){return new n(e)}_finalizeEnroll(e,t,i){return ao(e,{idToken:t,displayName:i,phoneVerificationInfo:this.credential._makeVerificationRequest()})}_finalizeSignIn(e,t){return bo(e,{mfaPendingCredential:t,phoneVerificationInfo:this.credential._makeVerificationRequest()})}},rt=class{constructor(){}static assertion(e){return rn._fromCredential(e)}};rt.FACTOR_ID="phone";var st=class{static assertionForEnrollment(e,t){return ot._fromSecret(e,t)}static assertionForSignIn(e,t){return ot._fromEnrollmentId(e,t)}static async generateSecret(e){let t=e;l(typeof t.user?.auth<"u","internal-error");let i=await co(t.user.auth,{idToken:t.credential,totpEnrollmentInfo:{}});return at._fromStartTotpMfaEnrollmentResponse(i,t.user.auth)}};st.FACTOR_ID="totp";var ot=class n extends it{constructor(e,t,i){super("totp"),this.otp=e,this.enrollmentId=t,this.secret=i}static _fromSecret(e,t){return new n(t,void 0,e)}static _fromEnrollmentId(e,t){return new n(t,e)}async _finalizeEnroll(e,t,i){return l(typeof this.secret<"u",e,"argument-error"),uo(e,{idToken:t,displayName:i,totpVerificationInfo:this.secret._makeTotpVerificationInfo(this.otp)})}async _finalizeSignIn(e,t){l(this.enrollmentId!==void 0&&this.otp!==void 0,e,"argument-error");let i={verificationCode:this.otp};return Ao(e,{mfaPendingCredential:t,mfaEnrollmentId:this.enrollmentId,totpVerificationInfo:i})}},at=class n{constructor(e,t,i,r,s,o,a){this.sessionInfo=o,this.auth=a,this.secretKey=e,this.hashingAlgorithm=t,this.codeLength=i,this.codeIntervalSeconds=r,this.enrollmentCompletionDeadline=s}static _fromStartTotpMfaEnrollmentResponse(e,t){return new n(e.totpSessionInfo.sharedSecretKey,e.totpSessionInfo.hashingAlgorithm,e.totpSessionInfo.verificationCodeLength,e.totpSessionInfo.periodSec,new Date(e.totpSessionInfo.finalizeEnrollmentTime).toUTCString(),e.totpSessionInfo.sessionInfo,t)}_makeTotpVerificationInfo(e){return{sessionInfo:this.sessionInfo,verificationCode:e}}generateQrCodeUrl(e,t){let i=!1;return(Oe(e)||Oe(t))&&(i=!0),i&&(Oe(e)&&(e=this.auth.currentUser?.email||"unknownuser"),Oe(t)&&(t=this.auth.name)),`otpauth://totp/${t}:${e}?secret=${this.secretKey}&issuer=${t}&algorithm=${this.hashingAlgorithm}&digits=${this.codeLength}`}};function Oe(n){return typeof n>"u"||n?.length===0}var mi="@firebase/auth",gi="1.13.6";var sn=class{constructor(e){this.auth=e,this.internalListeners=new Map}getUid(){return this.assertAuthConfigured(),this.auth.currentUser?.uid||null}async getToken(e){return this.assertAuthConfigured(),await this.auth._initializationPromise,this.auth.currentUser?{accessToken:await this.auth.currentUser.getIdToken(e)}:null}addAuthTokenListener(e){if(this.assertAuthConfigured(),this.internalListeners.has(e))return;let t=this.auth.onIdTokenChanged(i=>{e(i?.stsTokenManager.accessToken||null)});this.internalListeners.set(e,t),this.updateProactiveRefresh()}removeAuthTokenListener(e){this.assertAuthConfigured();let t=this.internalListeners.get(e);t&&(this.internalListeners.delete(e),t(),this.updateProactiveRefresh())}assertAuthConfigured(){l(this.auth._initializationPromise,"dependent-sdk-initialized-before-auth")}updateProactiveRefresh(){this.internalListeners.size>0?this.auth._startProactiveRefresh():this.auth._stopProactiveRefresh()}};function da(n){switch(n){case"Node":return"node";case"ReactNative":return"rn";case"Worker":return"webworker";case"Cordova":return"cordova";case"WebExtension":return"web-extension";default:return}}function ha(n){ie(new A("auth",(e,{options:t})=>{let i=e.getProvider("app").getImmediate(),r=e.getProvider("heartbeat"),s=e.getProvider("app-check-internal"),{apiKey:o,authDomain:a}=i.options;l(o&&!o.includes(":"),"invalid-api-key",{appName:i.name});let c={apiKey:o,authDomain:a,clientPlatform:n,apiHost:"identitytoolkit.googleapis.com",tokenApiHost:"securetoken.googleapis.com",apiScheme:"https",sdkClientVersion:Mi(n)},u=new Kt(i,r,s,c);return Ws(u,t),u},"PUBLIC").setInstantiationMode("EXPLICIT").setInstanceCreatedCallback((e,t,i)=>{e.getProvider("auth-internal").initialize()})),ie(new A("auth-internal",e=>{let t=b(e.getProvider("auth").getImmediate());return(i=>new sn(i))(t)},"PRIVATE").setInstantiationMode("EXPLICIT")),x(mi,gi,da(n)),x(mi,gi,"esm2020")}var fa=300,pa=wt("authIdTokenMaxAge")||fa,_i=null,ma=n=>async e=>{let t=e&&await e.getIdTokenResult(),i=t&&(new Date().getTime()-Date.parse(t.issuedAtTime))/1e3;if(i&&i>pa)return;let r=t?.token;_i!==r&&(_i=r,await fetch(n,{method:r?"POST":"DELETE",headers:r?{Authorization:`Bearer ${r}`}:{}}))};function En(n=Yn()){let e=Ut(n,"auth");if(e.isInitialized())return e.getImmediate();let t=Fi(n,{popupRedirectResolver:nr,persistence:[Zi,Ki,gn]}),i=wt("authTokenSyncURL");if(i&&typeof isSecureContext=="boolean"&&isSecureContext){let s=new URL(i,location.origin);if(location.origin===s.origin){let o=ma(s.toString());Gi(t,o,()=>o(t.currentUser)),qi(t,a=>o(a))}}let r=Rn("auth");return r&&lt(t,`http://${r}`),t}function ga(){return document.getElementsByTagName("head")?.[0]??document}Us({loadJS(n){return new Promise((e,t)=>{let i=document.createElement("script");i.setAttribute("src",n),i.onload=e,i.onerror=r=>{let s=v("internal-error");s.customData=r,t(s)},i.type="text/javascript",i.charset="UTF-8",ga().appendChild(i)})},gapiScript:"https://apis.google.com/js/api.js",recaptchaV2Script:"https://www.google.com/recaptcha/api.js",recaptchaEnterpriseScript:"https://www.google.com/recaptcha/enterprise.js?render="});ha("Browser");var{config:_a,emulator:ir,nonce:Ia,client:ht}=window.AIPICTURY_SIGNIN,Ea=xt(_a),X=En(Ea);ir&&lt(X,`http://${ir}`,{disableWarnings:!0});mn(X,ge).catch(()=>{});var m=n=>document.getElementById(n),ya={"invalid-email":"That is not an email address.","missing-password":"Write a password.","weak-password":"The password needs at least 6 characters.","email-already-in-use":"There is already an account with that email \u2014 sign in instead.","invalid-credential":"The email or the password is wrong.","wrong-password":"The email or the password is wrong.","user-not-found":"There is no account with that email \u2014 create one.","too-many-requests":"Too many tries \u2014 wait a minute, or reset the password.","popup-closed-by-user":"The Google window was closed before signing in.","popup-blocked":"The browser blocked the Google window \u2014 allow pop-ups for this page.","network-request-failed":"No connection to the sign-in service \u2014 check the network."},Se=(n,e="err")=>{let t=m("note");t.textContent=n,t.className=`note ${e}`,t.hidden=!n},wa=n=>ya[String(n?.code||"").replace("auth/","")]||n?.message||"Something went wrong \u2014 try again.",ft="signin";function wn(n){ft=n;for(let e of document.querySelectorAll("[role=tab]"))e.setAttribute("aria-selected",String(e.dataset.mode===n));m("name-field").hidden=n!=="register",m("password-field").hidden=n==="reset",m("google").hidden=n==="reset",m("or").hidden=n==="reset",m("submit").textContent=n==="register"?"Create account":n==="reset"?"Send the reset link":"Sign in",m("forgot").textContent=n==="reset"?"Back to sign in":"Forgot your password?",m("password").autocomplete=n==="register"?"new-password":"current-password",Se("")}async function yn(n){Se("Signed in \u2014 handing it to "+ht+"\u2026","ok");let e=await fetch(`/done?n=${encodeURIComponent(Ia)}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({uid:n.uid,email:n.email,displayName:n.displayName,photoURL:n.photoURL,refreshToken:n.refreshToken,idToken:await n.getIdToken()})});if(!e.ok){Se(`${ht} did not take it (${e.status}) \u2014 sign in again from ${ht}.`);return}document.body.classList.add("done"),m("done-who").textContent=n.email||n.displayName||"",m("done-client").textContent=ht,await X.signOut().catch(()=>{})}async function rr(n){for(let e of document.querySelectorAll("button"))e.disabled=!0;try{await n()}catch(e){Se(wa(e))}finally{for(let e of document.querySelectorAll("button"))e.disabled=!1}}for(let n of document.querySelectorAll("[role=tab]"))n.addEventListener("click",()=>wn(n.dataset.mode));m("forgot").addEventListener("click",()=>wn(ft==="reset"?"signin":"reset"));m("show").addEventListener("click",()=>{let n=m("password").type==="password";m("password").type=n?"text":"password",m("show").textContent=n?"Hide":"Show",m("show").setAttribute("aria-pressed",String(n))});m("google").addEventListener("click",()=>rr(async()=>{let n=new J;n.setCustomParameters({prompt:"select_account"}),await yn((await In(X,n)).user)}));m("form").addEventListener("submit",n=>{n.preventDefault();let e=m("email").value.trim(),t=m("password").value;rr(async()=>{if(ft==="reset"){await ln(X,e),Se(`If there is an account for ${e}, a reset link is on its way.`,"ok");return}if(ft==="register"){let{user:i}=await dn(X,e,t);m("name").value.trim()&&await pn(i,{displayName:m("name").value.trim()}),fn(i).catch(()=>{}),await yn(i);return}await yn((await hn(X,e,t)).user)})});wn("signin");m("email").focus();
@@ -0,0 +1,174 @@
1
+ 'use strict'
2
+ // Pictures and clips for the coding agent: made on the AIPictury server's GPU and written
3
+ // into the workspace — to add one, or to replace one the code already uses. A replaced
4
+ // file keeps its size and format, so whatever references it still fits.
5
+
6
+ const vscode = require('vscode')
7
+ const { resolve, root } = require('./tools')
8
+
9
+ const IMAGE_EXT = new Set(['png', 'jpg', 'jpeg', 'webp', 'gif', 'bmp'])
10
+ const VIDEO_EXT = new Set(['mp4', 'webm', 'mov', 'm4v'])
11
+ /** fn(server, jobId, keep) after a render the agent asked for is done (the account keeps it;
12
+ * keep(state) shows its progress and figures on the card). */
13
+ const rendered = new Set()
14
+ function onRendered(fn) { rendered.add(fn); return { dispose: () => rendered.delete(fn) } }
15
+ const STALL = 120_000 // the server repeats its progress every 10s; this is a lost link
16
+
17
+ /** The width and height of a PNG, JPEG, GIF or WebP, read from its header; null if unknown. */
18
+ function imageSize(bytes) {
19
+ const b = Buffer.from(bytes)
20
+ if (b.length > 24 && b.readUInt32BE(0) === 0x89504e47) return { width: b.readUInt32BE(16), height: b.readUInt32BE(20) }
21
+ if (b.length > 10 && b.toString('ascii', 0, 3) === 'GIF') return { width: b.readUInt16LE(6), height: b.readUInt16LE(8) }
22
+ if (b.length > 30 && b.toString('ascii', 0, 4) === 'RIFF' && b.toString('ascii', 8, 12) === 'WEBP') {
23
+ const chunk = b.toString('ascii', 12, 16)
24
+ if (chunk === 'VP8 ') return { width: b.readUInt16LE(26) & 0x3fff, height: b.readUInt16LE(28) & 0x3fff }
25
+ if (chunk === 'VP8L') {
26
+ const bits = b.readUInt32LE(21)
27
+ return { width: (bits & 0x3fff) + 1, height: ((bits >> 14) & 0x3fff) + 1 }
28
+ }
29
+ if (chunk === 'VP8X') return { width: 1 + b.readUIntLE(24, 3), height: 1 + b.readUIntLE(27, 3) }
30
+ }
31
+ if (b.length > 4 && b[0] === 0xff && b[1] === 0xd8) {
32
+ let i = 2
33
+ while (i + 9 < b.length) {
34
+ if (b[i] !== 0xff) { i += 1; continue }
35
+ const marker = b[i + 1]
36
+ const length = b.readUInt16BE(i + 2)
37
+ // SOF0–SOF15, except the markers that share the range but carry no size.
38
+ if (marker >= 0xc0 && marker <= 0xcf && ![0xc4, 0xc8, 0xcc].includes(marker)) {
39
+ return { height: b.readUInt16BE(i + 5), width: b.readUInt16BE(i + 7) }
40
+ }
41
+ i += 2 + length
42
+ }
43
+ }
44
+ return null
45
+ }
46
+
47
+ const ext = (p) => (String(p).split('.').pop() || '').toLowerCase()
48
+ const slug = (text) => String(text).toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '').slice(0, 40) || 'media'
49
+
50
+ /** Where the file goes, and in what format: the path the agent chose (an extension added
51
+ * when it gave none), or .aipictury/media/ when it only wants to show something. */
52
+ function target(args) {
53
+ const kind = args.kind === 'video' ? 'video' : 'image'
54
+ let path = String(args.save_to || '').trim()
55
+ if (!path) path = `.aipictury/media/${slug(args.prompt)}-${Date.now().toString(36)}.${kind === 'video' ? 'mp4' : 'png'}`
56
+ const e = ext(path)
57
+ const allowed = kind === 'video' ? VIDEO_EXT : IMAGE_EXT
58
+ if (!allowed.has(e)) {
59
+ if (path.includes('.') && e.length <= 4) {
60
+ throw new Error(`cannot save ${kind === 'image' ? 'an image' : 'a video'} as .${e} — use ${[...allowed].join(', ')}`)
61
+ }
62
+ path += kind === 'video' ? '.mp4' : '.png'
63
+ }
64
+ return { kind, path, format: ext(path) === 'jpeg' ? 'jpg' : ext(path) }
65
+ }
66
+
67
+ async function readIfThere(path) {
68
+ try { return await vscode.workspace.fs.readFile(resolve(path)) } catch { return null }
69
+ }
70
+
71
+ /** Reads the server's newline-delimited progress until the render ends. */
72
+ async function follow(response, onCard, signal) {
73
+ const reader = response.body.getReader()
74
+ const decoder = new TextDecoder()
75
+ let buffer = ''
76
+ let last = null
77
+ for (;;) {
78
+ let timer
79
+ const chunk = await Promise.race([
80
+ reader.read(),
81
+ new Promise((_, reject) => { timer = setTimeout(() => reject(new Error('the connection to the server was lost while rendering')), STALL) }),
82
+ ]).finally(() => clearTimeout(timer))
83
+ if (chunk.done) break
84
+ buffer += decoder.decode(chunk.value, { stream: true })
85
+ const lines = buffer.split('\n')
86
+ buffer = lines.pop()
87
+ for (const line of lines) {
88
+ if (!line.trim()) continue
89
+ try { last = JSON.parse(line) } catch { continue }
90
+ onCard(last)
91
+ }
92
+ if (signal?.aborted) { reader.cancel().catch(() => {}); break }
93
+ }
94
+ return last
95
+ }
96
+
97
+ /**
98
+ * Makes the picture or clip and writes it into the workspace.
99
+ * `ask(question)` is the approval — true to go ahead. `report(update)` keeps the panel's
100
+ * card current. Returns what to tell the model.
101
+ */
102
+ async function generate(server, args, { ask, report, signal }) {
103
+ const prompt = String(args.prompt || '').trim()
104
+ if (!prompt) throw new Error('prompt is required: describe the picture or clip in full')
105
+ const { kind, path, format } = target(args)
106
+ const existing = await readIfThere(path)
107
+ const source = args.source ? await readIfThere(args.source) : null
108
+ if (args.source && !source) throw new Error(`source ${args.source} was not found in the workspace`)
109
+
110
+ // The size to deliver: what was asked, else the size of the file being replaced.
111
+ let width = Number(args.width) || null
112
+ let height = Number(args.height) || null
113
+ if (!(width && height) && existing && IMAGE_EXT.has(ext(path))) {
114
+ const size = imageSize(existing)
115
+ if (size) ({ width, height } = size)
116
+ }
117
+ if (!(width && height) && source && kind === 'image') {
118
+ const size = imageSize(source)
119
+ if (size) ({ width, height } = size)
120
+ }
121
+
122
+ const verb = existing ? 'Replace' : 'Create'
123
+ if (!(await ask(`${verb} ${path} with a generated ${kind}?\n\n${prompt.slice(0, 300)}`))) {
124
+ return { refused: true, text: 'the user declined this' }
125
+ }
126
+
127
+ report({ status: 'running', progress: 0, path })
128
+ const body = { kind, prompt, aspect: args.aspect || 'landscape', seconds: Number(args.seconds) || 5 }
129
+ if (width && height) Object.assign(body, { width, height })
130
+ if (source) Object.assign(body, { source: Buffer.from(source).toString('base64'), source_name: args.source })
131
+ const response = await fetch(`${server}/api/agent/media`, {
132
+ method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body), signal,
133
+ })
134
+ if (!response.ok) throw new Error(`the server could not start it (${response.status}): ${(await response.text()).slice(0, 200)}`)
135
+ const card = await follow(response, (update) => {
136
+ if (update.status === 'queued' || update.status === 'running') {
137
+ report({ status: 'running', progress: Math.round((update.progress || 0) * (update.progress > 1 ? 1 : 100)), path, queued: update.status === 'queued' })
138
+ }
139
+ }, signal)
140
+ if (signal?.aborted) return { stopped: true, text: 'stopped by the user' }
141
+ if (!card || card.status !== 'done') throw new Error(card?.error || 'the render ended without a file')
142
+
143
+ // The file, at the size and in the format the project needs.
144
+ const query = new URLSearchParams({ format })
145
+ if (width && height && kind === 'image') { query.set('width', width); query.set('height', height) }
146
+ const file = await fetch(`${server}/api/agent/media/${card.asset}?${query}`, { signal })
147
+ if (!file.ok) throw new Error(`could not fetch the result (${file.status}): ${(await file.text()).slice(0, 200)}`)
148
+ const bytes = new Uint8Array(await file.arrayBuffer())
149
+ await vscode.workspace.fs.createDirectory(vscode.Uri.joinPath(resolve(path), '..'))
150
+ await vscode.workspace.fs.writeFile(resolve(path), bytes)
151
+ const size = kind === 'image' ? imageSize(bytes) : null
152
+
153
+ // A small preview for the panel's card: a still, for a clip its first frame.
154
+ let preview = null
155
+ try {
156
+ const w = 320
157
+ const h = size ? Math.max(16, Math.round(w * size.height / size.width)) : 180
158
+ const still = await fetch(`${server}/api/agent/media/${card.asset}?format=jpg&width=${w}&height=${h}`, { signal })
159
+ if (still.ok) preview = `data:image/jpeg;base64,${Buffer.from(await still.arrayBuffer()).toString('base64')}`
160
+ } catch { /* the card shows the path without a picture */ }
161
+
162
+ const described = `${size ? `${size.width}×${size.height} ` : ''}${format.toUpperCase()}, ${Math.round(bytes.length / 1024)} KB`
163
+ const media = { kind, path, preview, width: size?.width, height: size?.height, bytes: bytes.length }
164
+ report({ status: 'done', path, media })
165
+ // Kept with the account now (accountUi): its progress, then the figures, on this card.
166
+ const keep = (state) => report({ status: 'done', path, media, keep: state })
167
+ for (const fn of rendered) { try { fn(server, card.job_id, keep) } catch { /* the account's own problem */ } }
168
+ return {
169
+ text: `Saved ${path} (${described})${existing ? ', replacing the previous file' : ''}.`
170
+ + (args.save_to ? '' : ' It was saved under .aipictury/media/ to show the user; move it into the project if it belongs there.'),
171
+ }
172
+ }
173
+
174
+ module.exports = { generate, imageSize, target, root, onRendered }
package/ext/memory.js ADDED
@@ -0,0 +1,117 @@
1
+ 'use strict'
2
+ // What the agent must never forget: rules, kept outside the conversation.
3
+ //
4
+ // Two places, as in Claude Code. Rules for this project live in the project, in
5
+ // .aipictury/memory.md — a plain file you can read, edit and commit. Rules about you
6
+ // live on the AIPictury server, shared by every editor and the web assistant. Both go
7
+ // into the system prompt of every turn, which compaction never touches, so a rule stated
8
+ // once holds for the rest of the conversation and every conversation after it.
9
+
10
+ const vscode = require('vscode')
11
+
12
+ const PROJECT_FILE = '.aipictury/memory.md'
13
+ const HEADER = '# AIPictury memory for this project\n\n'
14
+ + 'Rules the agent follows in this project. Edit freely — one rule per line, starting with "- ".\n\n'
15
+
16
+ const encoder = new TextEncoder()
17
+ const decoder = new TextDecoder()
18
+
19
+ function projectUri() {
20
+ const folder = vscode.workspace.workspaceFolders?.[0]
21
+ return folder ? vscode.Uri.joinPath(folder.uri, PROJECT_FILE) : null
22
+ }
23
+
24
+ async function projectRules() {
25
+ const uri = projectUri()
26
+ if (!uri) return []
27
+ try {
28
+ const text = decoder.decode(await vscode.workspace.fs.readFile(uri))
29
+ return text.split('\n').filter((l) => /^\s*[-*]\s+\S/.test(l)).map((l) => l.replace(/^\s*[-*]\s+/, '').trim())
30
+ } catch {
31
+ return []
32
+ }
33
+ }
34
+
35
+ async function addProjectRule(text) {
36
+ const uri = projectUri()
37
+ if (!uri) throw new Error('open a folder first — project rules live in the project')
38
+ const rule = text.replace(/\s+/g, ' ').trim()
39
+ const existing = await projectRules()
40
+ if (existing.some((r) => r.toLowerCase() === rule.toLowerCase())) return 'already remembered'
41
+ let current = HEADER
42
+ try { current = decoder.decode(await vscode.workspace.fs.readFile(uri)) } catch { /* new file */ }
43
+ await vscode.workspace.fs.createDirectory(vscode.Uri.joinPath(uri, '..'))
44
+ await vscode.workspace.fs.writeFile(uri, encoder.encode(`${current.replace(/\n*$/, '\n')}- ${rule}\n`))
45
+ projectChanged()
46
+ return `remembered for this project (${PROJECT_FILE})`
47
+ }
48
+
49
+ async function request(server, path, init = {}) {
50
+ const controller = new AbortController()
51
+ const timer = setTimeout(() => controller.abort(), 10_000)
52
+ try {
53
+ const r = await fetch(`${server}${path}`, { ...init, signal: controller.signal })
54
+ if (!r.ok) throw new Error(`the server answered ${r.status}`)
55
+ return await r.json()
56
+ } finally {
57
+ clearTimeout(timer)
58
+ }
59
+ }
60
+
61
+ // Your rules live with your AIPictury account when you are signed in (accountUi.js gives this
62
+ // module the account's list), else on the AIPictury server, as before.
63
+ let accountRules = null // { active: async () => bool, get: async () => [...], set: async ([...]) }
64
+ function useAccountRules(adapter) { accountRules = adapter }
65
+
66
+ async function userRules(server) {
67
+ if (await accountRules?.active()) { try { return await accountRules.get() } catch { return [] } }
68
+ try { return (await request(server, '/api/memory')).rules || [] } catch { return [] }
69
+ }
70
+
71
+ async function addUserRule(server, text) {
72
+ if (await accountRules?.active()) {
73
+ const rules = await accountRules.get()
74
+ const clean = String(text).trim().slice(0, 2000)
75
+ if (!rules.some((r) => r.text === clean)) rules.push({ id: `r${Date.now().toString(36)}`, text: clean, created: Date.now() })
76
+ await accountRules.set(rules)
77
+ return 'remembered for you, in every project — kept with your AIPictury account'
78
+ }
79
+ await request(server, '/api/memory', {
80
+ method: 'POST', headers: { 'Content-Type': 'application/json' },
81
+ body: JSON.stringify({ text }) })
82
+ return 'remembered for you, in every project and in the web assistant'
83
+ }
84
+
85
+ async function deleteUserRule(server, id) {
86
+ if (await accountRules?.active()) {
87
+ await accountRules.set((await accountRules.get()).filter((r) => String(r.id) !== String(id)))
88
+ return
89
+ }
90
+ await request(server, `/api/memory/${encodeURIComponent(id)}`, { method: 'DELETE' })
91
+ }
92
+
93
+ // Told when the project's rules file changed (the cloud copy follows it).
94
+ const projectListeners = new Set()
95
+ function onProjectRules(fn) { projectListeners.add(fn); return { dispose: () => projectListeners.delete(fn) } }
96
+ const projectChanged = () => { for (const fn of projectListeners) { try { fn() } catch { /* its own problem */ } } }
97
+
98
+ async function removeProjectRule(rule) {
99
+ const uri = projectUri()
100
+ const text = decoder.decode(await vscode.workspace.fs.readFile(uri))
101
+ const kept = text.split('\n').filter((l) => l.replace(/^\s*[-*]\s+/, '').trim() !== rule)
102
+ await vscode.workspace.fs.writeFile(uri, encoder.encode(kept.join('\n')))
103
+ projectChanged()
104
+ }
105
+
106
+ /** The rules as they go into the system prompt. */
107
+ async function block(server) {
108
+ const [project, user] = await Promise.all([projectRules(), userRules(server)])
109
+ if (!project.length && !user.length) return ''
110
+ let out = '\n\n## Rules to follow\nThe user set these. They always apply unless the user changes them now.'
111
+ if (project.length) out += `\n\nIn this project:\n${project.map((r) => `- ${r}`).join('\n')}`
112
+ if (user.length) out += `\n\nEverywhere:\n${user.map((r) => `- ${r.text}`).join('\n')}`
113
+ return out
114
+ }
115
+
116
+ module.exports = { PROJECT_FILE, projectUri, projectRules, addProjectRule, removeProjectRule,
117
+ userRules, addUserRule, deleteUserRule, block, useAccountRules, onProjectRules }