{"version":3,"sources":["webpack:///component---src-pages-cheer-tsx-f0acd9cae1f3a53d3a0b.js","webpack:///./~/@firebase/app/dist/index.cjs.js","webpack:///./~/@firebase/auth/dist/auth.js","webpack:///./~/@firebase/database/dist/index.cjs.js","webpack:///./~/@firebase/logger/dist/index.cjs.js","webpack:///./~/@firebase/messaging/dist/index.cjs.js","webpack:///./~/@firebase/polyfill/dist/index.cjs.js","webpack:///./~/@firebase/storage/dist/index.cjs.js","webpack:///./~/@firebase/util/dist/index.cjs.js","webpack:///./~/firebase/app/index.js","webpack:///./~/firebase/auth/index.js","webpack:///./~/firebase/database/index.js","webpack:///./~/firebase/index.js","webpack:///./~/firebase/messaging/index.js","webpack:///./~/firebase/storage/index.js","webpack:///./~/js-cookie/src/js.cookie.js","webpack:///./~/regenerator-runtime/runtime-module.js","webpack:///./~/regenerator-runtime/runtime.js","webpack:///./~/setimmediate/setImmediate.js","webpack:///./~/timers-browserify/main.js","webpack:///./~/tslib/tslib.js","webpack:///./~/whatwg-fetch/fetch.js","webpack:///./src/configs/firebase.ts","webpack:///./src/pages/cheer.tsx","webpack:///./src/pages/images/main-1@2x.png","webpack:///./src/pages/images/main-2@2x.png","webpack:///./src/pages/images/main-3@2x.png"],"names":["webpackJsonp","73","module","exports","__webpack_require__","createFirebaseNamespace","removeApp","name","app","apps_","callAppHooks","DEFAULT_ENTRY_NAME","contains","error","initializeApp","options","rawConfig","name_1","config","undefined","FirebaseAppImpl","namespace","getApps","Object","keys","map","registerService","createService","serviceProperties","appHook","allowMultipleInstances","factories","appHooks","forEach","serviceNamespace","appArg","util","deepExtend","prototype","args","_i","arguments","length","serviceFxn","this","_getService","bind","apply","extendNamespace","props","eventName","serviceName","factoryName","useAsService","useService","__esModule","apps","Promise","SDK_VERSION","INTERNAL","createSubscribe","ErrorFactory","patchProperty","defineProperty","get","code","appErrors","create","value","obj","key","hasOwnProperty","call","tokenListeners","firebase_","isDeleted_","services_","name_","_automaticDataCollectionEnabled","automaticDataCollectionEnabled","options_","deepCopy","getUid","getToken","resolve","addAuthTokenListener","callback","push","setTimeout","removeAuthTokenListener","filter","listener","checkDestroyed_","set","val","enumerable","configurable","delete","_this","then","services","serviceKey","instanceKey","all","service","instanceIdentifier","instanceSpecifier","extendApp","console","log","errors","no-app","bad-app-name","duplicate-app","app-deleted","duplicate-service","sa-not-supported","invalid-app-argument","firebase","default","438","global","l","a","ba","ca","da","b","Array","c","toString","splice","propertyIsEnumerable","ea","fa","ha","n","q","ka","la","Error","d","slice","unshift","r","Function","indexOf","ma","t","lb","constructor","ad","f","e","oa","$goog_Thenable","pa","u","captureStackTrace","stack","message","String","qa","split","ra","sa","ta","next","ua","xa","ya","va","Aa","Da","Ea","charAt","Fa","za","Ga","w","Ha","concat","Ia","Ja","shift","join","La","Ma","test","replace","Na","Oa","Pa","Qa","Ra","Sa","x","Ta","y","Ua","Xa","Ya","Za","ab","$a","bb","k","db","MessageChannel","window","postMessage","addEventListener","document","createElement","style","display","src","documentElement","appendChild","contentWindow","open","write","close","Math","random","location","protocol","host","origin","data","port1","onmessage","port2","rb","onreadystatechange","parentNode","removeChild","eb","fb","gb","hb","add","ib","setImmediate","Window","cb","wa","z","jb","j","g","h","kb","mb","nb","ob","qb","pb","A","B","sb","tb","p","m","ub","Zb","reason","xb","yb","zb","wb","Ab","vb","E","TypeError","Kc","Lc","Bb","Cb","Ub","Db","Eb","Fb","Gb","Hb","ia","ja","Ib","Jb","Kb","Lb","Rb","documentMode","Wb","Ka","Sb","max","exec","parseInt","D","type","target","cc","relatedTarget","button","screenY","screenX","clientY","clientX","metaKey","shiftKey","altKey","ctrlKey","pointerId","pointerType","changedTouches","srcElement","Pb","nodeName","fromElement","toElement","pageX","pageY","dc","defaultPrevented","preventDefault","gc","proxy","capture","fc","hc","jc","lc","kc","pc","once","qc","rc","ec","sc","tc","uc","mc","vc","bc","attachEvent","wc","addListener","removeListener","oc","xc","$b","yc","F","zc","removeEventListener","detachEvent","nc","Ac","Bc","keyCode","returnValue","Cc","handleEvent","G","Mb","Dc","Ec","Number","Fc","clearTimeout","Gc","S","Hc","U","Ic","v","Mc","Oc","substring","decodeURIComponent","Pc","Qc","Rc","Sc","Tc","match","Nc","Uc","isNaN","$c","Vc","H","bd","cd","dd","decodeURI","encodeURI","ed","charCodeAt","fd","gd","hd","jd","id","kd","toLowerCase","md","nd","od","pd","qd","rd","sd","td","ud","vd","JSON","stringify","encodeURIComponent","wd","xd","yd","zd","Bd","Ad","Cd","Dd","Ed","Fd","Gd","Hd","getElementById","Id","cssText","className","htmlFor","Jd","setAttribute","lastIndexOf","Kd","ld","Ld","createTextNode","nodeType","Md","item","Nd","Od","Pd","Boolean","Qd","valueOf","isFinite","Sd","Rd","substr","Td","I","C","Xb","Ud","href","self","Vd","Wd","Xd","Yd","Zd","$d","ae","be","floor","screen","availHeight","availWidth","width","height","top","left","resizable","statusbar","toolbar","ce","scrollbars","navigator","standalone","noreferrer","createEvent","initMouseEvent","dispatchEvent","Ob","opener","noopener","focus","de","closed","fe","readyState","ge","he","ie","je","ke","importScripts","le","me","oe","ne","sort","userAgent","J","pe","localStorage","qe","setItem","removeItem","indexedDB","re","se","te","ue","ve","we","parse","xe","ye","___jsl","L","CP","ze","Ae","visibilityState","Be","Ce","Date","getTime","toUTCString","De","K","Fe","He","Ie","Je","Ke","Le","Me","Ne","Oe","Pe","Qe","Re","Se","Te","M","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","cf","df","ef","ff","continueUrl","canHandleCodeInApp","androidPackageName","androidMinimumVersion","androidInstallApp","iOSBundleId","gf","Ba","kf","lf","fromCharCode","jf","mf","hf","nf","sub","na","provider_id","sign_in_provider","is_anonymous","of","pf","iss","aud","exp","tf","sf","uf","vf","wf","xf","yf","zf","Af","Bf","Cf","isNewUser","kind","rawUserInfo","providerId","profile","login","screenName","Df","Ef","Ff","Gf","Hf","idToken","accessToken","oauthToken","oauthTokenSecret","Jf","id_token","access_token","secret","oauth_token_secret","postBody","requestUri","Mf","isOAuthProvider","N","rf","Nf","Of","credential","Pf","Qf","Rf","Sf","Tf","qf","Uf","Vf","O","EMAIL_LINK_SIGN_IN_METHOD","EMAIL_PASSWORD_SIGN_IN_METHOD","$f","ag","bg","Z","cg","temporaryProof","phoneNumber","sessionInfo","fg","auth","hg","ig","oauthAccessToken","oauthIdToken","jg","kg","lg","eventId","urlResponse","sessionId","mg","og","pg","qg","email","sg","tg","vg","wg","XMLHttpRequest","ActiveXObject","xg","yg","XDomainRequest","responseText","status","statusText","onload","onerror","onprogress","ontimeout","zg","Ag","reset","Cg","Dg","Ig","Lg","Kg","Jg","Gg","Q","Hg","Mg","Ng","Og","Headers","Pg","Qg","headers","s","o","Rg","Ug","toUpperCase","ug","Vg","Wg","FormData","Tg","setRequestHeader","responseType","withCredentials","Xg","Yg","timeout","send","abort","Zg","$g","ah","aa","bh","ch","Sg","Eg","dh","eh","hh","ih","gh","jh","kh","lh","mh","Ca","nh","oh","fh","ph","qh","rh","sh","th","uh","attributes","charset","vh","getElementsByTagName","tagName","wh","xh","secureTokenEndpoint","secureTokenTimeout","yh","secureTokenHeaders","zh","firebaseEndpoint","firebaseTimeout","Ah","firebaseHeaders","Bh","node","Dh","Eh","Fh","Ch","Gh","gapi","client","request","Ih","Hh","Jh","grant_type","refresh_token","Kh","Lh","Mh","rg","Nh","Oh","P","Ph","identifier","continueUri","allProviders","Qh","signinMethods","Rh","Sh","authorizedDomains","Th","Uh","gg","ai","ci","di","deleteProvider","ei","fi","needConfirmation","errorMessage","gi","If","returnIdpCredential","hi","Kf","ii","Lf","autoCreate","ji","ki","oobCode","T","R","returnSecureToken","endpoint","Tb","keyInvalid","ipRefererBlocked","INVALID_CUSTOM_TOKEN","CREDENTIAL_MISMATCH","MISSING_CUSTOM_TOKEN","INVALID_IDENTIFIER","MISSING_CONTINUE_URI","INVALID_EMAIL","INVALID_PASSWORD","USER_DISABLED","MISSING_PASSWORD","EMAIL_EXISTS","PASSWORD_LOGIN_DISABLED","INVALID_IDP_RESPONSE","FEDERATED_USER_ID_ALREADY_LINKED","INVALID_MESSAGE_PAYLOAD","INVALID_RECIPIENT_EMAIL","INVALID_SENDER","EMAIL_NOT_FOUND","EXPIRED_OOB_CODE","INVALID_OOB_CODE","MISSING_OOB_CODE","CREDENTIAL_TOO_OLD_LOGIN_AGAIN","INVALID_ID_TOKEN","TOKEN_EXPIRED","USER_NOT_FOUND","CORS_UNSUPPORTED","DYNAMIC_LINK_NOT_ACTIVATED","INVALID_APP_ID","TOO_MANY_ATTEMPTS_TRY_LATER","WEAK_PASSWORD","OPERATION_NOT_ALLOWED","USER_CANCELLED","CAPTCHA_CHECK_FAILED","INVALID_APP_CREDENTIAL","INVALID_CODE","INVALID_PHONE_NUMBER","INVALID_SESSION_INFO","INVALID_TEMPORARY_PROOF","MISSING_APP_CREDENTIAL","MISSING_CODE","MISSING_PHONE_NUMBER","MISSING_SESSION_INFO","QUOTA_EXCEEDED","SESSION_EXPIRED","INVALID_CONTINUE_URI","MISSING_ANDROID_PACKAGE_NAME","MISSING_IOS_BUNDLE_ID","UNAUTHORIZED_DOMAIN","INVALID_OAUTH_CLIENT_ID","INVALID_CERT_HASH","ui","ti","wi","xi","yi","where","body","url","messageHandlersFilter","position","dontclear","restyle","setHideOnLeave","zi","ping","Ai","Bi","register","Ei","Di","Ci","Fi","Gi","Hi","Ii","Ji","ee","RegExp","Ki","Li","Ni","Oi","authEvent","Mi","webStorageSupport","Pi","reactNative","AsyncStorage","Qi","Ri","Ti","deleteDatabase","onsuccess","Ui","onupgradeneeded","result","createObjectStore","keyPath","objectStoreNames","Vi","Wi","objectStore","Xi","transaction","Yi","errorCode","Zi","Jc","cancel","$i","Si","Y","aj","bj","cj","dj","ej","fj","gj","hj","sessionStorage","ij","Browser","jj","Node","kj","ReactNative","lj","Worker","mj","pj","oj","qj","nj","sj","rj","tj","uj","vj","getItem","wj","xj","yj","setInterval","oldValue","newValue","clearInterval","zj","Bj","Aj","Cj","Dj","Ej","Fj","Uint8Array","Int32Array","Gj","Hj","Mj","ic","El","Nj","Oj","Pj","Qj","Rj","Sj","Tj","Lj","Vj","ibi","apn","appDisplayName","Xj","Uj","Yj","Wj","handleOpenURL","ng","subscribe","Zj","bk","ak","ck","dk","ek","fk","gk","unknown","signInViaRedirect","linkViaRedirect","reauthViaRedirect","signInViaPopup","linkViaPopup","reauthViaPopup","hk","vi","ik","jk","kk","lk","ok","qk","pk","rk","sk","tk","uk","user","vk","nk","wk","ga","xk","yk","zk","auth_time","iat","token","expirationTime","authTime","issuedAtTime","signInProvider","claims","Ak","Ck","Bk","stop","Dk","Ek","refreshToken","Fk","expiresIn","Gk","expires_in","Hk","lastSignInTime","creationTime","Ik","Jk","uid","displayName","photoURL","Kk","Lk","apiKey","appName","authDomain","Mk","Nk","Ok","V","X","Pk","W","Qk","Rk","Sk","Tk","start","Uk","Vk","Wk","Xk","emailVerified","isAnonymous","metadata","createdAt","lastLoginAt","providerData","Yk","Zk","$k","al","bl","cl","dl","el","fl","gl","qi","hl","providerUserInfo","rawId","photoUrl","jl","il","additionalUserInfo","operationType","kl","reload","ll","ml","nl","$","ol","pl","ql","rl","stsTokenManager","redirectEventId","sl","tl","ul","vl","wl","xl","zl","Al","Bl","yl","Cl","Dl","Fl","Gl","Hl","Il","Jl","Yb","Kl","logFramework","Ll","Ml","Nl","Ol","Nb","Pl","Ql","Rl","Sl","currentUser","Ul","_lat","Tl","Vl","theme","Wl","Xl","hasChildNodes","Yl","Zl","$l","am","bm","em","gm","grecaptcha","Infinity","cm","hm","render","fm","dm","im","jm","km","optional","lm","mm","nm","om","pm","Element","qm","rm","App","sm","tm","um","verify","vm","i","wm","now","some","trim","Va","Wa","Qb","Vb","parseFloat","compatMode","freeze","ac","2","3","4","clear","Wc","Xc","Yc","Zc","cellpadding","cellspacing","colspan","frameborder","maxlength","nonce","role","rowspan","usemap","valign","\"","\\","/","\b","\f","\n","\r","\t","\u000b","onLine","connection","min","Ee","Ge","abcd","toJSON","argument-error","app-not-authorized","app-not-installed","captcha-check-failed","code-expired","cordova-not-ready","cors-unsupported","credential-already-in-use","custom-token-mismatch","requires-recent-login","dynamic-link-not-activated","email-already-in-use","expired-action-code","cancelled-popup-request","internal-error","invalid-app-credential","invalid-app-id","invalid-user-token","invalid-auth-event","invalid-verification-code","invalid-continue-uri","invalid-cordova-configuration","invalid-custom-token","invalid-email","invalid-api-key","invalid-cert-hash","invalid-credential","invalid-persistence-type","invalid-message-payload","invalid-oauth-provider","invalid-oauth-client-id","unauthorized-domain","invalid-action-code","wrong-password","invalid-phone-number","invalid-recipient-email","invalid-sender","invalid-verification-id","missing-android-pkg-name","auth-domain-config-required","missing-app-credential","missing-verification-code","missing-continue-uri","missing-iframe-start","missing-ios-bundle-id","missing-phone-number","missing-verification-id","account-exists-with-different-credential","network-request-failed","no-auth-event","no-such-provider","operation-not-allowed","operation-not-supported-in-this-environment","popup-blocked","popup-closed-by-user","provider-already-linked","quota-exceeded","redirect-cancelled-by-user","redirect-operation-pending","user-token-expired","too-many-requests","unauthorized-continue-uri","unsupported-persistence-type","user-cancelled","user-not-found","user-disabled","user-mismatch","user-signed-out","weak-password","web-storage-unsupported","signInMethod","Wf","Xf","password","Yf","Zf","PROVIDER_ID","dg","operation","eg","verificationId","verificationCode","recaptchaToken","PHONE_SIGN_IN_METHOD","unsubscribe","getResponseHeader","contentType","getAllResponseHeaders","Bg","Fg","method","credentials","cache","fetch","Request","text","append","entries","done","getResponse","response","mozResponseArrayBuffer","Content-Type","setApiKey","setToken","path","authType","Vh","Wh","Xh","deleteAttribute","requestType","Yh","Zh","$h","bi","li","newPassword","mi","ni","oi","pi","ri","recaptchaSiteKey","si","put","fbase_key","getAll","openCursor","NONE","Ij","Jj","Kj","mk","confirm","warn","users","localId","passwordHash","languages","language","userLanguage","execute","firstChild","Persistence","LOCAL","SESSION","Auth","User","439","process","_interopDefault","ex","decodePath","pathString","pathStringDecoded","pieces","piece","decodeQuery","queryString","results","startsWith","_a","segment","kv","setMaxNode","MAX_NODE","setNodeFromJSON","nodeFromJSON","setMaxNode$1","MAX_NODE$1","NAME_ONLY_COMPARATOR","right","nameCompare","NAME_COMPARATOR","nodeFromJSON$1","json","priority","ChildrenNode","EMPTY_NODE","assert","jsonLeaf","LeafNode","USE_HINZE","node_1","jsonObj_1","childData","childNode","isLeafNode","isEmpty","updateImmediateChild","updatePriority","children_1","childrenHavePriority_1","hinzeJsonObj_1","child","getPriority","NamedNode","childSet","buildChildSet","namedNode","sortedChildSet","PRIORITY_INDEX","getCompare","IndexMap",".priority","Default","registerDatabase","instance","unused","RepoManager","getInstance","databaseFromApp","Reference","Query","Database","enableLogging","ServerValue","TEST_ACCESS","isNodeSdk","__EMPTY_NODE","__childrenNodeConstructor","_defaultIndexMap","logger","tslib_1","DOMStorageWrapper","domStorage_","prefix_","prefixedName_","storedVal","jsonEval","remove","MemoryStorage","cache_","isInMemoryStorage","createStoragefor","domStorageName","domStorage","PersistentStorage","SessionStorage","logClient","Logger","LUIDGenerator","sha1","str","utf8Bytes","stringToByteArray","Sha1","update","sha1Bytes","digest","base64","encodeByteArray","buildLogMessage_","var_args","isArray","logger$1","firstLog_","logger_","persistent","logLevel","LogLevel","VERBOSE","logWrapper","prefix","fatal","warnIfPageIsSecure","isInvalidJSONNumber","POSITIVE_INFINITY","NEGATIVE_INFINITY","executeWhenDOMReady","fn","called_1","wrappedFn_1","MIN_NAME","MAX_NAME","aAsInt","tryParseInt","bAsInt","stringCompare","requireKey","ObjectToUniqueKey","splitStringBySize","segsize","len","dataSegs","each","doubleToIEEE754String","ln","bits","ebits","fbits","bias","abs","pow","LN2","round","reverse","hexByteString","hexByte","isChromeExtensionContentScript","isWindowsStoreApp","Windows","UI","errorForServerCode","query","INTEGER_REGEXP_","intVal","exceptionGuard","beingCrawled","search","setTimeoutNonBlocking","time","Path","pathOrString","pieceNum","pieces_","copyTo","pieceNum_","getFront","getLength","popFront","getBack","toUrlEncodedString","begin","parent","childPathObj","childPieces","relativePath","outerPath","innerPath","outer","inner","comparePaths","leftKeys","rightKeys","cmp","equals","other","ValidationPath","errorPrefix_","parts_","byteLength_","stringLength","checkValid_","pop","last","MAX_PATH_LENGTH_BYTES","MAX_PATH_DEPTH","toErrorString","PROTOCOL_VERSION","VERSION_PARAM","TRANSPORT_SESSION_PARAM","REFERER_PARAM","FORGE_REF","FORGE_DOMAIN","LAST_SESSION_PARAM","WEBSOCKET","LONG_POLLING","RepoInfo","secure","webSocketOnly","persistenceKey","domain","internalHost","needsQueryParam","isCustomHost","isCacheableHost","isDemoHost","updateHost","newHost","connectionURL","params","connURL","pairs","toURLString","parseRepoInfo","dataURL","parsedUrl","parseURL","subdomain","scheme","repoInfo","port","colonInd","slashInd","questionMarkInd","queryParams","parts","INVALID_KEY_REGEX_","INVALID_PATH_REGEX_","MAX_LEAF_SIZE_","isValidKey","isValidPathString","isValidRootPathString","isValidPriority","validateFirebaseDataArg","fnName","argumentNumber","validateFirebaseData","errorPrefix","path_","hasDotValue_1","hasActualChild_1","validateFirebaseMergePaths","mergePaths","curPath","prevPath","validateFirebaseMergeDataArg","validatePriority","validateEventType","eventType","validateKey","validatePathString","validateRootPathString","validateWritablePath","validateUrl","validateBoolean","bool","OnDisconnect","repo_","onComplete","validateArgCount","validateCallback","deferred","Deferred","onDisconnectCancel","wrapCallback","promise","onDisconnectSet","setWithPriority","onDisconnectSetWithPriority","objectToMerge","newObjectToMerge","onDisconnectUpdate","TransactionResult","committed","snapshot","nextPushId","PUSH_CHARS","lastPushTime","lastRandChars","duplicateTime","timeStampChars","Wrap","Index","compare","indexedValueChanged","oldNode","newNode","oldWrapped","newWrapped","minPost","MIN","KeyIndex","_super","__extends","isDefinedOn","assertionError","maxPost","makePost","indexValue","KEY_INDEX","priorityHashText","validatePriorityNode","priorityNode","value_","priorityNode_","lazyHash_","newPriorityNode","getImmediateChild","childName","getChild","hasChild","getPredecessorChildName","newChildNode","updateChild","front","numChildren","forEachChild","index","action","exportFormat",".value","getValue","hash","toHash","compareTo","compareToLeafNode_","otherLeaf","otherLeafType","thisLeafType","otherIndex","VALUE_TYPE_ORDER","thisIndex","withIndex","isIndexed","PriorityIndex","aPriority","bPriority","indexCmp","SortedMapIterator","startKey","comparator","isReverse_","resultGenerator_","nodeStack_","getNext","hasNext","peek","LLRBNode","color","RED","SortedMap","copy","count","inorderTraversal","reverseTraversal","min_","minKey","maxKey","insert","fixUp_","removeMin_","isRed_","moveRedLeft_","smallest","rotateRight_","moveRedRight_","rotateLeft_","colorFlip_","nr","checkMaxDepth_","blackDepth","check_","BLACK","LLRBEmptyNode","comparator_","root_","getPredecessorKey","rightParent","getIterator","resultGenerator","getIteratorFrom","getReverseIteratorFrom","getReverseIterator","LOG_2","Base12Num","logBase2","num","bitMask","current_","mask","bits_","nextBitIsOne","childList","keyFn","mapSortFn","buildBalancedTree","low","high","middle","buildFrom12Array","base12","root","buildPennant","chunkSize","childTree","attachPennant","pennant","isOne","fallbackObject","indexes_","indexSet_","indexKey","sortedMap","safeGet","hasIndex","indexDefinition","addIndex","existingChildren","sawIndexedValue","iter","newIndex","indexName","newIndexSet","clone","newIndexes","addToIndexes","indexedChildren","existingSnap","newChildren","removeFromIndexes","children_","indexMap_","newIndexMap","newPriority","newImmediateChild","numKeys","allIntegerKeys","array","toHash_1","childHash","idx","resolveIndex_","predecessor","getFirstChildName","getFirstChild","getLastChildName","getLastChild","wrappedNode","startPost","iterator","endPost","MAX_NODE$2","otherChildrenNode","thisIter","otherIter","thisCurrent","otherCurrent","MaxNode","defineProperties","MAX","__referenceConstructor","OperationType","ValueIndex","valueNode","VALUE_INDEX","PathIndex","indexPath_","extractChild","snap","aChild","bChild","DataSnapshot","node_","ref_","index_","exportVal","exists","childPathString","childPath","childRef","childrenNode","hasChildren","getKey","getRef","DataEvent","eventRegistration","prevName","getPath","ref","getParent","getEventType","getEventRunner","CancelEvent","ValueEventRegistration","callback_","cancelCallback_","context_","respondsTo","change","getQueryParams","getIndex","snapshotNode","eventData","ctx","cancelCB_1","cb_1","createCancelEvent","matches","hasAnyCallback","ChildEventRegistration","callbacks_","eventToCheck","cancelCB_2","cb_2","otherCount","getCount","thisCount","otherKey","getAnyKey","thisKey","every","repo","queryParams_","orderByCalled_","validateQueryEndpoints_","startNode","endNode","hasStart","getIndexStartValue","hasEnd","getIndexEndValue","tooManyArgsError","wrongArgTypeError","startName","getIndexStartName","endName","getIndexEndName","validateLimit_","hasLimit","hasAnchoredLimit","validateNoPreviousOrderByCall_","on","cancelCallbackOrContext","context","ret","getCancelAndContextArgs_","onValueEvent","callbacks","onChildEvent","cancelCallback","container","addEventCallbackForQuery","off","validateContextObject","valueCallback","removeEventCallbackForQuery","userCallback","cancelOrContext","firstCall","catch","onceCallback","err","reject","limitToFirst","limit","limitToLast","orderByChild","parsedPath","newParams","orderBy","orderByKey","orderByPriority","orderByValue","startAt","endAt","equalTo","queryObject","getQueryObject","queryIdentifier","isEqual","error$$1","sameRepo","samePath","sameQueryIdentifier","CountedSet","SparseSnapshotTree","find","childKey","remember","forget","self_1","tree","safeToRemove","forEachTree","prefixPath","func","generateWithValues","values","resolveDeferredValue","serverValues","resolveDeferredValueTree","resolvedTree","resolveDeferredValueSnapshot","rawPri","leafNode","emptyChildrenSingleton","__referenceConstructor$1","OperationSource","fromUser","fromServer","queryId","tagged","Server","forServerTaggedQuery","AckUserWrite","affectedTree","revert","ACK_USER_WRITE","source","operationForChild","children","subtree","Empty","EmptyChildren","ImmutableTree","fromObject","childSnap","findRootMostMatchingPathAndValue","predicate","childExistingPathAndValue","fullPath","findRootMostValueAndPath","toSet","newChild","setTree","newTree","fold","fold_","pathSoFar","accum","findOnPath","findOnPath_","pathToFollow","nextChild","foreachOnPath","foreachOnPath_","currentRelativePath","foreach","foreach_","foreachChild","ListenComplete","LISTEN_COMPLETE","Overwrite","OVERWRITE","Merge","MERGE","CacheNode","fullyInitialized_","filtered_","isFullyInitialized","isFiltered","isCompleteForPath","isCompleteForChild","getNode","ViewCache","eventCache_","serverCache_","updateEventSnap","eventSnap","complete","filtered","updateServerSnap","serverSnap","getEventCache","getCompleteEventSnap","getServerCache","getCompleteServerSnap","Change","oldSnap","valueChange","VALUE","childAddedChange","CHILD_ADDED","childRemovedChange","CHILD_REMOVED","childChangedChange","newSnapshot","oldSnapshot","CHILD_CHANGED","childMovedChange","CHILD_MOVED","IndexedFilter","affectedPath","optChangeAccumulator","oldChild","trackChildChange","updateFullNode","newSnap","filtersNodes","getIndexedFilter","ChildChangeAccumulator","changeMap_","oldChange","oldType","getChanges","getValues","NoCompleteChildSource_","getCompleteChild","getChildAfterChild","NO_COMPLETE_CHILD_SOURCE","WriteTreeCompleteChildSource","writes_","viewCache_","optCompleteServerCache_","serverNode","calcCompleteChild","completeServerData","nodes","calcIndexedSlice","ProcessorResult","viewCache","changes","ViewProcessor","filter_","assertIndexed","applyOperation","oldViewCache","writesCache","completeCache","newViewCache","filterServerNode","accumulator","overwrite","applyUserOverwrite_","applyServerOverwrite_","merge","applyUserMerge_","applyServerMerge_","ackUserWrite","revertUserWrite_","ackUserWrite_","listenComplete_","maybeAddValueEvent_","isLeafOrEmpty","oldCompleteSnap","generateEventCacheAfterServerEvent_","changePath","oldEventSnap","shadowingWrite","newEventCache","serverCache","completeChildren","completeEventChildren","calcCompleteEventChildren","completeNode","calcCompleteEventCache","oldEventNode","updatedPriority","calcEventCacheAfterServerOverwrite","childChangePath","newEventChild","eventChildUpdate","changedSnap","newServerCache","oldServerSnap","serverFilter","newServerNode","newEventSnap","cacheHasChild_","changedChildren","curViewCache","writePath","applyMerge_","viewMergeTree","serverChild","childMergeTree","isUnknownDeepMerge","ackPath","changedChildren_1","changedChildren_2","mergePath","serverCachePath","oldServerNode","completeServerCache","oldEventCache","serverChildren","EventGenerator","query_","generateEventsForChanges","eventCache","eventRegistrations","events","moves","generateEventsForType_","registrations","filteredChanges","compareChanges_","materializedChange","materializeSingleChange_","registration","aWrapped","bWrapped","View","initialViewCache","eventRegistrations_","indexFilter","getNodeFilter","processor_","initialServerCache","initialEventCache","eventGenerator_","getQuery","getCompleteServerCache","loadsAllData","addEventRegistration","removeEventRegistration","cancelError","cancelEvents","path_1","maybeEvent","remaining","existing","generateEventsForChanges_","getInitialEvents","initialChanges","eventNode","SyncPoint","views_","optCompleteServerCache","view","events_1","serverCacheComplete","eventCacheComplete","removed","hadCompleteView","hasCompleteView","viewQueryId","getQueryViews","viewForQuery","getCompleteView","viewExistsForQuery","completeView","findValue","CompoundWrite","writeTree_","addWrite","rootmost","rootMostPath","newWriteTree","addWrites","updates","newWrite","removeWrite","hasCompleteWrite","getCompleteNode","getCompleteChildren","childCompoundWrite","shadowingNode","applySubtreeWrite_","writeTree","priorityWrite_1","WriteTree","visibleWrites_","allWrites_","lastWriteId_","childWrites","WriteTreeRef","addOverwrite","writeId","visible","addMerge","getWrite","record","findIndex","writeToRemove","removedWriteWasVisible","removedWriteOverlapsWithOtherWrites","currentWrite","recordContainsPath_","resetTree_","getCompleteWriteData","treePath","writeIdsToExclude","includeHiddenWrites","mergeAtPath","layerTree_","layeredCache","subMerge","completeServerChildren","topLevelSet","merge_1","existingEventSnap","existingServerSnap","childMerge","toIterate","writeRecord","findKey","DefaultFilter_","writes","treeRoot","compoundWrite","deepNode","treePath_","existingServerCache","SyncTree","listenProvider_","syncPointTree_","pendingWriteTree_","tagToQueryMap_","queryToTagMap_","applyUserOverwrite","newData","applyOperationToSyncPoints_","applyUserMerge","changeTree","needToReevaluate","affectedTree_1","applyServerOverwrite","applyServerMerge","applyListenComplete","applyTaggedQueryOverwrite","tag","queryKey","queryKeyForTag_","parseQueryKey_","queryPath","op","applyTaggedOperation_","applyTaggedQueryMerge","applyTaggedListenComplete","foundAncestorDefaultView","pathToSyncPoint","sp","syncPoint","childSyncPoint","viewAlreadyExists","makeQueryKey_","getNextQueryTag_","setupListener_","maybeSyncPoint","removedAndEvents","removingDefault","covered","parentSyncPoint","newViews","collectDistinctViewsForSubTree_","newQuery","createListenerForView_","startListening","queryForListening_","tagForQuery_","hashFn","defaultTag","stopListening","queryToRemove","tagToRemove","removeTags_","includeHiddenSets","maybeChildSyncPoint","childMap","views_1","childViews","queries","removedQuery","removedQueryKey","removedQueryTag","isDefault","queriesToStop","queries_1","childQueries","queryToStop","splitIndex","nextQueryTag_","applyOperationHelper_","syncPointTree","applyOperationDescendantsHelper_","childOperation","childServerCache","childWritesCache","SnapshotHolder","rootNode_","updateSnapshot","newSnapshotNode","AuthTokenProvider","app_","forceRefresh","addTokenChangeListener","removeTokenChangeListener","notifyForInvalidToken","StatsCollection","counters_","incrementCounter","amount","StatsManager","getCollection","hashString","collections_","getOrCreateReporter","creatorFunction","reporters_","StatsListener","collection_","last_","newStats","delta","stat","FIRST_STATS_MIN_TIME","FIRST_STATS_MAX_TIME","REPORT_STATS_INTERVAL","StatsReporter","collection","server_","statsToReport_","statsListener_","reportStats_","includeStat","stats","reportedStats","haveStatsToReport","reportStats","EventQueue","eventLists_","recursionDepth_","queueEvents","eventDataList","currList","eventPath","EventList","raiseEventsAtPath","raiseQueuedEventsMatchingPredicate_","raiseEventsForChangedPath","changedPath","sentAll","eventList","raise","events_","eventFn","EventEmitter","allowedEvents_","listeners_","trigger","listeners","validateEventType_","getInitialEvent","et","VisibilityMonitor","hidden","visibilityChange","visible_","OnlineMonitor","online_","isMobileCordova","currentlyOnline","PacketReceiver","onMessage_","pendingResponses","currentResponseNum","closeAfterResponse","onClose","closeAfter","responseNum","handleResponse","requestNum","_loop_1","toProcess","this_1","_loop_2","state_1","FIREBASE_LONGPOLL_START_PARAM","FIREBASE_LONGPOLL_CLOSE_COMMAND","FIREBASE_LONGPOLL_COMMAND_CB_NAME","FIREBASE_LONGPOLL_DATA_CB_NAME","FIREBASE_LONGPOLL_ID_PARAM","FIREBASE_LONGPOLL_PW_PARAM","FIREBASE_LONGPOLL_SERIAL_PARAM","FIREBASE_LONGPOLL_CALLBACK_ID_PARAM","FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM","FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET","FIREBASE_LONGPOLL_DATA_PARAM","FIREBASE_LONGPOLL_DISCONN_FRAME_PARAM","FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM","MAX_URL_DATA_SIZE","SEG_HEADER_SIZE","MAX_PAYLOAD_SIZE","KEEPALIVE_REQUEST_INTERVAL","LP_CONNECT_TIMEOUT","BrowserPollConnection","connId","transportSessionId","lastSessionId","bytesSent","bytesReceived","everConnected_","log_","stats_","urlFn","onMessage","onDisconnect","curSegmentNum","onDisconnect_","myPacketOrderer","isClosed_","connectTimeoutTimer_","onClosed_","scriptTagHolder","FirebaseIFrameScriptHolder","command","arg1","arg2","incrementIncomingBytes_","sendNewPolls","pN","urlParams","uniqueCallbackIdentifier","connectURL","addTag","startLongPoll","addDisconnectPingFrame","forceAllow","forceAllow_","forceDisallow","forceDisallow_","isAvailable","markConnectionHealthy","shutdown_","myDisconnFrame","dataStr","base64data","base64Encode","enqueueSegment","pw","commandCB","onMessageCB","outstandingRequests","pendingSegs","currentSerial","myIFrame","createIFrame_","script","currentDomain","iframeContents","doc","iframe","contentDocument","alive","innerHTML","myID","myPW","theURL","nodeRestRequest","newRequest_","curDataString","nextSeg","theSeg","seg","ts","addLongPollTag_","segnum","totalsegs","serial","doNewRequest","keepaliveTimeout","readyStateCB","loadCB","doNodeLongPoll","newScript_1","async","rstate","WEBSOCKET_MAX_FRAME_SIZE","WEBSOCKET_KEEPALIVE_INTERVAL","WebSocketImpl","MozWebSocket","WebSocket","WebSocketConnection","keepaliveTimer","frames","totalFrames","connectionURL_","device","CONSTANTS","NODE_ADMIN","User-Agent","platform","env","mySock","onopen","onclose","handleIncomingFrame","isOldAndroid","oldAndroidRegex","oldAndroidMatch","previouslyFailed","appendFrame_","fullMess","jsonMess","handleNewFrameCount_","frameCount","extractFrameCount_","mess","resetKeepAlive","remainingData","sendString_","responsesRequiredToBeHealthy","healthyTimeout","TransportManager","initTransports_","isWebSocketsAvailable","isSkipPollConnection","transports_","transports_1","ALL_TRANSPORTS","transport","initialTransport","upgradeTransport","UPGRADE_TIMEOUT","DELAY_BEFORE_SENDING_EXTRA_REQUESTS","BYTES_SENT_HEALTHY_OVERRIDE","BYTES_RECEIVED_HEALTHY_OVERRIDE","MESSAGE_TYPE","MESSAGE_DATA","CONTROL_SHUTDOWN","CONTROL_RESET","CONTROL_ERROR","CONTROL_PONG","SWITCH_ACK","END_TRANSMISSION","PING","SERVER_HELLO","Connection","repoInfo_","onReady_","onKill_","connectionCount","pendingDataMessages","state_","transportManager_","start_","conn","conn_","nextTransportId_","primaryResponsesRequired_","onMessageReceived","connReceiver_","onConnectionLost","disconnReceiver_","tx_","rx_","secondaryConn_","isHealthy_","healthyTimeout_ms","healthyTimeout_","everConnected","onConnectionLost_","onSecondaryConnectionLost_","onPrimaryMessageReceived_","onSecondaryMessageReceived_","sendRequest","dataMsg","msg","sendData_","tryCleanupConnection","onSecondaryControl_","controlData","cmd","upgradeIfSecondaryHealthy_","secondaryResponsesRequired_","parsedData","layer","proceedWithUpgrade_","onControl_","onDataMessage_","onPrimaryResponse_","payload","onHandshake_","onConnectionShutdown_","onReset_","sendPingOnPrimaryIfNecessary_","handshake","timestamp","version","onConnectionEstablished_","tryStartUpgrade_","startUpgrade_","closeConnections_","ServerActions","refreshAuthToken","onDisconnectPut","onDisconnectMerge","RECONNECT_MIN_DELAY","RECONNECT_MAX_DELAY_DEFAULT","RECONNECT_MAX_DELAY_FOR_ADMINS","RECONNECT_DELAY_MULTIPLIER","RECONNECT_DELAY_RESET_TIMEOUT","SERVER_KILL_INTERRUPT_REASON","INVALID_AUTH_TOKEN_THRESHOLD","PersistentConnection","onDataUpdate_","onConnectStatus_","onServerInfoUpdate_","authTokenProvider_","authOverride_","nextPersistentConnectionId_","interruptReasons_","listens_","outstandingPuts_","outstandingPutCount_","onDisconnectRequestQueue_","connected_","reconnectDelay_","maxReconnectDelay_","securityDebugCallback_","establishConnectionTimer_","requestCBHash_","requestNumber_","realtime_","authToken_","forceTokenRefresh_","invalidAuthTokenCount_","firstConnection_","lastConnectionAttemptTime_","lastConnectionEstablishedTime_","scheduleConnect_","onVisible_","onOnline_","onResponse","curReqNum","listen","currentHashFn","listenSpec","sendListen_","req","warnOnListenWarnings_","currentListenSpec","removeListen_","warnings","indexSpec","indexPath","tryAuth","reduceReconnectDelayIfAdminCredential_","isFirebaseSecret","isAdmin","token_1","authMethod","isValidFormat","requestData","cred","res","onAuthRevoked_","unlisten","sendUnlisten_","queryObj","sendOnDisconnect_","putInternal","sendPut_","queued","errorReason","reqNum","onDataPush_","onListenRevoked_","onSecurityDebugPacket_","handleTimestamp_","sendConnectStats_","restoreState_","establishConnection_","online","onRealtimeDisconnect_","cancelSentTransactions_","shouldReconnect_","timeSinceLastConnectSucceeded","timeSinceLastConnectAttempt","reconnectDelay","onDataMessage_1","onReady_1","onDisconnect_1","connId_1","nextConnectionId_","lastSessionId_1","canceled_1","connection_1","closeFn_1","sendRequestFn","interrupt","resume","serverTimeOffset","normalizedPathString","statusCode","explanation","clientName","NODE_CLIENT","isReactNative","ReadonlyRestClient","getListenId_","listenId","thisListen","queryStringParamaters","toRestQueryStringParameters","restRequest_","status_1","queryStringParameters","authTokenData","authToken","querystring","xhr","INTERRUPT_REASON","Repo","forceRestClient","dataUpdateCount","eventQueue_","nextWriteId_","interceptServerDataCallback_","persistentConnection_","authTokenProvider","authOverride","statsReporter_","transactions_init_","infoData_","infoSyncTree_","infoEvents","updateInfo_","serverSyncTree_","serverTime","offsetNode","offset","generateServerValues","isMerge","taggedChildren","raw","taggedSnap","rerunTransactions_","interceptServerData_","connectStatus","runOnDisconnectEvents_","getNextWriteId_","newVal","newNodeUnresolved","success","clearEvents","callOnCompleteCallback","abortTransactions_","childrenToMerge","empty","changedKey","changedValue","writeId_1","resolvedOnDisconnectTree","showDelta","longestName","reduce","previousValue","currentValue","statsIncrementCounter","metric","__database","RangedFilter","indexedFilter_","startPost_","getStartPost_","endPost_","getEndPost_","getStartPost","getEndPost","LimitedFilter","rangedFilter_","limit_","getLimit","reverse_","isViewFromLeft","fullLimitUpdateChild_","inRange","indexCompare_1","foundStartPost","changeAccumulator","indexCmp_1","newChildNamedNode","windowBoundary","oldChildSnap","compareNext","remainsInWindow","nextChildInRange","QueryParams","limitSet_","startSet_","startNameSet_","endSet_","endNameSet_","viewFrom_","indexStartValue_","indexStartName_","indexEndValue_","indexEndName_","WIRE_PROTOCOL_CONSTANTS_","VIEW_FROM_LEFT","copy_","newLimit","VIEW_FROM_RIGHT","WIRE_PROTOCOL_CONSTANTS","INDEX_START_VALUE","INDEX_START_NAME","INDEX_END_VALUE","INDEX_END_NAME","LIMIT","viewFrom","VIEW_FROM","INDEX","REST_CONSTANTS","REST_QUERY_CONSTANTS_","qs","ORDER_BY","START_AT","END_AT","LIMIT_TO_FIRST","LIMIT_TO_LAST","DEFAULT","parentPath","getRoot","databaseProp","database","transactionUpdate","applyLocally","promiseComplete","startTransaction","setPriority","thennablePushRef","pushRef","TransactionStatus","TreeNode","childCount","Tree","parent_","subTree","pathObj","setValue","updateParents_","forEachDescendant","includeSelf","childrenFirst","forEachAncestor","forEachImmediateDescendantWithValue","updateChild_","childEmpty","childExists","MAX_TRANSACTION_RETRIES_","transactionQueueTree_","watchRef","unwatcher","order","retryCount","abortReason","currentWriteId","currentInputSnapshot","currentOutputSnapshotRaw","currentOutputSnapshotResolved","currentState","getLatestState_","RUN","queueNode","nodeQueue","priorityForNode","currentNode","sendReadyTransactions_","excludeSets","pruneCompletedTransactionsBelowNode_","queue","buildTransactionQueue_","allRun","sendTransactionQueue_","setsToIgnore","txn","latestState","snapToSend","latestHash","SENT","dataToSend","pathToSend","COMPLETED","SENT_NEEDS_ABORT","NEEDS_ABORT","rootMostTransactionNode","getAncestorTransactionNode_","rerunTransactionQueue_","txnsToRerun","abortTransaction","newDataNode","hasExplicitPriority","oldWriteId","newNodeResolved","lastInput","transactionNode","transactionQueue","aggregateTransactionQueuesForNode_","to","from","abortTransactionsOnNode_","lastSent","_staticInstance","DATABASE_URL_OPTION","repos_","useRestClient_","dbUrl","createRepo","deleteRepo","appRepos","DatabaseInternals","checkDeleted_","refFromURL","apiName","parsedURL","goOffline","goOnline","TIMESTAMP",".sv","__awaiter","__generator","forceLongPolling","forceWebSockets","setSecurityDebugCallback","interceptServerData","DataConnection","simpleListen","echo","onEcho","RealTimeConnection","hijackHash","newHash","oldPut","opt_onComplete","opt_hash","ConnectionTarget","listens","firebaseRef","440","setLogLevel","level","instances","inst","defaultLogLevel","INFO","defaultLogHandler","logType","toISOString","DEBUG","info","WARN","ERROR","_logLevel","_logHandler","debug","441","isArrayBufferEqual","byteLength","viewA","DataView","viewB","getUint8","toBase64","arrayBuffer","uint8Version","btoa","arrayBufferToBase64","base64String","base64ToArrayBuffer","padding","repeat","rawData","atob","outputArray","handleDb","OLD_OBJECT_STORE_NAME","iidModel","IIDModel","openCursorRequest","event","cursor","tokenDetails","deleteToken","fcmSenderId","fcmToken","fcmPushSet","continue","OLD_DB_NAME","cleanV1","promisify","validateInputs","input","errorFactory","ERROR_CODES","BAD_TOKEN","swScope","BAD_SCOPE","vapidKey","BAD_VAPID_KEY","BAD_SUBSCRIPTION","ArrayBuffer","p256dh","BAD_SENDER_ID","BAD_PUSH_SET","isTokenStillValid","pushSubscription","publicVapidKey","buffer","isEndpointEqual","isAuthEqual","isP256dhEqual","getClientList","clients","matchAll","includeUncontrolled","createNewMsg","msgType","msgData","MessageParameter","TYPE_OF_MSG","DATA","registerMessaging","messagingName","factoryMethod","SWController","WindowController","namespaceExports","Messaging","AVAILABLE_IN_WINDOW","AVAILABLE_IN_SW","SHOULD_BE_INHERITED","INCORRECT_GCM_SENDER_ID","PERMISSION_DEFAULT","PERMISSION_BLOCKED","UNSUPPORTED_BROWSER","NOTIFICATIONS_BLOCKED","FAILED_DEFAULT_REGISTRATION","SW_REGISTRATION_EXPECTED","GET_SUBSCRIPTION_FAILED","INVALID_SAVED_TOKEN","SW_REG_REDUNDANT","TOKEN_SUBSCRIBE_FAILED","TOKEN_SUBSCRIBE_NO_TOKEN","TOKEN_SUBSCRIBE_NO_PUSH_SET","TOKEN_UNSUBSCRIBE_FAILED","TOKEN_UPDATE_FAILED","TOKEN_UPDATE_NO_TOKEN","USE_SW_BEFORE_GET_TOKEN","INVALID_DELETE_TOKEN","DELETE_TOKEN_NOT_FOUND","DELETE_SCOPE_NOT_FOUND","BG_HANDLER_FUNCTION_EXPECTED","NO_WINDOW_CLIENT_TO_MSG","UNABLE_TO_RESUBSCRIBE","NO_FCM_TOKEN_FOR_RESUBSCRIBE","FAILED_TO_DELETE_TOKEN","NO_SW_IN_REG","FAILED_DELETE_VAPID_KEY","INVALID_PUBLIC_VAPID_KEY","USE_PUBLIC_KEY_BEFORE_GET_TOKEN","PUBLIC_KEY_DECRYPTION_FAILED","ERROR_MAP","DEFAULT_PUBLIC_VAPID_KEY","ENDPOINT","MessageType","senderId","subscription","fcmSubscribeBody","applicationPubKey","subscribeOptions","responseData","err_1","label","trys","sent","pushSet","updateToken","fcmUpdateBody","updateOptions","err_2","fcmUnsubscribeBody","unsubscribeOptions","err_3","DBInterface","dbPromise","createTransaction","runRequest","idbIndex","closeDatabase","mode","getDb","objectStoreName","oncomplete","dbName","dbVersion","onDbUpgrade","TokenDetailsModel","oldVersion","createIndex","unique","cursorRequest_1","__assign","createTime","getTokenDetailsFromToken","getTokenDetailsFromSWScope","saveTokenDetails","details","UNCOMPRESSED_PUBLIC_KEY_SIZE","VapidDetailsModel","getVapidFromSWScope","saveVapidDetails","deleteVapidDetails","SENDER_ID_OPTION_NAME","TOKEN_EXPIRATION_MILLIS","ControllerInterface","messagingSenderId","tokenDetailsModel","vapidDetailsModel","currentPermission","swReg","getNotificationPermission_","getSWRegistration_","getPublicVapidKey_","getPushSubscription","scope","manageExistingToken","getNewToken","isTokenValid","deleteTokenFromDB","updatedToken","allDetails","e_1","pushManager","getSubscription","swRegistration","userVisibleOnly","applicationServerKey","requestPermission","useServiceWorker","usePublicVapidKey","b64PublicKey","nextOrObserver","completed","onTokenRefresh","setBackgroundMessageHandler","Notification","permission","getTokenDetailsModel","getVapidDetailsModel","getIIDModel","FCM_MSG","bgMessageHandler","onPush","onSubChange","onNotificationClick","waitUntil","onPush_","onSubChange_","onNotificationClick_","msgPayload","hasVisibleClients","notificationDetails","notificationTitle","reg","hasVisibleClients_","notification","sendMessageToWindowClients_","getNotificationData_","title","showNotification","clickAction","windowClient","internalMsg","stopImmediatePropagation","click_action","getWindowClient_","openWindow","NOTIFICATION_CLICKED","attemptToMessageClient_","notificationInformation","clientList","suitableClient","parsedClientUrl","URL","PUSH_MSG_RECEIVED","vapidKeyFromDatabase","DEFAULT_SW_PATH","DEFAULT_SW_SCOPE","registrationToUse","publicVapidKeyToUse","manifestCheckPromise","messageObserver","tokenRefreshObserver","onMessageInternal","observer","onTokenRefreshInternal","setupSWMessageListener_","isSupported_","manifestCheck_","manifestTag","querySelector","manifestContent","managePermissionResult","permissionPromise","ServiceWorkerRegistration","publicKey","parsedKey","waitForRegistrationToActivate_","serviceWorker","installing","waiting","active","state","stateChangeListener","browserErrorMessage","workerPageMessage","pushMessage","PushSubscription","442","noop","thisArg","_state","_handled","_value","_deferreds","doResolve","handle","_immediateFn","onFulfilled","onRejected","finale","_unhandledRejectionFn","Handler","createCommonjsModule","setTimeoutFunc","prom","arr","race","globalNS","_global","__g","_core","core","__e","_isObject","it","_anObject","_fails","_descriptors","is","_domCreate","_ie8DomDefine","_toPrimitive","dP","Attributes","_objectDp","_propertyDesc","bitmap","writable","_hide","object","_has","px","_uid","_redefine","SRC","TO_STRING","$toString","TPL","inspectSource","safe","isFunction","_aFunction","_ctx","that","PROTOTYPE","$export","own","out","IS_FORCED","IS_GLOBAL","IS_STATIC","IS_PROTO","IS_BIND","expProto","_export","_cof","_iobject","_defined","_toObject","ceil","_toInteger","_toLength","_isArray","arg","SHARED","store","_shared","_wks","Symbol","USE_SYMBOL","$exports","SPECIES","_arraySpeciesConstructor","original","_arraySpeciesCreate","_arrayMethods","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","$this","callbackfn","UNSCOPABLES","ArrayProto","_addToUnscopables","$find","KEY","forced","$find$1","KEY$1","forced$1","MATCH","_isRegexp","isRegExp","_stringContext","searchString","NAME","MATCH$1","_failsIsRegexp","STARTS_WITH","$startsWith","443","prependCode","FirebaseStorageError","Code","UNKNOWN","objectNotFound","OBJECT_NOT_FOUND","quotaExceeded","bucket","unauthenticated","UNAUTHENTICATED","unauthorized","UNAUTHORIZED","retryLimitExceeded","RETRY_LIMIT_EXCEEDED","canceled","CANCELED","invalidUrl","INVALID_URL","invalidDefaultBucket","INVALID_DEFAULT_BUCKET","cannotSliceBlob","CANNOT_SLICE_BLOB","serverFileWrongSize","SERVER_FILE_WRONG_SIZE","noDownloadURL","NO_DOWNLOAD_URL","invalidArgument","INVALID_ARGUMENT","invalidArgumentCount","argMin","argMax","real","countPart","plural","INVALID_ARGUMENT_COUNT","appDeleted","APP_DELETED","invalidRootOperation","INVALID_ROOT_OPERATION","invalidFormat","format","INVALID_FORMAT","internalError","INTERNAL_ERROR","formatValidator","stringFormat","StringFormat","RAW","BASE64","BASE64URL","DATA_URL","dataFromString","string","StringData","utf8Bytes_","base64Bytes_","dataURLBytes_","dataURLContentType_","valid","lo","percentEncodedBytes_","decoded","hasMinus","hasUnder","invalidChar","hasPlus","hasSlash","bytes","DataURLParts","rest","endsWith","end","longEnough","taskStateFromInternalTaskState","InternalTaskState","RUNNING","PAUSING","CANCELING","TaskState","PAUSED","SUCCESS","prop","make","resolver","isDef","isJustDef","isObject","isNonNullObject","isNonArrayObject","isString","isNumber","isNativeBlob","isNativeBlobDefined","Blob","jsonObjectOrNull","newPath","canonicalChildPath","component","lastComponent","makeNormalUrl","urlPart","domainBase","apiBaseUrl","makeDownloadUrl","downloadBase","makeUploadUrl","apiUploadBaseUrl","makeQueryString","encode","queryPart","nextPart","noXform_","xformPath","getMappings","mappingsXformPath","xformSize","size","xformTokens","tokens","tokensList","urls","base","alt","mappings_","mappings","Mapping","nameMapping","xform","sizeMapping","addRef","authWrapper","generateRef","loc","Location","makeStorageReference","fromResource","resource","mapping","local","server","fromResourceString","resourceString","toResourceString","metadataValidator","validType","validate","specs","passed","minArgs","maxArgs","validLength","validator","and_","v1","v2","stringSpec","opt_validator","opt_optional","stringValidator","ArgSpec","uploadDataSpec","metadataSpec","nonNegativeNumberSpec","looseObjectSpec","isLooseObject","nullFunctionSpec","getBlobBuilder","BlobBuilder","WebKitBlobBuilder","getBlob","sliceBlob","blob","webkitSlice","mozSlice","contains$1","elem","clone$1","arraylike","handlerCheck","cndn","metadataHandler","handler","sharedErrorHandler","errorHandler","newErr","getStatus","setServerResponseProp","serverResponseProp","objectErrorHandler","shared","getMetadata","fullServerUrl","maxOperationRetryTime","requestInfo","RequestInfo","updateMetadata","deleteObject","successCodes","determineContentType_","metadataForUpload_","opt_metadata","multipartUpload","genBoundary","bucketOnlyServerUrl","X-Goog-Upload-Protocol","boundary","metadataString","preBlobPart","postBlobPart","FbsBlob","maxUploadRetryTime","uploadData","checkResumeHeader_","opt_allowed","allowed","createResumableUpload","X-Goog-Upload-Command","X-Goog-Upload-Header-Content-Length","X-Goog-Upload-Header-Content-Type","getResumableUploadStatus","sizeString","ResumableUploadStatus","continueResumableUpload","opt_status","opt_progressCallback","uploadStatus","newCurrent","current","bytesToUpload","total","bytesLeft","startByte","endByte","uploadCommand","X-Goog-Upload-Offset","progressCallback","argsToForward","cancelState","triggerCallback","triggeredCallback","callWithDelay","millis","timeoutId","mustStop","hitTimeout","waitSeconds","waitMillis","wasTimeout","stopped","addAuthHeader_","addVersionHeader_","number","makeRequest","pool","NetworkRequest","additionalRetryCodes","factory","opt_url","Service","XhrIoPool","registerStorage","TaskEvent","Storage","STORAGE_TYPE","ErrorCode","configOption","defaultMaxOperationRetryTime","defaultMaxUploadRetryTime","minSafeInteger","code_","message_","serverResponse_","codeProp","codeEquals","serverResponse","BUCKET_NOT_FOUND","PROJECT_NOT_FOUND","INVALID_CHECKSUM","INVALID_EVENT_NAME","NO_DEFAULT_BUCKET","opt_contentType","STATE_CHANGED","NetworkXhrIo","sent_","xhr_","errorCode_","NO_ERROR","sendPromise_","resolve$$1","reject$$1","ABORT","NETWORK_ERROR","opt_body","opt_headers","getErrorCode","getResponseText","header","addUploadProgressListener","upload","removeUploadProgressListener","createXhrIo","makeFromBucketSpec","bucketString","bucketLocation","makeFromUrl","gsModify","httpModify","bucketDomain","gsPath","gsRegex","gsIndices","httpRegex","httpIndices","groups","regex","indices","postModify","group","captures","bucketValue","pathValue","opt_local","opt_writable","opt_xform","opt_elideCopy","blobType","data_","size_","type_","realBlob","sliced","blobby","uint8Arrays","finalLength_1","merged_1","index_1","finalized","resumableUploadChunkSize","Observer","opt_error","opt_complete","asFunctions","UploadTaskSnapshot","bytesTransferred","totalBytes","task","UploadTask","transferred_","needToFetchStatus_","needToFetchMetadata_","observers_","error_","uploadUrl_","request_","chunkMultiplier_","resolve_","reject_","authWrapper_","location_","blob_","metadata_","resumable_","shouldDoResumable_","errorHandler_","completeTransitions_","transition_","metadataErrorHandler_","promise_","makeProgressCallback_","sizeBefore","loaded","updateProgress_","createResumable_","fetchStatus_","fetchMetadata_","continueUpload_","oneShotUpload_","resolveToken_","getAuthToken","createRequest","getPromise","statusRequest","uploadRequest","newStatus","increaseMultiplier_","currentSize","metadataRequest","multipartRequest","transferred","old","notifyObservers_","wasPaused","externalState","typeValidator","_p","nextOrObserverValidator","nextValidator","observerValidator","anyDefined","nextOrObserverMessage","makeBinder","binder","addObserver_","removeObserver_","binderNextOrObserverValidator","binderSpecs","typeOnly","notifyObserver_","finishPromise_","observers","triggered","toCall","pause","newRef","throwIfRoot_","putString","getDownloadURL","FailRequest","appDelete","RequestMap","map_","id_","addRequest","unmap","AuthWrapper","maker","requestMaker","bucket_","deleted_","extractBucket_","storageRefMaker_","requestMaker_","pool_","service_","maxOperationRetryTime_","maxUploadRetryTime_","requestMap_","_error","deleteApp","setMaxUploadRetryTime","setMaxOperationRetryTime","errorCallback","pendingXhr_","backoffId_","canceled_","appDelete_","url_","method_","headers_","body_","successCodes_","additionalRetryCodes_","errorCallback_","progressCallback_","timeout_","doTheRequest","backoffCallback","canceled$$1","progressListener","progressEvent","lengthComputable","RequestEndStatus","hitServer","isRetryStatusCode_","wasCanceled","successCode","backoffDone","requestWentThrough","wasSuccessCode","isFiveHundredCode","extraRetryCodes","isExtraRetryCode","isRequestSpecificRetryCode","opt_canceled","authWrapperBucket","internals_","ServiceInternals","132","dateValue","patchCapture","captureFake","executor","onNoObservers","ObserverProxy","onError","implementsAnyMethods","methods","methods_1","argName","validateNamespace","assertion","byteArrayToString","pos","c1","c2","c3","c4","byteToCharMap_","charToByteMap_","byteToCharMapWebSafe_","charToByteMapWebSafe_","ENCODED_VALS_BASE","ENCODED_VALS","ENCODED_VALS_WEBSAFE","HAS_NATIVE_SUPPORT","opt_webSafe","init_","byteToCharMap","output","byte1","haveByte2","byte2","haveByte3","byte3","outByte1","outByte2","outByte3","outByte4","encodeString","decodeString","decodeStringToByteArray","charToByteMap","haveByte4","byte4","base64Decode","getUA","ERROR_NAME","FirebaseError","pattern","template","fullCode","decode","signature","isValidTimestamp","validSince","validUntil","extend","objTo","objFrom","rv","opt_obj","opt_this","querystringParams","arrayVal","querystringDecode","Hash","blockSize","chain_","buf_","W_","pad_","inbuf_","total_","compress_","buf","opt_offset","opt_length","lengthMinusBlock","inbuf","totalBits","unsubscribes","observerCount","forEachObserver","unsub","unsubscribeOne","finalError","sendOne","minCount","maxCount","argCount","argError","stringToByteArray$1","578","579","580","581","582","583","606","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_RESULT__","registeredInModuleLoader","OldCookies","Cookies","api","noConflict","init","converter","defaults","expires","setMilliseconds","getMilliseconds","escape","stringifiedAttributes","attributeName","cookie","cookies","rdecode","read","getJSON","withConverter","660","hadRuntime","regeneratorRuntime","getOwnPropertyNames","oldRuntime","661","wrap","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","makeInvokeMethod","tryCatch","GeneratorFunction","GeneratorFunctionPrototype","defineIteratorMethods","AsyncIterator","invoke","hasOwn","__await","unwrapped","enqueue","callInvokeWithMethodAndArg","previousPromise","GenStateSuspendedStart","GenStateExecuting","GenStateCompleted","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","_sent","dispatchException","abrupt","GenStateSuspendedYield","return","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","iterable","iteratorMethod","iteratorSymbol","Op","$Symbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","inModule","runtime","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","Gp","isGeneratorFunction","genFun","ctor","mark","setPrototypeOf","__proto__","awrap","skipTempReset","prev","rootEntry","rootRecord","rval","exception","caught","hasCatch","hasFinally","finallyEntry","finish","thrown","delegateYield","665","tasksByHandle","nextHandle","registerImmediate","clearImmediate","run","runIfPresent","currentlyRunningATask","installNextTickImplementation","nextTick","canUsePostMessage","postMessageIsAsynchronous","oldOnMessage","installPostMessageImplementation","messagePrefix","onGlobalMessage","installMessageChannelImplementation","channel","installReadyStateChangeImplementation","html","installSetTimeoutImplementation","attachTo","671","Timeout","clearFn","_id","_clearFn","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","286","__WEBPACK_AMD_DEFINE_ARRAY__","__rest","__decorate","__param","__metadata","__exportStar","__values","__read","__spread","__asyncGenerator","__asyncDelegator","__asyncValues","__makeTemplateObject","__importStar","__importDefault","createExporter","previous","exporter","extendStatics","__","assign","getOwnPropertySymbols","decorators","desc","getOwnPropertyDescriptor","Reflect","decorate","paramIndex","decorator","metadataKey","metadataValue","_arguments","fulfilled","step","rejected","verb","_","ops","throw","ar","settle","fulfill","cooked","mod","689","normalizeName","normalizeValue","iteratorFor","items","support","consumed","bodyUsed","fileReaderReady","reader","readBlobAsArrayBuffer","FileReader","readAsArrayBuffer","readBlobAsText","readAsText","readArrayBufferAsText","chars","bufferClone","Body","_initBody","_bodyInit","_bodyText","isPrototypeOf","_bodyBlob","formData","_bodyFormData","searchParams","URLSearchParams","isDataView","_bodyArrayBuffer","isArrayBufferView","normalizeMethod","upcased","referrer","form","parseHeaders","rawHeaders","line","Response","bodyInit","viewClasses","isView","has","redirectStatuses","redirect","RangeError","responseURL","polyfill","459","firebase_1","databaseURL","projectId","storageBucket","DB_NAME","errorObject","successCallback","getDatabase","462","_interopRequireDefault","_regenerator","_regenerator2","_extends3","_extends4","_asyncToGenerator2","_asyncToGenerator3","_classCallCheck2","_classCallCheck3","_createClass2","_createClass3","_possibleConstructorReturn2","_possibleConstructorReturn3","_inherits2","_inherits3","_taggedTemplateLiteralLoose2","_taggedTemplateLiteralLoose3","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","lodash_1","js_cookie_1","react_1","styled_components_1","components_1","Container","div","MainView","Main1Image","img","Main2Image","Main3Image","CheerInputView","CheerInput","CheerView","CheerCardView","CheerCard","CheerPage","_react_1$Component","cheers","onTextChange","setState","onTextSubmit","isSubmit","alert","componentDidMount","_ref","_callee","_this2","_context","cheerData","cheerKeys","_extends2","cheersOrder","onChange","onSubmit","cheer","Component","388","389","390"],"mappings":"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AA8D,wBAAA,8CAAAptD,EAAAspD,EAAA+D,cAAA,uHACArtD,EAAAspD,EAAAsC,yBAAA,2GACA5rD,EAAAspD,EAAAG,WAAA,yEACAzpD,EAAAspD,EAAAK,eAAA,0DAAA3pD,EAAAspD,EAAAM,kBAAA,qDAAA5pD,EAAAspD,EAAAC,WAAA,wEACAvpD,EAAAspD,EAAAU,cAAA,kFACAhqD,EAAAspD,EAAAgE,yBAAA,sCAAAttD,EAAAspD,EAAAiE,0BAAA,yCAAAvtD,EAAAspD,EAAAmE,8BAAA,8DAAAztD,GACAqpD,EAAA,GAAA9+F,GAAAyB,aAAA,wBAAA0hG,GAkBAC,EAAA,GAAAroE,aACA,EACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,EACA,IACA,GACA,GACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,IACA,GACA,IACA,IACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,GACA,GACA,GACA,GACA,EACA,IACA,IACA,GACA,IACA,GACA,IACA,IACA,IACA,GACA,IACA,IACA,MAEAsoE,EAAA,8BAkBA,SAAA7C,GACAA,EAAA,0CACAA,EAAA,oCACCA,UACD,IAAA8C,IACA,SAAAA,GACAA,EAAA,sCACAA,EAAA,6CACCA,UA+ED,IAAAvF,GAAA,WACA,QAAAA,MA8JA,MA5JAA,GAAA79F,UAAA6C,SAAA,SAAAwgG,EAAAC,EAAA5D,GACA,MAAArmD,GAAA8gD,UAAA75F,KAAA,yBACA,GAAA++F,GAAA74E,EAAA+8E,EAAAC,EAAA95E,EAAA+5E,EAAAC,EAAAjyD,EAAAkyD,EAAAj8F,CACA,OAAA2xC,GAAA+gD,YAAA95F,KAAA,SAAAi1C,GACA,OAAAA,EAAAquD,OACA,OACAvE,EAAAnC,EAAAoG,EAAA5vC,OAAA,WACAltC,EAAA02E,EAAAoG,EAAA5vC,OAAA,SACA6vC,EAAA,qBAAAF,EAAA,KACA,YAAAC,EAAAtyE,SAAA,MACA,kBAA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","file":"component---src-pages-cheer-tsx-f0acd9cae1f3a53d3a0b.js","sourcesContent":["webpackJsonp([64016405352682],{\n\n/***/ 73:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\t\n\tvar util = __webpack_require__(132);\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar contains = function (obj, key) {\r\n\t return Object.prototype.hasOwnProperty.call(obj, key);\r\n\t};\r\n\tvar DEFAULT_ENTRY_NAME = '[DEFAULT]';\r\n\t// An array to capture listeners before the true auth functions\r\n\t// exist\r\n\tvar tokenListeners = [];\r\n\t/**\r\n\t * Global context object for a collection of services using\r\n\t * a shared authentication state.\r\n\t */\r\n\tvar FirebaseAppImpl = /** @class */ (function () {\r\n\t function FirebaseAppImpl(options, config, firebase_) {\r\n\t this.firebase_ = firebase_;\r\n\t this.isDeleted_ = false;\r\n\t this.services_ = {};\r\n\t this.name_ = config.name;\r\n\t this._automaticDataCollectionEnabled =\r\n\t config.automaticDataCollectionEnabled || false;\r\n\t this.options_ = util.deepCopy(options);\r\n\t this.INTERNAL = {\r\n\t getUid: function () { return null; },\r\n\t getToken: function () { return Promise.resolve(null); },\r\n\t addAuthTokenListener: function (callback) {\r\n\t tokenListeners.push(callback);\r\n\t // Make sure callback is called, asynchronously, in the absence of the auth module\r\n\t setTimeout(function () { return callback(null); }, 0);\r\n\t },\r\n\t removeAuthTokenListener: function (callback) {\r\n\t tokenListeners = tokenListeners.filter(function (listener) { return listener !== callback; });\r\n\t }\r\n\t };\r\n\t }\r\n\t Object.defineProperty(FirebaseAppImpl.prototype, \"automaticDataCollectionEnabled\", {\r\n\t get: function () {\r\n\t this.checkDestroyed_();\r\n\t return this._automaticDataCollectionEnabled;\r\n\t },\r\n\t set: function (val) {\r\n\t this.checkDestroyed_();\r\n\t this._automaticDataCollectionEnabled = val;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(FirebaseAppImpl.prototype, \"name\", {\r\n\t get: function () {\r\n\t this.checkDestroyed_();\r\n\t return this.name_;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(FirebaseAppImpl.prototype, \"options\", {\r\n\t get: function () {\r\n\t this.checkDestroyed_();\r\n\t return this.options_;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t FirebaseAppImpl.prototype.delete = function () {\r\n\t var _this = this;\r\n\t return new Promise(function (resolve) {\r\n\t _this.checkDestroyed_();\r\n\t resolve();\r\n\t })\r\n\t .then(function () {\r\n\t _this.firebase_.INTERNAL.removeApp(_this.name_);\r\n\t var services = [];\r\n\t Object.keys(_this.services_).forEach(function (serviceKey) {\r\n\t Object.keys(_this.services_[serviceKey]).forEach(function (instanceKey) {\r\n\t services.push(_this.services_[serviceKey][instanceKey]);\r\n\t });\r\n\t });\r\n\t return Promise.all(services.map(function (service) {\r\n\t return service.INTERNAL.delete();\r\n\t }));\r\n\t })\r\n\t .then(function () {\r\n\t _this.isDeleted_ = true;\r\n\t _this.services_ = {};\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Return a service instance associated with this app (creating it\r\n\t * on demand), identified by the passed instanceIdentifier.\r\n\t *\r\n\t * NOTE: Currently storage is the only one that is leveraging this\r\n\t * functionality. They invoke it by calling:\r\n\t *\r\n\t * ```javascript\r\n\t * firebase.app().storage('STORAGE BUCKET ID')\r\n\t * ```\r\n\t *\r\n\t * The service name is passed to this already\r\n\t * @internal\r\n\t */\r\n\t FirebaseAppImpl.prototype._getService = function (name, instanceIdentifier) {\r\n\t if (instanceIdentifier === void 0) { instanceIdentifier = DEFAULT_ENTRY_NAME; }\r\n\t this.checkDestroyed_();\r\n\t if (!this.services_[name]) {\r\n\t this.services_[name] = {};\r\n\t }\r\n\t if (!this.services_[name][instanceIdentifier]) {\r\n\t /**\r\n\t * If a custom instance has been defined (i.e. not '[DEFAULT]')\r\n\t * then we will pass that instance on, otherwise we pass `null`\r\n\t */\r\n\t var instanceSpecifier = instanceIdentifier !== DEFAULT_ENTRY_NAME\r\n\t ? instanceIdentifier\r\n\t : undefined;\r\n\t var service = this.firebase_.INTERNAL.factories[name](this, this.extendApp.bind(this), instanceSpecifier);\r\n\t this.services_[name][instanceIdentifier] = service;\r\n\t }\r\n\t return this.services_[name][instanceIdentifier];\r\n\t };\r\n\t /**\r\n\t * Callback function used to extend an App instance at the time\r\n\t * of service instance creation.\r\n\t */\r\n\t FirebaseAppImpl.prototype.extendApp = function (props) {\r\n\t var _this = this;\r\n\t // Copy the object onto the FirebaseAppImpl prototype\r\n\t util.deepExtend(this, props);\r\n\t /**\r\n\t * If the app has overwritten the addAuthTokenListener stub, forward\r\n\t * the active token listeners on to the true fxn.\r\n\t *\r\n\t * TODO: This function is required due to our current module\r\n\t * structure. Once we are able to rely strictly upon a single module\r\n\t * implementation, this code should be refactored and Auth should\r\n\t * provide these stubs and the upgrade logic\r\n\t */\r\n\t if (props.INTERNAL && props.INTERNAL.addAuthTokenListener) {\r\n\t tokenListeners.forEach(function (listener) {\r\n\t _this.INTERNAL.addAuthTokenListener(listener);\r\n\t });\r\n\t tokenListeners = [];\r\n\t }\r\n\t };\r\n\t /**\r\n\t * This function will throw an Error if the App has already been deleted -\r\n\t * use before performing API actions on the App.\r\n\t */\r\n\t FirebaseAppImpl.prototype.checkDestroyed_ = function () {\r\n\t if (this.isDeleted_) {\r\n\t error('app-deleted', { name: this.name_ });\r\n\t }\r\n\t };\r\n\t return FirebaseAppImpl;\r\n\t}());\r\n\t// Prevent dead-code elimination of these methods w/o invalid property\r\n\t// copying.\r\n\t(FirebaseAppImpl.prototype.name && FirebaseAppImpl.prototype.options) ||\r\n\t FirebaseAppImpl.prototype.delete ||\r\n\t console.log('dc');\r\n\t/**\r\n\t * Return a firebase namespace object.\r\n\t *\r\n\t * In production, this will be called exactly once and the result\r\n\t * assigned to the 'firebase' global. It may be called multiple times\r\n\t * in unit tests.\r\n\t */\r\n\tfunction createFirebaseNamespace() {\r\n\t var apps_ = {};\r\n\t var factories = {};\r\n\t var appHooks = {};\r\n\t // A namespace is a plain JavaScript Object.\r\n\t var namespace = {\r\n\t // Hack to prevent Babel from modifying the object returned\r\n\t // as the firebase namespace.\r\n\t __esModule: true,\r\n\t initializeApp: initializeApp,\r\n\t app: app,\r\n\t apps: null,\r\n\t Promise: Promise,\r\n\t SDK_VERSION: '4.13.0',\r\n\t INTERNAL: {\r\n\t registerService: registerService,\r\n\t createFirebaseNamespace: createFirebaseNamespace,\r\n\t extendNamespace: extendNamespace,\r\n\t createSubscribe: util.createSubscribe,\r\n\t ErrorFactory: util.ErrorFactory,\r\n\t removeApp: removeApp,\r\n\t factories: factories,\r\n\t useAsService: useAsService,\r\n\t Promise: Promise,\r\n\t deepExtend: util.deepExtend\r\n\t }\r\n\t };\r\n\t // Inject a circular default export to allow Babel users who were previously\r\n\t // using:\r\n\t //\r\n\t // import firebase from 'firebase';\r\n\t // which becomes: var firebase = require('firebase').default;\r\n\t //\r\n\t // instead of\r\n\t //\r\n\t // import * as firebase from 'firebase';\r\n\t // which becomes: var firebase = require('firebase');\r\n\t util.patchProperty(namespace, 'default', namespace);\r\n\t // firebase.apps is a read-only getter.\r\n\t Object.defineProperty(namespace, 'apps', {\r\n\t get: getApps\r\n\t });\r\n\t /**\r\n\t * Called by App.delete() - but before any services associated with the App\r\n\t * are deleted.\r\n\t */\r\n\t function removeApp(name) {\r\n\t var app = apps_[name];\r\n\t callAppHooks(app, 'delete');\r\n\t delete apps_[name];\r\n\t }\r\n\t /**\r\n\t * Get the App object for a given name (or DEFAULT).\r\n\t */\r\n\t function app(name) {\r\n\t name = name || DEFAULT_ENTRY_NAME;\r\n\t if (!contains(apps_, name)) {\r\n\t error('no-app', { name: name });\r\n\t }\r\n\t return apps_[name];\r\n\t }\r\n\t util.patchProperty(app, 'App', FirebaseAppImpl);\r\n\t function initializeApp(options, rawConfig) {\r\n\t if (rawConfig === void 0) { rawConfig = {}; }\r\n\t if (typeof rawConfig !== 'object' || rawConfig === null) {\r\n\t var name_1 = rawConfig;\r\n\t rawConfig = { name: name_1 };\r\n\t }\r\n\t var config = rawConfig;\r\n\t if (config.name === undefined) {\r\n\t config.name = DEFAULT_ENTRY_NAME;\r\n\t }\r\n\t var name = config.name;\r\n\t if (typeof name !== 'string' || !name) {\r\n\t error('bad-app-name', { name: name + '' });\r\n\t }\r\n\t if (contains(apps_, name)) {\r\n\t error('duplicate-app', { name: name });\r\n\t }\r\n\t var app = new FirebaseAppImpl(options, config, namespace);\r\n\t apps_[name] = app;\r\n\t callAppHooks(app, 'create');\r\n\t return app;\r\n\t }\r\n\t /*\r\n\t * Return an array of all the non-deleted FirebaseApps.\r\n\t */\r\n\t function getApps() {\r\n\t // Make a copy so caller cannot mutate the apps list.\r\n\t return Object.keys(apps_).map(function (name) { return apps_[name]; });\r\n\t }\r\n\t /*\r\n\t * Register a Firebase Service.\r\n\t *\r\n\t * firebase.INTERNAL.registerService()\r\n\t *\r\n\t * TODO: Implement serviceProperties.\r\n\t */\r\n\t function registerService(name, createService, serviceProperties, appHook, allowMultipleInstances) {\r\n\t // Cannot re-register a service that already exists\r\n\t if (factories[name]) {\r\n\t error('duplicate-service', { name: name });\r\n\t }\r\n\t // Capture the service factory for later service instantiation\r\n\t factories[name] = createService;\r\n\t // Capture the appHook, if passed\r\n\t if (appHook) {\r\n\t appHooks[name] = appHook;\r\n\t // Run the **new** app hook on all existing apps\r\n\t getApps().forEach(function (app) {\r\n\t appHook('create', app);\r\n\t });\r\n\t }\r\n\t // The Service namespace is an accessor function ...\r\n\t var serviceNamespace = function (appArg) {\r\n\t if (appArg === void 0) { appArg = app(); }\r\n\t if (typeof appArg[name] !== 'function') {\r\n\t // Invalid argument.\r\n\t // This happens in the following case: firebase.storage('gs:/')\r\n\t error('invalid-app-argument', { name: name });\r\n\t }\r\n\t // Forward service instance lookup to the FirebaseApp.\r\n\t return appArg[name]();\r\n\t };\r\n\t // ... and a container for service-level properties.\r\n\t if (serviceProperties !== undefined) {\r\n\t util.deepExtend(serviceNamespace, serviceProperties);\r\n\t }\r\n\t // Monkey-patch the serviceNamespace onto the firebase namespace\r\n\t namespace[name] = serviceNamespace;\r\n\t // Patch the FirebaseAppImpl prototype\r\n\t FirebaseAppImpl.prototype[name] = function () {\r\n\t var args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t args[_i] = arguments[_i];\r\n\t }\r\n\t var serviceFxn = this._getService.bind(this, name);\r\n\t return serviceFxn.apply(this, allowMultipleInstances ? args : []);\r\n\t };\r\n\t return serviceNamespace;\r\n\t }\r\n\t /**\r\n\t * Patch the top-level firebase namespace with additional properties.\r\n\t *\r\n\t * firebase.INTERNAL.extendNamespace()\r\n\t */\r\n\t function extendNamespace(props) {\r\n\t util.deepExtend(namespace, props);\r\n\t }\r\n\t function callAppHooks(app, eventName) {\r\n\t Object.keys(factories).forEach(function (serviceName) {\r\n\t // Ignore virtual services\r\n\t var factoryName = useAsService(app, serviceName);\r\n\t if (factoryName === null) {\r\n\t return;\r\n\t }\r\n\t if (appHooks[factoryName]) {\r\n\t appHooks[factoryName](eventName, app);\r\n\t }\r\n\t });\r\n\t }\r\n\t // Map the requested service to a registered service name\r\n\t // (used to map auth to serverAuth service when needed).\r\n\t function useAsService(app, name) {\r\n\t if (name === 'serverAuth') {\r\n\t return null;\r\n\t }\r\n\t var useService = name;\r\n\t var options = app.options;\r\n\t return useService;\r\n\t }\r\n\t return namespace;\r\n\t}\r\n\tfunction error(code, args) {\r\n\t throw appErrors.create(code, args);\r\n\t}\r\n\t// TypeScript does not support non-string indexes!\r\n\t// let errors: {[code: AppError: string} = {\r\n\tvar errors = {\r\n\t 'no-app': \"No Firebase App '{$name}' has been created - \" +\r\n\t 'call Firebase App.initializeApp()',\r\n\t 'bad-app-name': \"Illegal App name: '{$name}\",\r\n\t 'duplicate-app': \"Firebase App named '{$name}' already exists\",\r\n\t 'app-deleted': \"Firebase App named '{$name}' already deleted\",\r\n\t 'duplicate-service': \"Firebase service named '{$name}' already registered\",\r\n\t 'sa-not-supported': 'Initializing the Firebase SDK with a service ' +\r\n\t 'account is only allowed in a Node.js environment. On client ' +\r\n\t 'devices, you should instead initialize the SDK with an api key and ' +\r\n\t 'auth domain',\r\n\t 'invalid-app-argument': 'firebase.{$name}() takes either no argument or a ' +\r\n\t 'Firebase App instance.'\r\n\t};\r\n\tvar appErrors = new util.ErrorFactory('app', 'Firebase', errors);\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar firebase = createFirebaseNamespace();\n\t\n\texports.firebase = firebase;\n\texports.default = firebase;\n\n\n/***/ }),\n\n/***/ 438:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global) {(function() {\n\t var firebase = __webpack_require__(73).default;\n\t var g,aa=aa||{},k=this;function l(a){return\"string\"==typeof a}function ba(a){return\"boolean\"==typeof a}function ca(){}\n\tfunction da(a){var b=typeof a;if(\"object\"==b)if(a){if(a instanceof Array)return\"array\";if(a instanceof Object)return b;var c=Object.prototype.toString.call(a);if(\"[object Window]\"==c)return\"object\";if(\"[object Array]\"==c||\"number\"==typeof a.length&&\"undefined\"!=typeof a.splice&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"splice\"))return\"array\";if(\"[object Function]\"==c||\"undefined\"!=typeof a.call&&\"undefined\"!=typeof a.propertyIsEnumerable&&!a.propertyIsEnumerable(\"call\"))return\"function\"}else return\"null\";\n\telse if(\"function\"==b&&\"undefined\"==typeof a.call)return\"object\";return b}function ea(a){return null===a}function fa(a){return\"array\"==da(a)}function ha(a){var b=da(a);return\"array\"==b||\"object\"==b&&\"number\"==typeof a.length}function n(a){return\"function\"==da(a)}function q(a){var b=typeof a;return\"object\"==b&&null!=a||\"function\"==b}var ia=\"closure_uid_\"+(1E9*Math.random()>>>0),ja=0;function ka(a,b,c){return a.call.apply(a.bind,arguments)}\n\tfunction la(a,b,c){if(!a)throw Error();if(2a.b&&(a.b++,b.next=a.a,a.a=b)};function ua(){this.b=this.a=null}var wa=new sa(function(){return new va},function(a){a.reset()});ua.prototype.add=function(a,b){var c=wa.get();c.set(a,b);this.b?this.b.next=c:this.a=c;this.b=c};function xa(){var a=ya,b=null;a.a&&(b=a.a,a.a=a.a.next,a.a||(a.b=null),b.next=null);return b}function va(){this.next=this.b=this.a=null}va.prototype.set=function(a,b){this.a=a;this.b=b;this.next=null};va.prototype.reset=function(){this.next=this.b=this.a=null};var za=Array.prototype.indexOf?function(a,b){return Array.prototype.indexOf.call(a,b,void 0)}:function(a,b){if(l(a))return l(b)&&1==b.length?a.indexOf(b,0):-1;for(var c=0;cb?null:l(a)?a.charAt(b):a[b]}function Fa(a,b){return 0<=za(a,b)}function Ga(a,b){b=za(a,b);var c;(c=0<=b)&&Array.prototype.splice.call(a,b,1);return c}function w(a,b){var c=0;Aa(a,function(d,e){b.call(void 0,d,e,a)&&1==Array.prototype.splice.call(a,e,1).length&&c++})}function Ha(a){return Array.prototype.concat.apply([],arguments)}\n\tfunction Ia(a){var b=a.length;if(0\")&&(a=a.replace(Pa,\">\"));-1!=a.indexOf('\"')&&(a=a.replace(Qa,\""\"));-1!=a.indexOf(\"'\")&&(a=a.replace(Ra,\"'\"));-1!=a.indexOf(\"\\x00\")&&(a=a.replace(Sa,\"�\"));return a}var Na=/&/g,Oa=//g,Qa=/\"/g,Ra=/'/g,Sa=/\\x00/g,Ma=/[\\x00&<>\"']/;function x(a,b){return-1!=a.indexOf(b)}function Ta(a,b){return ab?1:0};var Ua;a:{var Va=k.navigator;if(Va){var Wa=Va.userAgent;if(Wa){Ua=Wa;break a}}Ua=\"\"}function y(a){return x(Ua,a)};function Xa(a,b){for(var c in a)b.call(void 0,a[c],c,a)}function Ya(a){for(var b in a)return!1;return!0}function Za(a){var b={},c;for(c in a)b[c]=a[c];return b}var $a=\"constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf\".split(\" \");function ab(a,b){for(var c,d,e=1;eparseFloat(Tb)){Sb=String(Vb);break a}}Sb=Tb}var Lb={};\n\tfunction Wb(a){return Kb(a,function(){for(var b=0,c=Ka(String(Sb)).split(\".\"),d=Ka(String(a)).split(\".\"),e=Math.max(c.length,d.length),f=0;0==b&&f=a.keyCode)a.keyCode=-1}catch(b){}};cc.prototype.f=function(){return this.a};var ec=\"closure_listenable_\"+(1E6*Math.random()|0),fc=0;function gc(a,b,c,d,e){this.listener=a;this.proxy=null;this.src=b;this.type=c;this.capture=!!d;this.La=e;this.key=++fc;this.ma=this.Ha=!1}function hc(a){a.ma=!0;a.listener=null;a.proxy=null;a.src=null;a.La=null};function jc(a){this.src=a;this.a={};this.b=0}jc.prototype.add=function(a,b,c,d,e){var f=a.toString();a=this.a[f];a||(a=this.a[f]=[],this.b++);var h=kc(a,b,d,e);-1d.keyCode||void 0!=d.returnValue)){a:{var e=!1;if(0==d.keyCode)try{d.keyCode=-1;break a}catch(h){e=!0}if(e||void 0==d.returnValue)d.returnValue=!0}d=[];for(e=b.b;e;e=e.parentNode)d.push(e);a=a.type;for(e=d.length-1;0<=e;e--){b.b=d[e];var f=Ac(d[e],a,!0,b);c=c&&f}for(e=0;e>>0);function rc(a){if(n(a))return a;a[Cc]||(a[Cc]=function(b){return a.handleEvent(b)});return a[Cc]};function G(){Fb.call(this);this.u=new jc(this);this.Mb=this;this.Ta=null}t(G,Fb);G.prototype[ec]=!0;G.prototype.addEventListener=function(a,b,c,d){pc(this,a,b,c,d)};G.prototype.removeEventListener=function(a,b,c,d){F(this,a,b,c,d)};\n\tG.prototype.dispatchEvent=function(a){var b,c=this.Ta;if(c)for(b=[];c;c=c.Ta)b.push(c);c=this.Mb;var d=a.type||a;if(l(a))a=new D(a,c);else if(a instanceof D)a.target=a.target||c;else{var e=a;a=new D(d,c);ab(a,e)}e=!0;if(b)for(var f=b.length-1;0<=f;f--){var h=a.b=b[f];e=Dc(h,d,!0,a)&&e}h=a.b=c;e=Dc(h,d,!0,a)&&e;e=Dc(h,d,!1,a)&&e;if(b)for(f=0;fb)throw Error(\"Bad port number \"+b);a.j=b}else a.j=null}function Tc(a,b,c){b instanceof Sc?(a.a=b,$c(a.a,a.f)):(c||(b=Vc(b,ad)),a.a=new Sc(b,a.f))}function H(a,b,c){a.a.set(b,c)}function bd(a,b){return a.a.get(b)}function cd(a){return a instanceof Pc?new Pc(a):new Pc(a,void 0)}function dd(a,b){var c=new Pc(null,void 0);Qc(c,\"https\");a&&(c.b=a);b&&(c.g=b);return c}\n\tfunction Uc(a,b){return a?b?decodeURI(a.replace(/%25/g,\"%2525\")):decodeURIComponent(a):\"\"}function Vc(a,b,c){return l(a)?(a=encodeURI(a).replace(b,ed),c&&(a=a.replace(/%25([0-9a-fA-F]{2})/g,\"%$1\")),a):null}function ed(a){a=a.charCodeAt(0);return\"%\"+(a>>4&15).toString(16)+(a&15).toString(16)}var Wc=/[#\\/\\?@]/g,Yc=/[#\\?:]/g,Xc=/[#\\?]/g,ad=/[#\\?@]/g,Zc=/#/g;function Sc(a,b){this.b=this.a=null;this.c=a||null;this.f=!!b}\n\tfunction fd(a){a.a||(a.a=new Kc,a.b=0,a.c&&Oc(a.c,function(b,c){a.add(decodeURIComponent(b.replace(/\\+/g,\" \")),c)}))}function gd(a){var b=Hc(a);if(\"undefined\"==typeof b)throw Error(\"Keys are undefined\");var c=new Sc(null,void 0);a=Gc(a);for(var d=0;d2*a.c&&Lc(a)))}g.clear=function(){this.a=this.c=null;this.b=0};function kd(a,b){fd(a);b=id(a,b);return Mc(a.a.b,b)}g.forEach=function(a,b){fd(this);this.a.forEach(function(c,d){v(c,function(c){a.call(b,c,d,this)},this)},this)};g.U=function(){fd(this);for(var a=this.a.S(),b=this.a.U(),c=[],d=0;d\");Gd(\"\");Gd(\"
\");function Hd(a){var b=document;return l(a)?b.getElementById(a):a}function Id(a,b){Xa(b,function(b,d){b&&b.la&&(b=b.ja());\"style\"==d?a.style.cssText=b:\"class\"==d?a.className=b:\"for\"==d?a.htmlFor=b:Jd.hasOwnProperty(d)?a.setAttribute(Jd[d],b):0==d.lastIndexOf(\"aria-\",0)||0==d.lastIndexOf(\"data-\",0)?a.setAttribute(d,b):a[d]=b})}\n\tvar Jd={cellpadding:\"cellPadding\",cellspacing:\"cellSpacing\",colspan:\"colSpan\",frameborder:\"frameBorder\",height:\"height\",maxlength:\"maxLength\",nonce:\"nonce\",role:\"role\",rowspan:\"rowSpan\",type:\"type\",usemap:\"useMap\",valign:\"vAlign\",width:\"width\"};\n\tfunction Kd(a,b,c){var d=arguments,e=document,f=String(d[0]),h=d[1];if(!ld&&h&&(h.name||h.type)){f=[\"<\",f];h.name&&f.push(' name=\"',La(h.name),'\"');if(h.type){f.push(' type=\"',La(h.type),'\"');var m={};ab(m,h);delete m.type;h=m}f.push(\">\");f=f.join(\"\")}f=e.createElement(f);h&&(l(h)?f.className=h:fa(h)?f.className=h.join(\" \"):Id(f,h));2a?!1:!C||!Xb||9',a=Gd(a),h.document.write(Fd(a)),h.document.close())):(h=d.open(zd(b),c,h))&&a.noopener&&(h.opener=null);if(h)try{h.focus()}catch(m){}return h}\n\tfunction de(a){return new z(function(b){function c(){Fc(2E3).then(function(){if(!a||a.closed)b();else return c()})}return c()})}var ee=/^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$/;function fe(){var a=null;return(new z(function(b){\"complete\"==k.document.readyState?b():(a=function(){b()},qc(window,\"load\",a))})).m(function(b){F(window,\"load\",a);throw b;})}\n\tfunction ge(){return he(void 0)?fe().then(function(){return new z(function(a,b){var c=k.document,d=setTimeout(function(){b(Error(\"Cordova framework is not ready.\"))},1E3);c.addEventListener(\"deviceready\",function(){clearTimeout(d);a()},!1)})}):B(Error(\"Cordova must run in an Android or iOS file scheme.\"))}function he(a){a=a||I();return!(\"file:\"!==ie()||!a.toLowerCase().match(/iphone|ipad|ipod|android/))}function je(){var a=k.window;try{return!(!a||a==a.top)}catch(b){return!1}}\n\tfunction ke(){return\"object\"!==typeof k.window&&\"function\"===typeof k.importScripts}function le(){return firebase.INTERNAL.hasOwnProperty(\"reactNative\")?\"ReactNative\":firebase.INTERNAL.hasOwnProperty(\"node\")?\"Node\":ke()?\"Worker\":\"Browser\"}function me(){var a=le();return\"ReactNative\"===a||\"Node\"===a}var ce=\"Firefox\",Zd=\"Chrome\";\n\tfunction Yd(a){var b=a.toLowerCase();if(x(b,\"opera/\")||x(b,\"opr/\")||x(b,\"opios/\"))return\"Opera\";if(x(b,\"iemobile\"))return\"IEMobile\";if(x(b,\"msie\")||x(b,\"trident/\"))return\"IE\";if(x(b,\"edge/\"))return\"Edge\";if(x(b,\"firefox/\"))return ce;if(x(b,\"silk/\"))return\"Silk\";if(x(b,\"blackberry\"))return\"Blackberry\";if(x(b,\"webos\"))return\"Webos\";if(!x(b,\"safari/\")||x(b,\"chrome/\")||x(b,\"crios/\")||x(b,\"android\"))if(!x(b,\"chrome/\")&&!x(b,\"crios/\")||x(b,\"edge/\")){if(x(b,\"android\"))return\"Android\";if((a=a.match(/([a-zA-Z\\d\\.]+)\\/[a-zA-Z\\d\\.]*$/))&&\n\t2==a.length)return a[1]}else return Zd;else return\"Safari\";return\"Other\"}var ne={Qc:\"FirebaseCore-web\",Sc:\"FirebaseUI-web\"};function oe(a,b){b=b||[];var c=[],d={},e;for(e in ne)d[ne[e]]=!0;for(e=0;eb)throw Error(\"Short delay should be less than long delay!\");this.a=a;this.c=b;a=I();b=le();this.b=$d(a)||\"ReactNative\"===b}\n\tze.prototype.get=function(){var a=k.navigator;return(a&&\"boolean\"===typeof a.onLine&&(se()||\"chrome-extension:\"===ie()||\"undefined\"!==typeof a.connection)?a.onLine:1)?this.b?this.c:this.a:Math.min(5E3,this.a)};function Ae(){var a=k.document;return a&&\"undefined\"!==typeof a.visibilityState?\"visible\"==a.visibilityState:!0}\n\tfunction Be(){var a=k.document,b=null;return Ae()||!a?A():(new z(function(c){b=function(){Ae()&&(a.removeEventListener(\"visibilitychange\",b,!1),c())};a.addEventListener(\"visibilitychange\",b,!1)})).m(function(c){a.removeEventListener(\"visibilitychange\",b,!1);throw c;})}function Ce(a){try{var b=new Date(parseInt(a,10));if(!isNaN(b.getTime())&&!/[^0-9]/.test(a))return b.toUTCString()}catch(c){}return null}function De(){return!(!J(\"fireauth.oauthhelper\",k)&&!J(\"fireauth.iframe\",k))};var Ee={};var Fe;try{var Ge={};Object.defineProperty(Ge,\"abcd\",{configurable:!0,enumerable:!0,value:1});Object.defineProperty(Ge,\"abcd\",{configurable:!0,enumerable:!0,value:2});Fe=2==Ge.abcd}catch(a){Fe=!1}function K(a,b,c){Fe?Object.defineProperty(a,b,{configurable:!0,enumerable:!0,value:c}):a[b]=c}function L(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&K(a,c,b[c])}function He(a){var b={};L(b,a);return b}function Ie(a){var b={},c;for(c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}\n\tfunction Je(a,b){if(!b||!b.length)return!0;if(!a)return!1;for(var c=0;c>4);64!=h&&(b(f<<4&240|h>>2),64!=m&&b(h<<6&192|m))}}\n\tfunction mf(){if(!hf){hf={};jf={};for(var a=0;65>a;a++)hf[a]=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\".charAt(a),jf[hf[a]]=a,62<=a&&(jf[\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.\".charAt(a)]=a)}};function nf(a){this.c=a.sub;na();this.a=a.provider_id||a.firebase&&a.firebase.sign_in_provider||null;this.b=!!a.is_anonymous||\"anonymous\"==this.a}nf.prototype.f=function(){return this.b};function of(a){return(a=pf(a))&&a.sub&&a.iss&&a.aud&&a.exp?new nf(a):null}function pf(a){if(!a)return null;a=a.split(\".\");if(3!=a.length)return null;a=a[1];for(var b=(4-a.length%4)%4,c=0;c Auth section -> Sign in method tab.\",a):\"http\"==d||\"https\"==d?c=Ja(\"This domain (%s) is not authorized to run this operation. Add it to the OAuth redirect domains list in the Firebase console -> Auth section -> Sign in method tab.\",a):b=\"operation-not-supported-in-this-environment\";\n\tM.call(this,b,c)}t(og,M);function pg(a,b,c){M.call(this,a,c);a=b||{};a.ub&&K(this,\"email\",a.ub);a.Z&&K(this,\"phoneNumber\",a.Z);a.credential&&K(this,\"credential\",a.credential)}t(pg,M);pg.prototype.C=function(){var a={code:this.code,message:this.message};this.email&&(a.email=this.email);this.phoneNumber&&(a.phoneNumber=this.phoneNumber);var b=this.credential&&this.credential.C();b&&ab(a,b);return a};pg.prototype.toJSON=function(){return this.C()};\n\tfunction qg(a){if(a.code){var b=a.code||\"\";0==b.indexOf(Ue)&&(b=b.substring(Ue.length));var c={credential:ig(a)};if(a.email)c.ub=a.email;else if(a.phoneNumber)c.Z=a.phoneNumber;else return new M(b,a.message||void 0);return new pg(b,c,a.message)}return null};var rg=/^[+a-zA-Z0-9_.!#$%&'*\\/=?^`{|}~-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]{2,63}$/;function sg(){}sg.prototype.c=null;function tg(a){return a.c||(a.c=a.b())};var ug;function vg(){}t(vg,sg);vg.prototype.a=function(){var a=wg(this);return a?new ActiveXObject(a):new XMLHttpRequest};vg.prototype.b=function(){var a={};wg(this)&&(a[0]=!0,a[1]=!0);return a};\n\tfunction wg(a){if(!a.f&&\"undefined\"==typeof XMLHttpRequest&&\"undefined\"!=typeof ActiveXObject){for(var b=[\"MSXML2.XMLHTTP.6.0\",\"MSXML2.XMLHTTP.3.0\",\"MSXML2.XMLHTTP\",\"Microsoft.XMLHTTP\"],c=0;c=Ig(this).value)for(n(b)&&(b=b()),a=new Ag(a,String(b),this.f),c&&(a.a=c),c=this;c;)c=c.a};var Jg={},Kg=null;\n\tfunction Lg(a){Kg||(Kg=new Cg(\"\"),Jg[\"\"]=Kg,Kg.c=Gg);var b;if(!(b=Jg[a])){b=new Cg(a);var c=a.lastIndexOf(\".\"),d=a.substr(c+1);c=Lg(a.substr(0,c));c.b||(c.b={});c.b[d]=b;b.a=c;Jg[a]=b}return b};function Q(a,b){a&&a.log(Hg,b,void 0)};function Mg(a){this.f=a}t(Mg,sg);Mg.prototype.a=function(){return new Ng(this.f)};Mg.prototype.b=function(a){return function(){return a}}({});function Ng(a){G.call(this);this.j=a;this.readyState=Og;this.status=0;this.responseText=this.statusText=\"\";this.onreadystatechange=null;this.g=new Headers;this.b=null;this.h=\"GET\";this.c=\"\";this.a=!1;this.f=Lg(\"goog.net.FetchXmlHttp\")}t(Ng,G);var Og=0;g=Ng.prototype;\n\tg.open=function(a,b){if(this.readyState!=Og)throw this.abort(),Error(\"Error reopening a connection\");this.h=a;this.c=b;this.readyState=1;Pg(this)};g.send=function(a){if(1!=this.readyState)throw this.abort(),Error(\"need to call open() first. \");this.a=!0;var b={headers:this.g,method:this.h,credentials:void 0,cache:void 0};a&&(b.body=a);this.j.fetch(new Request(this.c,b)).then(this.ec.bind(this),this.Ab.bind(this))};\n\tg.abort=function(){this.responseText=\"\";this.g=new Headers;this.status=0;1<=this.readyState&&this.a&&4!=this.readyState&&(this.readyState=4,this.a=!1,Pg(this));this.readyState=Og};g.ec=function(a){this.a&&(this.b||(this.b=a.headers,this.readyState=2,Pg(this)),this.a&&(this.readyState=3,Pg(this),this.a&&a.text().then(this.dc.bind(this,a),this.Ab.bind(this))))};g.dc=function(a,b){this.a&&(this.status=a.status,this.statusText=a.statusText,this.responseText=b,this.readyState=4,Pg(this))};\n\tg.Ab=function(a){var b=this.f;b&&b.log(Fg,\"Failed to fetch url \"+this.c,a instanceof Error?a:Error(a));this.a&&(this.readyState=4,Pg(this))};g.setRequestHeader=function(a,b){this.g.append(a,b)};g.getResponseHeader=function(a){return this.b?this.b.get(a.toLowerCase())||\"\":((a=this.f)&&a.log(Fg,\"Attempting to get response header but no headers have been received for url: \"+this.c,void 0),\"\")};\n\tg.getAllResponseHeaders=function(){if(!this.b){var a=this.f;a&&a.log(Fg,\"Attempting to get all response headers but no headers have been received for url: \"+this.c,void 0);return\"\"}a=[];for(var b=this.b.entries(),c=b.next();!c.done;)c=c.value,a.push(c[0]+\": \"+c[1]),c=b.next();return a.join(\"\\r\\n\")};function Pg(a){a.onreadystatechange&&a.onreadystatechange.call(a)};function Qg(a){G.call(this);this.headers=new Kc;this.D=a||null;this.c=!1;this.B=this.a=null;this.h=this.N=this.l=\"\";this.f=this.I=this.j=this.G=!1;this.g=0;this.s=null;this.o=Rg;this.v=this.O=!1}t(Qg,G);var Rg=\"\";Qg.prototype.b=Lg(\"goog.net.XhrIo\");var Sg=/^https?$/i,Tg=[\"POST\",\"PUT\"];\n\tfunction Ug(a,b,c,d,e){if(a.a)throw Error(\"[goog.net.XhrIo] Object is active with another request=\"+a.l+\"; newUri=\"+b);c=c?c.toUpperCase():\"GET\";a.l=b;a.h=\"\";a.N=c;a.G=!1;a.c=!0;a.a=a.D?a.D.a():ug.a();a.B=a.D?tg(a.D):tg(ug);a.a.onreadystatechange=r(a.Db,a);try{Q(a.b,Vg(a,\"Opening Xhr\")),a.I=!0,a.a.open(c,String(b),!0),a.I=!1}catch(h){Q(a.b,Vg(a,\"Error opening Xhr: \"+h.message));Wg(a,h);return}b=d||\"\";var f=new Kc(a.headers);e&&Ic(e,function(a,b){f.set(b,a)});e=Da(f.U());d=k.FormData&&b instanceof\n\tk.FormData;!Fa(Tg,c)||e||d||f.set(\"Content-Type\",\"application/x-www-form-urlencoded;charset=utf-8\");f.forEach(function(a,b){this.a.setRequestHeader(b,a)},a);a.o&&(a.a.responseType=a.o);\"withCredentials\"in a.a&&a.a.withCredentials!==a.O&&(a.a.withCredentials=a.O);try{Xg(a),0=b.l&&b.cancel())}this.v?this.v.call(this.s,this):this.u=!0;this.a||(a=new fh(this),gh(this),hh(this,!1,a))}};eh.prototype.o=function(a,b){this.j=!1;hh(this,a,b)};function hh(a,b,c){a.a=!0;a.c=c;a.f=!b;ih(a)}\n\tfunction gh(a){if(a.a){if(!a.u)throw new jh(a);a.u=!1}}eh.prototype.D=function(){gh(this);hh(this,!0,null)};function kh(a,b){lh(a,null,b,void 0)}function lh(a,b,c,d){a.g.push([b,c,d]);a.a&&ih(a)}eh.prototype.then=function(a,b,c){var d,e,f=new z(function(a,b){d=a;e=b});lh(this,d,function(a){a instanceof fh?f.cancel():e(a)});return f.then(a,b,c)};oa(eh);function mh(a){return Ca(a.g,function(a){return n(a[1])})}\n\tfunction ih(a){if(a.h&&a.a&&mh(a)){var b=a.h,c=nh[b];c&&(k.clearTimeout(c.a),delete nh[b]);a.h=0}a.b&&(a.b.l--,delete a.b);b=a.c;for(var d=c=!1;a.g.length&&!a.j;){var e=a.g.shift(),f=e[0],h=e[1];e=e[2];if(f=a.f?h:f)try{var m=f.call(e||a.s,b);void 0!==m&&(a.f=a.f&&(m==b||m instanceof Error),a.c=b=m);if(pa(b)||\"function\"===typeof k.Promise&&b instanceof k.Promise)d=!0,a.j=!0}catch(p){b=p,a.f=!0,mh(a)||(c=!0)}}a.c=b;d&&(m=r(a.o,a,!0),d=r(a.o,a,!1),b instanceof eh?(lh(b,m,d),b.B=!0):b.then(m,d));c&&(b=\n\tnew oh(b),nh[b.a]=b,a.h=b.a)}function jh(){u.call(this)}t(jh,u);jh.prototype.message=\"Deferred has already fired\";jh.prototype.name=\"AlreadyCalledError\";function fh(){u.call(this)}t(fh,u);fh.prototype.message=\"Deferred was canceled\";fh.prototype.name=\"CanceledError\";function oh(a){this.a=k.setTimeout(r(this.c,this),0);this.b=a}oh.prototype.c=function(){delete nh[this.a];throw this.b;};var nh={};function ph(a){var b={},c=b.document||document,d=sd(a),e=document.createElement(\"SCRIPT\"),f={Fb:e,Fa:void 0},h=new eh(qh,f),m=null,p=null!=b.timeout?b.timeout:5E3;0b;b++){e=c[b-15]|0;d=c[b-2]|0;var f=(c[b-16]|0)+((e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3)|0,h=(c[b-7]|0)+((d>>>17|d<<15)^(d>>>19|d<<13)^d>>>10)|0;c[b]=f+h|0}d=a.a[0]|0;e=a.a[1]|0;var m=a.a[2]|0,p=a.a[3]|0,E=a.a[4]|0,ic=a.a[5]|0,Jc=a.a[6]|0;f=a.a[7]|0;for(b=0;64>b;b++){var El=((d>>>2|d<<30)^(d>>>13|d<<19)^(d>>>22|d<<10))+(d&e^d&m^e&m)|0;h=E&ic^~E&Jc;f=f+((E>>>6|E<<26)^(E>>>11|E<<21)^(E>>>\n\t25|E<<7))|0;h=h+(Gj[b]|0)|0;h=f+(h+(c[b]|0)|0)|0;f=Jc;Jc=ic;ic=E;E=p+h|0;p=m;m=e;e=d;d=h+El|0}a.a[0]=a.a[0]+d|0;a.a[1]=a.a[1]+e|0;a.a[2]=a.a[2]+m|0;a.a[3]=a.a[3]+p|0;a.a[4]=a.a[4]+E|0;a.a[5]=a.a[5]+ic|0;a.a[6]=a.a[6]+Jc|0;a.a[7]=a.a[7]+f|0}\n\tfunction Nj(a,b,c){void 0===c&&(c=b.length);var d=0,e=a.c;if(l(b))for(;d=f&&f==(f|0)))throw Error(\"message must be a byte array\");a.f[e++]=f;e==a.b&&(Mj(a),e=0)}else throw Error(\"message must be string or array\");a.c=e;a.g+=c}\n\tvar Hj=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,\n\t4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298];function Oj(){Ej.call(this,8,Pj)}t(Oj,Ej);var Pj=[1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225];function Qj(a,b,c,d,e){this.u=a;this.j=b;this.l=c;this.o=d||null;this.s=e||null;this.h=b+\":\"+c;this.v=new Cj;this.g=new zj(this.h);this.f=null;this.b=[];this.a=this.c=null}function Rj(a){return new M(\"invalid-cordova-configuration\",a)}g=Qj.prototype;\n\tg.ea=function(){return this.ya?this.ya:this.ya=ge().then(function(){if(\"function\"!==typeof J(\"universalLinks.subscribe\",k))throw Rj(\"cordova-universal-links-plugin is not installed\");if(\"undefined\"===typeof J(\"BuildInfo.packageName\",k))throw Rj(\"cordova-plugin-buildinfo is not installed\");if(\"function\"!==typeof J(\"cordova.plugins.browsertab.openUrl\",k))throw Rj(\"cordova-plugin-browsertab is not installed\");if(\"function\"!==typeof J(\"cordova.InAppBrowser.open\",k))throw Rj(\"cordova-plugin-inappbrowser is not installed\");\n\t},function(){throw new M(\"cordova-not-ready\");})};function Sj(){for(var a=20,b=[];0b.c?Nj(b,Lj,56-b.c):Nj(b,Lj,b.b-(b.c-56));for(var d=63;56<=d;d--)b.f[d]=c&255,c/=256;Mj(b);for(d=c=0;d>e&255;return gf(a)}\n\tg.Da=function(a,b){b(new M(\"operation-not-supported-in-this-environment\"));return A()};g.xb=function(){return B(new M(\"operation-not-supported-in-this-environment\"))};g.Lb=function(){return!1};g.Gb=function(){return!0};g.Bb=function(){return!0};\n\tg.Ba=function(a,b,c){if(this.c)return B(new M(\"redirect-operation-pending\"));var d=this,e=k.document,f=null,h=null,m=null,p=null;return this.c=A().then(function(){jg(b);return Uj(d)}).then(function(){return Vj(d,a,b,c)}).then(function(){return(new z(function(a,b){h=function(){var b=J(\"cordova.plugins.browsertab.close\",k);a();\"function\"===typeof b&&b();d.a&&\"function\"===typeof d.a.close&&(d.a.close(),d.a=null);return!1};d.va(h);m=function(){f||(f=Fc(2E3).then(function(){b(new M(\"redirect-cancelled-by-user\"))}))};\n\tp=function(){Ae()&&m()};e.addEventListener(\"resume\",m,!1);I().toLowerCase().match(/android/)||e.addEventListener(\"visibilitychange\",p,!1)})).m(function(a){return Wj(d).then(function(){throw a;})})}).ha(function(){m&&e.removeEventListener(\"resume\",m,!1);p&&e.removeEventListener(\"visibilitychange\",p,!1);f&&f.cancel();h&&d.Ja(h);d.c=null})};\n\tfunction Vj(a,b,c,d){var e=Sj(),f=new kg(b,d,null,e,new M(\"no-auth-event\")),h=J(\"BuildInfo.packageName\",k);if(\"string\"!==typeof h)throw new M(\"invalid-cordova-configuration\");var m=J(\"BuildInfo.displayName\",k),p={};if(I().toLowerCase().match(/iphone|ipad|ipod/))p.ibi=h;else if(I().toLowerCase().match(/android/))p.apn=h;else return B(new M(\"operation-not-supported-in-this-environment\"));m&&(p.appDisplayName=m);e=Tj(e);p.sessionId=e;var E=Oi(a.u,a.j,a.l,b,c,null,d,a.o,p,a.s);return a.ea().then(function(){var b=\n\ta.h;return a.v.a.set(Aj,f.C(),b)}).then(function(){var b=J(\"cordova.plugins.browsertab.isAvailable\",k);if(\"function\"!==typeof b)throw new M(\"invalid-cordova-configuration\");var c=null;b(function(b){if(b){c=J(\"cordova.plugins.browsertab.openUrl\",k);if(\"function\"!==typeof c)throw new M(\"invalid-cordova-configuration\");c(E)}else{c=J(\"cordova.InAppBrowser.open\",k);if(\"function\"!==typeof c)throw new M(\"invalid-cordova-configuration\");b=I();b=!(!b.match(/(iPad|iPhone|iPod).*OS 7_\\d/i)&&!b.match(/(iPad|iPhone|iPod).*OS 8_\\d/i));\n\ta.a=c(E,b?\"_blank\":\"_system\",\"location=yes\")}})})}function Xj(a,b){for(var c=0;ca.f&&(a.a=a.f);return b}function Bk(a,b){a.stop();a.b=Fc(Ck(a,b)).then(function(){return Be()}).then(function(){return a.h()}).then(function(){Bk(a,!0)}).m(function(b){a.j(b)&&Bk(a,!1)})}\n\tAk.prototype.stop=function(){this.b&&(this.b.cancel(),this.b=null)};function Dk(a){this.f=a;this.b=this.a=null;this.c=0}Dk.prototype.C=function(){return{apiKey:this.f.b,refreshToken:this.a,accessToken:this.b,expirationTime:this.c}};function Ek(a,b){var c=b[Gf],d=b.refreshToken;b=Fk(b.expiresIn);a.b=c;a.c=b;a.a=d}function Fk(a){return na()+1E3*parseInt(a,10)}\n\tfunction Gk(a,b){return Jh(a.f,b).then(function(b){a.b=b.access_token;a.c=Fk(b.expires_in);a.a=b.refresh_token;return{accessToken:a.b,expirationTime:a.c,refreshToken:a.a}}).m(function(b){\"auth/user-token-expired\"==b.code&&(a.a=null);throw b;})}Dk.prototype.getToken=function(a){a=!!a;return this.b&&!this.a?B(new M(\"user-token-expired\")):a||!this.b||na()>this.c-3E4?this.a?Gk(this,{grant_type:\"refresh_token\",refresh_token:this.a}):A(null):A({accessToken:this.b,expirationTime:this.c,refreshToken:this.a})};function Hk(a,b){this.a=a||null;this.b=b||null;L(this,{lastSignInTime:Ce(b||null),creationTime:Ce(a||null)})}function Ik(a){return new Hk(a.a,a.b)}Hk.prototype.C=function(){return{lastLoginAt:this.b,createdAt:this.a}};function Jk(a,b,c,d,e,f){L(this,{uid:a,displayName:d||null,photoURL:e||null,email:c||null,phoneNumber:f||null,providerId:b})}function Kk(a,b){D.call(this,a);for(var c in b)this[c]=b[c]}t(Kk,D);\n\tfunction Lk(a,b,c){this.D=[];this.G=a.apiKey;this.s=a.appName;this.B=a.authDomain||null;a=firebase.SDK_VERSION?oe(firebase.SDK_VERSION):null;this.b=new xh(this.G,ui(vi),a);this.h=new Dk(this.b);Mk(this,b[Gf]);Ek(this.h,b);K(this,\"refreshToken\",this.h.a);Nk(this,c||{});G.call(this);this.I=!1;this.B&&re()&&(this.a=qk(this.B,this.G,this.s));this.N=[];this.j=null;this.l=Ok(this);this.V=r(this.Ga,this);var d=this;this.ia=null;this.sa=function(a){d.na(a.g)};this.X=null;this.O=[];this.ra=function(a){Pk(d,\n\ta.c)};this.W=null}t(Lk,G);Lk.prototype.na=function(a){this.ia=a;Dh(this.b,a)};Lk.prototype.ca=function(){return this.ia};function Qk(a,b){a.X&&F(a.X,\"languageCodeChanged\",a.sa);(a.X=b)&&pc(b,\"languageCodeChanged\",a.sa)}function Pk(a,b){a.O=b;Eh(a.b,firebase.SDK_VERSION?oe(firebase.SDK_VERSION,a.O):null)}Lk.prototype.Ka=function(){return Ia(this.O)};function Rk(a,b){a.W&&F(a.W,\"frameworkChanged\",a.ra);(a.W=b)&&pc(b,\"frameworkChanged\",a.ra)}Lk.prototype.Ga=function(){this.l.b&&(this.l.stop(),this.l.start())};\n\tfunction Sk(a){try{return firebase.app(a.s).auth()}catch(b){throw new M(\"internal-error\",\"No firebase.auth.Auth instance is available for the Firebase App '\"+a.s+\"'!\");}}function Ok(a){return new Ak(function(){return a.F(!0)},function(a){return a&&\"auth/network-request-failed\"==a.code?!0:!1},function(){var b=a.h.c-na()-3E5;return 0this.s&&(this.s=0);0==this.s&&U(this)&&Uk(U(this));this.removeAuthTokenListener(a)};\n\tg.addAuthTokenListener=function(a){var b=this;this.o.push(a);T(this,this.j.then(function(){b.l||Fa(b.o,a)&&a(Ul(b))}))};g.removeAuthTokenListener=function(a){w(this.o,function(b){return b==a})};function Tl(a,b){a.I.push(b);T(a,a.j.then(function(){!a.l&&Fa(a.I,b)&&a.O!==a.getUid()&&(a.O=a.getUid(),b(Ul(a)))}))}\n\tg.delete=function(){this.l=!0;for(var a=0;ae||e>=lm.length)throw new M(\"internal-error\",\n\t\"Argument validator received an unsupported number of arguments.\");c=lm[e];d=(d?\"\":c+\" argument \")+(b.name?'\"'+b.name+'\" ':\"\")+\"must be \"+b.K+\".\";break a}d=null}}if(d)throw new M(\"argument-error\",a+\" failed: \"+d);}var lm=\"First Second Third Fourth Fifth Sixth Seventh Eighth Ninth\".split(\" \");function V(a,b){return{name:a||\"\",K:\"a valid string\",optional:!!b,M:l}}function mm(){return{name:\"opt_forceRefresh\",K:\"a boolean\",optional:!0,M:ba}}\n\tfunction W(a,b){return{name:a||\"\",K:\"a valid object\",optional:!!b,M:q}}function nm(a,b){return{name:a||\"\",K:\"a function\",optional:!!b,M:n}}function om(a,b){return{name:a||\"\",K:\"null\",optional:!!b,M:ea}}function pm(){return{name:\"\",K:\"an HTML element\",optional:!1,M:function(a){return!!(a&&a instanceof Element)}}}function qm(){return{name:\"auth\",K:\"an instance of Firebase Auth\",optional:!0,M:function(a){return!!(a&&a instanceof Gl)}}}\n\tfunction rm(){return{name:\"app\",K:\"an instance of Firebase App\",optional:!0,M:function(a){return!!(a&&a instanceof firebase.app.App)}}}function sm(a){return{name:a?a+\"Credential\":\"credential\",K:a?\"a valid \"+a+\" credential\":\"a valid credential\",optional:!1,M:function(b){if(!b)return!1;var c=!a||b.providerId===a;return!(!b.xa||!c)}}}\n\tfunction tm(){return{name:\"authProvider\",K:\"a valid Auth provider\",optional:!1,M:function(a){return!!(a&&a.providerId&&a.hasOwnProperty&&a.hasOwnProperty(\"isOAuthProvider\"))}}}function um(){return{name:\"applicationVerifier\",K:\"an implementation of firebase.auth.ApplicationVerifier\",optional:!1,M:function(a){return!!(a&&l(a.type)&&n(a.verify))}}}function X(a,b,c,d){return{name:c||\"\",K:a.K+\" or \"+b.K,optional:!!d,M:function(c){return a.M(c)||b.M(c)}}};function Y(a,b){for(var c in b){var d=b[c].name;a[d]=vm(d,a[c],b[c].i)}}function Z(a,b,c,d){a[b]=vm(b,c,d)}function vm(a,b,c){function d(){var a=Array.prototype.slice.call(arguments);km(e,c,a);return b.apply(this,a)}if(!c)return b;var e=wm(a),f;for(f in b)d[f]=b[f];for(f in b.prototype)d.prototype[f]=b.prototype[f];return d}function wm(a){a=a.split(\".\");return a[a.length-1]};Y(Gl.prototype,{Ua:{name:\"applyActionCode\",i:[V(\"code\")]},Ia:{name:\"checkActionCode\",i:[V(\"code\")]},Wa:{name:\"confirmPasswordReset\",i:[V(\"code\"),V(\"newPassword\")]},Sb:{name:\"createUserWithEmailAndPassword\",i:[V(\"email\"),V(\"password\")]},sb:{name:\"createUserAndRetrieveDataWithEmailAndPassword\",i:[V(\"email\"),V(\"password\")]},Vb:{name:\"fetchProvidersForEmail\",i:[V(\"email\")]},Wb:{name:\"fetchSignInMethodsForEmail\",i:[V(\"email\")]},da:{name:\"getRedirectResult\",i:[]},kc:{name:\"isSignInWithEmailLink\",i:[V(\"emailLink\")]},\n\trc:{name:\"onAuthStateChanged\",i:[X(W(),nm(),\"nextOrObserver\"),nm(\"opt_error\",!0),nm(\"opt_completed\",!0)]},sc:{name:\"onIdTokenChanged\",i:[X(W(),nm(),\"nextOrObserver\"),nm(\"opt_error\",!0),nm(\"opt_completed\",!0)]},gb:{name:\"sendPasswordResetEmail\",i:[V(\"email\"),X(W(\"opt_actionCodeSettings\",!0),om(null,!0),\"opt_actionCodeSettings\",!0)]},hb:{name:\"sendSignInLinkToEmail\",i:[V(\"email\"),W(\"actionCodeSettings\")]},ib:{name:\"setPersistence\",i:[V(\"persistence\")]},Oa:{name:\"signInAndRetrieveDataWithCredential\",\n\ti:[sm()]},jb:{name:\"signInAnonymously\",i:[]},Jb:{name:\"signInAnonymouslyAndRetrieveData\",i:[]},Bc:{name:\"signInWithCredential\",i:[sm()]},Cc:{name:\"signInWithCustomToken\",i:[V(\"token\")]},Hb:{name:\"signInAndRetrieveDataWithCustomToken\",i:[V(\"token\")]},Dc:{name:\"signInWithEmailAndPassword\",i:[V(\"email\"),V(\"password\")]},Ec:{name:\"signInWithEmailLink\",i:[V(\"email\"),V(\"emailLink\",!0)]},Ib:{name:\"signInAndRetrieveDataWithEmailAndPassword\",i:[V(\"email\"),V(\"password\")]},Fc:{name:\"signInWithPhoneNumber\",i:[V(\"phoneNumber\"),\n\tum()]},Gc:{name:\"signInWithPopup\",i:[tm()]},Hc:{name:\"signInWithRedirect\",i:[tm()]},kb:{name:\"signOut\",i:[]},toJSON:{name:\"toJSON\",i:[V(null,!0)]},Oc:{name:\"useDeviceLanguage\",i:[]},Pc:{name:\"verifyPasswordResetCode\",i:[V(\"code\")]}});(function(a,b){for(var c in b){var d=b[c].name;if(d!==c){var e=b[c].Rb;Object.defineProperty(a,d,{get:function(){return this[c]},set:function(a){km(d,[e],[a],!0);this[c]=a},enumerable:!0})}}})(Gl.prototype,{lc:{name:\"languageCode\",Rb:X(V(),om(),\"languageCode\")}});\n\tGl.Persistence=oj;Gl.Persistence.LOCAL=\"local\";Gl.Persistence.SESSION=\"session\";Gl.Persistence.NONE=\"none\";\n\tY(Lk.prototype,{\"delete\":{name:\"delete\",i:[]},ac:{name:\"getIdTokenResult\",i:[mm()]},F:{name:\"getIdToken\",i:[mm()]},getToken:{name:\"getToken\",i:[mm()]},$a:{name:\"linkAndRetrieveDataWithCredential\",i:[sm()]},mc:{name:\"linkWithCredential\",i:[sm()]},nc:{name:\"linkWithPhoneNumber\",i:[V(\"phoneNumber\"),um()]},oc:{name:\"linkWithPopup\",i:[tm()]},pc:{name:\"linkWithRedirect\",i:[tm()]},bb:{name:\"reauthenticateAndRetrieveDataWithCredential\",i:[sm()]},vc:{name:\"reauthenticateWithCredential\",i:[sm()]},wc:{name:\"reauthenticateWithPhoneNumber\",\n\ti:[V(\"phoneNumber\"),um()]},xc:{name:\"reauthenticateWithPopup\",i:[tm()]},yc:{name:\"reauthenticateWithRedirect\",i:[tm()]},reload:{name:\"reload\",i:[]},fb:{name:\"sendEmailVerification\",i:[X(W(\"opt_actionCodeSettings\",!0),om(null,!0),\"opt_actionCodeSettings\",!0)]},toJSON:{name:\"toJSON\",i:[V(null,!0)]},Mc:{name:\"unlink\",i:[V(\"provider\")]},mb:{name:\"updateEmail\",i:[V(\"email\")]},nb:{name:\"updatePassword\",i:[V(\"password\")]},Nc:{name:\"updatePhoneNumber\",i:[sm(\"phone\")]},ob:{name:\"updateProfile\",i:[W(\"profile\")]}});\n\tY(z.prototype,{ha:{name:\"finally\"},m:{name:\"catch\"},then:{name:\"then\"}});Y(xk.prototype,{confirm:{name:\"confirm\",i:[V(\"verificationCode\")]}});Z(O,\"credential\",function(a,b){return new Vf(a,b)},[V(\"email\"),V(\"password\")]);Y(Nf.prototype,{ta:{name:\"addScope\",i:[V(\"scope\")]},Ca:{name:\"setCustomParameters\",i:[W(\"customOAuthParameters\")]}});Z(Nf,\"credential\",Of,[X(V(),W(),\"token\")]);Z(O,\"credentialWithLink\",$f,[V(\"email\"),V(\"emailLink\")]);\n\tY(Pf.prototype,{ta:{name:\"addScope\",i:[V(\"scope\")]},Ca:{name:\"setCustomParameters\",i:[W(\"customOAuthParameters\")]}});Z(Pf,\"credential\",Qf,[X(V(),W(),\"token\")]);Y(Rf.prototype,{ta:{name:\"addScope\",i:[V(\"scope\")]},Ca:{name:\"setCustomParameters\",i:[W(\"customOAuthParameters\")]}});Z(Rf,\"credential\",Sf,[X(V(),X(W(),om()),\"idToken\"),X(V(),om(),\"accessToken\",!0)]);Y(Tf.prototype,{Ca:{name:\"setCustomParameters\",i:[W(\"customOAuthParameters\")]}});Z(Tf,\"credential\",Uf,[X(V(),W(),\"token\"),V(\"secret\",!0)]);\n\tY(N.prototype,{ta:{name:\"addScope\",i:[V(\"scope\")]},credential:{name:\"credential\",i:[X(V(),om(),\"idToken\",!0),X(V(),om(),\"accessToken\",!0)]},Ca:{name:\"setCustomParameters\",i:[W(\"customOAuthParameters\")]}});Z(fg,\"credential\",hg,[V(\"verificationId\"),V(\"verificationCode\")]);Y(fg.prototype,{Sa:{name:\"verifyPhoneNumber\",i:[V(\"phoneNumber\"),um()]}});Y(M.prototype,{toJSON:{name:\"toJSON\",i:[V(null,!0)]}});Y(pg.prototype,{toJSON:{name:\"toJSON\",i:[V(null,!0)]}});\n\tY(og.prototype,{toJSON:{name:\"toJSON\",i:[V(null,!0)]}});Y(jm.prototype,{clear:{name:\"clear\",i:[]},render:{name:\"render\",i:[]},verify:{name:\"verify\",i:[]}});\n\t(function(){if(\"undefined\"!==typeof firebase&&firebase.INTERNAL&&firebase.INTERNAL.registerService){var a={Auth:Gl,Error:M};Z(a,\"EmailAuthProvider\",O,[]);Z(a,\"FacebookAuthProvider\",Nf,[]);Z(a,\"GithubAuthProvider\",Pf,[]);Z(a,\"GoogleAuthProvider\",Rf,[]);Z(a,\"TwitterAuthProvider\",Tf,[]);Z(a,\"OAuthProvider\",N,[V(\"providerId\")]);Z(a,\"PhoneAuthProvider\",fg,[qm()]);Z(a,\"RecaptchaVerifier\",jm,[X(V(),pm(),\"recaptchaContainer\"),W(\"recaptchaParameters\",!0),rm()]);firebase.INTERNAL.registerService(\"auth\",function(a,\n\tc){a=new Gl(a);c({INTERNAL:{getUid:r(a.getUid,a),getToken:r(a.$b,a),addAuthTokenListener:r(a.Qb,a),removeAuthTokenListener:r(a.zc,a)}});return a},a,function(a,c){if(\"create\"===a)try{c.auth()}catch(d){}});firebase.INTERNAL.extendNamespace({User:Lk})}else throw Error(\"Cannot find the firebase namespace; be sure to include firebase-app.js before this library.\");})();\n\t}).call(typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : {});\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }())))\n\n/***/ }),\n\n/***/ 439:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(process) {'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\t\n\tfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\t\n\tvar util = __webpack_require__(132);\n\tvar logger = __webpack_require__(440);\n\tvar tslib_1 = __webpack_require__(286);\n\tvar firebase = _interopDefault(__webpack_require__(73));\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Wraps a DOM Storage object and:\r\n\t * - automatically encode objects as JSON strings before storing them to allow us to store arbitrary types.\r\n\t * - prefixes names with \"firebase:\" to avoid collisions with app data.\r\n\t *\r\n\t * We automatically (see storage.js) create two such wrappers, one for sessionStorage,\r\n\t * and one for localStorage.\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar DOMStorageWrapper = /** @class */ (function () {\r\n\t /**\r\n\t * @param {Storage} domStorage_ The underlying storage object (e.g. localStorage or sessionStorage)\r\n\t */\r\n\t function DOMStorageWrapper(domStorage_) {\r\n\t this.domStorage_ = domStorage_;\r\n\t // Use a prefix to avoid collisions with other stuff saved by the app.\r\n\t this.prefix_ = 'firebase:';\r\n\t }\r\n\t /**\r\n\t * @param {string} key The key to save the value under\r\n\t * @param {?Object} value The value being stored, or null to remove the key.\r\n\t */\r\n\t DOMStorageWrapper.prototype.set = function (key, value) {\r\n\t if (value == null) {\r\n\t this.domStorage_.removeItem(this.prefixedName_(key));\r\n\t }\r\n\t else {\r\n\t this.domStorage_.setItem(this.prefixedName_(key), util.stringify(value));\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {string} key\r\n\t * @return {*} The value that was stored under this key, or null\r\n\t */\r\n\t DOMStorageWrapper.prototype.get = function (key) {\r\n\t var storedVal = this.domStorage_.getItem(this.prefixedName_(key));\r\n\t if (storedVal == null) {\r\n\t return null;\r\n\t }\r\n\t else {\r\n\t return util.jsonEval(storedVal);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {string} key\r\n\t */\r\n\t DOMStorageWrapper.prototype.remove = function (key) {\r\n\t this.domStorage_.removeItem(this.prefixedName_(key));\r\n\t };\r\n\t /**\r\n\t * @param {string} name\r\n\t * @return {string}\r\n\t */\r\n\t DOMStorageWrapper.prototype.prefixedName_ = function (name) {\r\n\t return this.prefix_ + name;\r\n\t };\r\n\t DOMStorageWrapper.prototype.toString = function () {\r\n\t return this.domStorage_.toString();\r\n\t };\r\n\t return DOMStorageWrapper;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * An in-memory storage implementation that matches the API of DOMStorageWrapper\r\n\t * (TODO: create interface for both to implement).\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar MemoryStorage = /** @class */ (function () {\r\n\t function MemoryStorage() {\r\n\t this.cache_ = {};\r\n\t this.isInMemoryStorage = true;\r\n\t }\r\n\t MemoryStorage.prototype.set = function (key, value) {\r\n\t if (value == null) {\r\n\t delete this.cache_[key];\r\n\t }\r\n\t else {\r\n\t this.cache_[key] = value;\r\n\t }\r\n\t };\r\n\t MemoryStorage.prototype.get = function (key) {\r\n\t if (util.contains(this.cache_, key)) {\r\n\t return this.cache_[key];\r\n\t }\r\n\t return null;\r\n\t };\r\n\t MemoryStorage.prototype.remove = function (key) {\r\n\t delete this.cache_[key];\r\n\t };\r\n\t return MemoryStorage;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Helper to create a DOMStorageWrapper or else fall back to MemoryStorage.\r\n\t * TODO: Once MemoryStorage and DOMStorageWrapper have a shared interface this method annotation should change\r\n\t * to reflect this type\r\n\t *\r\n\t * @param {string} domStorageName Name of the underlying storage object\r\n\t * (e.g. 'localStorage' or 'sessionStorage').\r\n\t * @return {?} Turning off type information until a common interface is defined.\r\n\t */\r\n\tvar createStoragefor = function (domStorageName) {\r\n\t try {\r\n\t // NOTE: just accessing \"localStorage\" or \"window['localStorage']\" may throw a security exception,\r\n\t // so it must be inside the try/catch.\r\n\t if (typeof window !== 'undefined' &&\r\n\t typeof window[domStorageName] !== 'undefined') {\r\n\t // Need to test cache. Just because it's here doesn't mean it works\r\n\t var domStorage = window[domStorageName];\r\n\t domStorage.setItem('firebase:sentinel', 'cache');\r\n\t domStorage.removeItem('firebase:sentinel');\r\n\t return new DOMStorageWrapper(domStorage);\r\n\t }\r\n\t }\r\n\t catch (e) { }\r\n\t // Failed to create wrapper. Just return in-memory storage.\r\n\t // TODO: log?\r\n\t return new MemoryStorage();\r\n\t};\r\n\t/** A storage object that lasts across sessions */\r\n\tvar PersistentStorage = createStoragefor('localStorage');\r\n\t/** A storage object that only lasts one session */\r\n\tvar SessionStorage = createStoragefor('sessionStorage');\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar logClient = new logger.Logger('@firebase/database');\r\n\t/**\r\n\t * Returns a locally-unique ID (generated by just incrementing up from 0 each time its called).\r\n\t * @type {function(): number} Generated ID.\r\n\t */\r\n\tvar LUIDGenerator = (function () {\r\n\t var id = 1;\r\n\t return function () {\r\n\t return id++;\r\n\t };\r\n\t})();\r\n\t/**\r\n\t * Sha1 hash of the input string\r\n\t * @param {!string} str The string to hash\r\n\t * @return {!string} The resulting hash\r\n\t */\r\n\tvar sha1 = function (str) {\r\n\t var utf8Bytes = util.stringToByteArray(str);\r\n\t var sha1 = new util.Sha1();\r\n\t sha1.update(utf8Bytes);\r\n\t var sha1Bytes = sha1.digest();\r\n\t return util.base64.encodeByteArray(sha1Bytes);\r\n\t};\r\n\t/**\r\n\t * @param {...*} var_args\r\n\t * @return {string}\r\n\t * @private\r\n\t */\r\n\tvar buildLogMessage_ = function () {\r\n\t var var_args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t var_args[_i] = arguments[_i];\r\n\t }\r\n\t var message = '';\r\n\t for (var i = 0; i < var_args.length; i++) {\r\n\t if (Array.isArray(var_args[i]) ||\r\n\t (var_args[i] &&\r\n\t typeof var_args[i] === 'object' &&\r\n\t typeof var_args[i].length === 'number')) {\r\n\t message += buildLogMessage_.apply(null, var_args[i]);\r\n\t }\r\n\t else if (typeof var_args[i] === 'object') {\r\n\t message += util.stringify(var_args[i]);\r\n\t }\r\n\t else {\r\n\t message += var_args[i];\r\n\t }\r\n\t message += ' ';\r\n\t }\r\n\t return message;\r\n\t};\r\n\t/**\r\n\t * Use this for all debug messages in Firebase.\r\n\t * @type {?function(string)}\r\n\t */\r\n\tvar logger$1 = null;\r\n\t/**\r\n\t * Flag to check for log availability on first log message\r\n\t * @type {boolean}\r\n\t * @private\r\n\t */\r\n\tvar firstLog_ = true;\r\n\t/**\r\n\t * The implementation of Firebase.enableLogging (defined here to break dependencies)\r\n\t * @param {boolean|?function(string)} logger_ A flag to turn on logging, or a custom logger\r\n\t * @param {boolean=} persistent Whether or not to persist logging settings across refreshes\r\n\t */\r\n\tvar enableLogging = function (logger_, persistent) {\r\n\t util.assert(!persistent || (logger_ === true || logger_ === false), \"Can't turn on custom loggers persistently.\");\r\n\t if (logger_ === true) {\r\n\t logClient.logLevel = logger.LogLevel.VERBOSE;\r\n\t logger$1 = logClient.log.bind(logClient);\r\n\t if (persistent)\r\n\t SessionStorage.set('logging_enabled', true);\r\n\t }\r\n\t else if (typeof logger_ === 'function') {\r\n\t logger$1 = logger_;\r\n\t }\r\n\t else {\r\n\t logger$1 = null;\r\n\t SessionStorage.remove('logging_enabled');\r\n\t }\r\n\t};\r\n\t/**\r\n\t *\r\n\t * @param {...(string|Arguments)} var_args\r\n\t */\r\n\tvar log = function () {\r\n\t var var_args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t var_args[_i] = arguments[_i];\r\n\t }\r\n\t if (firstLog_ === true) {\r\n\t firstLog_ = false;\r\n\t if (logger$1 === null && SessionStorage.get('logging_enabled') === true)\r\n\t enableLogging(true);\r\n\t }\r\n\t if (logger$1) {\r\n\t var message = buildLogMessage_.apply(null, var_args);\r\n\t logger$1(message);\r\n\t }\r\n\t};\r\n\t/**\r\n\t * @param {!string} prefix\r\n\t * @return {function(...[*])}\r\n\t */\r\n\tvar logWrapper = function (prefix) {\r\n\t return function () {\r\n\t var var_args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t var_args[_i] = arguments[_i];\r\n\t }\r\n\t log.apply(void 0, [prefix].concat(var_args));\r\n\t };\r\n\t};\r\n\t/**\r\n\t * @param {...string} var_args\r\n\t */\r\n\tvar error = function () {\r\n\t var var_args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t var_args[_i] = arguments[_i];\r\n\t }\r\n\t var message = 'FIREBASE INTERNAL ERROR: ' + buildLogMessage_.apply(void 0, var_args);\r\n\t logClient.error(message);\r\n\t};\r\n\t/**\r\n\t * @param {...string} var_args\r\n\t */\r\n\tvar fatal = function () {\r\n\t var var_args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t var_args[_i] = arguments[_i];\r\n\t }\r\n\t var message = \"FIREBASE FATAL ERROR: \" + buildLogMessage_.apply(void 0, var_args);\r\n\t logClient.error(message);\r\n\t throw new Error(message);\r\n\t};\r\n\t/**\r\n\t * @param {...*} var_args\r\n\t */\r\n\tvar warn = function () {\r\n\t var var_args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t var_args[_i] = arguments[_i];\r\n\t }\r\n\t var message = 'FIREBASE WARNING: ' + buildLogMessage_.apply(void 0, var_args);\r\n\t logClient.warn(message);\r\n\t};\r\n\t/**\r\n\t * Logs a warning if the containing page uses https. Called when a call to new Firebase\r\n\t * does not use https.\r\n\t */\r\n\tvar warnIfPageIsSecure = function () {\r\n\t // Be very careful accessing browser globals. Who knows what may or may not exist.\r\n\t if (typeof window !== 'undefined' &&\r\n\t window.location &&\r\n\t window.location.protocol &&\r\n\t window.location.protocol.indexOf('https:') !== -1) {\r\n\t warn('Insecure Firebase access from a secure page. ' +\r\n\t 'Please use https in calls to new Firebase().');\r\n\t }\r\n\t};\r\n\t/**\r\n\t * Returns true if data is NaN, or +/- Infinity.\r\n\t * @param {*} data\r\n\t * @return {boolean}\r\n\t */\r\n\tvar isInvalidJSONNumber = function (data) {\r\n\t return (typeof data === 'number' &&\r\n\t (data != data || // NaN\r\n\t data == Number.POSITIVE_INFINITY ||\r\n\t data == Number.NEGATIVE_INFINITY));\r\n\t};\r\n\t/**\r\n\t * @param {function()} fn\r\n\t */\r\n\tvar executeWhenDOMReady = function (fn) {\r\n\t if (util.isNodeSdk() || document.readyState === 'complete') {\r\n\t fn();\r\n\t }\r\n\t else {\r\n\t // Modeled after jQuery. Try DOMContentLoaded and onreadystatechange (which\r\n\t // fire before onload), but fall back to onload.\r\n\t var called_1 = false;\r\n\t var wrappedFn_1 = function () {\r\n\t if (!document.body) {\r\n\t setTimeout(wrappedFn_1, Math.floor(10));\r\n\t return;\r\n\t }\r\n\t if (!called_1) {\r\n\t called_1 = true;\r\n\t fn();\r\n\t }\r\n\t };\r\n\t if (document.addEventListener) {\r\n\t document.addEventListener('DOMContentLoaded', wrappedFn_1, false);\r\n\t // fallback to onload.\r\n\t window.addEventListener('load', wrappedFn_1, false);\r\n\t }\r\n\t else if (document.attachEvent) {\r\n\t // IE.\r\n\t document.attachEvent('onreadystatechange', function () {\r\n\t if (document.readyState === 'complete')\r\n\t wrappedFn_1();\r\n\t });\r\n\t // fallback to onload.\r\n\t window.attachEvent('onload', wrappedFn_1);\r\n\t // jQuery has an extra hack for IE that we could employ (based on\r\n\t // http://javascript.nwbox.com/IEContentLoaded/) But it looks really old.\r\n\t // I'm hoping we don't need it.\r\n\t }\r\n\t }\r\n\t};\r\n\t/**\r\n\t * Minimum key name. Invalid for actual data, used as a marker to sort before any valid names\r\n\t * @type {!string}\r\n\t */\r\n\tvar MIN_NAME = '[MIN_NAME]';\r\n\t/**\r\n\t * Maximum key name. Invalid for actual data, used as a marker to sort above any valid names\r\n\t * @type {!string}\r\n\t */\r\n\tvar MAX_NAME = '[MAX_NAME]';\r\n\t/**\r\n\t * Compares valid Firebase key names, plus min and max name\r\n\t * @param {!string} a\r\n\t * @param {!string} b\r\n\t * @return {!number}\r\n\t */\r\n\tvar nameCompare = function (a, b) {\r\n\t if (a === b) {\r\n\t return 0;\r\n\t }\r\n\t else if (a === MIN_NAME || b === MAX_NAME) {\r\n\t return -1;\r\n\t }\r\n\t else if (b === MIN_NAME || a === MAX_NAME) {\r\n\t return 1;\r\n\t }\r\n\t else {\r\n\t var aAsInt = tryParseInt(a), bAsInt = tryParseInt(b);\r\n\t if (aAsInt !== null) {\r\n\t if (bAsInt !== null) {\r\n\t return aAsInt - bAsInt == 0 ? a.length - b.length : aAsInt - bAsInt;\r\n\t }\r\n\t else {\r\n\t return -1;\r\n\t }\r\n\t }\r\n\t else if (bAsInt !== null) {\r\n\t return 1;\r\n\t }\r\n\t else {\r\n\t return a < b ? -1 : 1;\r\n\t }\r\n\t }\r\n\t};\r\n\t/**\r\n\t * @param {!string} a\r\n\t * @param {!string} b\r\n\t * @return {!number} comparison result.\r\n\t */\r\n\tvar stringCompare = function (a, b) {\r\n\t if (a === b) {\r\n\t return 0;\r\n\t }\r\n\t else if (a < b) {\r\n\t return -1;\r\n\t }\r\n\t else {\r\n\t return 1;\r\n\t }\r\n\t};\r\n\t/**\r\n\t * @param {string} key\r\n\t * @param {Object} obj\r\n\t * @return {*}\r\n\t */\r\n\tvar requireKey = function (key, obj) {\r\n\t if (obj && key in obj) {\r\n\t return obj[key];\r\n\t }\r\n\t else {\r\n\t throw new Error('Missing required key (' + key + ') in object: ' + util.stringify(obj));\r\n\t }\r\n\t};\r\n\t/**\r\n\t * @param {*} obj\r\n\t * @return {string}\r\n\t */\r\n\tvar ObjectToUniqueKey = function (obj) {\r\n\t if (typeof obj !== 'object' || obj === null)\r\n\t return util.stringify(obj);\r\n\t var keys = [];\r\n\t for (var k in obj) {\r\n\t keys.push(k);\r\n\t }\r\n\t // Export as json, but with the keys sorted.\r\n\t keys.sort();\r\n\t var key = '{';\r\n\t for (var i = 0; i < keys.length; i++) {\r\n\t if (i !== 0)\r\n\t key += ',';\r\n\t key += util.stringify(keys[i]);\r\n\t key += ':';\r\n\t key += ObjectToUniqueKey(obj[keys[i]]);\r\n\t }\r\n\t key += '}';\r\n\t return key;\r\n\t};\r\n\t/**\r\n\t * Splits a string into a number of smaller segments of maximum size\r\n\t * @param {!string} str The string\r\n\t * @param {!number} segsize The maximum number of chars in the string.\r\n\t * @return {Array.} The string, split into appropriately-sized chunks\r\n\t */\r\n\tvar splitStringBySize = function (str, segsize) {\r\n\t var len = str.length;\r\n\t if (len <= segsize) {\r\n\t return [str];\r\n\t }\r\n\t var dataSegs = [];\r\n\t for (var c = 0; c < len; c += segsize) {\r\n\t if (c + segsize > len) {\r\n\t dataSegs.push(str.substring(c, len));\r\n\t }\r\n\t else {\r\n\t dataSegs.push(str.substring(c, c + segsize));\r\n\t }\r\n\t }\r\n\t return dataSegs;\r\n\t};\r\n\t/**\r\n\t * Apply a function to each (key, value) pair in an object or\r\n\t * apply a function to each (index, value) pair in an array\r\n\t * @param {!(Object|Array)} obj The object or array to iterate over\r\n\t * @param {function(?, ?)} fn The function to apply\r\n\t */\r\n\tvar each = function (obj, fn) {\r\n\t if (Array.isArray(obj)) {\r\n\t for (var i = 0; i < obj.length; ++i) {\r\n\t fn(i, obj[i]);\r\n\t }\r\n\t }\r\n\t else {\r\n\t /**\r\n\t * in the conversion of code we removed the goog.object.forEach\r\n\t * function which did a value,key callback. We standardized on\r\n\t * a single impl that does a key, value callback. So we invert\r\n\t * to not have to touch the `each` code points\r\n\t */\r\n\t util.forEach(obj, function (key, val) { return fn(val, key); });\r\n\t }\r\n\t};\r\n\t/**\r\n\t * Borrowed from http://hg.secondlife.com/llsd/src/tip/js/typedarray.js (MIT License)\r\n\t * I made one modification at the end and removed the NaN / Infinity\r\n\t * handling (since it seemed broken [caused an overflow] and we don't need it). See MJL comments.\r\n\t * @param {!number} v A double\r\n\t * @return {string}\r\n\t */\r\n\tvar doubleToIEEE754String = function (v) {\r\n\t util.assert(!isInvalidJSONNumber(v), 'Invalid JSON number'); // MJL\r\n\t var ebits = 11, fbits = 52;\r\n\t var bias = (1 << (ebits - 1)) - 1, s, e, f, ln, i, bits, str;\r\n\t // Compute sign, exponent, fraction\r\n\t // Skip NaN / Infinity handling --MJL.\r\n\t if (v === 0) {\r\n\t e = 0;\r\n\t f = 0;\r\n\t s = 1 / v === -Infinity ? 1 : 0;\r\n\t }\r\n\t else {\r\n\t s = v < 0;\r\n\t v = Math.abs(v);\r\n\t if (v >= Math.pow(2, 1 - bias)) {\r\n\t // Normalized\r\n\t ln = Math.min(Math.floor(Math.log(v) / Math.LN2), bias);\r\n\t e = ln + bias;\r\n\t f = Math.round(v * Math.pow(2, fbits - ln) - Math.pow(2, fbits));\r\n\t }\r\n\t else {\r\n\t // Denormalized\r\n\t e = 0;\r\n\t f = Math.round(v / Math.pow(2, 1 - bias - fbits));\r\n\t }\r\n\t }\r\n\t // Pack sign, exponent, fraction\r\n\t bits = [];\r\n\t for (i = fbits; i; i -= 1) {\r\n\t bits.push(f % 2 ? 1 : 0);\r\n\t f = Math.floor(f / 2);\r\n\t }\r\n\t for (i = ebits; i; i -= 1) {\r\n\t bits.push(e % 2 ? 1 : 0);\r\n\t e = Math.floor(e / 2);\r\n\t }\r\n\t bits.push(s ? 1 : 0);\r\n\t bits.reverse();\r\n\t str = bits.join('');\r\n\t // Return the data as a hex string. --MJL\r\n\t var hexByteString = '';\r\n\t for (i = 0; i < 64; i += 8) {\r\n\t var hexByte = parseInt(str.substr(i, 8), 2).toString(16);\r\n\t if (hexByte.length === 1)\r\n\t hexByte = '0' + hexByte;\r\n\t hexByteString = hexByteString + hexByte;\r\n\t }\r\n\t return hexByteString.toLowerCase();\r\n\t};\r\n\t/**\r\n\t * Used to detect if we're in a Chrome content script (which executes in an\r\n\t * isolated environment where long-polling doesn't work).\r\n\t * @return {boolean}\r\n\t */\r\n\tvar isChromeExtensionContentScript = function () {\r\n\t return !!(typeof window === 'object' &&\r\n\t window['chrome'] &&\r\n\t window['chrome']['extension'] &&\r\n\t !/^chrome/.test(window.location.href));\r\n\t};\r\n\t/**\r\n\t * Used to detect if we're in a Windows 8 Store app.\r\n\t * @return {boolean}\r\n\t */\r\n\tvar isWindowsStoreApp = function () {\r\n\t // Check for the presence of a couple WinRT globals\r\n\t return typeof Windows === 'object' && typeof Windows.UI === 'object';\r\n\t};\r\n\t/**\r\n\t * Converts a server error code to a Javascript Error\r\n\t * @param {!string} code\r\n\t * @param {!Query} query\r\n\t * @return {Error}\r\n\t */\r\n\tvar errorForServerCode = function (code, query) {\r\n\t var reason = 'Unknown Error';\r\n\t if (code === 'too_big') {\r\n\t reason =\r\n\t 'The data requested exceeds the maximum size ' +\r\n\t 'that can be accessed with a single request.';\r\n\t }\r\n\t else if (code == 'permission_denied') {\r\n\t reason = \"Client doesn't have permission to access the desired data.\";\r\n\t }\r\n\t else if (code == 'unavailable') {\r\n\t reason = 'The service is unavailable';\r\n\t }\r\n\t var error = new Error(code + ' at ' + query.path.toString() + ': ' + reason);\r\n\t error.code = code.toUpperCase();\r\n\t return error;\r\n\t};\r\n\t/**\r\n\t * Used to test for integer-looking strings\r\n\t * @type {RegExp}\r\n\t * @private\r\n\t */\r\n\tvar INTEGER_REGEXP_ = new RegExp('^-?\\\\d{1,10}$');\r\n\t/**\r\n\t * If the string contains a 32-bit integer, return it. Else return null.\r\n\t * @param {!string} str\r\n\t * @return {?number}\r\n\t */\r\n\tvar tryParseInt = function (str) {\r\n\t if (INTEGER_REGEXP_.test(str)) {\r\n\t var intVal = Number(str);\r\n\t if (intVal >= -2147483648 && intVal <= 2147483647) {\r\n\t return intVal;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t};\r\n\t/**\r\n\t * Helper to run some code but catch any exceptions and re-throw them later.\r\n\t * Useful for preventing user callbacks from breaking internal code.\r\n\t *\r\n\t * Re-throwing the exception from a setTimeout is a little evil, but it's very\r\n\t * convenient (we don't have to try to figure out when is a safe point to\r\n\t * re-throw it), and the behavior seems reasonable:\r\n\t *\r\n\t * * If you aren't pausing on exceptions, you get an error in the console with\r\n\t * the correct stack trace.\r\n\t * * If you're pausing on all exceptions, the debugger will pause on your\r\n\t * exception and then again when we rethrow it.\r\n\t * * If you're only pausing on uncaught exceptions, the debugger will only pause\r\n\t * on us re-throwing it.\r\n\t *\r\n\t * @param {!function()} fn The code to guard.\r\n\t */\r\n\tvar exceptionGuard = function (fn) {\r\n\t try {\r\n\t fn();\r\n\t }\r\n\t catch (e) {\r\n\t // Re-throw exception when it's safe.\r\n\t setTimeout(function () {\r\n\t // It used to be that \"throw e\" would result in a good console error with\r\n\t // relevant context, but as of Chrome 39, you just get the firebase.js\r\n\t // file/line number where we re-throw it, which is useless. So we log\r\n\t // e.stack explicitly.\r\n\t var stack = e.stack || '';\r\n\t warn('Exception was thrown by user callback.', stack);\r\n\t throw e;\r\n\t }, Math.floor(0));\r\n\t }\r\n\t};\r\n\t/**\r\n\t * @return {boolean} true if we think we're currently being crawled.\r\n\t */\r\n\tvar beingCrawled = function () {\r\n\t var userAgent = (typeof window === 'object' &&\r\n\t window['navigator'] &&\r\n\t window['navigator']['userAgent']) ||\r\n\t '';\r\n\t // For now we whitelist the most popular crawlers. We should refine this to be the set of crawlers we\r\n\t // believe to support JavaScript/AJAX rendering.\r\n\t // NOTE: Google Webmaster Tools doesn't really belong, but their \"This is how a visitor to your website\r\n\t // would have seen the page\" is flaky if we don't treat it as a crawler.\r\n\t return (userAgent.search(/googlebot|google webmaster tools|bingbot|yahoo! slurp|baiduspider|yandexbot|duckduckbot/i) >= 0);\r\n\t};\r\n\t/**\r\n\t * Same as setTimeout() except on Node.JS it will /not/ prevent the process from exiting.\r\n\t *\r\n\t * It is removed with clearTimeout() as normal.\r\n\t *\r\n\t * @param {Function} fn Function to run.\r\n\t * @param {number} time Milliseconds to wait before running.\r\n\t * @return {number|Object} The setTimeout() return value.\r\n\t */\r\n\tvar setTimeoutNonBlocking = function (fn, time) {\r\n\t var timeout = setTimeout(fn, time);\r\n\t if (typeof timeout === 'object' && timeout['unref']) {\r\n\t timeout['unref']();\r\n\t }\r\n\t return timeout;\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * An immutable object representing a parsed path. It's immutable so that you\r\n\t * can pass them around to other functions without worrying about them changing\r\n\t * it.\r\n\t */\r\n\tvar Path = /** @class */ (function () {\r\n\t /**\r\n\t * @param {string|Array.} pathOrString Path string to parse,\r\n\t * or another path, or the raw tokens array\r\n\t * @param {number=} pieceNum\r\n\t */\r\n\t function Path(pathOrString, pieceNum) {\r\n\t if (pieceNum === void 0) {\r\n\t this.pieces_ = pathOrString.split('/');\r\n\t // Remove empty pieces.\r\n\t var copyTo = 0;\r\n\t for (var i = 0; i < this.pieces_.length; i++) {\r\n\t if (this.pieces_[i].length > 0) {\r\n\t this.pieces_[copyTo] = this.pieces_[i];\r\n\t copyTo++;\r\n\t }\r\n\t }\r\n\t this.pieces_.length = copyTo;\r\n\t this.pieceNum_ = 0;\r\n\t }\r\n\t else {\r\n\t this.pieces_ = pathOrString;\r\n\t this.pieceNum_ = pieceNum;\r\n\t }\r\n\t }\r\n\t Object.defineProperty(Path, \"Empty\", {\r\n\t /**\r\n\t * Singleton to represent an empty path\r\n\t *\r\n\t * @const\r\n\t */\r\n\t get: function () {\r\n\t return new Path('');\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Path.prototype.getFront = function () {\r\n\t if (this.pieceNum_ >= this.pieces_.length)\r\n\t return null;\r\n\t return this.pieces_[this.pieceNum_];\r\n\t };\r\n\t /**\r\n\t * @return {number} The number of segments in this path\r\n\t */\r\n\t Path.prototype.getLength = function () {\r\n\t return this.pieces_.length - this.pieceNum_;\r\n\t };\r\n\t /**\r\n\t * @return {!Path}\r\n\t */\r\n\t Path.prototype.popFront = function () {\r\n\t var pieceNum = this.pieceNum_;\r\n\t if (pieceNum < this.pieces_.length) {\r\n\t pieceNum++;\r\n\t }\r\n\t return new Path(this.pieces_, pieceNum);\r\n\t };\r\n\t /**\r\n\t * @return {?string}\r\n\t */\r\n\t Path.prototype.getBack = function () {\r\n\t if (this.pieceNum_ < this.pieces_.length)\r\n\t return this.pieces_[this.pieces_.length - 1];\r\n\t return null;\r\n\t };\r\n\t Path.prototype.toString = function () {\r\n\t var pathString = '';\r\n\t for (var i = this.pieceNum_; i < this.pieces_.length; i++) {\r\n\t if (this.pieces_[i] !== '')\r\n\t pathString += '/' + this.pieces_[i];\r\n\t }\r\n\t return pathString || '/';\r\n\t };\r\n\t Path.prototype.toUrlEncodedString = function () {\r\n\t var pathString = '';\r\n\t for (var i = this.pieceNum_; i < this.pieces_.length; i++) {\r\n\t if (this.pieces_[i] !== '')\r\n\t pathString += '/' + encodeURIComponent(String(this.pieces_[i]));\r\n\t }\r\n\t return pathString || '/';\r\n\t };\r\n\t /**\r\n\t * Shallow copy of the parts of the path.\r\n\t *\r\n\t * @param {number=} begin\r\n\t * @return {!Array}\r\n\t */\r\n\t Path.prototype.slice = function (begin) {\r\n\t if (begin === void 0) { begin = 0; }\r\n\t return this.pieces_.slice(this.pieceNum_ + begin);\r\n\t };\r\n\t /**\r\n\t * @return {?Path}\r\n\t */\r\n\t Path.prototype.parent = function () {\r\n\t if (this.pieceNum_ >= this.pieces_.length)\r\n\t return null;\r\n\t var pieces = [];\r\n\t for (var i = this.pieceNum_; i < this.pieces_.length - 1; i++)\r\n\t pieces.push(this.pieces_[i]);\r\n\t return new Path(pieces, 0);\r\n\t };\r\n\t /**\r\n\t * @param {string|!Path} childPathObj\r\n\t * @return {!Path}\r\n\t */\r\n\t Path.prototype.child = function (childPathObj) {\r\n\t var pieces = [];\r\n\t for (var i = this.pieceNum_; i < this.pieces_.length; i++)\r\n\t pieces.push(this.pieces_[i]);\r\n\t if (childPathObj instanceof Path) {\r\n\t for (var i = childPathObj.pieceNum_; i < childPathObj.pieces_.length; i++) {\r\n\t pieces.push(childPathObj.pieces_[i]);\r\n\t }\r\n\t }\r\n\t else {\r\n\t var childPieces = childPathObj.split('/');\r\n\t for (var i = 0; i < childPieces.length; i++) {\r\n\t if (childPieces[i].length > 0)\r\n\t pieces.push(childPieces[i]);\r\n\t }\r\n\t }\r\n\t return new Path(pieces, 0);\r\n\t };\r\n\t /**\r\n\t * @return {boolean} True if there are no segments in this path\r\n\t */\r\n\t Path.prototype.isEmpty = function () {\r\n\t return this.pieceNum_ >= this.pieces_.length;\r\n\t };\r\n\t /**\r\n\t * @param {!Path} outerPath\r\n\t * @param {!Path} innerPath\r\n\t * @return {!Path} The path from outerPath to innerPath\r\n\t */\r\n\t Path.relativePath = function (outerPath, innerPath) {\r\n\t var outer = outerPath.getFront(), inner = innerPath.getFront();\r\n\t if (outer === null) {\r\n\t return innerPath;\r\n\t }\r\n\t else if (outer === inner) {\r\n\t return Path.relativePath(outerPath.popFront(), innerPath.popFront());\r\n\t }\r\n\t else {\r\n\t throw new Error('INTERNAL ERROR: innerPath (' +\r\n\t innerPath +\r\n\t ') is not within ' +\r\n\t 'outerPath (' +\r\n\t outerPath +\r\n\t ')');\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!Path} left\r\n\t * @param {!Path} right\r\n\t * @return {number} -1, 0, 1 if left is less, equal, or greater than the right.\r\n\t */\r\n\t Path.comparePaths = function (left, right) {\r\n\t var leftKeys = left.slice();\r\n\t var rightKeys = right.slice();\r\n\t for (var i = 0; i < leftKeys.length && i < rightKeys.length; i++) {\r\n\t var cmp = nameCompare(leftKeys[i], rightKeys[i]);\r\n\t if (cmp !== 0)\r\n\t return cmp;\r\n\t }\r\n\t if (leftKeys.length === rightKeys.length)\r\n\t return 0;\r\n\t return leftKeys.length < rightKeys.length ? -1 : 1;\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {Path} other\r\n\t * @return {boolean} true if paths are the same.\r\n\t */\r\n\t Path.prototype.equals = function (other) {\r\n\t if (this.getLength() !== other.getLength()) {\r\n\t return false;\r\n\t }\r\n\t for (var i = this.pieceNum_, j = other.pieceNum_; i <= this.pieces_.length; i++, j++) {\r\n\t if (this.pieces_[i] !== other.pieces_[j]) {\r\n\t return false;\r\n\t }\r\n\t }\r\n\t return true;\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {!Path} other\r\n\t * @return {boolean} True if this path is a parent (or the same as) other\r\n\t */\r\n\t Path.prototype.contains = function (other) {\r\n\t var i = this.pieceNum_;\r\n\t var j = other.pieceNum_;\r\n\t if (this.getLength() > other.getLength()) {\r\n\t return false;\r\n\t }\r\n\t while (i < this.pieces_.length) {\r\n\t if (this.pieces_[i] !== other.pieces_[j]) {\r\n\t return false;\r\n\t }\r\n\t ++i;\r\n\t ++j;\r\n\t }\r\n\t return true;\r\n\t };\r\n\t return Path;\r\n\t}()); // end Path\r\n\t/**\r\n\t * Dynamic (mutable) path used to count path lengths.\r\n\t *\r\n\t * This class is used to efficiently check paths for valid\r\n\t * length (in UTF8 bytes) and depth (used in path validation).\r\n\t *\r\n\t * Throws Error exception if path is ever invalid.\r\n\t *\r\n\t * The definition of a path always begins with '/'.\r\n\t */\r\n\tvar ValidationPath = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!Path} path Initial Path.\r\n\t * @param {string} errorPrefix_ Prefix for any error messages.\r\n\t */\r\n\t function ValidationPath(path, errorPrefix_) {\r\n\t this.errorPrefix_ = errorPrefix_;\r\n\t /** @type {!Array} */\r\n\t this.parts_ = path.slice();\r\n\t /** @type {number} Initialize to number of '/' chars needed in path. */\r\n\t this.byteLength_ = Math.max(1, this.parts_.length);\r\n\t for (var i = 0; i < this.parts_.length; i++) {\r\n\t this.byteLength_ += util.stringLength(this.parts_[i]);\r\n\t }\r\n\t this.checkValid_();\r\n\t }\r\n\t Object.defineProperty(ValidationPath, \"MAX_PATH_DEPTH\", {\r\n\t /** @const {number} Maximum key depth. */\r\n\t get: function () {\r\n\t return 32;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(ValidationPath, \"MAX_PATH_LENGTH_BYTES\", {\r\n\t /** @const {number} Maximum number of (UTF8) bytes in a Firebase path. */\r\n\t get: function () {\r\n\t return 768;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t /** @param {string} child */\r\n\t ValidationPath.prototype.push = function (child) {\r\n\t // Count the needed '/'\r\n\t if (this.parts_.length > 0) {\r\n\t this.byteLength_ += 1;\r\n\t }\r\n\t this.parts_.push(child);\r\n\t this.byteLength_ += util.stringLength(child);\r\n\t this.checkValid_();\r\n\t };\r\n\t ValidationPath.prototype.pop = function () {\r\n\t var last = this.parts_.pop();\r\n\t this.byteLength_ -= util.stringLength(last);\r\n\t // Un-count the previous '/'\r\n\t if (this.parts_.length > 0) {\r\n\t this.byteLength_ -= 1;\r\n\t }\r\n\t };\r\n\t ValidationPath.prototype.checkValid_ = function () {\r\n\t if (this.byteLength_ > ValidationPath.MAX_PATH_LENGTH_BYTES) {\r\n\t throw new Error(this.errorPrefix_ +\r\n\t 'has a key path longer than ' +\r\n\t ValidationPath.MAX_PATH_LENGTH_BYTES +\r\n\t ' bytes (' +\r\n\t this.byteLength_ +\r\n\t ').');\r\n\t }\r\n\t if (this.parts_.length > ValidationPath.MAX_PATH_DEPTH) {\r\n\t throw new Error(this.errorPrefix_ +\r\n\t 'path specified exceeds the maximum depth that can be written (' +\r\n\t ValidationPath.MAX_PATH_DEPTH +\r\n\t ') or object contains a cycle ' +\r\n\t this.toErrorString());\r\n\t }\r\n\t };\r\n\t /**\r\n\t * String for use in error messages - uses '.' notation for path.\r\n\t *\r\n\t * @return {string}\r\n\t */\r\n\t ValidationPath.prototype.toErrorString = function () {\r\n\t if (this.parts_.length == 0) {\r\n\t return '';\r\n\t }\r\n\t return \"in property '\" + this.parts_.join('.') + \"'\";\r\n\t };\r\n\t return ValidationPath;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar PROTOCOL_VERSION = '5';\r\n\tvar VERSION_PARAM = 'v';\r\n\tvar TRANSPORT_SESSION_PARAM = 's';\r\n\tvar REFERER_PARAM = 'r';\r\n\tvar FORGE_REF = 'f';\r\n\tvar FORGE_DOMAIN = 'firebaseio.com';\r\n\tvar LAST_SESSION_PARAM = 'ls';\r\n\tvar WEBSOCKET = 'websocket';\r\n\tvar LONG_POLLING = 'long_polling';\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * A class that holds metadata about a Repo object\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar RepoInfo = /** @class */ (function () {\r\n\t /**\r\n\t * @param {string} host Hostname portion of the url for the repo\r\n\t * @param {boolean} secure Whether or not this repo is accessed over ssl\r\n\t * @param {string} namespace The namespace represented by the repo\r\n\t * @param {boolean} webSocketOnly Whether to prefer websockets over all other transports (used by Nest).\r\n\t * @param {string=} persistenceKey Override the default session persistence storage key\r\n\t */\r\n\t function RepoInfo(host, secure, namespace, webSocketOnly, persistenceKey) {\r\n\t if (persistenceKey === void 0) { persistenceKey = ''; }\r\n\t this.secure = secure;\r\n\t this.namespace = namespace;\r\n\t this.webSocketOnly = webSocketOnly;\r\n\t this.persistenceKey = persistenceKey;\r\n\t this.host = host.toLowerCase();\r\n\t this.domain = this.host.substr(this.host.indexOf('.') + 1);\r\n\t this.internalHost = PersistentStorage.get('host:' + host) || this.host;\r\n\t }\r\n\t RepoInfo.prototype.needsQueryParam = function () {\r\n\t return this.host !== this.internalHost || this.isCustomHost();\r\n\t };\r\n\t RepoInfo.prototype.isCacheableHost = function () {\r\n\t return this.internalHost.substr(0, 2) === 's-';\r\n\t };\r\n\t RepoInfo.prototype.isDemoHost = function () {\r\n\t return this.domain === 'firebaseio-demo.com';\r\n\t };\r\n\t RepoInfo.prototype.isCustomHost = function () {\r\n\t return (this.domain !== 'firebaseio.com' && this.domain !== 'firebaseio-demo.com');\r\n\t };\r\n\t RepoInfo.prototype.updateHost = function (newHost) {\r\n\t if (newHost !== this.internalHost) {\r\n\t this.internalHost = newHost;\r\n\t if (this.isCacheableHost()) {\r\n\t PersistentStorage.set('host:' + this.host, this.internalHost);\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Returns the websocket URL for this repo\r\n\t * @param {string} type of connection\r\n\t * @param {Object} params list\r\n\t * @return {string} The URL for this repo\r\n\t */\r\n\t RepoInfo.prototype.connectionURL = function (type, params) {\r\n\t util.assert(typeof type === 'string', 'typeof type must == string');\r\n\t util.assert(typeof params === 'object', 'typeof params must == object');\r\n\t var connURL;\r\n\t if (type === WEBSOCKET) {\r\n\t connURL =\r\n\t (this.secure ? 'wss://' : 'ws://') + this.internalHost + '/.ws?';\r\n\t }\r\n\t else if (type === LONG_POLLING) {\r\n\t connURL =\r\n\t (this.secure ? 'https://' : 'http://') + this.internalHost + '/.lp?';\r\n\t }\r\n\t else {\r\n\t throw new Error('Unknown connection type: ' + type);\r\n\t }\r\n\t if (this.needsQueryParam()) {\r\n\t params['ns'] = this.namespace;\r\n\t }\r\n\t var pairs = [];\r\n\t util.forEach(params, function (key, value) {\r\n\t pairs.push(key + '=' + value);\r\n\t });\r\n\t return connURL + pairs.join('&');\r\n\t };\r\n\t /** @return {string} */\r\n\t RepoInfo.prototype.toString = function () {\r\n\t var str = this.toURLString();\r\n\t if (this.persistenceKey) {\r\n\t str += '<' + this.persistenceKey + '>';\r\n\t }\r\n\t return str;\r\n\t };\r\n\t /** @return {string} */\r\n\t RepoInfo.prototype.toURLString = function () {\r\n\t return (this.secure ? 'https://' : 'http://') + this.host;\r\n\t };\r\n\t return RepoInfo;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @param {!string} pathString\r\n\t * @return {string}\r\n\t */\r\n\tfunction decodePath(pathString) {\r\n\t var pathStringDecoded = '';\r\n\t var pieces = pathString.split('/');\r\n\t for (var i = 0; i < pieces.length; i++) {\r\n\t if (pieces[i].length > 0) {\r\n\t var piece = pieces[i];\r\n\t try {\r\n\t piece = decodeURIComponent(piece.replace(/\\+/g, ' '));\r\n\t }\r\n\t catch (e) { }\r\n\t pathStringDecoded += '/' + piece;\r\n\t }\r\n\t }\r\n\t return pathStringDecoded;\r\n\t}\r\n\t/**\r\n\t * @param {!string} queryString\r\n\t * @return {!{[key:string]:string}} key value hash\r\n\t */\r\n\tfunction decodeQuery(queryString) {\r\n\t var results = {};\r\n\t if (queryString.startsWith('?')) {\r\n\t queryString = queryString.substring(1);\r\n\t }\r\n\t for (var _i = 0, _a = queryString.split('&'); _i < _a.length; _i++) {\r\n\t var segment = _a[_i];\r\n\t if (segment.length === 0) {\r\n\t continue;\r\n\t }\r\n\t var kv = segment.split('=');\r\n\t if (kv.length === 2) {\r\n\t results[decodeURIComponent(kv[0])] = decodeURIComponent(kv[1]);\r\n\t }\r\n\t else {\r\n\t warn(\"Invalid query segment '\" + segment + \"' in query '\" + queryString + \"'\");\r\n\t }\r\n\t }\r\n\t return results;\r\n\t}\r\n\t/**\r\n\t *\r\n\t * @param {!string} dataURL\r\n\t * @return {{repoInfo: !RepoInfo, path: !Path}}\r\n\t */\r\n\tvar parseRepoInfo = function (dataURL) {\r\n\t var parsedUrl = parseURL(dataURL), namespace = parsedUrl.subdomain;\r\n\t if (parsedUrl.domain === 'firebase') {\r\n\t fatal(parsedUrl.host +\r\n\t ' is no longer supported. ' +\r\n\t 'Please use .firebaseio.com instead');\r\n\t }\r\n\t // Catch common error of uninitialized namespace value.\r\n\t if ((!namespace || namespace == 'undefined') &&\r\n\t parsedUrl.domain !== 'localhost') {\r\n\t fatal('Cannot parse Firebase url. Please use https://.firebaseio.com');\r\n\t }\r\n\t if (!parsedUrl.secure) {\r\n\t warnIfPageIsSecure();\r\n\t }\r\n\t var webSocketOnly = parsedUrl.scheme === 'ws' || parsedUrl.scheme === 'wss';\r\n\t return {\r\n\t repoInfo: new RepoInfo(parsedUrl.host, parsedUrl.secure, namespace, webSocketOnly),\r\n\t path: new Path(parsedUrl.pathString)\r\n\t };\r\n\t};\r\n\t/**\r\n\t *\r\n\t * @param {!string} dataURL\r\n\t * @return {{host: string, port: number, domain: string, subdomain: string, secure: boolean, scheme: string, pathString: string}}\r\n\t */\r\n\tvar parseURL = function (dataURL) {\r\n\t // Default to empty strings in the event of a malformed string.\r\n\t var host = '', domain = '', subdomain = '', pathString = '';\r\n\t // Always default to SSL, unless otherwise specified.\r\n\t var secure = true, scheme = 'https', port = 443;\r\n\t // Don't do any validation here. The caller is responsible for validating the result of parsing.\r\n\t if (typeof dataURL === 'string') {\r\n\t // Parse scheme.\r\n\t var colonInd = dataURL.indexOf('//');\r\n\t if (colonInd >= 0) {\r\n\t scheme = dataURL.substring(0, colonInd - 1);\r\n\t dataURL = dataURL.substring(colonInd + 2);\r\n\t }\r\n\t // Parse host, path, and query string.\r\n\t var slashInd = dataURL.indexOf('/');\r\n\t if (slashInd === -1) {\r\n\t slashInd = dataURL.length;\r\n\t }\r\n\t var questionMarkInd = dataURL.indexOf('?');\r\n\t if (questionMarkInd === -1) {\r\n\t questionMarkInd = dataURL.length;\r\n\t }\r\n\t host = dataURL.substring(0, Math.min(slashInd, questionMarkInd));\r\n\t if (slashInd < questionMarkInd) {\r\n\t // For pathString, questionMarkInd will always come after slashInd\r\n\t pathString = decodePath(dataURL.substring(slashInd, questionMarkInd));\r\n\t }\r\n\t var queryParams = decodeQuery(dataURL.substring(Math.min(dataURL.length, questionMarkInd)));\r\n\t // If we have a port, use scheme for determining if it's secure.\r\n\t colonInd = host.indexOf(':');\r\n\t if (colonInd >= 0) {\r\n\t secure = scheme === 'https' || scheme === 'wss';\r\n\t port = parseInt(host.substring(colonInd + 1), 10);\r\n\t }\r\n\t else {\r\n\t colonInd = dataURL.length;\r\n\t }\r\n\t var parts = host.split('.');\r\n\t if (parts.length === 3) {\r\n\t // Normalize namespaces to lowercase to share storage / connection.\r\n\t domain = parts[1];\r\n\t subdomain = parts[0].toLowerCase();\r\n\t }\r\n\t else if (parts.length === 2) {\r\n\t domain = parts[0];\r\n\t }\r\n\t else if (parts[0].slice(0, colonInd).toLowerCase() === 'localhost') {\r\n\t domain = 'localhost';\r\n\t }\r\n\t // Support `ns` query param if subdomain not already set\r\n\t if (subdomain === '' && 'ns' in queryParams) {\r\n\t subdomain = queryParams['ns'];\r\n\t }\r\n\t }\r\n\t return {\r\n\t host: host,\r\n\t port: port,\r\n\t domain: domain,\r\n\t subdomain: subdomain,\r\n\t secure: secure,\r\n\t scheme: scheme,\r\n\t pathString: pathString\r\n\t };\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * True for invalid Firebase keys\r\n\t * @type {RegExp}\r\n\t * @private\r\n\t */\r\n\tvar INVALID_KEY_REGEX_ = /[\\[\\].#$\\/\\u0000-\\u001F\\u007F]/;\r\n\t/**\r\n\t * True for invalid Firebase paths.\r\n\t * Allows '/' in paths.\r\n\t * @type {RegExp}\r\n\t * @private\r\n\t */\r\n\tvar INVALID_PATH_REGEX_ = /[\\[\\].#$\\u0000-\\u001F\\u007F]/;\r\n\t/**\r\n\t * Maximum number of characters to allow in leaf value\r\n\t * @type {number}\r\n\t * @private\r\n\t */\r\n\tvar MAX_LEAF_SIZE_ = 10 * 1024 * 1024;\r\n\t/**\r\n\t * @param {*} key\r\n\t * @return {boolean}\r\n\t */\r\n\tvar isValidKey = function (key) {\r\n\t return (typeof key === 'string' && key.length !== 0 && !INVALID_KEY_REGEX_.test(key));\r\n\t};\r\n\t/**\r\n\t * @param {string} pathString\r\n\t * @return {boolean}\r\n\t */\r\n\tvar isValidPathString = function (pathString) {\r\n\t return (typeof pathString === 'string' &&\r\n\t pathString.length !== 0 &&\r\n\t !INVALID_PATH_REGEX_.test(pathString));\r\n\t};\r\n\t/**\r\n\t * @param {string} pathString\r\n\t * @return {boolean}\r\n\t */\r\n\tvar isValidRootPathString = function (pathString) {\r\n\t if (pathString) {\r\n\t // Allow '/.info/' at the beginning.\r\n\t pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n\t }\r\n\t return isValidPathString(pathString);\r\n\t};\r\n\t/**\r\n\t * @param {*} priority\r\n\t * @return {boolean}\r\n\t */\r\n\tvar isValidPriority = function (priority) {\r\n\t return (priority === null ||\r\n\t typeof priority === 'string' ||\r\n\t (typeof priority === 'number' && !isInvalidJSONNumber(priority)) ||\r\n\t (priority && typeof priority === 'object' && util.contains(priority, '.sv')));\r\n\t};\r\n\t/**\r\n\t * Pre-validate a datum passed as an argument to Firebase function.\r\n\t *\r\n\t * @param {string} fnName\r\n\t * @param {number} argumentNumber\r\n\t * @param {*} data\r\n\t * @param {!Path} path\r\n\t * @param {boolean} optional\r\n\t */\r\n\tvar validateFirebaseDataArg = function (fnName, argumentNumber, data, path, optional) {\r\n\t if (optional && data === undefined)\r\n\t return;\r\n\t validateFirebaseData(util.errorPrefix(fnName, argumentNumber, optional), data, path);\r\n\t};\r\n\t/**\r\n\t * Validate a data object client-side before sending to server.\r\n\t *\r\n\t * @param {string} errorPrefix\r\n\t * @param {*} data\r\n\t * @param {!Path|!ValidationPath} path_\r\n\t */\r\n\tvar validateFirebaseData = function (errorPrefix, data, path_) {\r\n\t var path = path_ instanceof Path ? new ValidationPath(path_, errorPrefix) : path_;\r\n\t if (data === undefined) {\r\n\t throw new Error(errorPrefix + 'contains undefined ' + path.toErrorString());\r\n\t }\r\n\t if (typeof data === 'function') {\r\n\t throw new Error(errorPrefix +\r\n\t 'contains a function ' +\r\n\t path.toErrorString() +\r\n\t ' with contents = ' +\r\n\t data.toString());\r\n\t }\r\n\t if (isInvalidJSONNumber(data)) {\r\n\t throw new Error(errorPrefix + 'contains ' + data.toString() + ' ' + path.toErrorString());\r\n\t }\r\n\t // Check max leaf size, but try to avoid the utf8 conversion if we can.\r\n\t if (typeof data === 'string' &&\r\n\t data.length > MAX_LEAF_SIZE_ / 3 &&\r\n\t util.stringLength(data) > MAX_LEAF_SIZE_) {\r\n\t throw new Error(errorPrefix +\r\n\t 'contains a string greater than ' +\r\n\t MAX_LEAF_SIZE_ +\r\n\t ' utf8 bytes ' +\r\n\t path.toErrorString() +\r\n\t \" ('\" +\r\n\t data.substring(0, 50) +\r\n\t \"...')\");\r\n\t }\r\n\t // TODO = Perf = Consider combining the recursive validation of keys into NodeFromJSON\r\n\t // to save extra walking of large objects.\r\n\t if (data && typeof data === 'object') {\r\n\t var hasDotValue_1 = false, hasActualChild_1 = false;\r\n\t util.forEach(data, function (key, value) {\r\n\t if (key === '.value') {\r\n\t hasDotValue_1 = true;\r\n\t }\r\n\t else if (key !== '.priority' && key !== '.sv') {\r\n\t hasActualChild_1 = true;\r\n\t if (!isValidKey(key)) {\r\n\t throw new Error(errorPrefix +\r\n\t ' contains an invalid key (' +\r\n\t key +\r\n\t ') ' +\r\n\t path.toErrorString() +\r\n\t '. Keys must be non-empty strings ' +\r\n\t 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n\t }\r\n\t }\r\n\t path.push(key);\r\n\t validateFirebaseData(errorPrefix, value, path);\r\n\t path.pop();\r\n\t });\r\n\t if (hasDotValue_1 && hasActualChild_1) {\r\n\t throw new Error(errorPrefix +\r\n\t ' contains \".value\" child ' +\r\n\t path.toErrorString() +\r\n\t ' in addition to actual children.');\r\n\t }\r\n\t }\r\n\t};\r\n\t/**\r\n\t * Pre-validate paths passed in the firebase function.\r\n\t *\r\n\t * @param {string} errorPrefix\r\n\t * @param {Array} mergePaths\r\n\t */\r\n\tvar validateFirebaseMergePaths = function (errorPrefix, mergePaths) {\r\n\t var i, curPath;\r\n\t for (i = 0; i < mergePaths.length; i++) {\r\n\t curPath = mergePaths[i];\r\n\t var keys = curPath.slice();\r\n\t for (var j = 0; j < keys.length; j++) {\r\n\t if (keys[j] === '.priority' && j === keys.length - 1) {\r\n\t // .priority is OK\r\n\t }\r\n\t else if (!isValidKey(keys[j])) {\r\n\t throw new Error(errorPrefix +\r\n\t 'contains an invalid key (' +\r\n\t keys[j] +\r\n\t ') in path ' +\r\n\t curPath.toString() +\r\n\t '. Keys must be non-empty strings ' +\r\n\t 'and can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\"');\r\n\t }\r\n\t }\r\n\t }\r\n\t // Check that update keys are not descendants of each other.\r\n\t // We rely on the property that sorting guarantees that ancestors come\r\n\t // right before descendants.\r\n\t mergePaths.sort(Path.comparePaths);\r\n\t var prevPath = null;\r\n\t for (i = 0; i < mergePaths.length; i++) {\r\n\t curPath = mergePaths[i];\r\n\t if (prevPath !== null && prevPath.contains(curPath)) {\r\n\t throw new Error(errorPrefix +\r\n\t 'contains a path ' +\r\n\t prevPath.toString() +\r\n\t ' that is ancestor of another path ' +\r\n\t curPath.toString());\r\n\t }\r\n\t prevPath = curPath;\r\n\t }\r\n\t};\r\n\t/**\r\n\t * pre-validate an object passed as an argument to firebase function (\r\n\t * must be an object - e.g. for firebase.update()).\r\n\t *\r\n\t * @param {string} fnName\r\n\t * @param {number} argumentNumber\r\n\t * @param {*} data\r\n\t * @param {!Path} path\r\n\t * @param {boolean} optional\r\n\t */\r\n\tvar validateFirebaseMergeDataArg = function (fnName, argumentNumber, data, path, optional) {\r\n\t if (optional && data === undefined)\r\n\t return;\r\n\t var errorPrefix = util.errorPrefix(fnName, argumentNumber, optional);\r\n\t if (!(data && typeof data === 'object') || Array.isArray(data)) {\r\n\t throw new Error(errorPrefix + ' must be an object containing the children to replace.');\r\n\t }\r\n\t var mergePaths = [];\r\n\t util.forEach(data, function (key, value) {\r\n\t var curPath = new Path(key);\r\n\t validateFirebaseData(errorPrefix, value, path.child(curPath));\r\n\t if (curPath.getBack() === '.priority') {\r\n\t if (!isValidPriority(value)) {\r\n\t throw new Error(errorPrefix +\r\n\t \"contains an invalid value for '\" +\r\n\t curPath.toString() +\r\n\t \"', which must be a valid \" +\r\n\t 'Firebase priority (a string, finite number, server value, or null).');\r\n\t }\r\n\t }\r\n\t mergePaths.push(curPath);\r\n\t });\r\n\t validateFirebaseMergePaths(errorPrefix, mergePaths);\r\n\t};\r\n\tvar validatePriority = function (fnName, argumentNumber, priority, optional) {\r\n\t if (optional && priority === undefined)\r\n\t return;\r\n\t if (isInvalidJSONNumber(priority))\r\n\t throw new Error(util.errorPrefix(fnName, argumentNumber, optional) +\r\n\t 'is ' +\r\n\t priority.toString() +\r\n\t ', but must be a valid Firebase priority (a string, finite number, ' +\r\n\t 'server value, or null).');\r\n\t // Special case to allow importing data with a .sv.\r\n\t if (!isValidPriority(priority))\r\n\t throw new Error(util.errorPrefix(fnName, argumentNumber, optional) +\r\n\t 'must be a valid Firebase priority ' +\r\n\t '(a string, finite number, server value, or null).');\r\n\t};\r\n\tvar validateEventType = function (fnName, argumentNumber, eventType, optional) {\r\n\t if (optional && eventType === undefined)\r\n\t return;\r\n\t switch (eventType) {\r\n\t case 'value':\r\n\t case 'child_added':\r\n\t case 'child_removed':\r\n\t case 'child_changed':\r\n\t case 'child_moved':\r\n\t break;\r\n\t default:\r\n\t throw new Error(util.errorPrefix(fnName, argumentNumber, optional) +\r\n\t 'must be a valid event type = \"value\", \"child_added\", \"child_removed\", ' +\r\n\t '\"child_changed\", or \"child_moved\".');\r\n\t }\r\n\t};\r\n\tvar validateKey = function (fnName, argumentNumber, key, optional) {\r\n\t if (optional && key === undefined)\r\n\t return;\r\n\t if (!isValidKey(key))\r\n\t throw new Error(util.errorPrefix(fnName, argumentNumber, optional) +\r\n\t 'was an invalid key = \"' +\r\n\t key +\r\n\t '\". Firebase keys must be non-empty strings and ' +\r\n\t 'can\\'t contain \".\", \"#\", \"$\", \"/\", \"[\", or \"]\").');\r\n\t};\r\n\tvar validatePathString = function (fnName, argumentNumber, pathString, optional) {\r\n\t if (optional && pathString === undefined)\r\n\t return;\r\n\t if (!isValidPathString(pathString))\r\n\t throw new Error(util.errorPrefix(fnName, argumentNumber, optional) +\r\n\t 'was an invalid path = \"' +\r\n\t pathString +\r\n\t '\". Paths must be non-empty strings and ' +\r\n\t 'can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\"');\r\n\t};\r\n\tvar validateRootPathString = function (fnName, argumentNumber, pathString, optional) {\r\n\t if (pathString) {\r\n\t // Allow '/.info/' at the beginning.\r\n\t pathString = pathString.replace(/^\\/*\\.info(\\/|$)/, '/');\r\n\t }\r\n\t validatePathString(fnName, argumentNumber, pathString, optional);\r\n\t};\r\n\tvar validateWritablePath = function (fnName, path) {\r\n\t if (path.getFront() === '.info') {\r\n\t throw new Error(fnName + \" failed = Can't modify data under /.info/\");\r\n\t }\r\n\t};\r\n\tvar validateUrl = function (fnName, argumentNumber, parsedUrl) {\r\n\t // TODO = Validate server better.\r\n\t var pathString = parsedUrl.path.toString();\r\n\t if (!(typeof parsedUrl.repoInfo.host === 'string') ||\r\n\t parsedUrl.repoInfo.host.length === 0 ||\r\n\t (!isValidKey(parsedUrl.repoInfo.namespace) &&\r\n\t parsedUrl.repoInfo.host.split(':')[0] !== 'localhost') ||\r\n\t (pathString.length !== 0 && !isValidRootPathString(pathString))) {\r\n\t throw new Error(util.errorPrefix(fnName, argumentNumber, false) +\r\n\t 'must be a valid firebase URL and ' +\r\n\t 'the path can\\'t contain \".\", \"#\", \"$\", \"[\", or \"]\".');\r\n\t }\r\n\t};\r\n\tvar validateBoolean = function (fnName, argumentNumber, bool, optional) {\r\n\t if (optional && bool === undefined)\r\n\t return;\r\n\t if (typeof bool !== 'boolean')\r\n\t throw new Error(util.errorPrefix(fnName, argumentNumber, optional) + 'must be a boolean.');\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @constructor\r\n\t */\r\n\tvar OnDisconnect = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!Repo} repo_\r\n\t * @param {!Path} path_\r\n\t */\r\n\t function OnDisconnect(repo_, path_) {\r\n\t this.repo_ = repo_;\r\n\t this.path_ = path_;\r\n\t }\r\n\t /**\r\n\t * @param {function(?Error)=} onComplete\r\n\t * @return {!firebase.Promise}\r\n\t */\r\n\t OnDisconnect.prototype.cancel = function (onComplete) {\r\n\t util.validateArgCount('OnDisconnect.cancel', 0, 1, arguments.length);\r\n\t util.validateCallback('OnDisconnect.cancel', 1, onComplete, true);\r\n\t var deferred = new util.Deferred();\r\n\t this.repo_.onDisconnectCancel(this.path_, deferred.wrapCallback(onComplete));\r\n\t return deferred.promise;\r\n\t };\r\n\t /**\r\n\t * @param {function(?Error)=} onComplete\r\n\t * @return {!firebase.Promise}\r\n\t */\r\n\t OnDisconnect.prototype.remove = function (onComplete) {\r\n\t util.validateArgCount('OnDisconnect.remove', 0, 1, arguments.length);\r\n\t validateWritablePath('OnDisconnect.remove', this.path_);\r\n\t util.validateCallback('OnDisconnect.remove', 1, onComplete, true);\r\n\t var deferred = new util.Deferred();\r\n\t this.repo_.onDisconnectSet(this.path_, null, deferred.wrapCallback(onComplete));\r\n\t return deferred.promise;\r\n\t };\r\n\t /**\r\n\t * @param {*} value\r\n\t * @param {function(?Error)=} onComplete\r\n\t * @return {!firebase.Promise}\r\n\t */\r\n\t OnDisconnect.prototype.set = function (value, onComplete) {\r\n\t util.validateArgCount('OnDisconnect.set', 1, 2, arguments.length);\r\n\t validateWritablePath('OnDisconnect.set', this.path_);\r\n\t validateFirebaseDataArg('OnDisconnect.set', 1, value, this.path_, false);\r\n\t util.validateCallback('OnDisconnect.set', 2, onComplete, true);\r\n\t var deferred = new util.Deferred();\r\n\t this.repo_.onDisconnectSet(this.path_, value, deferred.wrapCallback(onComplete));\r\n\t return deferred.promise;\r\n\t };\r\n\t /**\r\n\t * @param {*} value\r\n\t * @param {number|string|null} priority\r\n\t * @param {function(?Error)=} onComplete\r\n\t * @return {!firebase.Promise}\r\n\t */\r\n\t OnDisconnect.prototype.setWithPriority = function (value, priority, onComplete) {\r\n\t util.validateArgCount('OnDisconnect.setWithPriority', 2, 3, arguments.length);\r\n\t validateWritablePath('OnDisconnect.setWithPriority', this.path_);\r\n\t validateFirebaseDataArg('OnDisconnect.setWithPriority', 1, value, this.path_, false);\r\n\t validatePriority('OnDisconnect.setWithPriority', 2, priority, false);\r\n\t util.validateCallback('OnDisconnect.setWithPriority', 3, onComplete, true);\r\n\t var deferred = new util.Deferred();\r\n\t this.repo_.onDisconnectSetWithPriority(this.path_, value, priority, deferred.wrapCallback(onComplete));\r\n\t return deferred.promise;\r\n\t };\r\n\t /**\r\n\t * @param {!Object} objectToMerge\r\n\t * @param {function(?Error)=} onComplete\r\n\t * @return {!firebase.Promise}\r\n\t */\r\n\t OnDisconnect.prototype.update = function (objectToMerge, onComplete) {\r\n\t util.validateArgCount('OnDisconnect.update', 1, 2, arguments.length);\r\n\t validateWritablePath('OnDisconnect.update', this.path_);\r\n\t if (Array.isArray(objectToMerge)) {\r\n\t var newObjectToMerge = {};\r\n\t for (var i = 0; i < objectToMerge.length; ++i) {\r\n\t newObjectToMerge['' + i] = objectToMerge[i];\r\n\t }\r\n\t objectToMerge = newObjectToMerge;\r\n\t warn('Passing an Array to firebase.database.onDisconnect().update() is deprecated. Use set() if you want to overwrite the ' +\r\n\t 'existing data, or an Object with integer keys if you really do want to only update some of the children.');\r\n\t }\r\n\t validateFirebaseMergeDataArg('OnDisconnect.update', 1, objectToMerge, this.path_, false);\r\n\t util.validateCallback('OnDisconnect.update', 2, onComplete, true);\r\n\t var deferred = new util.Deferred();\r\n\t this.repo_.onDisconnectUpdate(this.path_, objectToMerge, deferred.wrapCallback(onComplete));\r\n\t return deferred.promise;\r\n\t };\r\n\t return OnDisconnect;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar TransactionResult = /** @class */ (function () {\r\n\t /**\r\n\t * A type for the resolve value of Firebase.transaction.\r\n\t * @constructor\r\n\t * @dict\r\n\t * @param {boolean} committed\r\n\t * @param {DataSnapshot} snapshot\r\n\t */\r\n\t function TransactionResult(committed, snapshot) {\r\n\t this.committed = committed;\r\n\t this.snapshot = snapshot;\r\n\t }\r\n\t // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n\t // for end-users\r\n\t TransactionResult.prototype.toJSON = function () {\r\n\t util.validateArgCount('TransactionResult.toJSON', 0, 1, arguments.length);\r\n\t return { committed: this.committed, snapshot: this.snapshot.toJSON() };\r\n\t };\r\n\t return TransactionResult;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Fancy ID generator that creates 20-character string identifiers with the\r\n\t * following properties:\r\n\t *\r\n\t * 1. They're based on timestamp so that they sort *after* any existing ids.\r\n\t * 2. They contain 72-bits of random data after the timestamp so that IDs won't\r\n\t * collide with other clients' IDs.\r\n\t * 3. They sort *lexicographically* (so the timestamp is converted to characters\r\n\t * that will sort properly).\r\n\t * 4. They're monotonically increasing. Even if you generate more than one in\r\n\t * the same timestamp, the latter ones will sort after the former ones. We do\r\n\t * this by using the previous random bits but \"incrementing\" them by 1 (only\r\n\t * in the case of a timestamp collision).\r\n\t */\r\n\tvar nextPushId = (function () {\r\n\t // Modeled after base64 web-safe chars, but ordered by ASCII.\r\n\t var PUSH_CHARS = '-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';\r\n\t // Timestamp of last push, used to prevent local collisions if you push twice\r\n\t // in one ms.\r\n\t var lastPushTime = 0;\r\n\t // We generate 72-bits of randomness which get turned into 12 characters and\r\n\t // appended to the timestamp to prevent collisions with other clients. We\r\n\t // store the last characters we generated because in the event of a collision,\r\n\t // we'll use those same characters except \"incremented\" by one.\r\n\t var lastRandChars = [];\r\n\t return function (now) {\r\n\t var duplicateTime = now === lastPushTime;\r\n\t lastPushTime = now;\r\n\t var i;\r\n\t var timeStampChars = new Array(8);\r\n\t for (i = 7; i >= 0; i--) {\r\n\t timeStampChars[i] = PUSH_CHARS.charAt(now % 64);\r\n\t // NOTE: Can't use << here because javascript will convert to int and lose\r\n\t // the upper bits.\r\n\t now = Math.floor(now / 64);\r\n\t }\r\n\t util.assert(now === 0, 'Cannot push at time == 0');\r\n\t var id = timeStampChars.join('');\r\n\t if (!duplicateTime) {\r\n\t for (i = 0; i < 12; i++) {\r\n\t lastRandChars[i] = Math.floor(Math.random() * 64);\r\n\t }\r\n\t }\r\n\t else {\r\n\t // If the timestamp hasn't changed since last push, use the same random\r\n\t // number, except incremented by 1.\r\n\t for (i = 11; i >= 0 && lastRandChars[i] === 63; i--) {\r\n\t lastRandChars[i] = 0;\r\n\t }\r\n\t lastRandChars[i]++;\r\n\t }\r\n\t for (i = 0; i < 12; i++) {\r\n\t id += PUSH_CHARS.charAt(lastRandChars[i]);\r\n\t }\r\n\t util.assert(id.length === 20, 'nextPushId: Length should be 20.');\r\n\t return id;\r\n\t };\r\n\t})();\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t *\r\n\t * @param {!string} name\r\n\t * @param {!Node} node\r\n\t * @constructor\r\n\t * @struct\r\n\t */\r\n\tvar NamedNode = /** @class */ (function () {\r\n\t function NamedNode(name, node) {\r\n\t this.name = name;\r\n\t this.node = node;\r\n\t }\r\n\t /**\r\n\t *\r\n\t * @param {!string} name\r\n\t * @param {!Node} node\r\n\t * @return {NamedNode}\r\n\t */\r\n\t NamedNode.Wrap = function (name, node) {\r\n\t return new NamedNode(name, node);\r\n\t };\r\n\t return NamedNode;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar Index = /** @class */ (function () {\r\n\t function Index() {\r\n\t }\r\n\t /**\r\n\t * @return {function(!NamedNode, !NamedNode):number} A standalone comparison function for\r\n\t * this index\r\n\t */\r\n\t Index.prototype.getCompare = function () {\r\n\t return this.compare.bind(this);\r\n\t };\r\n\t /**\r\n\t * Given a before and after value for a node, determine if the indexed value has changed. Even if they are different,\r\n\t * it's possible that the changes are isolated to parts of the snapshot that are not indexed.\r\n\t *\r\n\t * @param {!Node} oldNode\r\n\t * @param {!Node} newNode\r\n\t * @return {boolean} True if the portion of the snapshot being indexed changed between oldNode and newNode\r\n\t */\r\n\t Index.prototype.indexedValueChanged = function (oldNode, newNode) {\r\n\t var oldWrapped = new NamedNode(MIN_NAME, oldNode);\r\n\t var newWrapped = new NamedNode(MIN_NAME, newNode);\r\n\t return this.compare(oldWrapped, newWrapped) !== 0;\r\n\t };\r\n\t /**\r\n\t * @return {!NamedNode} a node wrapper that will sort equal to or less than\r\n\t * any other node wrapper, using this index\r\n\t */\r\n\t Index.prototype.minPost = function () {\r\n\t return NamedNode.MIN;\r\n\t };\r\n\t return Index;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar __EMPTY_NODE;\r\n\tvar KeyIndex = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(KeyIndex, _super);\r\n\t function KeyIndex() {\r\n\t return _super !== null && _super.apply(this, arguments) || this;\r\n\t }\r\n\t Object.defineProperty(KeyIndex, \"__EMPTY_NODE\", {\r\n\t get: function () {\r\n\t return __EMPTY_NODE;\r\n\t },\r\n\t set: function (val) {\r\n\t __EMPTY_NODE = val;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t KeyIndex.prototype.compare = function (a, b) {\r\n\t return nameCompare(a.name, b.name);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t KeyIndex.prototype.isDefinedOn = function (node) {\r\n\t // We could probably return true here (since every node has a key), but it's never called\r\n\t // so just leaving unimplemented for now.\r\n\t throw util.assertionError('KeyIndex.isDefinedOn not expected to be called.');\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t KeyIndex.prototype.indexedValueChanged = function (oldNode, newNode) {\r\n\t return false; // The key for a node never changes.\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t KeyIndex.prototype.minPost = function () {\r\n\t return NamedNode.MIN;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t KeyIndex.prototype.maxPost = function () {\r\n\t // TODO: This should really be created once and cached in a static property, but\r\n\t // NamedNode isn't defined yet, so I can't use it in a static. Bleh.\r\n\t return new NamedNode(MAX_NAME, __EMPTY_NODE);\r\n\t };\r\n\t /**\r\n\t * @param {*} indexValue\r\n\t * @param {string} name\r\n\t * @return {!NamedNode}\r\n\t */\r\n\t KeyIndex.prototype.makePost = function (indexValue, name) {\r\n\t util.assert(typeof indexValue === 'string', 'KeyIndex indexValue must always be a string.');\r\n\t // We just use empty node, but it'll never be compared, since our comparator only looks at name.\r\n\t return new NamedNode(indexValue, __EMPTY_NODE);\r\n\t };\r\n\t /**\r\n\t * @return {!string} String representation for inclusion in a query spec\r\n\t */\r\n\t KeyIndex.prototype.toString = function () {\r\n\t return '.key';\r\n\t };\r\n\t return KeyIndex;\r\n\t}(Index));\r\n\tvar KEY_INDEX = new KeyIndex();\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar MAX_NODE;\r\n\tfunction setMaxNode(val) {\r\n\t MAX_NODE = val;\r\n\t}\r\n\t/**\r\n\t * @param {(!string|!number)} priority\r\n\t * @return {!string}\r\n\t */\r\n\tvar priorityHashText = function (priority) {\r\n\t if (typeof priority === 'number')\r\n\t return 'number:' + doubleToIEEE754String(priority);\r\n\t else\r\n\t return 'string:' + priority;\r\n\t};\r\n\t/**\r\n\t * Validates that a priority snapshot Node is valid.\r\n\t *\r\n\t * @param {!Node} priorityNode\r\n\t */\r\n\tvar validatePriorityNode = function (priorityNode) {\r\n\t if (priorityNode.isLeafNode()) {\r\n\t var val = priorityNode.val();\r\n\t util.assert(typeof val === 'string' ||\r\n\t typeof val === 'number' ||\r\n\t (typeof val === 'object' && util.contains(val, '.sv')), 'Priority must be a string or number.');\r\n\t }\r\n\t else {\r\n\t util.assert(priorityNode === MAX_NODE || priorityNode.isEmpty(), 'priority of unexpected type.');\r\n\t }\r\n\t // Don't call getPriority() on MAX_NODE to avoid hitting assertion.\r\n\t util.assert(priorityNode === MAX_NODE || priorityNode.getPriority().isEmpty(), \"Priority nodes can't have a priority of their own.\");\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar __childrenNodeConstructor;\r\n\t/**\r\n\t * LeafNode is a class for storing leaf nodes in a DataSnapshot. It\r\n\t * implements Node and stores the value of the node (a string,\r\n\t * number, or boolean) accessible via getValue().\r\n\t */\r\n\tvar LeafNode = /** @class */ (function () {\r\n\t /**\r\n\t * @implements {Node}\r\n\t * @param {!(string|number|boolean|Object)} value_ The value to store in this leaf node.\r\n\t * The object type is possible in the event of a deferred value\r\n\t * @param {!Node=} priorityNode_ The priority of this node.\r\n\t */\r\n\t function LeafNode(value_, priorityNode_) {\r\n\t if (priorityNode_ === void 0) { priorityNode_ = LeafNode.__childrenNodeConstructor.EMPTY_NODE; }\r\n\t this.value_ = value_;\r\n\t this.priorityNode_ = priorityNode_;\r\n\t this.lazyHash_ = null;\r\n\t util.assert(this.value_ !== undefined && this.value_ !== null, \"LeafNode shouldn't be created with null/undefined value.\");\r\n\t validatePriorityNode(this.priorityNode_);\r\n\t }\r\n\t Object.defineProperty(LeafNode, \"__childrenNodeConstructor\", {\r\n\t get: function () {\r\n\t return __childrenNodeConstructor;\r\n\t },\r\n\t set: function (val) {\r\n\t __childrenNodeConstructor = val;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t /** @inheritDoc */\r\n\t LeafNode.prototype.isLeafNode = function () {\r\n\t return true;\r\n\t };\r\n\t /** @inheritDoc */\r\n\t LeafNode.prototype.getPriority = function () {\r\n\t return this.priorityNode_;\r\n\t };\r\n\t /** @inheritDoc */\r\n\t LeafNode.prototype.updatePriority = function (newPriorityNode) {\r\n\t return new LeafNode(this.value_, newPriorityNode);\r\n\t };\r\n\t /** @inheritDoc */\r\n\t LeafNode.prototype.getImmediateChild = function (childName) {\r\n\t // Hack to treat priority as a regular child\r\n\t if (childName === '.priority') {\r\n\t return this.priorityNode_;\r\n\t }\r\n\t else {\r\n\t return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n\t }\r\n\t };\r\n\t /** @inheritDoc */\r\n\t LeafNode.prototype.getChild = function (path) {\r\n\t if (path.isEmpty()) {\r\n\t return this;\r\n\t }\r\n\t else if (path.getFront() === '.priority') {\r\n\t return this.priorityNode_;\r\n\t }\r\n\t else {\r\n\t return LeafNode.__childrenNodeConstructor.EMPTY_NODE;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t LeafNode.prototype.hasChild = function () {\r\n\t return false;\r\n\t };\r\n\t /** @inheritDoc */\r\n\t LeafNode.prototype.getPredecessorChildName = function (childName, childNode) {\r\n\t return null;\r\n\t };\r\n\t /** @inheritDoc */\r\n\t LeafNode.prototype.updateImmediateChild = function (childName, newChildNode) {\r\n\t if (childName === '.priority') {\r\n\t return this.updatePriority(newChildNode);\r\n\t }\r\n\t else if (newChildNode.isEmpty() && childName !== '.priority') {\r\n\t return this;\r\n\t }\r\n\t else {\r\n\t return LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateImmediateChild(childName, newChildNode).updatePriority(this.priorityNode_);\r\n\t }\r\n\t };\r\n\t /** @inheritDoc */\r\n\t LeafNode.prototype.updateChild = function (path, newChildNode) {\r\n\t var front = path.getFront();\r\n\t if (front === null) {\r\n\t return newChildNode;\r\n\t }\r\n\t else if (newChildNode.isEmpty() && front !== '.priority') {\r\n\t return this;\r\n\t }\r\n\t else {\r\n\t util.assert(front !== '.priority' || path.getLength() === 1, '.priority must be the last token in a path');\r\n\t return this.updateImmediateChild(front, LeafNode.__childrenNodeConstructor.EMPTY_NODE.updateChild(path.popFront(), newChildNode));\r\n\t }\r\n\t };\r\n\t /** @inheritDoc */\r\n\t LeafNode.prototype.isEmpty = function () {\r\n\t return false;\r\n\t };\r\n\t /** @inheritDoc */\r\n\t LeafNode.prototype.numChildren = function () {\r\n\t return 0;\r\n\t };\r\n\t /** @inheritDoc */\r\n\t LeafNode.prototype.forEachChild = function (index, action) {\r\n\t return false;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t LeafNode.prototype.val = function (exportFormat) {\r\n\t if (exportFormat && !this.getPriority().isEmpty())\r\n\t return {\r\n\t '.value': this.getValue(),\r\n\t '.priority': this.getPriority().val()\r\n\t };\r\n\t else\r\n\t return this.getValue();\r\n\t };\r\n\t /** @inheritDoc */\r\n\t LeafNode.prototype.hash = function () {\r\n\t if (this.lazyHash_ === null) {\r\n\t var toHash = '';\r\n\t if (!this.priorityNode_.isEmpty())\r\n\t toHash +=\r\n\t 'priority:' +\r\n\t priorityHashText(this.priorityNode_.val()) +\r\n\t ':';\r\n\t var type = typeof this.value_;\r\n\t toHash += type + ':';\r\n\t if (type === 'number') {\r\n\t toHash += doubleToIEEE754String(this.value_);\r\n\t }\r\n\t else {\r\n\t toHash += this.value_;\r\n\t }\r\n\t this.lazyHash_ = sha1(toHash);\r\n\t }\r\n\t return this.lazyHash_;\r\n\t };\r\n\t /**\r\n\t * Returns the value of the leaf node.\r\n\t * @return {Object|string|number|boolean} The value of the node.\r\n\t */\r\n\t LeafNode.prototype.getValue = function () {\r\n\t return this.value_;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t LeafNode.prototype.compareTo = function (other) {\r\n\t if (other === LeafNode.__childrenNodeConstructor.EMPTY_NODE) {\r\n\t return 1;\r\n\t }\r\n\t else if (other instanceof LeafNode.__childrenNodeConstructor) {\r\n\t return -1;\r\n\t }\r\n\t else {\r\n\t util.assert(other.isLeafNode(), 'Unknown node type');\r\n\t return this.compareToLeafNode_(other);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Comparison specifically for two leaf nodes\r\n\t * @param {!LeafNode} otherLeaf\r\n\t * @return {!number}\r\n\t * @private\r\n\t */\r\n\t LeafNode.prototype.compareToLeafNode_ = function (otherLeaf) {\r\n\t var otherLeafType = typeof otherLeaf.value_;\r\n\t var thisLeafType = typeof this.value_;\r\n\t var otherIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(otherLeafType);\r\n\t var thisIndex = LeafNode.VALUE_TYPE_ORDER.indexOf(thisLeafType);\r\n\t util.assert(otherIndex >= 0, 'Unknown leaf type: ' + otherLeafType);\r\n\t util.assert(thisIndex >= 0, 'Unknown leaf type: ' + thisLeafType);\r\n\t if (otherIndex === thisIndex) {\r\n\t // Same type, compare values\r\n\t if (thisLeafType === 'object') {\r\n\t // Deferred value nodes are all equal, but we should also never get to this point...\r\n\t return 0;\r\n\t }\r\n\t else {\r\n\t // Note that this works because true > false, all others are number or string comparisons\r\n\t if (this.value_ < otherLeaf.value_) {\r\n\t return -1;\r\n\t }\r\n\t else if (this.value_ === otherLeaf.value_) {\r\n\t return 0;\r\n\t }\r\n\t else {\r\n\t return 1;\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t return thisIndex - otherIndex;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t LeafNode.prototype.withIndex = function () {\r\n\t return this;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t LeafNode.prototype.isIndexed = function () {\r\n\t return true;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t LeafNode.prototype.equals = function (other) {\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t if (other === this) {\r\n\t return true;\r\n\t }\r\n\t else if (other.isLeafNode()) {\r\n\t var otherLeaf = other;\r\n\t return (this.value_ === otherLeaf.value_ &&\r\n\t this.priorityNode_.equals(otherLeaf.priorityNode_));\r\n\t }\r\n\t else {\r\n\t return false;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * The sort order for comparing leaf nodes of different types. If two leaf nodes have\r\n\t * the same type, the comparison falls back to their value\r\n\t * @type {Array.}\r\n\t * @const\r\n\t */\r\n\t LeafNode.VALUE_TYPE_ORDER = ['object', 'boolean', 'number', 'string'];\r\n\t return LeafNode;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar nodeFromJSON;\r\n\tvar MAX_NODE$1;\r\n\tfunction setNodeFromJSON(val) {\r\n\t nodeFromJSON = val;\r\n\t}\r\n\tfunction setMaxNode$1(val) {\r\n\t MAX_NODE$1 = val;\r\n\t}\r\n\t/**\r\n\t * @constructor\r\n\t * @extends {Index}\r\n\t * @private\r\n\t */\r\n\tvar PriorityIndex = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(PriorityIndex, _super);\r\n\t function PriorityIndex() {\r\n\t return _super !== null && _super.apply(this, arguments) || this;\r\n\t }\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PriorityIndex.prototype.compare = function (a, b) {\r\n\t var aPriority = a.node.getPriority();\r\n\t var bPriority = b.node.getPriority();\r\n\t var indexCmp = aPriority.compareTo(bPriority);\r\n\t if (indexCmp === 0) {\r\n\t return nameCompare(a.name, b.name);\r\n\t }\r\n\t else {\r\n\t return indexCmp;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PriorityIndex.prototype.isDefinedOn = function (node) {\r\n\t return !node.getPriority().isEmpty();\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PriorityIndex.prototype.indexedValueChanged = function (oldNode, newNode) {\r\n\t return !oldNode.getPriority().equals(newNode.getPriority());\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PriorityIndex.prototype.minPost = function () {\r\n\t return NamedNode.MIN;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PriorityIndex.prototype.maxPost = function () {\r\n\t return new NamedNode(MAX_NAME, new LeafNode('[PRIORITY-POST]', MAX_NODE$1));\r\n\t };\r\n\t /**\r\n\t * @param {*} indexValue\r\n\t * @param {string} name\r\n\t * @return {!NamedNode}\r\n\t */\r\n\t PriorityIndex.prototype.makePost = function (indexValue, name) {\r\n\t var priorityNode = nodeFromJSON(indexValue);\r\n\t return new NamedNode(name, new LeafNode('[PRIORITY-POST]', priorityNode));\r\n\t };\r\n\t /**\r\n\t * @return {!string} String representation for inclusion in a query spec\r\n\t */\r\n\t PriorityIndex.prototype.toString = function () {\r\n\t return '.priority';\r\n\t };\r\n\t return PriorityIndex;\r\n\t}(Index));\r\n\tvar PRIORITY_INDEX = new PriorityIndex();\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * An iterator over an LLRBNode.\r\n\t */\r\n\tvar SortedMapIterator = /** @class */ (function () {\r\n\t /**\r\n\t * @template K, V, T\r\n\t * @param {LLRBNode|LLRBEmptyNode} node Node to iterate.\r\n\t * @param {?K} startKey\r\n\t * @param {function(K, K): number} comparator\r\n\t * @param {boolean} isReverse_ Whether or not to iterate in reverse\r\n\t * @param {(function(K, V):T)=} resultGenerator_\r\n\t */\r\n\t function SortedMapIterator(node, startKey, comparator, isReverse_, resultGenerator_) {\r\n\t if (resultGenerator_ === void 0) { resultGenerator_ = null; }\r\n\t this.isReverse_ = isReverse_;\r\n\t this.resultGenerator_ = resultGenerator_;\r\n\t /** @private\r\n\t * @type {Array.}\r\n\t */\r\n\t this.nodeStack_ = [];\r\n\t var cmp = 1;\r\n\t while (!node.isEmpty()) {\r\n\t node = node;\r\n\t cmp = startKey ? comparator(node.key, startKey) : 1;\r\n\t // flip the comparison if we're going in reverse\r\n\t if (isReverse_)\r\n\t cmp *= -1;\r\n\t if (cmp < 0) {\r\n\t // This node is less than our start key. ignore it\r\n\t if (this.isReverse_) {\r\n\t node = node.left;\r\n\t }\r\n\t else {\r\n\t node = node.right;\r\n\t }\r\n\t }\r\n\t else if (cmp === 0) {\r\n\t // This node is exactly equal to our start key. Push it on the stack, but stop iterating;\r\n\t this.nodeStack_.push(node);\r\n\t break;\r\n\t }\r\n\t else {\r\n\t // This node is greater than our start key, add it to the stack and move to the next one\r\n\t this.nodeStack_.push(node);\r\n\t if (this.isReverse_) {\r\n\t node = node.right;\r\n\t }\r\n\t else {\r\n\t node = node.left;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t SortedMapIterator.prototype.getNext = function () {\r\n\t if (this.nodeStack_.length === 0)\r\n\t return null;\r\n\t var node = this.nodeStack_.pop();\r\n\t var result;\r\n\t if (this.resultGenerator_)\r\n\t result = this.resultGenerator_(node.key, node.value);\r\n\t else\r\n\t result = { key: node.key, value: node.value };\r\n\t if (this.isReverse_) {\r\n\t node = node.left;\r\n\t while (!node.isEmpty()) {\r\n\t this.nodeStack_.push(node);\r\n\t node = node.right;\r\n\t }\r\n\t }\r\n\t else {\r\n\t node = node.right;\r\n\t while (!node.isEmpty()) {\r\n\t this.nodeStack_.push(node);\r\n\t node = node.left;\r\n\t }\r\n\t }\r\n\t return result;\r\n\t };\r\n\t SortedMapIterator.prototype.hasNext = function () {\r\n\t return this.nodeStack_.length > 0;\r\n\t };\r\n\t SortedMapIterator.prototype.peek = function () {\r\n\t if (this.nodeStack_.length === 0)\r\n\t return null;\r\n\t var node = this.nodeStack_[this.nodeStack_.length - 1];\r\n\t if (this.resultGenerator_) {\r\n\t return this.resultGenerator_(node.key, node.value);\r\n\t }\r\n\t else {\r\n\t return { key: node.key, value: node.value };\r\n\t }\r\n\t };\r\n\t return SortedMapIterator;\r\n\t}());\r\n\t/**\r\n\t * Represents a node in a Left-leaning Red-Black tree.\r\n\t */\r\n\tvar LLRBNode = /** @class */ (function () {\r\n\t /**\r\n\t * @template K, V\r\n\t * @param {!K} key Key associated with this node.\r\n\t * @param {!V} value Value associated with this node.\r\n\t * @param {?boolean} color Whether this node is red.\r\n\t * @param {?(LLRBNode|LLRBEmptyNode)=} left Left child.\r\n\t * @param {?(LLRBNode|LLRBEmptyNode)=} right Right child.\r\n\t */\r\n\t function LLRBNode(key, value, color, left, right) {\r\n\t this.key = key;\r\n\t this.value = value;\r\n\t this.color = color != null ? color : LLRBNode.RED;\r\n\t this.left =\r\n\t left != null ? left : SortedMap.EMPTY_NODE;\r\n\t this.right =\r\n\t right != null ? right : SortedMap.EMPTY_NODE;\r\n\t }\r\n\t /**\r\n\t * Returns a copy of the current node, optionally replacing pieces of it.\r\n\t *\r\n\t * @param {?K} key New key for the node, or null.\r\n\t * @param {?V} value New value for the node, or null.\r\n\t * @param {?boolean} color New color for the node, or null.\r\n\t * @param {?LLRBNode|LLRBEmptyNode} left New left child for the node, or null.\r\n\t * @param {?LLRBNode|LLRBEmptyNode} right New right child for the node, or null.\r\n\t * @return {!LLRBNode} The node copy.\r\n\t */\r\n\t LLRBNode.prototype.copy = function (key, value, color, left, right) {\r\n\t return new LLRBNode(key != null ? key : this.key, value != null ? value : this.value, color != null ? color : this.color, left != null ? left : this.left, right != null ? right : this.right);\r\n\t };\r\n\t /**\r\n\t * @return {number} The total number of nodes in the tree.\r\n\t */\r\n\t LLRBNode.prototype.count = function () {\r\n\t return this.left.count() + 1 + this.right.count();\r\n\t };\r\n\t /**\r\n\t * @return {boolean} True if the tree is empty.\r\n\t */\r\n\t LLRBNode.prototype.isEmpty = function () {\r\n\t return false;\r\n\t };\r\n\t /**\r\n\t * Traverses the tree in key order and calls the specified action function\r\n\t * for each node.\r\n\t *\r\n\t * @param {function(!K, !V):*} action Callback function to be called for each\r\n\t * node. If it returns true, traversal is aborted.\r\n\t * @return {*} The first truthy value returned by action, or the last falsey\r\n\t * value returned by action\r\n\t */\r\n\t LLRBNode.prototype.inorderTraversal = function (action) {\r\n\t return (this.left.inorderTraversal(action) ||\r\n\t action(this.key, this.value) ||\r\n\t this.right.inorderTraversal(action));\r\n\t };\r\n\t /**\r\n\t * Traverses the tree in reverse key order and calls the specified action function\r\n\t * for each node.\r\n\t *\r\n\t * @param {function(!Object, !Object)} action Callback function to be called for each\r\n\t * node. If it returns true, traversal is aborted.\r\n\t * @return {*} True if traversal was aborted.\r\n\t */\r\n\t LLRBNode.prototype.reverseTraversal = function (action) {\r\n\t return (this.right.reverseTraversal(action) ||\r\n\t action(this.key, this.value) ||\r\n\t this.left.reverseTraversal(action));\r\n\t };\r\n\t /**\r\n\t * @return {!Object} The minimum node in the tree.\r\n\t * @private\r\n\t */\r\n\t LLRBNode.prototype.min_ = function () {\r\n\t if (this.left.isEmpty()) {\r\n\t return this;\r\n\t }\r\n\t else {\r\n\t return this.left.min_();\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @return {!K} The maximum key in the tree.\r\n\t */\r\n\t LLRBNode.prototype.minKey = function () {\r\n\t return this.min_().key;\r\n\t };\r\n\t /**\r\n\t * @return {!K} The maximum key in the tree.\r\n\t */\r\n\t LLRBNode.prototype.maxKey = function () {\r\n\t if (this.right.isEmpty()) {\r\n\t return this.key;\r\n\t }\r\n\t else {\r\n\t return this.right.maxKey();\r\n\t }\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {!Object} key Key to insert.\r\n\t * @param {!Object} value Value to insert.\r\n\t * @param {Comparator} comparator Comparator.\r\n\t * @return {!LLRBNode} New tree, with the key/value added.\r\n\t */\r\n\t LLRBNode.prototype.insert = function (key, value, comparator) {\r\n\t var cmp, n;\r\n\t n = this;\r\n\t cmp = comparator(key, n.key);\r\n\t if (cmp < 0) {\r\n\t n = n.copy(null, null, null, n.left.insert(key, value, comparator), null);\r\n\t }\r\n\t else if (cmp === 0) {\r\n\t n = n.copy(null, value, null, null, null);\r\n\t }\r\n\t else {\r\n\t n = n.copy(null, null, null, null, n.right.insert(key, value, comparator));\r\n\t }\r\n\t return n.fixUp_();\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t * @return {!LLRBNode|LLRBEmptyNode} New tree, with the minimum key removed.\r\n\t */\r\n\t LLRBNode.prototype.removeMin_ = function () {\r\n\t if (this.left.isEmpty()) {\r\n\t return SortedMap.EMPTY_NODE;\r\n\t }\r\n\t var n = this;\r\n\t if (!n.left.isRed_() && !n.left.left.isRed_())\r\n\t n = n.moveRedLeft_();\r\n\t n = n.copy(null, null, null, n.left.removeMin_(), null);\r\n\t return n.fixUp_();\r\n\t };\r\n\t /**\r\n\t * @param {!Object} key The key of the item to remove.\r\n\t * @param {Comparator} comparator Comparator.\r\n\t * @return {!LLRBNode|LLRBEmptyNode} New tree, with the specified item removed.\r\n\t */\r\n\t LLRBNode.prototype.remove = function (key, comparator) {\r\n\t var n, smallest;\r\n\t n = this;\r\n\t if (comparator(key, n.key) < 0) {\r\n\t if (!n.left.isEmpty() && !n.left.isRed_() && !n.left.left.isRed_()) {\r\n\t n = n.moveRedLeft_();\r\n\t }\r\n\t n = n.copy(null, null, null, n.left.remove(key, comparator), null);\r\n\t }\r\n\t else {\r\n\t if (n.left.isRed_())\r\n\t n = n.rotateRight_();\r\n\t if (!n.right.isEmpty() && !n.right.isRed_() && !n.right.left.isRed_()) {\r\n\t n = n.moveRedRight_();\r\n\t }\r\n\t if (comparator(key, n.key) === 0) {\r\n\t if (n.right.isEmpty()) {\r\n\t return SortedMap.EMPTY_NODE;\r\n\t }\r\n\t else {\r\n\t smallest = n.right.min_();\r\n\t n = n.copy(smallest.key, smallest.value, null, null, n.right.removeMin_());\r\n\t }\r\n\t }\r\n\t n = n.copy(null, null, null, null, n.right.remove(key, comparator));\r\n\t }\r\n\t return n.fixUp_();\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t * @return {boolean} Whether this is a RED node.\r\n\t */\r\n\t LLRBNode.prototype.isRed_ = function () {\r\n\t return this.color;\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t * @return {!LLRBNode} New tree after performing any needed rotations.\r\n\t */\r\n\t LLRBNode.prototype.fixUp_ = function () {\r\n\t var n = this;\r\n\t if (n.right.isRed_() && !n.left.isRed_())\r\n\t n = n.rotateLeft_();\r\n\t if (n.left.isRed_() && n.left.left.isRed_())\r\n\t n = n.rotateRight_();\r\n\t if (n.left.isRed_() && n.right.isRed_())\r\n\t n = n.colorFlip_();\r\n\t return n;\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t * @return {!LLRBNode} New tree, after moveRedLeft.\r\n\t */\r\n\t LLRBNode.prototype.moveRedLeft_ = function () {\r\n\t var n = this.colorFlip_();\r\n\t if (n.right.left.isRed_()) {\r\n\t n = n.copy(null, null, null, null, n.right.rotateRight_());\r\n\t n = n.rotateLeft_();\r\n\t n = n.colorFlip_();\r\n\t }\r\n\t return n;\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t * @return {!LLRBNode} New tree, after moveRedRight.\r\n\t */\r\n\t LLRBNode.prototype.moveRedRight_ = function () {\r\n\t var n = this.colorFlip_();\r\n\t if (n.left.left.isRed_()) {\r\n\t n = n.rotateRight_();\r\n\t n = n.colorFlip_();\r\n\t }\r\n\t return n;\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t * @return {!LLRBNode} New tree, after rotateLeft.\r\n\t */\r\n\t LLRBNode.prototype.rotateLeft_ = function () {\r\n\t var nl = this.copy(null, null, LLRBNode.RED, null, this.right.left);\r\n\t return this.right.copy(null, null, this.color, nl, null);\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t * @return {!LLRBNode} New tree, after rotateRight.\r\n\t */\r\n\t LLRBNode.prototype.rotateRight_ = function () {\r\n\t var nr = this.copy(null, null, LLRBNode.RED, this.left.right, null);\r\n\t return this.left.copy(null, null, this.color, null, nr);\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t * @return {!LLRBNode} New tree, after colorFlip.\r\n\t */\r\n\t LLRBNode.prototype.colorFlip_ = function () {\r\n\t var left = this.left.copy(null, null, !this.left.color, null, null);\r\n\t var right = this.right.copy(null, null, !this.right.color, null, null);\r\n\t return this.copy(null, null, !this.color, left, right);\r\n\t };\r\n\t /**\r\n\t * For testing.\r\n\t *\r\n\t * @private\r\n\t * @return {boolean} True if all is well.\r\n\t */\r\n\t LLRBNode.prototype.checkMaxDepth_ = function () {\r\n\t var blackDepth = this.check_();\r\n\t return Math.pow(2.0, blackDepth) <= this.count() + 1;\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t * @return {number} Not sure what this returns exactly. :-).\r\n\t */\r\n\t LLRBNode.prototype.check_ = function () {\r\n\t var blackDepth;\r\n\t if (this.isRed_() && this.left.isRed_()) {\r\n\t throw new Error('Red node has red child(' + this.key + ',' + this.value + ')');\r\n\t }\r\n\t if (this.right.isRed_()) {\r\n\t throw new Error('Right child of (' + this.key + ',' + this.value + ') is red');\r\n\t }\r\n\t blackDepth = this.left.check_();\r\n\t if (blackDepth !== this.right.check_()) {\r\n\t throw new Error('Black depths differ');\r\n\t }\r\n\t else {\r\n\t return blackDepth + (this.isRed_() ? 0 : 1);\r\n\t }\r\n\t };\r\n\t LLRBNode.RED = true;\r\n\t LLRBNode.BLACK = false;\r\n\t return LLRBNode;\r\n\t}());\r\n\t/**\r\n\t * Represents an empty node (a leaf node in the Red-Black Tree).\r\n\t */\r\n\tvar LLRBEmptyNode = /** @class */ (function () {\r\n\t function LLRBEmptyNode() {\r\n\t }\r\n\t /**\r\n\t * Returns a copy of the current node.\r\n\t *\r\n\t * @return {!LLRBEmptyNode} The node copy.\r\n\t */\r\n\t LLRBEmptyNode.prototype.copy = function (key, value, color, left, right) {\r\n\t return this;\r\n\t };\r\n\t /**\r\n\t * Returns a copy of the tree, with the specified key/value added.\r\n\t *\r\n\t * @param {!K} key Key to be added.\r\n\t * @param {!V} value Value to be added.\r\n\t * @param {Comparator} comparator Comparator.\r\n\t * @return {!LLRBNode} New tree, with item added.\r\n\t */\r\n\t LLRBEmptyNode.prototype.insert = function (key, value, comparator) {\r\n\t return new LLRBNode(key, value, null);\r\n\t };\r\n\t /**\r\n\t * Returns a copy of the tree, with the specified key removed.\r\n\t *\r\n\t * @param {!K} key The key to remove.\r\n\t * @param {Comparator} comparator Comparator.\r\n\t * @return {!LLRBEmptyNode} New tree, with item removed.\r\n\t */\r\n\t LLRBEmptyNode.prototype.remove = function (key, comparator) {\r\n\t return this;\r\n\t };\r\n\t /**\r\n\t * @return {number} The total number of nodes in the tree.\r\n\t */\r\n\t LLRBEmptyNode.prototype.count = function () {\r\n\t return 0;\r\n\t };\r\n\t /**\r\n\t * @return {boolean} True if the tree is empty.\r\n\t */\r\n\t LLRBEmptyNode.prototype.isEmpty = function () {\r\n\t return true;\r\n\t };\r\n\t /**\r\n\t * Traverses the tree in key order and calls the specified action function\r\n\t * for each node.\r\n\t *\r\n\t * @param {function(!K, !V):*} action Callback function to be called for each\r\n\t * node. If it returns true, traversal is aborted.\r\n\t * @return {boolean} True if traversal was aborted.\r\n\t */\r\n\t LLRBEmptyNode.prototype.inorderTraversal = function (action) {\r\n\t return false;\r\n\t };\r\n\t /**\r\n\t * Traverses the tree in reverse key order and calls the specified action function\r\n\t * for each node.\r\n\t *\r\n\t * @param {function(!K, !V)} action Callback function to be called for each\r\n\t * node. If it returns true, traversal is aborted.\r\n\t * @return {boolean} True if traversal was aborted.\r\n\t */\r\n\t LLRBEmptyNode.prototype.reverseTraversal = function (action) {\r\n\t return false;\r\n\t };\r\n\t /**\r\n\t * @return {null}\r\n\t */\r\n\t LLRBEmptyNode.prototype.minKey = function () {\r\n\t return null;\r\n\t };\r\n\t /**\r\n\t * @return {null}\r\n\t */\r\n\t LLRBEmptyNode.prototype.maxKey = function () {\r\n\t return null;\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t * @return {number} Not sure what this returns exactly. :-).\r\n\t */\r\n\t LLRBEmptyNode.prototype.check_ = function () {\r\n\t return 0;\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t * @return {boolean} Whether this node is red.\r\n\t */\r\n\t LLRBEmptyNode.prototype.isRed_ = function () {\r\n\t return false;\r\n\t };\r\n\t return LLRBEmptyNode;\r\n\t}());\r\n\t/**\r\n\t * An immutable sorted map implementation, based on a Left-leaning Red-Black\r\n\t * tree.\r\n\t */\r\n\tvar SortedMap = /** @class */ (function () {\r\n\t /**\r\n\t * @template K, V\r\n\t * @param {function(K, K):number} comparator_ Key comparator.\r\n\t * @param {LLRBNode=} root_ (Optional) Root node for the map.\r\n\t */\r\n\t function SortedMap(comparator_, root_) {\r\n\t if (root_ === void 0) { root_ = SortedMap.EMPTY_NODE; }\r\n\t this.comparator_ = comparator_;\r\n\t this.root_ = root_;\r\n\t }\r\n\t /**\r\n\t * Returns a copy of the map, with the specified key/value added or replaced.\r\n\t * (TODO: We should perhaps rename this method to 'put')\r\n\t *\r\n\t * @param {!K} key Key to be added.\r\n\t * @param {!V} value Value to be added.\r\n\t * @return {!SortedMap.} New map, with item added.\r\n\t */\r\n\t SortedMap.prototype.insert = function (key, value) {\r\n\t return new SortedMap(this.comparator_, this.root_\r\n\t .insert(key, value, this.comparator_)\r\n\t .copy(null, null, LLRBNode.BLACK, null, null));\r\n\t };\r\n\t /**\r\n\t * Returns a copy of the map, with the specified key removed.\r\n\t *\r\n\t * @param {!K} key The key to remove.\r\n\t * @return {!SortedMap.} New map, with item removed.\r\n\t */\r\n\t SortedMap.prototype.remove = function (key) {\r\n\t return new SortedMap(this.comparator_, this.root_\r\n\t .remove(key, this.comparator_)\r\n\t .copy(null, null, LLRBNode.BLACK, null, null));\r\n\t };\r\n\t /**\r\n\t * Returns the value of the node with the given key, or null.\r\n\t *\r\n\t * @param {!K} key The key to look up.\r\n\t * @return {?V} The value of the node with the given key, or null if the\r\n\t * key doesn't exist.\r\n\t */\r\n\t SortedMap.prototype.get = function (key) {\r\n\t var cmp;\r\n\t var node = this.root_;\r\n\t while (!node.isEmpty()) {\r\n\t cmp = this.comparator_(key, node.key);\r\n\t if (cmp === 0) {\r\n\t return node.value;\r\n\t }\r\n\t else if (cmp < 0) {\r\n\t node = node.left;\r\n\t }\r\n\t else if (cmp > 0) {\r\n\t node = node.right;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\t /**\r\n\t * Returns the key of the item *before* the specified key, or null if key is the first item.\r\n\t * @param {K} key The key to find the predecessor of\r\n\t * @return {?K} The predecessor key.\r\n\t */\r\n\t SortedMap.prototype.getPredecessorKey = function (key) {\r\n\t var cmp, node = this.root_, rightParent = null;\r\n\t while (!node.isEmpty()) {\r\n\t cmp = this.comparator_(key, node.key);\r\n\t if (cmp === 0) {\r\n\t if (!node.left.isEmpty()) {\r\n\t node = node.left;\r\n\t while (!node.right.isEmpty())\r\n\t node = node.right;\r\n\t return node.key;\r\n\t }\r\n\t else if (rightParent) {\r\n\t return rightParent.key;\r\n\t }\r\n\t else {\r\n\t return null; // first item.\r\n\t }\r\n\t }\r\n\t else if (cmp < 0) {\r\n\t node = node.left;\r\n\t }\r\n\t else if (cmp > 0) {\r\n\t rightParent = node;\r\n\t node = node.right;\r\n\t }\r\n\t }\r\n\t throw new Error('Attempted to find predecessor key for a nonexistent key. What gives?');\r\n\t };\r\n\t /**\r\n\t * @return {boolean} True if the map is empty.\r\n\t */\r\n\t SortedMap.prototype.isEmpty = function () {\r\n\t return this.root_.isEmpty();\r\n\t };\r\n\t /**\r\n\t * @return {number} The total number of nodes in the map.\r\n\t */\r\n\t SortedMap.prototype.count = function () {\r\n\t return this.root_.count();\r\n\t };\r\n\t /**\r\n\t * @return {?K} The minimum key in the map.\r\n\t */\r\n\t SortedMap.prototype.minKey = function () {\r\n\t return this.root_.minKey();\r\n\t };\r\n\t /**\r\n\t * @return {?K} The maximum key in the map.\r\n\t */\r\n\t SortedMap.prototype.maxKey = function () {\r\n\t return this.root_.maxKey();\r\n\t };\r\n\t /**\r\n\t * Traverses the map in key order and calls the specified action function\r\n\t * for each key/value pair.\r\n\t *\r\n\t * @param {function(!K, !V):*} action Callback function to be called\r\n\t * for each key/value pair. If action returns true, traversal is aborted.\r\n\t * @return {*} The first truthy value returned by action, or the last falsey\r\n\t * value returned by action\r\n\t */\r\n\t SortedMap.prototype.inorderTraversal = function (action) {\r\n\t return this.root_.inorderTraversal(action);\r\n\t };\r\n\t /**\r\n\t * Traverses the map in reverse key order and calls the specified action function\r\n\t * for each key/value pair.\r\n\t *\r\n\t * @param {function(!Object, !Object)} action Callback function to be called\r\n\t * for each key/value pair. If action returns true, traversal is aborted.\r\n\t * @return {*} True if the traversal was aborted.\r\n\t */\r\n\t SortedMap.prototype.reverseTraversal = function (action) {\r\n\t return this.root_.reverseTraversal(action);\r\n\t };\r\n\t /**\r\n\t * Returns an iterator over the SortedMap.\r\n\t * @template T\r\n\t * @param {(function(K, V):T)=} resultGenerator\r\n\t * @return {SortedMapIterator.} The iterator.\r\n\t */\r\n\t SortedMap.prototype.getIterator = function (resultGenerator) {\r\n\t return new SortedMapIterator(this.root_, null, this.comparator_, false, resultGenerator);\r\n\t };\r\n\t SortedMap.prototype.getIteratorFrom = function (key, resultGenerator) {\r\n\t return new SortedMapIterator(this.root_, key, this.comparator_, false, resultGenerator);\r\n\t };\r\n\t SortedMap.prototype.getReverseIteratorFrom = function (key, resultGenerator) {\r\n\t return new SortedMapIterator(this.root_, key, this.comparator_, true, resultGenerator);\r\n\t };\r\n\t SortedMap.prototype.getReverseIterator = function (resultGenerator) {\r\n\t return new SortedMapIterator(this.root_, null, this.comparator_, true, resultGenerator);\r\n\t };\r\n\t /**\r\n\t * Always use the same empty node, to reduce memory.\r\n\t * @const\r\n\t */\r\n\t SortedMap.EMPTY_NODE = new LLRBEmptyNode();\r\n\t return SortedMap;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar LOG_2 = Math.log(2);\r\n\t/**\r\n\t * @constructor\r\n\t */\r\n\tvar Base12Num = /** @class */ (function () {\r\n\t /**\r\n\t * @param {number} length\r\n\t */\r\n\t function Base12Num(length) {\r\n\t var logBase2 = function (num) {\r\n\t return parseInt((Math.log(num) / LOG_2), 10);\r\n\t };\r\n\t var bitMask = function (bits) { return parseInt(Array(bits + 1).join('1'), 2); };\r\n\t this.count = logBase2(length + 1);\r\n\t this.current_ = this.count - 1;\r\n\t var mask = bitMask(this.count);\r\n\t this.bits_ = (length + 1) & mask;\r\n\t }\r\n\t /**\r\n\t * @return {boolean}\r\n\t */\r\n\t Base12Num.prototype.nextBitIsOne = function () {\r\n\t //noinspection JSBitwiseOperatorUsage\r\n\t var result = !(this.bits_ & (0x1 << this.current_));\r\n\t this.current_--;\r\n\t return result;\r\n\t };\r\n\t return Base12Num;\r\n\t}());\r\n\t/**\r\n\t * Takes a list of child nodes and constructs a SortedSet using the given comparison\r\n\t * function\r\n\t *\r\n\t * Uses the algorithm described in the paper linked here:\r\n\t * http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1458\r\n\t *\r\n\t * @template K, V\r\n\t * @param {Array.} childList Unsorted list of children\r\n\t * @param {function(!NamedNode, !NamedNode):number} cmp The comparison method to be used\r\n\t * @param {(function(NamedNode):K)=} keyFn An optional function to extract K from a node wrapper, if K's\r\n\t * type is not NamedNode\r\n\t * @param {(function(K, K):number)=} mapSortFn An optional override for comparator used by the generated sorted map\r\n\t * @return {SortedMap.}\r\n\t */\r\n\tvar buildChildSet = function (childList, cmp, keyFn, mapSortFn) {\r\n\t childList.sort(cmp);\r\n\t var buildBalancedTree = function (low, high) {\r\n\t var length = high - low;\r\n\t var namedNode;\r\n\t var key;\r\n\t if (length == 0) {\r\n\t return null;\r\n\t }\r\n\t else if (length == 1) {\r\n\t namedNode = childList[low];\r\n\t key = keyFn ? keyFn(namedNode) : namedNode;\r\n\t return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, null, null);\r\n\t }\r\n\t else {\r\n\t var middle = parseInt((length / 2), 10) + low;\r\n\t var left = buildBalancedTree(low, middle);\r\n\t var right = buildBalancedTree(middle + 1, high);\r\n\t namedNode = childList[middle];\r\n\t key = keyFn ? keyFn(namedNode) : namedNode;\r\n\t return new LLRBNode(key, namedNode.node, LLRBNode.BLACK, left, right);\r\n\t }\r\n\t };\r\n\t var buildFrom12Array = function (base12) {\r\n\t var node = null;\r\n\t var root = null;\r\n\t var index = childList.length;\r\n\t var buildPennant = function (chunkSize, color) {\r\n\t var low = index - chunkSize;\r\n\t var high = index;\r\n\t index -= chunkSize;\r\n\t var childTree = buildBalancedTree(low + 1, high);\r\n\t var namedNode = childList[low];\r\n\t var key = keyFn ? keyFn(namedNode) : namedNode;\r\n\t attachPennant(new LLRBNode(key, namedNode.node, color, null, childTree));\r\n\t };\r\n\t var attachPennant = function (pennant) {\r\n\t if (node) {\r\n\t node.left = pennant;\r\n\t node = pennant;\r\n\t }\r\n\t else {\r\n\t root = pennant;\r\n\t node = pennant;\r\n\t }\r\n\t };\r\n\t for (var i = 0; i < base12.count; ++i) {\r\n\t var isOne = base12.nextBitIsOne();\r\n\t // The number of nodes taken in each slice is 2^(arr.length - (i + 1))\r\n\t var chunkSize = Math.pow(2, base12.count - (i + 1));\r\n\t if (isOne) {\r\n\t buildPennant(chunkSize, LLRBNode.BLACK);\r\n\t }\r\n\t else {\r\n\t // current == 2\r\n\t buildPennant(chunkSize, LLRBNode.BLACK);\r\n\t buildPennant(chunkSize, LLRBNode.RED);\r\n\t }\r\n\t }\r\n\t return root;\r\n\t };\r\n\t var base12 = new Base12Num(childList.length);\r\n\t var root = buildFrom12Array(base12);\r\n\t return new SortedMap(mapSortFn || cmp, root);\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar _defaultIndexMap;\r\n\tvar fallbackObject = {};\r\n\t/**\r\n\t *\r\n\t * @param {Object.>} indexes\r\n\t * @param {Object.} indexSet\r\n\t * @constructor\r\n\t */\r\n\tvar IndexMap = /** @class */ (function () {\r\n\t function IndexMap(indexes_, indexSet_) {\r\n\t this.indexes_ = indexes_;\r\n\t this.indexSet_ = indexSet_;\r\n\t }\r\n\t Object.defineProperty(IndexMap, \"Default\", {\r\n\t /**\r\n\t * The default IndexMap for nodes without a priority\r\n\t * @type {!IndexMap}\r\n\t * @const\r\n\t */\r\n\t get: function () {\r\n\t util.assert(fallbackObject && PRIORITY_INDEX, 'ChildrenNode.ts has not been loaded');\r\n\t _defaultIndexMap =\r\n\t _defaultIndexMap ||\r\n\t new IndexMap({ '.priority': fallbackObject }, { '.priority': PRIORITY_INDEX });\r\n\t return _defaultIndexMap;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t /**\r\n\t *\r\n\t * @param {!string} indexKey\r\n\t * @return {?SortedMap.}\r\n\t */\r\n\t IndexMap.prototype.get = function (indexKey) {\r\n\t var sortedMap = util.safeGet(this.indexes_, indexKey);\r\n\t if (!sortedMap)\r\n\t throw new Error('No index defined for ' + indexKey);\r\n\t if (sortedMap === fallbackObject) {\r\n\t // The index exists, but it falls back to just name comparison. Return null so that the calling code uses the\r\n\t // regular child map\r\n\t return null;\r\n\t }\r\n\t else {\r\n\t return sortedMap;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!Index} indexDefinition\r\n\t * @return {boolean}\r\n\t */\r\n\t IndexMap.prototype.hasIndex = function (indexDefinition) {\r\n\t return util.contains(this.indexSet_, indexDefinition.toString());\r\n\t };\r\n\t /**\r\n\t * @param {!Index} indexDefinition\r\n\t * @param {!SortedMap.} existingChildren\r\n\t * @return {!IndexMap}\r\n\t */\r\n\t IndexMap.prototype.addIndex = function (indexDefinition, existingChildren) {\r\n\t util.assert(indexDefinition !== KEY_INDEX, \"KeyIndex always exists and isn't meant to be added to the IndexMap.\");\r\n\t var childList = [];\r\n\t var sawIndexedValue = false;\r\n\t var iter = existingChildren.getIterator(NamedNode.Wrap);\r\n\t var next = iter.getNext();\r\n\t while (next) {\r\n\t sawIndexedValue =\r\n\t sawIndexedValue || indexDefinition.isDefinedOn(next.node);\r\n\t childList.push(next);\r\n\t next = iter.getNext();\r\n\t }\r\n\t var newIndex;\r\n\t if (sawIndexedValue) {\r\n\t newIndex = buildChildSet(childList, indexDefinition.getCompare());\r\n\t }\r\n\t else {\r\n\t newIndex = fallbackObject;\r\n\t }\r\n\t var indexName = indexDefinition.toString();\r\n\t var newIndexSet = util.clone(this.indexSet_);\r\n\t newIndexSet[indexName] = indexDefinition;\r\n\t var newIndexes = util.clone(this.indexes_);\r\n\t newIndexes[indexName] = newIndex;\r\n\t return new IndexMap(newIndexes, newIndexSet);\r\n\t };\r\n\t /**\r\n\t * Ensure that this node is properly tracked in any indexes that we're maintaining\r\n\t * @param {!NamedNode} namedNode\r\n\t * @param {!SortedMap.} existingChildren\r\n\t * @return {!IndexMap}\r\n\t */\r\n\t IndexMap.prototype.addToIndexes = function (namedNode, existingChildren) {\r\n\t var _this = this;\r\n\t var newIndexes = util.map(this.indexes_, function (indexedChildren, indexName) {\r\n\t var index = util.safeGet(_this.indexSet_, indexName);\r\n\t util.assert(index, 'Missing index implementation for ' + indexName);\r\n\t if (indexedChildren === fallbackObject) {\r\n\t // Check to see if we need to index everything\r\n\t if (index.isDefinedOn(namedNode.node)) {\r\n\t // We need to build this index\r\n\t var childList = [];\r\n\t var iter = existingChildren.getIterator(NamedNode.Wrap);\r\n\t var next = iter.getNext();\r\n\t while (next) {\r\n\t if (next.name != namedNode.name) {\r\n\t childList.push(next);\r\n\t }\r\n\t next = iter.getNext();\r\n\t }\r\n\t childList.push(namedNode);\r\n\t return buildChildSet(childList, index.getCompare());\r\n\t }\r\n\t else {\r\n\t // No change, this remains a fallback\r\n\t return fallbackObject;\r\n\t }\r\n\t }\r\n\t else {\r\n\t var existingSnap = existingChildren.get(namedNode.name);\r\n\t var newChildren = indexedChildren;\r\n\t if (existingSnap) {\r\n\t newChildren = newChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n\t }\r\n\t return newChildren.insert(namedNode, namedNode.node);\r\n\t }\r\n\t });\r\n\t return new IndexMap(newIndexes, this.indexSet_);\r\n\t };\r\n\t /**\r\n\t * Create a new IndexMap instance with the given value removed\r\n\t * @param {!NamedNode} namedNode\r\n\t * @param {!SortedMap.} existingChildren\r\n\t * @return {!IndexMap}\r\n\t */\r\n\t IndexMap.prototype.removeFromIndexes = function (namedNode, existingChildren) {\r\n\t var newIndexes = util.map(this.indexes_, function (indexedChildren) {\r\n\t if (indexedChildren === fallbackObject) {\r\n\t // This is the fallback. Just return it, nothing to do in this case\r\n\t return indexedChildren;\r\n\t }\r\n\t else {\r\n\t var existingSnap = existingChildren.get(namedNode.name);\r\n\t if (existingSnap) {\r\n\t return indexedChildren.remove(new NamedNode(namedNode.name, existingSnap));\r\n\t }\r\n\t else {\r\n\t // No record of this child\r\n\t return indexedChildren;\r\n\t }\r\n\t }\r\n\t });\r\n\t return new IndexMap(newIndexes, this.indexSet_);\r\n\t };\r\n\t return IndexMap;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tfunction NAME_ONLY_COMPARATOR(left, right) {\r\n\t return nameCompare(left.name, right.name);\r\n\t}\r\n\tfunction NAME_COMPARATOR(left, right) {\r\n\t return nameCompare(left, right);\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t// TODO: For memory savings, don't store priorityNode_ if it's empty.\r\n\tvar EMPTY_NODE;\r\n\t/**\r\n\t * ChildrenNode is a class for storing internal nodes in a DataSnapshot\r\n\t * (i.e. nodes with children). It implements Node and stores the\r\n\t * list of children in the children property, sorted by child name.\r\n\t *\r\n\t * @constructor\r\n\t * @implements {Node}\r\n\t */\r\n\tvar ChildrenNode = /** @class */ (function () {\r\n\t /**\r\n\t *\r\n\t * @param {!SortedMap.} children_ List of children\r\n\t * of this node..\r\n\t * @param {?Node} priorityNode_ The priority of this node (as a snapshot node).\r\n\t * @param {!IndexMap} indexMap_\r\n\t */\r\n\t function ChildrenNode(children_, priorityNode_, indexMap_) {\r\n\t this.children_ = children_;\r\n\t this.priorityNode_ = priorityNode_;\r\n\t this.indexMap_ = indexMap_;\r\n\t this.lazyHash_ = null;\r\n\t /**\r\n\t * Note: The only reason we allow null priority is for EMPTY_NODE, since we can't use\r\n\t * EMPTY_NODE as the priority of EMPTY_NODE. We might want to consider making EMPTY_NODE its own\r\n\t * class instead of an empty ChildrenNode.\r\n\t */\r\n\t if (this.priorityNode_) {\r\n\t validatePriorityNode(this.priorityNode_);\r\n\t }\r\n\t if (this.children_.isEmpty()) {\r\n\t util.assert(!this.priorityNode_ || this.priorityNode_.isEmpty(), 'An empty node cannot have a priority');\r\n\t }\r\n\t }\r\n\t Object.defineProperty(ChildrenNode, \"EMPTY_NODE\", {\r\n\t get: function () {\r\n\t return (EMPTY_NODE ||\r\n\t (EMPTY_NODE = new ChildrenNode(new SortedMap(NAME_COMPARATOR), null, IndexMap.Default)));\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t /** @inheritDoc */\r\n\t ChildrenNode.prototype.isLeafNode = function () {\r\n\t return false;\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ChildrenNode.prototype.getPriority = function () {\r\n\t return this.priorityNode_ || EMPTY_NODE;\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ChildrenNode.prototype.updatePriority = function (newPriorityNode) {\r\n\t if (this.children_.isEmpty()) {\r\n\t // Don't allow priorities on empty nodes\r\n\t return this;\r\n\t }\r\n\t else {\r\n\t return new ChildrenNode(this.children_, newPriorityNode, this.indexMap_);\r\n\t }\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ChildrenNode.prototype.getImmediateChild = function (childName) {\r\n\t // Hack to treat priority as a regular child\r\n\t if (childName === '.priority') {\r\n\t return this.getPriority();\r\n\t }\r\n\t else {\r\n\t var child = this.children_.get(childName);\r\n\t return child === null ? EMPTY_NODE : child;\r\n\t }\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ChildrenNode.prototype.getChild = function (path) {\r\n\t var front = path.getFront();\r\n\t if (front === null)\r\n\t return this;\r\n\t return this.getImmediateChild(front).getChild(path.popFront());\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ChildrenNode.prototype.hasChild = function (childName) {\r\n\t return this.children_.get(childName) !== null;\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ChildrenNode.prototype.updateImmediateChild = function (childName, newChildNode) {\r\n\t util.assert(newChildNode, 'We should always be passing snapshot nodes');\r\n\t if (childName === '.priority') {\r\n\t return this.updatePriority(newChildNode);\r\n\t }\r\n\t else {\r\n\t var namedNode = new NamedNode(childName, newChildNode);\r\n\t var newChildren = void 0, newIndexMap = void 0, newPriority = void 0;\r\n\t if (newChildNode.isEmpty()) {\r\n\t newChildren = this.children_.remove(childName);\r\n\t newIndexMap = this.indexMap_.removeFromIndexes(namedNode, this.children_);\r\n\t }\r\n\t else {\r\n\t newChildren = this.children_.insert(childName, newChildNode);\r\n\t newIndexMap = this.indexMap_.addToIndexes(namedNode, this.children_);\r\n\t }\r\n\t newPriority = newChildren.isEmpty() ? EMPTY_NODE : this.priorityNode_;\r\n\t return new ChildrenNode(newChildren, newPriority, newIndexMap);\r\n\t }\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ChildrenNode.prototype.updateChild = function (path, newChildNode) {\r\n\t var front = path.getFront();\r\n\t if (front === null) {\r\n\t return newChildNode;\r\n\t }\r\n\t else {\r\n\t util.assert(path.getFront() !== '.priority' || path.getLength() === 1, '.priority must be the last token in a path');\r\n\t var newImmediateChild = this.getImmediateChild(front).updateChild(path.popFront(), newChildNode);\r\n\t return this.updateImmediateChild(front, newImmediateChild);\r\n\t }\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ChildrenNode.prototype.isEmpty = function () {\r\n\t return this.children_.isEmpty();\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ChildrenNode.prototype.numChildren = function () {\r\n\t return this.children_.count();\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ChildrenNode.prototype.val = function (exportFormat) {\r\n\t if (this.isEmpty())\r\n\t return null;\r\n\t var obj = {};\r\n\t var numKeys = 0, maxKey = 0, allIntegerKeys = true;\r\n\t this.forEachChild(PRIORITY_INDEX, function (key, childNode) {\r\n\t obj[key] = childNode.val(exportFormat);\r\n\t numKeys++;\r\n\t if (allIntegerKeys && ChildrenNode.INTEGER_REGEXP_.test(key)) {\r\n\t maxKey = Math.max(maxKey, Number(key));\r\n\t }\r\n\t else {\r\n\t allIntegerKeys = false;\r\n\t }\r\n\t });\r\n\t if (!exportFormat && allIntegerKeys && maxKey < 2 * numKeys) {\r\n\t // convert to array.\r\n\t var array = [];\r\n\t for (var key in obj)\r\n\t array[key] = obj[key];\r\n\t return array;\r\n\t }\r\n\t else {\r\n\t if (exportFormat && !this.getPriority().isEmpty()) {\r\n\t obj['.priority'] = this.getPriority().val();\r\n\t }\r\n\t return obj;\r\n\t }\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ChildrenNode.prototype.hash = function () {\r\n\t if (this.lazyHash_ === null) {\r\n\t var toHash_1 = '';\r\n\t if (!this.getPriority().isEmpty())\r\n\t toHash_1 +=\r\n\t 'priority:' +\r\n\t priorityHashText(this.getPriority().val()) +\r\n\t ':';\r\n\t this.forEachChild(PRIORITY_INDEX, function (key, childNode) {\r\n\t var childHash = childNode.hash();\r\n\t if (childHash !== '')\r\n\t toHash_1 += ':' + key + ':' + childHash;\r\n\t });\r\n\t this.lazyHash_ = toHash_1 === '' ? '' : sha1(toHash_1);\r\n\t }\r\n\t return this.lazyHash_;\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ChildrenNode.prototype.getPredecessorChildName = function (childName, childNode, index) {\r\n\t var idx = this.resolveIndex_(index);\r\n\t if (idx) {\r\n\t var predecessor = idx.getPredecessorKey(new NamedNode(childName, childNode));\r\n\t return predecessor ? predecessor.name : null;\r\n\t }\r\n\t else {\r\n\t return this.children_.getPredecessorKey(childName);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!Index} indexDefinition\r\n\t * @return {?string}\r\n\t */\r\n\t ChildrenNode.prototype.getFirstChildName = function (indexDefinition) {\r\n\t var idx = this.resolveIndex_(indexDefinition);\r\n\t if (idx) {\r\n\t var minKey = idx.minKey();\r\n\t return minKey && minKey.name;\r\n\t }\r\n\t else {\r\n\t return this.children_.minKey();\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!Index} indexDefinition\r\n\t * @return {?NamedNode}\r\n\t */\r\n\t ChildrenNode.prototype.getFirstChild = function (indexDefinition) {\r\n\t var minKey = this.getFirstChildName(indexDefinition);\r\n\t if (minKey) {\r\n\t return new NamedNode(minKey, this.children_.get(minKey));\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Given an index, return the key name of the largest value we have, according to that index\r\n\t * @param {!Index} indexDefinition\r\n\t * @return {?string}\r\n\t */\r\n\t ChildrenNode.prototype.getLastChildName = function (indexDefinition) {\r\n\t var idx = this.resolveIndex_(indexDefinition);\r\n\t if (idx) {\r\n\t var maxKey = idx.maxKey();\r\n\t return maxKey && maxKey.name;\r\n\t }\r\n\t else {\r\n\t return this.children_.maxKey();\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!Index} indexDefinition\r\n\t * @return {?NamedNode}\r\n\t */\r\n\t ChildrenNode.prototype.getLastChild = function (indexDefinition) {\r\n\t var maxKey = this.getLastChildName(indexDefinition);\r\n\t if (maxKey) {\r\n\t return new NamedNode(maxKey, this.children_.get(maxKey));\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ChildrenNode.prototype.forEachChild = function (index, action) {\r\n\t var idx = this.resolveIndex_(index);\r\n\t if (idx) {\r\n\t return idx.inorderTraversal(function (wrappedNode) {\r\n\t return action(wrappedNode.name, wrappedNode.node);\r\n\t });\r\n\t }\r\n\t else {\r\n\t return this.children_.inorderTraversal(action);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!Index} indexDefinition\r\n\t * @return {SortedMapIterator}\r\n\t */\r\n\t ChildrenNode.prototype.getIterator = function (indexDefinition) {\r\n\t return this.getIteratorFrom(indexDefinition.minPost(), indexDefinition);\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {!NamedNode} startPost\r\n\t * @param {!Index} indexDefinition\r\n\t * @return {!SortedMapIterator}\r\n\t */\r\n\t ChildrenNode.prototype.getIteratorFrom = function (startPost, indexDefinition) {\r\n\t var idx = this.resolveIndex_(indexDefinition);\r\n\t if (idx) {\r\n\t return idx.getIteratorFrom(startPost, function (key) { return key; });\r\n\t }\r\n\t else {\r\n\t var iterator = this.children_.getIteratorFrom(startPost.name, NamedNode.Wrap);\r\n\t var next = iterator.peek();\r\n\t while (next != null && indexDefinition.compare(next, startPost) < 0) {\r\n\t iterator.getNext();\r\n\t next = iterator.peek();\r\n\t }\r\n\t return iterator;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!Index} indexDefinition\r\n\t * @return {!SortedMapIterator}\r\n\t */\r\n\t ChildrenNode.prototype.getReverseIterator = function (indexDefinition) {\r\n\t return this.getReverseIteratorFrom(indexDefinition.maxPost(), indexDefinition);\r\n\t };\r\n\t /**\r\n\t * @param {!NamedNode} endPost\r\n\t * @param {!Index} indexDefinition\r\n\t * @return {!SortedMapIterator}\r\n\t */\r\n\t ChildrenNode.prototype.getReverseIteratorFrom = function (endPost, indexDefinition) {\r\n\t var idx = this.resolveIndex_(indexDefinition);\r\n\t if (idx) {\r\n\t return idx.getReverseIteratorFrom(endPost, function (key) {\r\n\t return key;\r\n\t });\r\n\t }\r\n\t else {\r\n\t var iterator = this.children_.getReverseIteratorFrom(endPost.name, NamedNode.Wrap);\r\n\t var next = iterator.peek();\r\n\t while (next != null && indexDefinition.compare(next, endPost) > 0) {\r\n\t iterator.getNext();\r\n\t next = iterator.peek();\r\n\t }\r\n\t return iterator;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ChildrenNode.prototype.compareTo = function (other) {\r\n\t if (this.isEmpty()) {\r\n\t if (other.isEmpty()) {\r\n\t return 0;\r\n\t }\r\n\t else {\r\n\t return -1;\r\n\t }\r\n\t }\r\n\t else if (other.isLeafNode() || other.isEmpty()) {\r\n\t return 1;\r\n\t }\r\n\t else if (other === MAX_NODE$2) {\r\n\t return -1;\r\n\t }\r\n\t else {\r\n\t // Must be another node with children.\r\n\t return 0;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ChildrenNode.prototype.withIndex = function (indexDefinition) {\r\n\t if (indexDefinition === KEY_INDEX ||\r\n\t this.indexMap_.hasIndex(indexDefinition)) {\r\n\t return this;\r\n\t }\r\n\t else {\r\n\t var newIndexMap = this.indexMap_.addIndex(indexDefinition, this.children_);\r\n\t return new ChildrenNode(this.children_, this.priorityNode_, newIndexMap);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ChildrenNode.prototype.isIndexed = function (index) {\r\n\t return index === KEY_INDEX || this.indexMap_.hasIndex(index);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ChildrenNode.prototype.equals = function (other) {\r\n\t if (other === this) {\r\n\t return true;\r\n\t }\r\n\t else if (other.isLeafNode()) {\r\n\t return false;\r\n\t }\r\n\t else {\r\n\t var otherChildrenNode = other;\r\n\t if (!this.getPriority().equals(otherChildrenNode.getPriority())) {\r\n\t return false;\r\n\t }\r\n\t else if (this.children_.count() === otherChildrenNode.children_.count()) {\r\n\t var thisIter = this.getIterator(PRIORITY_INDEX);\r\n\t var otherIter = otherChildrenNode.getIterator(PRIORITY_INDEX);\r\n\t var thisCurrent = thisIter.getNext();\r\n\t var otherCurrent = otherIter.getNext();\r\n\t while (thisCurrent && otherCurrent) {\r\n\t if (thisCurrent.name !== otherCurrent.name ||\r\n\t !thisCurrent.node.equals(otherCurrent.node)) {\r\n\t return false;\r\n\t }\r\n\t thisCurrent = thisIter.getNext();\r\n\t otherCurrent = otherIter.getNext();\r\n\t }\r\n\t return thisCurrent === null && otherCurrent === null;\r\n\t }\r\n\t else {\r\n\t return false;\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Returns a SortedMap ordered by index, or null if the default (by-key) ordering can be used\r\n\t * instead.\r\n\t *\r\n\t * @private\r\n\t * @param {!Index} indexDefinition\r\n\t * @return {?SortedMap.}\r\n\t */\r\n\t ChildrenNode.prototype.resolveIndex_ = function (indexDefinition) {\r\n\t if (indexDefinition === KEY_INDEX) {\r\n\t return null;\r\n\t }\r\n\t else {\r\n\t return this.indexMap_.get(indexDefinition.toString());\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t * @type {RegExp}\r\n\t */\r\n\t ChildrenNode.INTEGER_REGEXP_ = /^(0|[1-9]\\d*)$/;\r\n\t return ChildrenNode;\r\n\t}());\r\n\t/**\r\n\t * @constructor\r\n\t * @extends {ChildrenNode}\r\n\t * @private\r\n\t */\r\n\tvar MaxNode = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(MaxNode, _super);\r\n\t function MaxNode() {\r\n\t return _super.call(this, new SortedMap(NAME_COMPARATOR), ChildrenNode.EMPTY_NODE, IndexMap.Default) || this;\r\n\t }\r\n\t MaxNode.prototype.compareTo = function (other) {\r\n\t if (other === this) {\r\n\t return 0;\r\n\t }\r\n\t else {\r\n\t return 1;\r\n\t }\r\n\t };\r\n\t MaxNode.prototype.equals = function (other) {\r\n\t // Not that we every compare it, but MAX_NODE is only ever equal to itself\r\n\t return other === this;\r\n\t };\r\n\t MaxNode.prototype.getPriority = function () {\r\n\t return this;\r\n\t };\r\n\t MaxNode.prototype.getImmediateChild = function (childName) {\r\n\t return ChildrenNode.EMPTY_NODE;\r\n\t };\r\n\t MaxNode.prototype.isEmpty = function () {\r\n\t return false;\r\n\t };\r\n\t return MaxNode;\r\n\t}(ChildrenNode));\r\n\t/**\r\n\t * Marker that will sort higher than any other snapshot.\r\n\t * @type {!MAX_NODE}\r\n\t * @const\r\n\t */\r\n\tvar MAX_NODE$2 = new MaxNode();\r\n\tObject.defineProperties(NamedNode, {\r\n\t MIN: {\r\n\t value: new NamedNode(MIN_NAME, ChildrenNode.EMPTY_NODE)\r\n\t },\r\n\t MAX: {\r\n\t value: new NamedNode(MAX_NAME, MAX_NODE$2)\r\n\t }\r\n\t});\r\n\t/**\r\n\t * Reference Extensions\r\n\t */\r\n\tKeyIndex.__EMPTY_NODE = ChildrenNode.EMPTY_NODE;\r\n\tLeafNode.__childrenNodeConstructor = ChildrenNode;\r\n\tsetMaxNode(MAX_NODE$2);\r\n\tsetMaxNode$1(MAX_NODE$2);\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar USE_HINZE = true;\r\n\t/**\r\n\t * Constructs a snapshot node representing the passed JSON and returns it.\r\n\t * @param {*} json JSON to create a node for.\r\n\t * @param {?string|?number=} priority Optional priority to use. This will be ignored if the\r\n\t * passed JSON contains a .priority property.\r\n\t * @return {!Node}\r\n\t */\r\n\tfunction nodeFromJSON$1(json, priority) {\r\n\t if (priority === void 0) { priority = null; }\r\n\t if (json === null) {\r\n\t return ChildrenNode.EMPTY_NODE;\r\n\t }\r\n\t if (typeof json === 'object' && '.priority' in json) {\r\n\t priority = json['.priority'];\r\n\t }\r\n\t util.assert(priority === null ||\r\n\t typeof priority === 'string' ||\r\n\t typeof priority === 'number' ||\r\n\t (typeof priority === 'object' && '.sv' in priority), 'Invalid priority type found: ' + typeof priority);\r\n\t if (typeof json === 'object' && '.value' in json && json['.value'] !== null) {\r\n\t json = json['.value'];\r\n\t }\r\n\t // Valid leaf nodes include non-objects or server-value wrapper objects\r\n\t if (typeof json !== 'object' || '.sv' in json) {\r\n\t var jsonLeaf = json;\r\n\t return new LeafNode(jsonLeaf, nodeFromJSON$1(priority));\r\n\t }\r\n\t if (!(json instanceof Array) && USE_HINZE) {\r\n\t var children_1 = [];\r\n\t var childrenHavePriority_1 = false;\r\n\t var hinzeJsonObj_1 = json;\r\n\t util.forEach(hinzeJsonObj_1, function (key, child) {\r\n\t if (typeof key !== 'string' || key.substring(0, 1) !== '.') {\r\n\t // Ignore metadata nodes\r\n\t var childNode = nodeFromJSON$1(hinzeJsonObj_1[key]);\r\n\t if (!childNode.isEmpty()) {\r\n\t childrenHavePriority_1 =\r\n\t childrenHavePriority_1 || !childNode.getPriority().isEmpty();\r\n\t children_1.push(new NamedNode(key, childNode));\r\n\t }\r\n\t }\r\n\t });\r\n\t if (children_1.length == 0) {\r\n\t return ChildrenNode.EMPTY_NODE;\r\n\t }\r\n\t var childSet = buildChildSet(children_1, NAME_ONLY_COMPARATOR, function (namedNode) { return namedNode.name; }, NAME_COMPARATOR);\r\n\t if (childrenHavePriority_1) {\r\n\t var sortedChildSet = buildChildSet(children_1, PRIORITY_INDEX.getCompare());\r\n\t return new ChildrenNode(childSet, nodeFromJSON$1(priority), new IndexMap({ '.priority': sortedChildSet }, { '.priority': PRIORITY_INDEX }));\r\n\t }\r\n\t else {\r\n\t return new ChildrenNode(childSet, nodeFromJSON$1(priority), IndexMap.Default);\r\n\t }\r\n\t }\r\n\t else {\r\n\t var node_1 = ChildrenNode.EMPTY_NODE;\r\n\t var jsonObj_1 = json;\r\n\t util.forEach(jsonObj_1, function (key, childData) {\r\n\t if (util.contains(jsonObj_1, key)) {\r\n\t if (key.substring(0, 1) !== '.') {\r\n\t // ignore metadata nodes.\r\n\t var childNode = nodeFromJSON$1(childData);\r\n\t if (childNode.isLeafNode() || !childNode.isEmpty())\r\n\t node_1 = node_1.updateImmediateChild(key, childNode);\r\n\t }\r\n\t }\r\n\t });\r\n\t return node_1.updatePriority(nodeFromJSON$1(priority));\r\n\t }\r\n\t}\r\n\tsetNodeFromJSON(nodeFromJSON$1);\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @constructor\r\n\t * @extends {Index}\r\n\t * @private\r\n\t */\r\n\tvar ValueIndex = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(ValueIndex, _super);\r\n\t function ValueIndex() {\r\n\t return _super !== null && _super.apply(this, arguments) || this;\r\n\t }\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ValueIndex.prototype.compare = function (a, b) {\r\n\t var indexCmp = a.node.compareTo(b.node);\r\n\t if (indexCmp === 0) {\r\n\t return nameCompare(a.name, b.name);\r\n\t }\r\n\t else {\r\n\t return indexCmp;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ValueIndex.prototype.isDefinedOn = function (node) {\r\n\t return true;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ValueIndex.prototype.indexedValueChanged = function (oldNode, newNode) {\r\n\t return !oldNode.equals(newNode);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ValueIndex.prototype.minPost = function () {\r\n\t return NamedNode.MIN;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ValueIndex.prototype.maxPost = function () {\r\n\t return NamedNode.MAX;\r\n\t };\r\n\t /**\r\n\t * @param {*} indexValue\r\n\t * @param {string} name\r\n\t * @return {!NamedNode}\r\n\t */\r\n\t ValueIndex.prototype.makePost = function (indexValue, name) {\r\n\t var valueNode = nodeFromJSON$1(indexValue);\r\n\t return new NamedNode(name, valueNode);\r\n\t };\r\n\t /**\r\n\t * @return {!string} String representation for inclusion in a query spec\r\n\t */\r\n\t ValueIndex.prototype.toString = function () {\r\n\t return '.value';\r\n\t };\r\n\t return ValueIndex;\r\n\t}(Index));\r\n\tvar VALUE_INDEX = new ValueIndex();\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @param {!Path} indexPath\r\n\t * @constructor\r\n\t * @extends {Index}\r\n\t */\r\n\tvar PathIndex = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(PathIndex, _super);\r\n\t function PathIndex(indexPath_) {\r\n\t var _this = _super.call(this) || this;\r\n\t _this.indexPath_ = indexPath_;\r\n\t util.assert(!indexPath_.isEmpty() && indexPath_.getFront() !== '.priority', \"Can't create PathIndex with empty path or .priority key\");\r\n\t return _this;\r\n\t }\r\n\t /**\r\n\t * @param {!Node} snap\r\n\t * @return {!Node}\r\n\t * @protected\r\n\t */\r\n\t PathIndex.prototype.extractChild = function (snap) {\r\n\t return snap.getChild(this.indexPath_);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PathIndex.prototype.isDefinedOn = function (node) {\r\n\t return !node.getChild(this.indexPath_).isEmpty();\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PathIndex.prototype.compare = function (a, b) {\r\n\t var aChild = this.extractChild(a.node);\r\n\t var bChild = this.extractChild(b.node);\r\n\t var indexCmp = aChild.compareTo(bChild);\r\n\t if (indexCmp === 0) {\r\n\t return nameCompare(a.name, b.name);\r\n\t }\r\n\t else {\r\n\t return indexCmp;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PathIndex.prototype.makePost = function (indexValue, name) {\r\n\t var valueNode = nodeFromJSON$1(indexValue);\r\n\t var node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, valueNode);\r\n\t return new NamedNode(name, node);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PathIndex.prototype.maxPost = function () {\r\n\t var node = ChildrenNode.EMPTY_NODE.updateChild(this.indexPath_, MAX_NODE$2);\r\n\t return new NamedNode(MAX_NAME, node);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PathIndex.prototype.toString = function () {\r\n\t return this.indexPath_.slice().join('/');\r\n\t };\r\n\t return PathIndex;\r\n\t}(Index));\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Class representing a firebase data snapshot. It wraps a SnapshotNode and\r\n\t * surfaces the public methods (val, forEach, etc.) we want to expose.\r\n\t */\r\n\tvar DataSnapshot = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!Node} node_ A SnapshotNode to wrap.\r\n\t * @param {!Reference} ref_ The ref of the location this snapshot came from.\r\n\t * @param {!Index} index_ The iteration order for this snapshot\r\n\t */\r\n\t function DataSnapshot(node_, ref_, index_) {\r\n\t this.node_ = node_;\r\n\t this.ref_ = ref_;\r\n\t this.index_ = index_;\r\n\t }\r\n\t /**\r\n\t * Retrieves the snapshot contents as JSON. Returns null if the snapshot is\r\n\t * empty.\r\n\t *\r\n\t * @return {*} JSON representation of the DataSnapshot contents, or null if empty.\r\n\t */\r\n\t DataSnapshot.prototype.val = function () {\r\n\t util.validateArgCount('DataSnapshot.val', 0, 0, arguments.length);\r\n\t return this.node_.val();\r\n\t };\r\n\t /**\r\n\t * Returns the snapshot contents as JSON, including priorities of node. Suitable for exporting\r\n\t * the entire node contents.\r\n\t * @return {*} JSON representation of the DataSnapshot contents, or null if empty.\r\n\t */\r\n\t DataSnapshot.prototype.exportVal = function () {\r\n\t util.validateArgCount('DataSnapshot.exportVal', 0, 0, arguments.length);\r\n\t return this.node_.val(true);\r\n\t };\r\n\t // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n\t // for end-users\r\n\t DataSnapshot.prototype.toJSON = function () {\r\n\t // Optional spacer argument is unnecessary because we're depending on recursion rather than stringifying the content\r\n\t util.validateArgCount('DataSnapshot.toJSON', 0, 1, arguments.length);\r\n\t return this.exportVal();\r\n\t };\r\n\t /**\r\n\t * Returns whether the snapshot contains a non-null value.\r\n\t *\r\n\t * @return {boolean} Whether the snapshot contains a non-null value, or is empty.\r\n\t */\r\n\t DataSnapshot.prototype.exists = function () {\r\n\t util.validateArgCount('DataSnapshot.exists', 0, 0, arguments.length);\r\n\t return !this.node_.isEmpty();\r\n\t };\r\n\t /**\r\n\t * Returns a DataSnapshot of the specified child node's contents.\r\n\t *\r\n\t * @param {!string} childPathString Path to a child.\r\n\t * @return {!DataSnapshot} DataSnapshot for child node.\r\n\t */\r\n\t DataSnapshot.prototype.child = function (childPathString) {\r\n\t util.validateArgCount('DataSnapshot.child', 0, 1, arguments.length);\r\n\t // Ensure the childPath is a string (can be a number)\r\n\t childPathString = String(childPathString);\r\n\t validatePathString('DataSnapshot.child', 1, childPathString, false);\r\n\t var childPath = new Path(childPathString);\r\n\t var childRef = this.ref_.child(childPath);\r\n\t return new DataSnapshot(this.node_.getChild(childPath), childRef, PRIORITY_INDEX);\r\n\t };\r\n\t /**\r\n\t * Returns whether the snapshot contains a child at the specified path.\r\n\t *\r\n\t * @param {!string} childPathString Path to a child.\r\n\t * @return {boolean} Whether the child exists.\r\n\t */\r\n\t DataSnapshot.prototype.hasChild = function (childPathString) {\r\n\t util.validateArgCount('DataSnapshot.hasChild', 1, 1, arguments.length);\r\n\t validatePathString('DataSnapshot.hasChild', 1, childPathString, false);\r\n\t var childPath = new Path(childPathString);\r\n\t return !this.node_.getChild(childPath).isEmpty();\r\n\t };\r\n\t /**\r\n\t * Returns the priority of the object, or null if no priority was set.\r\n\t *\r\n\t * @return {string|number|null} The priority.\r\n\t */\r\n\t DataSnapshot.prototype.getPriority = function () {\r\n\t util.validateArgCount('DataSnapshot.getPriority', 0, 0, arguments.length);\r\n\t // typecast here because we never return deferred values or internal priorities (MAX_PRIORITY)\r\n\t return this.node_.getPriority().val();\r\n\t };\r\n\t /**\r\n\t * Iterates through child nodes and calls the specified action for each one.\r\n\t *\r\n\t * @param {function(!DataSnapshot)} action Callback function to be called\r\n\t * for each child.\r\n\t * @return {boolean} True if forEach was canceled by action returning true for\r\n\t * one of the child nodes.\r\n\t */\r\n\t DataSnapshot.prototype.forEach = function (action) {\r\n\t var _this = this;\r\n\t util.validateArgCount('DataSnapshot.forEach', 1, 1, arguments.length);\r\n\t util.validateCallback('DataSnapshot.forEach', 1, action, false);\r\n\t if (this.node_.isLeafNode())\r\n\t return false;\r\n\t var childrenNode = this.node_;\r\n\t // Sanitize the return value to a boolean. ChildrenNode.forEachChild has a weird return type...\r\n\t return !!childrenNode.forEachChild(this.index_, function (key, node) {\r\n\t return action(new DataSnapshot(node, _this.ref_.child(key), PRIORITY_INDEX));\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Returns whether this DataSnapshot has children.\r\n\t * @return {boolean} True if the DataSnapshot contains 1 or more child nodes.\r\n\t */\r\n\t DataSnapshot.prototype.hasChildren = function () {\r\n\t util.validateArgCount('DataSnapshot.hasChildren', 0, 0, arguments.length);\r\n\t if (this.node_.isLeafNode())\r\n\t return false;\r\n\t else\r\n\t return !this.node_.isEmpty();\r\n\t };\r\n\t Object.defineProperty(DataSnapshot.prototype, \"key\", {\r\n\t get: function () {\r\n\t return this.ref_.getKey();\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t /**\r\n\t * Returns the number of children for this DataSnapshot.\r\n\t * @return {number} The number of children that this DataSnapshot contains.\r\n\t */\r\n\t DataSnapshot.prototype.numChildren = function () {\r\n\t util.validateArgCount('DataSnapshot.numChildren', 0, 0, arguments.length);\r\n\t return this.node_.numChildren();\r\n\t };\r\n\t /**\r\n\t * @return {Reference} The Firebase reference for the location this snapshot's data came from.\r\n\t */\r\n\t DataSnapshot.prototype.getRef = function () {\r\n\t util.validateArgCount('DataSnapshot.ref', 0, 0, arguments.length);\r\n\t return this.ref_;\r\n\t };\r\n\t Object.defineProperty(DataSnapshot.prototype, \"ref\", {\r\n\t get: function () {\r\n\t return this.getRef();\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t return DataSnapshot;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Encapsulates the data needed to raise an event\r\n\t * @implements {Event}\r\n\t */\r\n\tvar DataEvent = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!string} eventType One of: value, child_added, child_changed, child_moved, child_removed\r\n\t * @param {!EventRegistration} eventRegistration The function to call to with the event data. User provided\r\n\t * @param {!DataSnapshot} snapshot The data backing the event\r\n\t * @param {?string=} prevName Optional, the name of the previous child for child_* events.\r\n\t */\r\n\t function DataEvent(eventType, eventRegistration, snapshot, prevName) {\r\n\t this.eventType = eventType;\r\n\t this.eventRegistration = eventRegistration;\r\n\t this.snapshot = snapshot;\r\n\t this.prevName = prevName;\r\n\t }\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t DataEvent.prototype.getPath = function () {\r\n\t var ref = this.snapshot.getRef();\r\n\t if (this.eventType === 'value') {\r\n\t return ref.path;\r\n\t }\r\n\t else {\r\n\t return ref.getParent().path;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t DataEvent.prototype.getEventType = function () {\r\n\t return this.eventType;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t DataEvent.prototype.getEventRunner = function () {\r\n\t return this.eventRegistration.getEventRunner(this);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t DataEvent.prototype.toString = function () {\r\n\t return (this.getPath().toString() +\r\n\t ':' +\r\n\t this.eventType +\r\n\t ':' +\r\n\t util.stringify(this.snapshot.exportVal()));\r\n\t };\r\n\t return DataEvent;\r\n\t}());\r\n\tvar CancelEvent = /** @class */ (function () {\r\n\t /**\r\n\t * @param {EventRegistration} eventRegistration\r\n\t * @param {Error} error\r\n\t * @param {!Path} path\r\n\t */\r\n\t function CancelEvent(eventRegistration, error, path) {\r\n\t this.eventRegistration = eventRegistration;\r\n\t this.error = error;\r\n\t this.path = path;\r\n\t }\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t CancelEvent.prototype.getPath = function () {\r\n\t return this.path;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t CancelEvent.prototype.getEventType = function () {\r\n\t return 'cancel';\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t CancelEvent.prototype.getEventRunner = function () {\r\n\t return this.eventRegistration.getEventRunner(this);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t CancelEvent.prototype.toString = function () {\r\n\t return this.path.toString() + ':cancel';\r\n\t };\r\n\t return CancelEvent;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Represents registration for 'value' events.\r\n\t */\r\n\tvar ValueEventRegistration = /** @class */ (function () {\r\n\t /**\r\n\t * @param {?function(!DataSnapshot)} callback_\r\n\t * @param {?function(Error)} cancelCallback_\r\n\t * @param {?Object} context_\r\n\t */\r\n\t function ValueEventRegistration(callback_, cancelCallback_, context_) {\r\n\t this.callback_ = callback_;\r\n\t this.cancelCallback_ = cancelCallback_;\r\n\t this.context_ = context_;\r\n\t }\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ValueEventRegistration.prototype.respondsTo = function (eventType) {\r\n\t return eventType === 'value';\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ValueEventRegistration.prototype.createEvent = function (change, query) {\r\n\t var index = query.getQueryParams().getIndex();\r\n\t return new DataEvent('value', this, new DataSnapshot(change.snapshotNode, query.getRef(), index));\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ValueEventRegistration.prototype.getEventRunner = function (eventData) {\r\n\t var ctx = this.context_;\r\n\t if (eventData.getEventType() === 'cancel') {\r\n\t util.assert(this.cancelCallback_, 'Raising a cancel event on a listener with no cancel callback');\r\n\t var cancelCB_1 = this.cancelCallback_;\r\n\t return function () {\r\n\t // We know that error exists, we checked above that this is a cancel event\r\n\t cancelCB_1.call(ctx, eventData.error);\r\n\t };\r\n\t }\r\n\t else {\r\n\t var cb_1 = this.callback_;\r\n\t return function () {\r\n\t cb_1.call(ctx, eventData.snapshot);\r\n\t };\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ValueEventRegistration.prototype.createCancelEvent = function (error, path) {\r\n\t if (this.cancelCallback_) {\r\n\t return new CancelEvent(this, error, path);\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ValueEventRegistration.prototype.matches = function (other) {\r\n\t if (!(other instanceof ValueEventRegistration)) {\r\n\t return false;\r\n\t }\r\n\t else if (!other.callback_ || !this.callback_) {\r\n\t // If no callback specified, we consider it to match any callback.\r\n\t return true;\r\n\t }\r\n\t else {\r\n\t return (other.callback_ === this.callback_ && other.context_ === this.context_);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ValueEventRegistration.prototype.hasAnyCallback = function () {\r\n\t return this.callback_ !== null;\r\n\t };\r\n\t return ValueEventRegistration;\r\n\t}());\r\n\t/**\r\n\t * Represents the registration of 1 or more child_xxx events.\r\n\t *\r\n\t * Currently, it is always exactly 1 child_xxx event, but the idea is we might let you\r\n\t * register a group of callbacks together in the future.\r\n\t *\r\n\t * @constructor\r\n\t * @implements {EventRegistration}\r\n\t */\r\n\tvar ChildEventRegistration = /** @class */ (function () {\r\n\t /**\r\n\t * @param {?Object.} callbacks_\r\n\t * @param {?function(Error)} cancelCallback_\r\n\t * @param {Object=} context_\r\n\t */\r\n\t function ChildEventRegistration(callbacks_, cancelCallback_, context_) {\r\n\t this.callbacks_ = callbacks_;\r\n\t this.cancelCallback_ = cancelCallback_;\r\n\t this.context_ = context_;\r\n\t }\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ChildEventRegistration.prototype.respondsTo = function (eventType) {\r\n\t var eventToCheck = eventType === 'children_added' ? 'child_added' : eventType;\r\n\t eventToCheck =\r\n\t eventToCheck === 'children_removed' ? 'child_removed' : eventToCheck;\r\n\t return util.contains(this.callbacks_, eventToCheck);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ChildEventRegistration.prototype.createCancelEvent = function (error, path) {\r\n\t if (this.cancelCallback_) {\r\n\t return new CancelEvent(this, error, path);\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ChildEventRegistration.prototype.createEvent = function (change, query) {\r\n\t util.assert(change.childName != null, 'Child events should have a childName.');\r\n\t var ref = query.getRef().child(/** @type {!string} */ (change.childName));\r\n\t var index = query.getQueryParams().getIndex();\r\n\t return new DataEvent(change.type, this, new DataSnapshot(change.snapshotNode, ref, index), change.prevName);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ChildEventRegistration.prototype.getEventRunner = function (eventData) {\r\n\t var ctx = this.context_;\r\n\t if (eventData.getEventType() === 'cancel') {\r\n\t util.assert(this.cancelCallback_, 'Raising a cancel event on a listener with no cancel callback');\r\n\t var cancelCB_2 = this.cancelCallback_;\r\n\t return function () {\r\n\t // We know that error exists, we checked above that this is a cancel event\r\n\t cancelCB_2.call(ctx, eventData.error);\r\n\t };\r\n\t }\r\n\t else {\r\n\t var cb_2 = this.callbacks_[eventData.eventType];\r\n\t return function () {\r\n\t cb_2.call(ctx, eventData.snapshot, eventData.prevName);\r\n\t };\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ChildEventRegistration.prototype.matches = function (other) {\r\n\t if (other instanceof ChildEventRegistration) {\r\n\t if (!this.callbacks_ || !other.callbacks_) {\r\n\t return true;\r\n\t }\r\n\t else if (this.context_ === other.context_) {\r\n\t var otherCount = util.getCount(other.callbacks_);\r\n\t var thisCount = util.getCount(this.callbacks_);\r\n\t if (otherCount === thisCount) {\r\n\t // If count is 1, do an exact match on eventType, if either is defined but null, it's a match.\r\n\t // If event types don't match, not a match\r\n\t // If count is not 1, exact match across all\r\n\t if (otherCount === 1) {\r\n\t var otherKey /** @type {!string} */ = util.getAnyKey(other.callbacks_);\r\n\t var thisKey /** @type {!string} */ = util.getAnyKey(this.callbacks_);\r\n\t return (thisKey === otherKey &&\r\n\t (!other.callbacks_[otherKey] ||\r\n\t !this.callbacks_[thisKey] ||\r\n\t other.callbacks_[otherKey] === this.callbacks_[thisKey]));\r\n\t }\r\n\t else {\r\n\t // Exact match on each key.\r\n\t return util.every(this.callbacks_, function (eventType, cb) { return other.callbacks_[eventType] === cb; });\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t return false;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t ChildEventRegistration.prototype.hasAnyCallback = function () {\r\n\t return this.callbacks_ !== null;\r\n\t };\r\n\t return ChildEventRegistration;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar __referenceConstructor;\r\n\t/**\r\n\t * A Query represents a filter to be applied to a firebase location. This object purely represents the\r\n\t * query expression (and exposes our public API to build the query). The actual query logic is in ViewBase.js.\r\n\t *\r\n\t * Since every Firebase reference is a query, Firebase inherits from this object.\r\n\t */\r\n\tvar Query = /** @class */ (function () {\r\n\t function Query(repo, path, queryParams_, orderByCalled_) {\r\n\t this.repo = repo;\r\n\t this.path = path;\r\n\t this.queryParams_ = queryParams_;\r\n\t this.orderByCalled_ = orderByCalled_;\r\n\t }\r\n\t Object.defineProperty(Query, \"__referenceConstructor\", {\r\n\t get: function () {\r\n\t util.assert(__referenceConstructor, 'Reference.ts has not been loaded');\r\n\t return __referenceConstructor;\r\n\t },\r\n\t set: function (val) {\r\n\t __referenceConstructor = val;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t /**\r\n\t * Validates start/end values for queries.\r\n\t * @param {!QueryParams} params\r\n\t * @private\r\n\t */\r\n\t Query.validateQueryEndpoints_ = function (params) {\r\n\t var startNode = null;\r\n\t var endNode = null;\r\n\t if (params.hasStart()) {\r\n\t startNode = params.getIndexStartValue();\r\n\t }\r\n\t if (params.hasEnd()) {\r\n\t endNode = params.getIndexEndValue();\r\n\t }\r\n\t if (params.getIndex() === KEY_INDEX) {\r\n\t var tooManyArgsError = 'Query: When ordering by key, you may only pass one argument to ' +\r\n\t 'startAt(), endAt(), or equalTo().';\r\n\t var wrongArgTypeError = 'Query: When ordering by key, the argument passed to startAt(), endAt(),' +\r\n\t 'or equalTo() must be a string.';\r\n\t if (params.hasStart()) {\r\n\t var startName = params.getIndexStartName();\r\n\t if (startName != MIN_NAME) {\r\n\t throw new Error(tooManyArgsError);\r\n\t }\r\n\t else if (typeof startNode !== 'string') {\r\n\t throw new Error(wrongArgTypeError);\r\n\t }\r\n\t }\r\n\t if (params.hasEnd()) {\r\n\t var endName = params.getIndexEndName();\r\n\t if (endName != MAX_NAME) {\r\n\t throw new Error(tooManyArgsError);\r\n\t }\r\n\t else if (typeof endNode !== 'string') {\r\n\t throw new Error(wrongArgTypeError);\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (params.getIndex() === PRIORITY_INDEX) {\r\n\t if ((startNode != null && !isValidPriority(startNode)) ||\r\n\t (endNode != null && !isValidPriority(endNode))) {\r\n\t throw new Error('Query: When ordering by priority, the first argument passed to startAt(), ' +\r\n\t 'endAt(), or equalTo() must be a valid priority value (null, a number, or a string).');\r\n\t }\r\n\t }\r\n\t else {\r\n\t util.assert(params.getIndex() instanceof PathIndex ||\r\n\t params.getIndex() === VALUE_INDEX, 'unknown index type.');\r\n\t if ((startNode != null && typeof startNode === 'object') ||\r\n\t (endNode != null && typeof endNode === 'object')) {\r\n\t throw new Error('Query: First argument passed to startAt(), endAt(), or equalTo() cannot be ' +\r\n\t 'an object.');\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Validates that limit* has been called with the correct combination of parameters\r\n\t * @param {!QueryParams} params\r\n\t * @private\r\n\t */\r\n\t Query.validateLimit_ = function (params) {\r\n\t if (params.hasStart() &&\r\n\t params.hasEnd() &&\r\n\t params.hasLimit() &&\r\n\t !params.hasAnchoredLimit()) {\r\n\t throw new Error(\"Query: Can't combine startAt(), endAt(), and limit(). Use limitToFirst() or limitToLast() instead.\");\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Validates that no other order by call has been made\r\n\t * @param {!string} fnName\r\n\t * @private\r\n\t */\r\n\t Query.prototype.validateNoPreviousOrderByCall_ = function (fnName) {\r\n\t if (this.orderByCalled_ === true) {\r\n\t throw new Error(fnName + \": You can't combine multiple orderBy calls.\");\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @return {!QueryParams}\r\n\t */\r\n\t Query.prototype.getQueryParams = function () {\r\n\t return this.queryParams_;\r\n\t };\r\n\t /**\r\n\t * @return {!Reference}\r\n\t */\r\n\t Query.prototype.getRef = function () {\r\n\t util.validateArgCount('Query.ref', 0, 0, arguments.length);\r\n\t // This is a slight hack. We cannot goog.require('fb.api.Firebase'), since Firebase requires fb.api.Query.\r\n\t // However, we will always export 'Firebase' to the global namespace, so it's guaranteed to exist by the time this\r\n\t // method gets called.\r\n\t return new Query.__referenceConstructor(this.repo, this.path);\r\n\t };\r\n\t /**\r\n\t * @param {!string} eventType\r\n\t * @param {!function(DataSnapshot, string=)} callback\r\n\t * @param {(function(Error)|Object)=} cancelCallbackOrContext\r\n\t * @param {Object=} context\r\n\t * @return {!function(DataSnapshot, string=)}\r\n\t */\r\n\t Query.prototype.on = function (eventType, callback, cancelCallbackOrContext, context) {\r\n\t util.validateArgCount('Query.on', 2, 4, arguments.length);\r\n\t validateEventType('Query.on', 1, eventType, false);\r\n\t util.validateCallback('Query.on', 2, callback, false);\r\n\t var ret = Query.getCancelAndContextArgs_('Query.on', cancelCallbackOrContext, context);\r\n\t if (eventType === 'value') {\r\n\t this.onValueEvent(callback, ret.cancel, ret.context);\r\n\t }\r\n\t else {\r\n\t var callbacks = {};\r\n\t callbacks[eventType] = callback;\r\n\t this.onChildEvent(callbacks, ret.cancel, ret.context);\r\n\t }\r\n\t return callback;\r\n\t };\r\n\t /**\r\n\t * @param {!function(!DataSnapshot)} callback\r\n\t * @param {?function(Error)} cancelCallback\r\n\t * @param {?Object} context\r\n\t * @protected\r\n\t */\r\n\t Query.prototype.onValueEvent = function (callback, cancelCallback, context) {\r\n\t var container = new ValueEventRegistration(callback, cancelCallback || null, context || null);\r\n\t this.repo.addEventCallbackForQuery(this, container);\r\n\t };\r\n\t /**\r\n\t * @param {!Object.} callbacks\r\n\t * @param {?function(Error)} cancelCallback\r\n\t * @param {?Object} context\r\n\t * @protected\r\n\t */\r\n\t Query.prototype.onChildEvent = function (callbacks, cancelCallback, context) {\r\n\t var container = new ChildEventRegistration(callbacks, cancelCallback, context);\r\n\t this.repo.addEventCallbackForQuery(this, container);\r\n\t };\r\n\t /**\r\n\t * @param {string=} eventType\r\n\t * @param {(function(!DataSnapshot, ?string=))=} callback\r\n\t * @param {Object=} context\r\n\t */\r\n\t Query.prototype.off = function (eventType, callback, context) {\r\n\t util.validateArgCount('Query.off', 0, 3, arguments.length);\r\n\t validateEventType('Query.off', 1, eventType, true);\r\n\t util.validateCallback('Query.off', 2, callback, true);\r\n\t util.validateContextObject('Query.off', 3, context, true);\r\n\t var container = null;\r\n\t var callbacks = null;\r\n\t if (eventType === 'value') {\r\n\t var valueCallback = callback || null;\r\n\t container = new ValueEventRegistration(valueCallback, null, context || null);\r\n\t }\r\n\t else if (eventType) {\r\n\t if (callback) {\r\n\t callbacks = {};\r\n\t callbacks[eventType] = callback;\r\n\t }\r\n\t container = new ChildEventRegistration(callbacks, null, context || null);\r\n\t }\r\n\t this.repo.removeEventCallbackForQuery(this, container);\r\n\t };\r\n\t /**\r\n\t * Attaches a listener, waits for the first event, and then removes the listener\r\n\t * @param {!string} eventType\r\n\t * @param {!function(!DataSnapshot, string=)} userCallback\r\n\t * @param cancelOrContext\r\n\t * @param context\r\n\t * @return {!firebase.Promise}\r\n\t */\r\n\t Query.prototype.once = function (eventType, userCallback, cancelOrContext, context) {\r\n\t var _this = this;\r\n\t util.validateArgCount('Query.once', 1, 4, arguments.length);\r\n\t validateEventType('Query.once', 1, eventType, false);\r\n\t util.validateCallback('Query.once', 2, userCallback, true);\r\n\t var ret = Query.getCancelAndContextArgs_('Query.once', cancelOrContext, context);\r\n\t // TODO: Implement this more efficiently (in particular, use 'get' wire protocol for 'value' event)\r\n\t // TODO: consider actually wiring the callbacks into the promise. We cannot do this without a breaking change\r\n\t // because the API currently expects callbacks will be called synchronously if the data is cached, but this is\r\n\t // against the Promise specification.\r\n\t var firstCall = true;\r\n\t var deferred = new util.Deferred();\r\n\t // A dummy error handler in case a user wasn't expecting promises\r\n\t deferred.promise.catch(function () { });\r\n\t var onceCallback = function (snapshot) {\r\n\t // NOTE: Even though we unsubscribe, we may get called multiple times if a single action (e.g. set() with JSON)\r\n\t // triggers multiple events (e.g. child_added or child_changed).\r\n\t if (firstCall) {\r\n\t firstCall = false;\r\n\t _this.off(eventType, onceCallback);\r\n\t if (userCallback) {\r\n\t userCallback.bind(ret.context)(snapshot);\r\n\t }\r\n\t deferred.resolve(snapshot);\r\n\t }\r\n\t };\r\n\t this.on(eventType, onceCallback, \r\n\t /*cancel=*/ function (err) {\r\n\t _this.off(eventType, onceCallback);\r\n\t if (ret.cancel)\r\n\t ret.cancel.bind(ret.context)(err);\r\n\t deferred.reject(err);\r\n\t });\r\n\t return deferred.promise;\r\n\t };\r\n\t /**\r\n\t * Set a limit and anchor it to the start of the window.\r\n\t * @param {!number} limit\r\n\t * @return {!Query}\r\n\t */\r\n\t Query.prototype.limitToFirst = function (limit) {\r\n\t util.validateArgCount('Query.limitToFirst', 1, 1, arguments.length);\r\n\t if (typeof limit !== 'number' ||\r\n\t Math.floor(limit) !== limit ||\r\n\t limit <= 0) {\r\n\t throw new Error('Query.limitToFirst: First argument must be a positive integer.');\r\n\t }\r\n\t if (this.queryParams_.hasLimit()) {\r\n\t throw new Error('Query.limitToFirst: Limit was already set (by another call to limit, ' +\r\n\t 'limitToFirst, or limitToLast).');\r\n\t }\r\n\t return new Query(this.repo, this.path, this.queryParams_.limitToFirst(limit), this.orderByCalled_);\r\n\t };\r\n\t /**\r\n\t * Set a limit and anchor it to the end of the window.\r\n\t * @param {!number} limit\r\n\t * @return {!Query}\r\n\t */\r\n\t Query.prototype.limitToLast = function (limit) {\r\n\t util.validateArgCount('Query.limitToLast', 1, 1, arguments.length);\r\n\t if (typeof limit !== 'number' ||\r\n\t Math.floor(limit) !== limit ||\r\n\t limit <= 0) {\r\n\t throw new Error('Query.limitToLast: First argument must be a positive integer.');\r\n\t }\r\n\t if (this.queryParams_.hasLimit()) {\r\n\t throw new Error('Query.limitToLast: Limit was already set (by another call to limit, ' +\r\n\t 'limitToFirst, or limitToLast).');\r\n\t }\r\n\t return new Query(this.repo, this.path, this.queryParams_.limitToLast(limit), this.orderByCalled_);\r\n\t };\r\n\t /**\r\n\t * Given a child path, return a new query ordered by the specified grandchild path.\r\n\t * @param {!string} path\r\n\t * @return {!Query}\r\n\t */\r\n\t Query.prototype.orderByChild = function (path) {\r\n\t util.validateArgCount('Query.orderByChild', 1, 1, arguments.length);\r\n\t if (path === '$key') {\r\n\t throw new Error('Query.orderByChild: \"$key\" is invalid. Use Query.orderByKey() instead.');\r\n\t }\r\n\t else if (path === '$priority') {\r\n\t throw new Error('Query.orderByChild: \"$priority\" is invalid. Use Query.orderByPriority() instead.');\r\n\t }\r\n\t else if (path === '$value') {\r\n\t throw new Error('Query.orderByChild: \"$value\" is invalid. Use Query.orderByValue() instead.');\r\n\t }\r\n\t validatePathString('Query.orderByChild', 1, path, false);\r\n\t this.validateNoPreviousOrderByCall_('Query.orderByChild');\r\n\t var parsedPath = new Path(path);\r\n\t if (parsedPath.isEmpty()) {\r\n\t throw new Error('Query.orderByChild: cannot pass in empty path. Use Query.orderByValue() instead.');\r\n\t }\r\n\t var index = new PathIndex(parsedPath);\r\n\t var newParams = this.queryParams_.orderBy(index);\r\n\t Query.validateQueryEndpoints_(newParams);\r\n\t return new Query(this.repo, this.path, newParams, /*orderByCalled=*/ true);\r\n\t };\r\n\t /**\r\n\t * Return a new query ordered by the KeyIndex\r\n\t * @return {!Query}\r\n\t */\r\n\t Query.prototype.orderByKey = function () {\r\n\t util.validateArgCount('Query.orderByKey', 0, 0, arguments.length);\r\n\t this.validateNoPreviousOrderByCall_('Query.orderByKey');\r\n\t var newParams = this.queryParams_.orderBy(KEY_INDEX);\r\n\t Query.validateQueryEndpoints_(newParams);\r\n\t return new Query(this.repo, this.path, newParams, /*orderByCalled=*/ true);\r\n\t };\r\n\t /**\r\n\t * Return a new query ordered by the PriorityIndex\r\n\t * @return {!Query}\r\n\t */\r\n\t Query.prototype.orderByPriority = function () {\r\n\t util.validateArgCount('Query.orderByPriority', 0, 0, arguments.length);\r\n\t this.validateNoPreviousOrderByCall_('Query.orderByPriority');\r\n\t var newParams = this.queryParams_.orderBy(PRIORITY_INDEX);\r\n\t Query.validateQueryEndpoints_(newParams);\r\n\t return new Query(this.repo, this.path, newParams, /*orderByCalled=*/ true);\r\n\t };\r\n\t /**\r\n\t * Return a new query ordered by the ValueIndex\r\n\t * @return {!Query}\r\n\t */\r\n\t Query.prototype.orderByValue = function () {\r\n\t util.validateArgCount('Query.orderByValue', 0, 0, arguments.length);\r\n\t this.validateNoPreviousOrderByCall_('Query.orderByValue');\r\n\t var newParams = this.queryParams_.orderBy(VALUE_INDEX);\r\n\t Query.validateQueryEndpoints_(newParams);\r\n\t return new Query(this.repo, this.path, newParams, /*orderByCalled=*/ true);\r\n\t };\r\n\t /**\r\n\t * @param {number|string|boolean|null} value\r\n\t * @param {?string=} name\r\n\t * @return {!Query}\r\n\t */\r\n\t Query.prototype.startAt = function (value, name) {\r\n\t if (value === void 0) { value = null; }\r\n\t util.validateArgCount('Query.startAt', 0, 2, arguments.length);\r\n\t validateFirebaseDataArg('Query.startAt', 1, value, this.path, true);\r\n\t validateKey('Query.startAt', 2, name, true);\r\n\t var newParams = this.queryParams_.startAt(value, name);\r\n\t Query.validateLimit_(newParams);\r\n\t Query.validateQueryEndpoints_(newParams);\r\n\t if (this.queryParams_.hasStart()) {\r\n\t throw new Error('Query.startAt: Starting point was already set (by another call to startAt ' +\r\n\t 'or equalTo).');\r\n\t }\r\n\t // Calling with no params tells us to start at the beginning.\r\n\t if (value === undefined) {\r\n\t value = null;\r\n\t name = null;\r\n\t }\r\n\t return new Query(this.repo, this.path, newParams, this.orderByCalled_);\r\n\t };\r\n\t /**\r\n\t * @param {number|string|boolean|null} value\r\n\t * @param {?string=} name\r\n\t * @return {!Query}\r\n\t */\r\n\t Query.prototype.endAt = function (value, name) {\r\n\t if (value === void 0) { value = null; }\r\n\t util.validateArgCount('Query.endAt', 0, 2, arguments.length);\r\n\t validateFirebaseDataArg('Query.endAt', 1, value, this.path, true);\r\n\t validateKey('Query.endAt', 2, name, true);\r\n\t var newParams = this.queryParams_.endAt(value, name);\r\n\t Query.validateLimit_(newParams);\r\n\t Query.validateQueryEndpoints_(newParams);\r\n\t if (this.queryParams_.hasEnd()) {\r\n\t throw new Error('Query.endAt: Ending point was already set (by another call to endAt or ' +\r\n\t 'equalTo).');\r\n\t }\r\n\t return new Query(this.repo, this.path, newParams, this.orderByCalled_);\r\n\t };\r\n\t /**\r\n\t * Load the selection of children with exactly the specified value, and, optionally,\r\n\t * the specified name.\r\n\t * @param {number|string|boolean|null} value\r\n\t * @param {string=} name\r\n\t * @return {!Query}\r\n\t */\r\n\t Query.prototype.equalTo = function (value, name) {\r\n\t util.validateArgCount('Query.equalTo', 1, 2, arguments.length);\r\n\t validateFirebaseDataArg('Query.equalTo', 1, value, this.path, false);\r\n\t validateKey('Query.equalTo', 2, name, true);\r\n\t if (this.queryParams_.hasStart()) {\r\n\t throw new Error('Query.equalTo: Starting point was already set (by another call to startAt or ' +\r\n\t 'equalTo).');\r\n\t }\r\n\t if (this.queryParams_.hasEnd()) {\r\n\t throw new Error('Query.equalTo: Ending point was already set (by another call to endAt or ' +\r\n\t 'equalTo).');\r\n\t }\r\n\t return this.startAt(value, name).endAt(value, name);\r\n\t };\r\n\t /**\r\n\t * @return {!string} URL for this location.\r\n\t */\r\n\t Query.prototype.toString = function () {\r\n\t util.validateArgCount('Query.toString', 0, 0, arguments.length);\r\n\t return this.repo.toString() + this.path.toUrlEncodedString();\r\n\t };\r\n\t // Do not create public documentation. This is intended to make JSON serialization work but is otherwise unnecessary\r\n\t // for end-users.\r\n\t Query.prototype.toJSON = function () {\r\n\t // An optional spacer argument is unnecessary for a string.\r\n\t util.validateArgCount('Query.toJSON', 0, 1, arguments.length);\r\n\t return this.toString();\r\n\t };\r\n\t /**\r\n\t * An object representation of the query parameters used by this Query.\r\n\t * @return {!Object}\r\n\t */\r\n\t Query.prototype.queryObject = function () {\r\n\t return this.queryParams_.getQueryObject();\r\n\t };\r\n\t /**\r\n\t * @return {!string}\r\n\t */\r\n\t Query.prototype.queryIdentifier = function () {\r\n\t var obj = this.queryObject();\r\n\t var id = ObjectToUniqueKey(obj);\r\n\t return id === '{}' ? 'default' : id;\r\n\t };\r\n\t /**\r\n\t * Return true if this query and the provided query are equivalent; otherwise, return false.\r\n\t * @param {Query} other\r\n\t * @return {boolean}\r\n\t */\r\n\t Query.prototype.isEqual = function (other) {\r\n\t util.validateArgCount('Query.isEqual', 1, 1, arguments.length);\r\n\t if (!(other instanceof Query)) {\r\n\t var error$$1 = 'Query.isEqual failed: First argument must be an instance of firebase.database.Query.';\r\n\t throw new Error(error$$1);\r\n\t }\r\n\t var sameRepo = this.repo === other.repo;\r\n\t var samePath = this.path.equals(other.path);\r\n\t var sameQueryIdentifier = this.queryIdentifier() === other.queryIdentifier();\r\n\t return sameRepo && samePath && sameQueryIdentifier;\r\n\t };\r\n\t /**\r\n\t * Helper used by .on and .once to extract the context and or cancel arguments.\r\n\t * @param {!string} fnName The function name (on or once)\r\n\t * @param {(function(Error)|Object)=} cancelOrContext\r\n\t * @param {Object=} context\r\n\t * @return {{cancel: ?function(Error), context: ?Object}}\r\n\t * @private\r\n\t */\r\n\t Query.getCancelAndContextArgs_ = function (fnName, cancelOrContext, context) {\r\n\t var ret = { cancel: null, context: null };\r\n\t if (cancelOrContext && context) {\r\n\t ret.cancel = cancelOrContext;\r\n\t util.validateCallback(fnName, 3, ret.cancel, true);\r\n\t ret.context = context;\r\n\t util.validateContextObject(fnName, 4, ret.context, true);\r\n\t }\r\n\t else if (cancelOrContext) {\r\n\t // we have either a cancel callback or a context.\r\n\t if (typeof cancelOrContext === 'object' && cancelOrContext !== null) {\r\n\t // it's a context!\r\n\t ret.context = cancelOrContext;\r\n\t }\r\n\t else if (typeof cancelOrContext === 'function') {\r\n\t ret.cancel = cancelOrContext;\r\n\t }\r\n\t else {\r\n\t throw new Error(util.errorPrefix(fnName, 3, true) +\r\n\t ' must either be a cancel callback or a context object.');\r\n\t }\r\n\t }\r\n\t return ret;\r\n\t };\r\n\t Object.defineProperty(Query.prototype, \"ref\", {\r\n\t get: function () {\r\n\t return this.getRef();\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t return Query;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Implements a set with a count of elements.\r\n\t *\r\n\t * @template K, V\r\n\t */\r\n\tvar CountedSet = /** @class */ (function () {\r\n\t function CountedSet() {\r\n\t this.set = {};\r\n\t }\r\n\t /**\r\n\t * @param {!K} item\r\n\t * @param {V} val\r\n\t */\r\n\t CountedSet.prototype.add = function (item, val) {\r\n\t this.set[item] = val !== null ? val : true;\r\n\t };\r\n\t /**\r\n\t * @param {!K} key\r\n\t * @return {boolean}\r\n\t */\r\n\t CountedSet.prototype.contains = function (key) {\r\n\t return util.contains(this.set, key);\r\n\t };\r\n\t /**\r\n\t * @param {!K} item\r\n\t * @return {V}\r\n\t */\r\n\t CountedSet.prototype.get = function (item) {\r\n\t return this.contains(item) ? this.set[item] : undefined;\r\n\t };\r\n\t /**\r\n\t * @param {!K} item\r\n\t */\r\n\t CountedSet.prototype.remove = function (item) {\r\n\t delete this.set[item];\r\n\t };\r\n\t /**\r\n\t * Deletes everything in the set\r\n\t */\r\n\t CountedSet.prototype.clear = function () {\r\n\t this.set = {};\r\n\t };\r\n\t /**\r\n\t * True if there's nothing in the set\r\n\t * @return {boolean}\r\n\t */\r\n\t CountedSet.prototype.isEmpty = function () {\r\n\t return util.isEmpty(this.set);\r\n\t };\r\n\t /**\r\n\t * @return {number} The number of items in the set\r\n\t */\r\n\t CountedSet.prototype.count = function () {\r\n\t return util.getCount(this.set);\r\n\t };\r\n\t /**\r\n\t * Run a function on each k,v pair in the set\r\n\t * @param {function(K, V)} fn\r\n\t */\r\n\t CountedSet.prototype.each = function (fn) {\r\n\t util.forEach(this.set, function (k, v) { return fn(k, v); });\r\n\t };\r\n\t /**\r\n\t * Mostly for debugging\r\n\t * @return {Array.} The keys present in this CountedSet\r\n\t */\r\n\t CountedSet.prototype.keys = function () {\r\n\t var keys = [];\r\n\t util.forEach(this.set, function (k) {\r\n\t keys.push(k);\r\n\t });\r\n\t return keys;\r\n\t };\r\n\t return CountedSet;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Helper class to store a sparse set of snapshots.\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar SparseSnapshotTree = /** @class */ (function () {\r\n\t function SparseSnapshotTree() {\r\n\t /**\r\n\t * @private\r\n\t * @type {Node}\r\n\t */\r\n\t this.value_ = null;\r\n\t /**\r\n\t * @private\r\n\t * @type {CountedSet}\r\n\t */\r\n\t this.children_ = null;\r\n\t }\r\n\t /**\r\n\t * Gets the node stored at the given path if one exists.\r\n\t *\r\n\t * @param {!Path} path Path to look up snapshot for.\r\n\t * @return {?Node} The retrieved node, or null.\r\n\t */\r\n\t SparseSnapshotTree.prototype.find = function (path) {\r\n\t if (this.value_ != null) {\r\n\t return this.value_.getChild(path);\r\n\t }\r\n\t else if (!path.isEmpty() && this.children_ != null) {\r\n\t var childKey = path.getFront();\r\n\t path = path.popFront();\r\n\t if (this.children_.contains(childKey)) {\r\n\t var childTree = this.children_.get(childKey);\r\n\t return childTree.find(path);\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Stores the given node at the specified path. If there is already a node\r\n\t * at a shallower path, it merges the new data into that snapshot node.\r\n\t *\r\n\t * @param {!Path} path Path to look up snapshot for.\r\n\t * @param {!Node} data The new data, or null.\r\n\t */\r\n\t SparseSnapshotTree.prototype.remember = function (path, data) {\r\n\t if (path.isEmpty()) {\r\n\t this.value_ = data;\r\n\t this.children_ = null;\r\n\t }\r\n\t else if (this.value_ !== null) {\r\n\t this.value_ = this.value_.updateChild(path, data);\r\n\t }\r\n\t else {\r\n\t if (this.children_ == null) {\r\n\t this.children_ = new CountedSet();\r\n\t }\r\n\t var childKey = path.getFront();\r\n\t if (!this.children_.contains(childKey)) {\r\n\t this.children_.add(childKey, new SparseSnapshotTree());\r\n\t }\r\n\t var child = this.children_.get(childKey);\r\n\t path = path.popFront();\r\n\t child.remember(path, data);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Purge the data at path from the cache.\r\n\t *\r\n\t * @param {!Path} path Path to look up snapshot for.\r\n\t * @return {boolean} True if this node should now be removed.\r\n\t */\r\n\t SparseSnapshotTree.prototype.forget = function (path) {\r\n\t if (path.isEmpty()) {\r\n\t this.value_ = null;\r\n\t this.children_ = null;\r\n\t return true;\r\n\t }\r\n\t else {\r\n\t if (this.value_ !== null) {\r\n\t if (this.value_.isLeafNode()) {\r\n\t // We're trying to forget a node that doesn't exist\r\n\t return false;\r\n\t }\r\n\t else {\r\n\t var value = this.value_;\r\n\t this.value_ = null;\r\n\t var self_1 = this;\r\n\t value.forEachChild(PRIORITY_INDEX, function (key, tree) {\r\n\t self_1.remember(new Path(key), tree);\r\n\t });\r\n\t return this.forget(path);\r\n\t }\r\n\t }\r\n\t else if (this.children_ !== null) {\r\n\t var childKey = path.getFront();\r\n\t path = path.popFront();\r\n\t if (this.children_.contains(childKey)) {\r\n\t var safeToRemove = this.children_.get(childKey).forget(path);\r\n\t if (safeToRemove) {\r\n\t this.children_.remove(childKey);\r\n\t }\r\n\t }\r\n\t if (this.children_.isEmpty()) {\r\n\t this.children_ = null;\r\n\t return true;\r\n\t }\r\n\t else {\r\n\t return false;\r\n\t }\r\n\t }\r\n\t else {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Recursively iterates through all of the stored tree and calls the\r\n\t * callback on each one.\r\n\t *\r\n\t * @param {!Path} prefixPath Path to look up node for.\r\n\t * @param {!Function} func The function to invoke for each tree.\r\n\t */\r\n\t SparseSnapshotTree.prototype.forEachTree = function (prefixPath, func) {\r\n\t if (this.value_ !== null) {\r\n\t func(prefixPath, this.value_);\r\n\t }\r\n\t else {\r\n\t this.forEachChild(function (key, tree) {\r\n\t var path = new Path(prefixPath.toString() + '/' + key);\r\n\t tree.forEachTree(path, func);\r\n\t });\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Iterates through each immediate child and triggers the callback.\r\n\t *\r\n\t * @param {!Function} func The function to invoke for each child.\r\n\t */\r\n\t SparseSnapshotTree.prototype.forEachChild = function (func) {\r\n\t if (this.children_ !== null) {\r\n\t this.children_.each(function (key, tree) {\r\n\t func(key, tree);\r\n\t });\r\n\t }\r\n\t };\r\n\t return SparseSnapshotTree;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Generate placeholders for deferred values.\r\n\t * @param {?Object} values\r\n\t * @return {!Object}\r\n\t */\r\n\tvar generateWithValues = function (values) {\r\n\t values = values || {};\r\n\t values['timestamp'] = values['timestamp'] || new Date().getTime();\r\n\t return values;\r\n\t};\r\n\t/**\r\n\t * Value to use when firing local events. When writing server values, fire\r\n\t * local events with an approximate value, otherwise return value as-is.\r\n\t * @param {(Object|string|number|boolean)} value\r\n\t * @param {!Object} serverValues\r\n\t * @return {!(string|number|boolean)}\r\n\t */\r\n\tvar resolveDeferredValue = function (value, serverValues) {\r\n\t if (!value || typeof value !== 'object') {\r\n\t return value;\r\n\t }\r\n\t else {\r\n\t util.assert('.sv' in value, 'Unexpected leaf node or priority contents');\r\n\t return serverValues[value['.sv']];\r\n\t }\r\n\t};\r\n\t/**\r\n\t * Recursively replace all deferred values and priorities in the tree with the\r\n\t * specified generated replacement values.\r\n\t * @param {!SparseSnapshotTree} tree\r\n\t * @param {!Object} serverValues\r\n\t * @return {!SparseSnapshotTree}\r\n\t */\r\n\tvar resolveDeferredValueTree = function (tree, serverValues) {\r\n\t var resolvedTree = new SparseSnapshotTree();\r\n\t tree.forEachTree(new Path(''), function (path, node) {\r\n\t resolvedTree.remember(path, resolveDeferredValueSnapshot(node, serverValues));\r\n\t });\r\n\t return resolvedTree;\r\n\t};\r\n\t/**\r\n\t * Recursively replace all deferred values and priorities in the node with the\r\n\t * specified generated replacement values. If there are no server values in the node,\r\n\t * it'll be returned as-is.\r\n\t * @param {!Node} node\r\n\t * @param {!Object} serverValues\r\n\t * @return {!Node}\r\n\t */\r\n\tvar resolveDeferredValueSnapshot = function (node, serverValues) {\r\n\t var rawPri = node.getPriority().val();\r\n\t var priority = resolveDeferredValue(rawPri, serverValues);\r\n\t var newNode;\r\n\t if (node.isLeafNode()) {\r\n\t var leafNode = node;\r\n\t var value = resolveDeferredValue(leafNode.getValue(), serverValues);\r\n\t if (value !== leafNode.getValue() ||\r\n\t priority !== leafNode.getPriority().val()) {\r\n\t return new LeafNode(value, nodeFromJSON$1(priority));\r\n\t }\r\n\t else {\r\n\t return node;\r\n\t }\r\n\t }\r\n\t else {\r\n\t var childrenNode = node;\r\n\t newNode = childrenNode;\r\n\t if (priority !== childrenNode.getPriority().val()) {\r\n\t newNode = newNode.updatePriority(new LeafNode(priority));\r\n\t }\r\n\t childrenNode.forEachChild(PRIORITY_INDEX, function (childName, childNode) {\r\n\t var newChildNode = resolveDeferredValueSnapshot(childNode, serverValues);\r\n\t if (newChildNode !== childNode) {\r\n\t newNode = newNode.updateImmediateChild(childName, newChildNode);\r\n\t }\r\n\t });\r\n\t return newNode;\r\n\t }\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t *\r\n\t * @enum\r\n\t */\r\n\tvar OperationType;\r\n\t(function (OperationType) {\r\n\t OperationType[OperationType[\"OVERWRITE\"] = 0] = \"OVERWRITE\";\r\n\t OperationType[OperationType[\"MERGE\"] = 1] = \"MERGE\";\r\n\t OperationType[OperationType[\"ACK_USER_WRITE\"] = 2] = \"ACK_USER_WRITE\";\r\n\t OperationType[OperationType[\"LISTEN_COMPLETE\"] = 3] = \"LISTEN_COMPLETE\";\r\n\t})(OperationType || (OperationType = {}));\r\n\t/**\r\n\t * @param {boolean} fromUser\r\n\t * @param {boolean} fromServer\r\n\t * @param {?string} queryId\r\n\t * @param {boolean} tagged\r\n\t * @constructor\r\n\t */\r\n\tvar OperationSource = /** @class */ (function () {\r\n\t function OperationSource(fromUser, fromServer, queryId, tagged) {\r\n\t this.fromUser = fromUser;\r\n\t this.fromServer = fromServer;\r\n\t this.queryId = queryId;\r\n\t this.tagged = tagged;\r\n\t util.assert(!tagged || fromServer, 'Tagged queries must be from server.');\r\n\t }\r\n\t /**\r\n\t * @const\r\n\t * @type {!OperationSource}\r\n\t */\r\n\t OperationSource.User = new OperationSource(\r\n\t /*fromUser=*/ true, false, null, \r\n\t /*tagged=*/ false);\r\n\t /**\r\n\t * @const\r\n\t * @type {!OperationSource}\r\n\t */\r\n\t OperationSource.Server = new OperationSource(false, \r\n\t /*fromServer=*/ true, null, \r\n\t /*tagged=*/ false);\r\n\t /**\r\n\t * @param {string} queryId\r\n\t * @return {!OperationSource}\r\n\t */\r\n\t OperationSource.forServerTaggedQuery = function (queryId) {\r\n\t return new OperationSource(false, \r\n\t /*fromServer=*/ true, queryId, \r\n\t /*tagged=*/ true);\r\n\t };\r\n\t return OperationSource;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar AckUserWrite = /** @class */ (function () {\r\n\t /**\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @param {!ImmutableTree} affectedTree A tree containing true for each affected path. Affected paths can't overlap.\r\n\t * @param {!boolean} revert\r\n\t */\r\n\t function AckUserWrite(\r\n\t /**@inheritDoc */ path, \r\n\t /**@inheritDoc */ affectedTree, \r\n\t /**@inheritDoc */ revert) {\r\n\t this.path = path;\r\n\t this.affectedTree = affectedTree;\r\n\t this.revert = revert;\r\n\t /** @inheritDoc */\r\n\t this.type = OperationType.ACK_USER_WRITE;\r\n\t /** @inheritDoc */\r\n\t this.source = OperationSource.User;\r\n\t }\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t AckUserWrite.prototype.operationForChild = function (childName) {\r\n\t if (!this.path.isEmpty()) {\r\n\t util.assert(this.path.getFront() === childName, 'operationForChild called for unrelated child.');\r\n\t return new AckUserWrite(this.path.popFront(), this.affectedTree, this.revert);\r\n\t }\r\n\t else if (this.affectedTree.value != null) {\r\n\t util.assert(this.affectedTree.children.isEmpty(), 'affectedTree should not have overlapping affected paths.');\r\n\t // All child locations are affected as well; just return same operation.\r\n\t return this;\r\n\t }\r\n\t else {\r\n\t var childTree = this.affectedTree.subtree(new Path(childName));\r\n\t return new AckUserWrite(Path.Empty, childTree, this.revert);\r\n\t }\r\n\t };\r\n\t return AckUserWrite;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar emptyChildrenSingleton;\r\n\t/**\r\n\t * Singleton empty children collection.\r\n\t *\r\n\t * @const\r\n\t * @type {!SortedMap.>}\r\n\t */\r\n\tvar EmptyChildren = function () {\r\n\t if (!emptyChildrenSingleton) {\r\n\t emptyChildrenSingleton = new SortedMap(stringCompare);\r\n\t }\r\n\t return emptyChildrenSingleton;\r\n\t};\r\n\t/**\r\n\t * A tree with immutable elements.\r\n\t */\r\n\tvar ImmutableTree = /** @class */ (function () {\r\n\t /**\r\n\t * @template T\r\n\t * @param {?T} value\r\n\t * @param {SortedMap.>=} children\r\n\t */\r\n\t function ImmutableTree(value, children) {\r\n\t if (children === void 0) { children = EmptyChildren(); }\r\n\t this.value = value;\r\n\t this.children = children;\r\n\t }\r\n\t /**\r\n\t * @template T\r\n\t * @param {!Object.} obj\r\n\t * @return {!ImmutableTree.}\r\n\t */\r\n\t ImmutableTree.fromObject = function (obj) {\r\n\t var tree = ImmutableTree.Empty;\r\n\t util.forEach(obj, function (childPath, childSnap) {\r\n\t tree = tree.set(new Path(childPath), childSnap);\r\n\t });\r\n\t return tree;\r\n\t };\r\n\t /**\r\n\t * True if the value is empty and there are no children\r\n\t * @return {boolean}\r\n\t */\r\n\t ImmutableTree.prototype.isEmpty = function () {\r\n\t return this.value === null && this.children.isEmpty();\r\n\t };\r\n\t /**\r\n\t * Given a path and predicate, return the first node and the path to that node\r\n\t * where the predicate returns true.\r\n\t *\r\n\t * TODO Do a perf test -- If we're creating a bunch of {path: value:} objects\r\n\t * on the way back out, it may be better to pass down a pathSoFar obj.\r\n\t *\r\n\t * @param {!Path} relativePath The remainder of the path\r\n\t * @param {function(T):boolean} predicate The predicate to satisfy to return a\r\n\t * node\r\n\t * @return {?{path:!Path, value:!T}}\r\n\t */\r\n\t ImmutableTree.prototype.findRootMostMatchingPathAndValue = function (relativePath, predicate) {\r\n\t if (this.value != null && predicate(this.value)) {\r\n\t return { path: Path.Empty, value: this.value };\r\n\t }\r\n\t else {\r\n\t if (relativePath.isEmpty()) {\r\n\t return null;\r\n\t }\r\n\t else {\r\n\t var front = relativePath.getFront();\r\n\t var child = this.children.get(front);\r\n\t if (child !== null) {\r\n\t var childExistingPathAndValue = child.findRootMostMatchingPathAndValue(relativePath.popFront(), predicate);\r\n\t if (childExistingPathAndValue != null) {\r\n\t var fullPath = new Path(front).child(childExistingPathAndValue.path);\r\n\t return { path: fullPath, value: childExistingPathAndValue.value };\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Find, if it exists, the shortest subpath of the given path that points a defined\r\n\t * value in the tree\r\n\t * @param {!Path} relativePath\r\n\t * @return {?{path: !Path, value: !T}}\r\n\t */\r\n\t ImmutableTree.prototype.findRootMostValueAndPath = function (relativePath) {\r\n\t return this.findRootMostMatchingPathAndValue(relativePath, function () { return true; });\r\n\t };\r\n\t /**\r\n\t * @param {!Path} relativePath\r\n\t * @return {!ImmutableTree.} The subtree at the given path\r\n\t */\r\n\t ImmutableTree.prototype.subtree = function (relativePath) {\r\n\t if (relativePath.isEmpty()) {\r\n\t return this;\r\n\t }\r\n\t else {\r\n\t var front = relativePath.getFront();\r\n\t var childTree = this.children.get(front);\r\n\t if (childTree !== null) {\r\n\t return childTree.subtree(relativePath.popFront());\r\n\t }\r\n\t else {\r\n\t return ImmutableTree.Empty;\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Sets a value at the specified path.\r\n\t *\r\n\t * @param {!Path} relativePath Path to set value at.\r\n\t * @param {?T} toSet Value to set.\r\n\t * @return {!ImmutableTree.} Resulting tree.\r\n\t */\r\n\t ImmutableTree.prototype.set = function (relativePath, toSet) {\r\n\t if (relativePath.isEmpty()) {\r\n\t return new ImmutableTree(toSet, this.children);\r\n\t }\r\n\t else {\r\n\t var front = relativePath.getFront();\r\n\t var child = this.children.get(front) || ImmutableTree.Empty;\r\n\t var newChild = child.set(relativePath.popFront(), toSet);\r\n\t var newChildren = this.children.insert(front, newChild);\r\n\t return new ImmutableTree(this.value, newChildren);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Removes the value at the specified path.\r\n\t *\r\n\t * @param {!Path} relativePath Path to value to remove.\r\n\t * @return {!ImmutableTree.} Resulting tree.\r\n\t */\r\n\t ImmutableTree.prototype.remove = function (relativePath) {\r\n\t if (relativePath.isEmpty()) {\r\n\t if (this.children.isEmpty()) {\r\n\t return ImmutableTree.Empty;\r\n\t }\r\n\t else {\r\n\t return new ImmutableTree(null, this.children);\r\n\t }\r\n\t }\r\n\t else {\r\n\t var front = relativePath.getFront();\r\n\t var child = this.children.get(front);\r\n\t if (child) {\r\n\t var newChild = child.remove(relativePath.popFront());\r\n\t var newChildren = void 0;\r\n\t if (newChild.isEmpty()) {\r\n\t newChildren = this.children.remove(front);\r\n\t }\r\n\t else {\r\n\t newChildren = this.children.insert(front, newChild);\r\n\t }\r\n\t if (this.value === null && newChildren.isEmpty()) {\r\n\t return ImmutableTree.Empty;\r\n\t }\r\n\t else {\r\n\t return new ImmutableTree(this.value, newChildren);\r\n\t }\r\n\t }\r\n\t else {\r\n\t return this;\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Gets a value from the tree.\r\n\t *\r\n\t * @param {!Path} relativePath Path to get value for.\r\n\t * @return {?T} Value at path, or null.\r\n\t */\r\n\t ImmutableTree.prototype.get = function (relativePath) {\r\n\t if (relativePath.isEmpty()) {\r\n\t return this.value;\r\n\t }\r\n\t else {\r\n\t var front = relativePath.getFront();\r\n\t var child = this.children.get(front);\r\n\t if (child) {\r\n\t return child.get(relativePath.popFront());\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Replace the subtree at the specified path with the given new tree.\r\n\t *\r\n\t * @param {!Path} relativePath Path to replace subtree for.\r\n\t * @param {!ImmutableTree} newTree New tree.\r\n\t * @return {!ImmutableTree} Resulting tree.\r\n\t */\r\n\t ImmutableTree.prototype.setTree = function (relativePath, newTree) {\r\n\t if (relativePath.isEmpty()) {\r\n\t return newTree;\r\n\t }\r\n\t else {\r\n\t var front = relativePath.getFront();\r\n\t var child = this.children.get(front) || ImmutableTree.Empty;\r\n\t var newChild = child.setTree(relativePath.popFront(), newTree);\r\n\t var newChildren = void 0;\r\n\t if (newChild.isEmpty()) {\r\n\t newChildren = this.children.remove(front);\r\n\t }\r\n\t else {\r\n\t newChildren = this.children.insert(front, newChild);\r\n\t }\r\n\t return new ImmutableTree(this.value, newChildren);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Performs a depth first fold on this tree. Transforms a tree into a single\r\n\t * value, given a function that operates on the path to a node, an optional\r\n\t * current value, and a map of child names to folded subtrees\r\n\t * @template V\r\n\t * @param {function(Path, ?T, Object.):V} fn\r\n\t * @return {V}\r\n\t */\r\n\t ImmutableTree.prototype.fold = function (fn) {\r\n\t return this.fold_(Path.Empty, fn);\r\n\t };\r\n\t /**\r\n\t * Recursive helper for public-facing fold() method\r\n\t * @template V\r\n\t * @param {!Path} pathSoFar\r\n\t * @param {function(Path, ?T, Object.):V} fn\r\n\t * @return {V}\r\n\t * @private\r\n\t */\r\n\t ImmutableTree.prototype.fold_ = function (pathSoFar, fn) {\r\n\t var accum = {};\r\n\t this.children.inorderTraversal(function (childKey, childTree) {\r\n\t accum[childKey] = childTree.fold_(pathSoFar.child(childKey), fn);\r\n\t });\r\n\t return fn(pathSoFar, this.value, accum);\r\n\t };\r\n\t /**\r\n\t * Find the first matching value on the given path. Return the result of applying f to it.\r\n\t * @template V\r\n\t * @param {!Path} path\r\n\t * @param {!function(!Path, !T):?V} f\r\n\t * @return {?V}\r\n\t */\r\n\t ImmutableTree.prototype.findOnPath = function (path, f) {\r\n\t return this.findOnPath_(path, Path.Empty, f);\r\n\t };\r\n\t ImmutableTree.prototype.findOnPath_ = function (pathToFollow, pathSoFar, f) {\r\n\t var result = this.value ? f(pathSoFar, this.value) : false;\r\n\t if (result) {\r\n\t return result;\r\n\t }\r\n\t else {\r\n\t if (pathToFollow.isEmpty()) {\r\n\t return null;\r\n\t }\r\n\t else {\r\n\t var front = pathToFollow.getFront();\r\n\t var nextChild = this.children.get(front);\r\n\t if (nextChild) {\r\n\t return nextChild.findOnPath_(pathToFollow.popFront(), pathSoFar.child(front), f);\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @param {!function(!Path, !T)} f\r\n\t * @returns {!ImmutableTree.}\r\n\t */\r\n\t ImmutableTree.prototype.foreachOnPath = function (path, f) {\r\n\t return this.foreachOnPath_(path, Path.Empty, f);\r\n\t };\r\n\t ImmutableTree.prototype.foreachOnPath_ = function (pathToFollow, currentRelativePath, f) {\r\n\t if (pathToFollow.isEmpty()) {\r\n\t return this;\r\n\t }\r\n\t else {\r\n\t if (this.value) {\r\n\t f(currentRelativePath, this.value);\r\n\t }\r\n\t var front = pathToFollow.getFront();\r\n\t var nextChild = this.children.get(front);\r\n\t if (nextChild) {\r\n\t return nextChild.foreachOnPath_(pathToFollow.popFront(), currentRelativePath.child(front), f);\r\n\t }\r\n\t else {\r\n\t return ImmutableTree.Empty;\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Calls the given function for each node in the tree that has a value.\r\n\t *\r\n\t * @param {function(!Path, !T)} f A function to be called with\r\n\t * the path from the root of the tree to a node, and the value at that node.\r\n\t * Called in depth-first order.\r\n\t */\r\n\t ImmutableTree.prototype.foreach = function (f) {\r\n\t this.foreach_(Path.Empty, f);\r\n\t };\r\n\t ImmutableTree.prototype.foreach_ = function (currentRelativePath, f) {\r\n\t this.children.inorderTraversal(function (childName, childTree) {\r\n\t childTree.foreach_(currentRelativePath.child(childName), f);\r\n\t });\r\n\t if (this.value) {\r\n\t f(currentRelativePath, this.value);\r\n\t }\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {function(string, !T)} f\r\n\t */\r\n\t ImmutableTree.prototype.foreachChild = function (f) {\r\n\t this.children.inorderTraversal(function (childName, childTree) {\r\n\t if (childTree.value) {\r\n\t f(childName, childTree.value);\r\n\t }\r\n\t });\r\n\t };\r\n\t ImmutableTree.Empty = new ImmutableTree(null);\r\n\t return ImmutableTree;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @param {!OperationSource} source\r\n\t * @param {!Path} path\r\n\t * @constructor\r\n\t * @implements {Operation}\r\n\t */\r\n\tvar ListenComplete = /** @class */ (function () {\r\n\t function ListenComplete(source, path) {\r\n\t this.source = source;\r\n\t this.path = path;\r\n\t /** @inheritDoc */\r\n\t this.type = OperationType.LISTEN_COMPLETE;\r\n\t }\r\n\t ListenComplete.prototype.operationForChild = function (childName) {\r\n\t if (this.path.isEmpty()) {\r\n\t return new ListenComplete(this.source, Path.Empty);\r\n\t }\r\n\t else {\r\n\t return new ListenComplete(this.source, this.path.popFront());\r\n\t }\r\n\t };\r\n\t return ListenComplete;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @param {!OperationSource} source\r\n\t * @param {!Path} path\r\n\t * @param {!Node} snap\r\n\t * @constructor\r\n\t * @implements {Operation}\r\n\t */\r\n\tvar Overwrite = /** @class */ (function () {\r\n\t function Overwrite(source, path, snap) {\r\n\t this.source = source;\r\n\t this.path = path;\r\n\t this.snap = snap;\r\n\t /** @inheritDoc */\r\n\t this.type = OperationType.OVERWRITE;\r\n\t }\r\n\t Overwrite.prototype.operationForChild = function (childName) {\r\n\t if (this.path.isEmpty()) {\r\n\t return new Overwrite(this.source, Path.Empty, this.snap.getImmediateChild(childName));\r\n\t }\r\n\t else {\r\n\t return new Overwrite(this.source, this.path.popFront(), this.snap);\r\n\t }\r\n\t };\r\n\t return Overwrite;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @param {!OperationSource} source\r\n\t * @param {!Path} path\r\n\t * @param {!ImmutableTree.} children\r\n\t * @constructor\r\n\t * @implements {Operation}\r\n\t */\r\n\tvar Merge = /** @class */ (function () {\r\n\t function Merge(\r\n\t /**@inheritDoc */ source, \r\n\t /**@inheritDoc */ path, \r\n\t /**@inheritDoc */ children) {\r\n\t this.source = source;\r\n\t this.path = path;\r\n\t this.children = children;\r\n\t /** @inheritDoc */\r\n\t this.type = OperationType.MERGE;\r\n\t }\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t Merge.prototype.operationForChild = function (childName) {\r\n\t if (this.path.isEmpty()) {\r\n\t var childTree = this.children.subtree(new Path(childName));\r\n\t if (childTree.isEmpty()) {\r\n\t // This child is unaffected\r\n\t return null;\r\n\t }\r\n\t else if (childTree.value) {\r\n\t // We have a snapshot for the child in question. This becomes an overwrite of the child.\r\n\t return new Overwrite(this.source, Path.Empty, childTree.value);\r\n\t }\r\n\t else {\r\n\t // This is a merge at a deeper level\r\n\t return new Merge(this.source, Path.Empty, childTree);\r\n\t }\r\n\t }\r\n\t else {\r\n\t util.assert(this.path.getFront() === childName, \"Can't get a merge for a child not on the path of the operation\");\r\n\t return new Merge(this.source, this.path.popFront(), this.children);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t Merge.prototype.toString = function () {\r\n\t return ('Operation(' +\r\n\t this.path +\r\n\t ': ' +\r\n\t this.source.toString() +\r\n\t ' merge: ' +\r\n\t this.children.toString() +\r\n\t ')');\r\n\t };\r\n\t return Merge;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * A cache node only stores complete children. Additionally it holds a flag whether the node can be considered fully\r\n\t * initialized in the sense that we know at one point in time this represented a valid state of the world, e.g.\r\n\t * initialized with data from the server, or a complete overwrite by the client. The filtered flag also tracks\r\n\t * whether a node potentially had children removed due to a filter.\r\n\t */\r\n\tvar CacheNode = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!Node} node_\r\n\t * @param {boolean} fullyInitialized_\r\n\t * @param {boolean} filtered_\r\n\t */\r\n\t function CacheNode(node_, fullyInitialized_, filtered_) {\r\n\t this.node_ = node_;\r\n\t this.fullyInitialized_ = fullyInitialized_;\r\n\t this.filtered_ = filtered_;\r\n\t }\r\n\t /**\r\n\t * Returns whether this node was fully initialized with either server data or a complete overwrite by the client\r\n\t * @return {boolean}\r\n\t */\r\n\t CacheNode.prototype.isFullyInitialized = function () {\r\n\t return this.fullyInitialized_;\r\n\t };\r\n\t /**\r\n\t * Returns whether this node is potentially missing children due to a filter applied to the node\r\n\t * @return {boolean}\r\n\t */\r\n\t CacheNode.prototype.isFiltered = function () {\r\n\t return this.filtered_;\r\n\t };\r\n\t /**\r\n\t * @param {!Path} path\r\n\t * @return {boolean}\r\n\t */\r\n\t CacheNode.prototype.isCompleteForPath = function (path) {\r\n\t if (path.isEmpty()) {\r\n\t return this.isFullyInitialized() && !this.filtered_;\r\n\t }\r\n\t var childKey = path.getFront();\r\n\t return this.isCompleteForChild(childKey);\r\n\t };\r\n\t /**\r\n\t * @param {!string} key\r\n\t * @return {boolean}\r\n\t */\r\n\t CacheNode.prototype.isCompleteForChild = function (key) {\r\n\t return ((this.isFullyInitialized() && !this.filtered_) || this.node_.hasChild(key));\r\n\t };\r\n\t /**\r\n\t * @return {!Node}\r\n\t */\r\n\t CacheNode.prototype.getNode = function () {\r\n\t return this.node_;\r\n\t };\r\n\t return CacheNode;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Stores the data we have cached for a view.\r\n\t *\r\n\t * serverSnap is the cached server data, eventSnap is the cached event data (server data plus any local writes).\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar ViewCache = /** @class */ (function () {\r\n\t /**\r\n\t *\r\n\t * @param {!CacheNode} eventCache_\r\n\t * @param {!CacheNode} serverCache_\r\n\t */\r\n\t function ViewCache(eventCache_, serverCache_) {\r\n\t this.eventCache_ = eventCache_;\r\n\t this.serverCache_ = serverCache_;\r\n\t }\r\n\t /**\r\n\t * @param {!Node} eventSnap\r\n\t * @param {boolean} complete\r\n\t * @param {boolean} filtered\r\n\t * @return {!ViewCache}\r\n\t */\r\n\t ViewCache.prototype.updateEventSnap = function (eventSnap, complete, filtered) {\r\n\t return new ViewCache(new CacheNode(eventSnap, complete, filtered), this.serverCache_);\r\n\t };\r\n\t /**\r\n\t * @param {!Node} serverSnap\r\n\t * @param {boolean} complete\r\n\t * @param {boolean} filtered\r\n\t * @return {!ViewCache}\r\n\t */\r\n\t ViewCache.prototype.updateServerSnap = function (serverSnap, complete, filtered) {\r\n\t return new ViewCache(this.eventCache_, new CacheNode(serverSnap, complete, filtered));\r\n\t };\r\n\t /**\r\n\t * @return {!CacheNode}\r\n\t */\r\n\t ViewCache.prototype.getEventCache = function () {\r\n\t return this.eventCache_;\r\n\t };\r\n\t /**\r\n\t * @return {?Node}\r\n\t */\r\n\t ViewCache.prototype.getCompleteEventSnap = function () {\r\n\t return this.eventCache_.isFullyInitialized()\r\n\t ? this.eventCache_.getNode()\r\n\t : null;\r\n\t };\r\n\t /**\r\n\t * @return {!CacheNode}\r\n\t */\r\n\t ViewCache.prototype.getServerCache = function () {\r\n\t return this.serverCache_;\r\n\t };\r\n\t /**\r\n\t * @return {?Node}\r\n\t */\r\n\t ViewCache.prototype.getCompleteServerSnap = function () {\r\n\t return this.serverCache_.isFullyInitialized()\r\n\t ? this.serverCache_.getNode()\r\n\t : null;\r\n\t };\r\n\t /**\r\n\t * @const\r\n\t * @type {ViewCache}\r\n\t */\r\n\t ViewCache.Empty = new ViewCache(new CacheNode(ChildrenNode.EMPTY_NODE, \r\n\t /*fullyInitialized=*/ false, \r\n\t /*filtered=*/ false), new CacheNode(ChildrenNode.EMPTY_NODE, \r\n\t /*fullyInitialized=*/ false, \r\n\t /*filtered=*/ false));\r\n\t return ViewCache;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @constructor\r\n\t * @struct\r\n\t * @param {!string} type The event type\r\n\t * @param {!Node} snapshotNode The data\r\n\t * @param {string=} childName The name for this child, if it's a child event\r\n\t * @param {Node=} oldSnap Used for intermediate processing of child changed events\r\n\t * @param {string=} prevName The name for the previous child, if applicable\r\n\t */\r\n\tvar Change = /** @class */ (function () {\r\n\t function Change(type, snapshotNode, childName, oldSnap, prevName) {\r\n\t this.type = type;\r\n\t this.snapshotNode = snapshotNode;\r\n\t this.childName = childName;\r\n\t this.oldSnap = oldSnap;\r\n\t this.prevName = prevName;\r\n\t }\r\n\t /**\r\n\t * @param {!Node} snapshot\r\n\t * @return {!Change}\r\n\t */\r\n\t Change.valueChange = function (snapshot) {\r\n\t return new Change(Change.VALUE, snapshot);\r\n\t };\r\n\t /**\r\n\t * @param {string} childKey\r\n\t * @param {!Node} snapshot\r\n\t * @return {!Change}\r\n\t */\r\n\t Change.childAddedChange = function (childKey, snapshot) {\r\n\t return new Change(Change.CHILD_ADDED, snapshot, childKey);\r\n\t };\r\n\t /**\r\n\t * @param {string} childKey\r\n\t * @param {!Node} snapshot\r\n\t * @return {!Change}\r\n\t */\r\n\t Change.childRemovedChange = function (childKey, snapshot) {\r\n\t return new Change(Change.CHILD_REMOVED, snapshot, childKey);\r\n\t };\r\n\t /**\r\n\t * @param {string} childKey\r\n\t * @param {!Node} newSnapshot\r\n\t * @param {!Node} oldSnapshot\r\n\t * @return {!Change}\r\n\t */\r\n\t Change.childChangedChange = function (childKey, newSnapshot, oldSnapshot) {\r\n\t return new Change(Change.CHILD_CHANGED, newSnapshot, childKey, oldSnapshot);\r\n\t };\r\n\t /**\r\n\t * @param {string} childKey\r\n\t * @param {!Node} snapshot\r\n\t * @return {!Change}\r\n\t */\r\n\t Change.childMovedChange = function (childKey, snapshot) {\r\n\t return new Change(Change.CHILD_MOVED, snapshot, childKey);\r\n\t };\r\n\t //event types\r\n\t /** Event type for a child added */\r\n\t Change.CHILD_ADDED = 'child_added';\r\n\t /** Event type for a child removed */\r\n\t Change.CHILD_REMOVED = 'child_removed';\r\n\t /** Event type for a child changed */\r\n\t Change.CHILD_CHANGED = 'child_changed';\r\n\t /** Event type for a child moved */\r\n\t Change.CHILD_MOVED = 'child_moved';\r\n\t /** Event type for a value change */\r\n\t Change.VALUE = 'value';\r\n\t return Change;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Doesn't really filter nodes but applies an index to the node and keeps track of any changes\r\n\t *\r\n\t * @constructor\r\n\t * @implements {NodeFilter}\r\n\t * @param {!Index} index\r\n\t */\r\n\tvar IndexedFilter = /** @class */ (function () {\r\n\t function IndexedFilter(index_) {\r\n\t this.index_ = index_;\r\n\t }\r\n\t IndexedFilter.prototype.updateChild = function (snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n\t util.assert(snap.isIndexed(this.index_), 'A node must be indexed if only a child is updated');\r\n\t var oldChild = snap.getImmediateChild(key);\r\n\t // Check if anything actually changed.\r\n\t if (oldChild.getChild(affectedPath).equals(newChild.getChild(affectedPath))) {\r\n\t // There's an edge case where a child can enter or leave the view because affectedPath was set to null.\r\n\t // In this case, affectedPath will appear null in both the old and new snapshots. So we need\r\n\t // to avoid treating these cases as \"nothing changed.\"\r\n\t if (oldChild.isEmpty() == newChild.isEmpty()) {\r\n\t // Nothing changed.\r\n\t // This assert should be valid, but it's expensive (can dominate perf testing) so don't actually do it.\r\n\t //assert(oldChild.equals(newChild), 'Old and new snapshots should be equal.');\r\n\t return snap;\r\n\t }\r\n\t }\r\n\t if (optChangeAccumulator != null) {\r\n\t if (newChild.isEmpty()) {\r\n\t if (snap.hasChild(key)) {\r\n\t optChangeAccumulator.trackChildChange(Change.childRemovedChange(key, oldChild));\r\n\t }\r\n\t else {\r\n\t util.assert(snap.isLeafNode(), 'A child remove without an old child only makes sense on a leaf node');\r\n\t }\r\n\t }\r\n\t else if (oldChild.isEmpty()) {\r\n\t optChangeAccumulator.trackChildChange(Change.childAddedChange(key, newChild));\r\n\t }\r\n\t else {\r\n\t optChangeAccumulator.trackChildChange(Change.childChangedChange(key, newChild, oldChild));\r\n\t }\r\n\t }\r\n\t if (snap.isLeafNode() && newChild.isEmpty()) {\r\n\t return snap;\r\n\t }\r\n\t else {\r\n\t // Make sure the node is indexed\r\n\t return snap.updateImmediateChild(key, newChild).withIndex(this.index_);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t IndexedFilter.prototype.updateFullNode = function (oldSnap, newSnap, optChangeAccumulator) {\r\n\t if (optChangeAccumulator != null) {\r\n\t if (!oldSnap.isLeafNode()) {\r\n\t oldSnap.forEachChild(PRIORITY_INDEX, function (key, childNode) {\r\n\t if (!newSnap.hasChild(key)) {\r\n\t optChangeAccumulator.trackChildChange(Change.childRemovedChange(key, childNode));\r\n\t }\r\n\t });\r\n\t }\r\n\t if (!newSnap.isLeafNode()) {\r\n\t newSnap.forEachChild(PRIORITY_INDEX, function (key, childNode) {\r\n\t if (oldSnap.hasChild(key)) {\r\n\t var oldChild = oldSnap.getImmediateChild(key);\r\n\t if (!oldChild.equals(childNode)) {\r\n\t optChangeAccumulator.trackChildChange(Change.childChangedChange(key, childNode, oldChild));\r\n\t }\r\n\t }\r\n\t else {\r\n\t optChangeAccumulator.trackChildChange(Change.childAddedChange(key, childNode));\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\t return newSnap.withIndex(this.index_);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t IndexedFilter.prototype.updatePriority = function (oldSnap, newPriority) {\r\n\t if (oldSnap.isEmpty()) {\r\n\t return ChildrenNode.EMPTY_NODE;\r\n\t }\r\n\t else {\r\n\t return oldSnap.updatePriority(newPriority);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t IndexedFilter.prototype.filtersNodes = function () {\r\n\t return false;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t IndexedFilter.prototype.getIndexedFilter = function () {\r\n\t return this;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t IndexedFilter.prototype.getIndex = function () {\r\n\t return this.index_;\r\n\t };\r\n\t return IndexedFilter;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @constructor\r\n\t */\r\n\tvar ChildChangeAccumulator = /** @class */ (function () {\r\n\t function ChildChangeAccumulator() {\r\n\t this.changeMap_ = {};\r\n\t }\r\n\t /**\r\n\t * @param {!Change} change\r\n\t */\r\n\t ChildChangeAccumulator.prototype.trackChildChange = function (change) {\r\n\t var type = change.type;\r\n\t var childKey /** @type {!string} */ = change.childName;\r\n\t util.assert(type == Change.CHILD_ADDED ||\r\n\t type == Change.CHILD_CHANGED ||\r\n\t type == Change.CHILD_REMOVED, 'Only child changes supported for tracking');\r\n\t util.assert(childKey !== '.priority', 'Only non-priority child changes can be tracked.');\r\n\t var oldChange = util.safeGet(this.changeMap_, childKey);\r\n\t if (oldChange) {\r\n\t var oldType = oldChange.type;\r\n\t if (type == Change.CHILD_ADDED && oldType == Change.CHILD_REMOVED) {\r\n\t this.changeMap_[childKey] = Change.childChangedChange(childKey, change.snapshotNode, oldChange.snapshotNode);\r\n\t }\r\n\t else if (type == Change.CHILD_REMOVED &&\r\n\t oldType == Change.CHILD_ADDED) {\r\n\t delete this.changeMap_[childKey];\r\n\t }\r\n\t else if (type == Change.CHILD_REMOVED &&\r\n\t oldType == Change.CHILD_CHANGED) {\r\n\t this.changeMap_[childKey] = Change.childRemovedChange(childKey, oldChange.oldSnap);\r\n\t }\r\n\t else if (type == Change.CHILD_CHANGED &&\r\n\t oldType == Change.CHILD_ADDED) {\r\n\t this.changeMap_[childKey] = Change.childAddedChange(childKey, change.snapshotNode);\r\n\t }\r\n\t else if (type == Change.CHILD_CHANGED &&\r\n\t oldType == Change.CHILD_CHANGED) {\r\n\t this.changeMap_[childKey] = Change.childChangedChange(childKey, change.snapshotNode, oldChange.oldSnap);\r\n\t }\r\n\t else {\r\n\t throw util.assertionError('Illegal combination of changes: ' +\r\n\t change +\r\n\t ' occurred after ' +\r\n\t oldChange);\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.changeMap_[childKey] = change;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @return {!Array.}\r\n\t */\r\n\t ChildChangeAccumulator.prototype.getChanges = function () {\r\n\t return util.getValues(this.changeMap_);\r\n\t };\r\n\t return ChildChangeAccumulator;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * An implementation of CompleteChildSource that never returns any additional children\r\n\t *\r\n\t * @private\r\n\t * @constructor\r\n\t * @implements CompleteChildSource\r\n\t */\r\n\tvar NoCompleteChildSource_ = /** @class */ (function () {\r\n\t function NoCompleteChildSource_() {\r\n\t }\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t NoCompleteChildSource_.prototype.getCompleteChild = function (childKey) {\r\n\t return null;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t NoCompleteChildSource_.prototype.getChildAfterChild = function (index, child, reverse) {\r\n\t return null;\r\n\t };\r\n\t return NoCompleteChildSource_;\r\n\t}());\r\n\t/**\r\n\t * Singleton instance.\r\n\t * @const\r\n\t * @type {!CompleteChildSource}\r\n\t */\r\n\tvar NO_COMPLETE_CHILD_SOURCE = new NoCompleteChildSource_();\r\n\t/**\r\n\t * An implementation of CompleteChildSource that uses a WriteTree in addition to any other server data or\r\n\t * old event caches available to calculate complete children.\r\n\t *\r\n\t *\r\n\t * @implements CompleteChildSource\r\n\t */\r\n\tvar WriteTreeCompleteChildSource = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!WriteTreeRef} writes_\r\n\t * @param {!ViewCache} viewCache_\r\n\t * @param {?Node} optCompleteServerCache_\r\n\t */\r\n\t function WriteTreeCompleteChildSource(writes_, viewCache_, optCompleteServerCache_) {\r\n\t if (optCompleteServerCache_ === void 0) { optCompleteServerCache_ = null; }\r\n\t this.writes_ = writes_;\r\n\t this.viewCache_ = viewCache_;\r\n\t this.optCompleteServerCache_ = optCompleteServerCache_;\r\n\t }\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t WriteTreeCompleteChildSource.prototype.getCompleteChild = function (childKey) {\r\n\t var node = this.viewCache_.getEventCache();\r\n\t if (node.isCompleteForChild(childKey)) {\r\n\t return node.getNode().getImmediateChild(childKey);\r\n\t }\r\n\t else {\r\n\t var serverNode = this.optCompleteServerCache_ != null\r\n\t ? new CacheNode(this.optCompleteServerCache_, true, false)\r\n\t : this.viewCache_.getServerCache();\r\n\t return this.writes_.calcCompleteChild(childKey, serverNode);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t WriteTreeCompleteChildSource.prototype.getChildAfterChild = function (index, child, reverse) {\r\n\t var completeServerData = this.optCompleteServerCache_ != null\r\n\t ? this.optCompleteServerCache_\r\n\t : this.viewCache_.getCompleteServerSnap();\r\n\t var nodes = this.writes_.calcIndexedSlice(completeServerData, child, 1, reverse, index);\r\n\t if (nodes.length === 0) {\r\n\t return null;\r\n\t }\r\n\t else {\r\n\t return nodes[0];\r\n\t }\r\n\t };\r\n\t return WriteTreeCompleteChildSource;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @constructor\r\n\t * @struct\r\n\t */\r\n\tvar ProcessorResult = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!ViewCache} viewCache\r\n\t * @param {!Array.} changes\r\n\t */\r\n\t function ProcessorResult(viewCache, changes) {\r\n\t this.viewCache = viewCache;\r\n\t this.changes = changes;\r\n\t }\r\n\t return ProcessorResult;\r\n\t}());\r\n\t/**\r\n\t * @constructor\r\n\t */\r\n\tvar ViewProcessor = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!NodeFilter} filter_\r\n\t */\r\n\t function ViewProcessor(filter_) {\r\n\t this.filter_ = filter_;\r\n\t }\r\n\t /**\r\n\t * @param {!ViewCache} viewCache\r\n\t */\r\n\t ViewProcessor.prototype.assertIndexed = function (viewCache) {\r\n\t util.assert(viewCache\r\n\t .getEventCache()\r\n\t .getNode()\r\n\t .isIndexed(this.filter_.getIndex()), 'Event snap not indexed');\r\n\t util.assert(viewCache\r\n\t .getServerCache()\r\n\t .getNode()\r\n\t .isIndexed(this.filter_.getIndex()), 'Server snap not indexed');\r\n\t };\r\n\t /**\r\n\t * @param {!ViewCache} oldViewCache\r\n\t * @param {!Operation} operation\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @param {?Node} completeCache\r\n\t * @return {!ProcessorResult}\r\n\t */\r\n\t ViewProcessor.prototype.applyOperation = function (oldViewCache, operation, writesCache, completeCache) {\r\n\t var accumulator = new ChildChangeAccumulator();\r\n\t var newViewCache, filterServerNode;\r\n\t if (operation.type === OperationType.OVERWRITE) {\r\n\t var overwrite = operation;\r\n\t if (overwrite.source.fromUser) {\r\n\t newViewCache = this.applyUserOverwrite_(oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, accumulator);\r\n\t }\r\n\t else {\r\n\t util.assert(overwrite.source.fromServer, 'Unknown source.');\r\n\t // We filter the node if it's a tagged update or the node has been previously filtered and the\r\n\t // update is not at the root in which case it is ok (and necessary) to mark the node unfiltered\r\n\t // again\r\n\t filterServerNode =\r\n\t overwrite.source.tagged ||\r\n\t (oldViewCache.getServerCache().isFiltered() &&\r\n\t !overwrite.path.isEmpty());\r\n\t newViewCache = this.applyServerOverwrite_(oldViewCache, overwrite.path, overwrite.snap, writesCache, completeCache, filterServerNode, accumulator);\r\n\t }\r\n\t }\r\n\t else if (operation.type === OperationType.MERGE) {\r\n\t var merge = operation;\r\n\t if (merge.source.fromUser) {\r\n\t newViewCache = this.applyUserMerge_(oldViewCache, merge.path, merge.children, writesCache, completeCache, accumulator);\r\n\t }\r\n\t else {\r\n\t util.assert(merge.source.fromServer, 'Unknown source.');\r\n\t // We filter the node if it's a tagged update or the node has been previously filtered\r\n\t filterServerNode =\r\n\t merge.source.tagged || oldViewCache.getServerCache().isFiltered();\r\n\t newViewCache = this.applyServerMerge_(oldViewCache, merge.path, merge.children, writesCache, completeCache, filterServerNode, accumulator);\r\n\t }\r\n\t }\r\n\t else if (operation.type === OperationType.ACK_USER_WRITE) {\r\n\t var ackUserWrite = operation;\r\n\t if (!ackUserWrite.revert) {\r\n\t newViewCache = this.ackUserWrite_(oldViewCache, ackUserWrite.path, ackUserWrite.affectedTree, writesCache, completeCache, accumulator);\r\n\t }\r\n\t else {\r\n\t newViewCache = this.revertUserWrite_(oldViewCache, ackUserWrite.path, writesCache, completeCache, accumulator);\r\n\t }\r\n\t }\r\n\t else if (operation.type === OperationType.LISTEN_COMPLETE) {\r\n\t newViewCache = this.listenComplete_(oldViewCache, operation.path, writesCache, accumulator);\r\n\t }\r\n\t else {\r\n\t throw util.assertionError('Unknown operation type: ' + operation.type);\r\n\t }\r\n\t var changes = accumulator.getChanges();\r\n\t ViewProcessor.maybeAddValueEvent_(oldViewCache, newViewCache, changes);\r\n\t return new ProcessorResult(newViewCache, changes);\r\n\t };\r\n\t /**\r\n\t * @param {!ViewCache} oldViewCache\r\n\t * @param {!ViewCache} newViewCache\r\n\t * @param {!Array.} accumulator\r\n\t * @private\r\n\t */\r\n\t ViewProcessor.maybeAddValueEvent_ = function (oldViewCache, newViewCache, accumulator) {\r\n\t var eventSnap = newViewCache.getEventCache();\r\n\t if (eventSnap.isFullyInitialized()) {\r\n\t var isLeafOrEmpty = eventSnap.getNode().isLeafNode() || eventSnap.getNode().isEmpty();\r\n\t var oldCompleteSnap = oldViewCache.getCompleteEventSnap();\r\n\t if (accumulator.length > 0 ||\r\n\t !oldViewCache.getEventCache().isFullyInitialized() ||\r\n\t (isLeafOrEmpty &&\r\n\t !eventSnap\r\n\t .getNode()\r\n\t .equals(/** @type {!Node} */ (oldCompleteSnap))) ||\r\n\t !eventSnap\r\n\t .getNode()\r\n\t .getPriority()\r\n\t .equals(oldCompleteSnap.getPriority())) {\r\n\t accumulator.push(Change.valueChange(\r\n\t /** @type {!Node} */ newViewCache.getCompleteEventSnap()));\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!ViewCache} viewCache\r\n\t * @param {!Path} changePath\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @param {!CompleteChildSource} source\r\n\t * @param {!ChildChangeAccumulator} accumulator\r\n\t * @return {!ViewCache}\r\n\t * @private\r\n\t */\r\n\t ViewProcessor.prototype.generateEventCacheAfterServerEvent_ = function (viewCache, changePath, writesCache, source, accumulator) {\r\n\t var oldEventSnap = viewCache.getEventCache();\r\n\t if (writesCache.shadowingWrite(changePath) != null) {\r\n\t // we have a shadowing write, ignore changes\r\n\t return viewCache;\r\n\t }\r\n\t else {\r\n\t var newEventCache = void 0, serverNode = void 0;\r\n\t if (changePath.isEmpty()) {\r\n\t // TODO: figure out how this plays with \"sliding ack windows\"\r\n\t util.assert(viewCache.getServerCache().isFullyInitialized(), 'If change path is empty, we must have complete server data');\r\n\t if (viewCache.getServerCache().isFiltered()) {\r\n\t // We need to special case this, because we need to only apply writes to complete children, or\r\n\t // we might end up raising events for incomplete children. If the server data is filtered deep\r\n\t // writes cannot be guaranteed to be complete\r\n\t var serverCache = viewCache.getCompleteServerSnap();\r\n\t var completeChildren = serverCache instanceof ChildrenNode\r\n\t ? serverCache\r\n\t : ChildrenNode.EMPTY_NODE;\r\n\t var completeEventChildren = writesCache.calcCompleteEventChildren(completeChildren);\r\n\t newEventCache = this.filter_.updateFullNode(viewCache.getEventCache().getNode(), completeEventChildren, accumulator);\r\n\t }\r\n\t else {\r\n\t var completeNode = writesCache.calcCompleteEventCache(viewCache.getCompleteServerSnap());\r\n\t newEventCache = this.filter_.updateFullNode(viewCache.getEventCache().getNode(), completeNode, accumulator);\r\n\t }\r\n\t }\r\n\t else {\r\n\t var childKey = changePath.getFront();\r\n\t if (childKey == '.priority') {\r\n\t util.assert(changePath.getLength() == 1, \"Can't have a priority with additional path components\");\r\n\t var oldEventNode = oldEventSnap.getNode();\r\n\t serverNode = viewCache.getServerCache().getNode();\r\n\t // we might have overwrites for this priority\r\n\t var updatedPriority = writesCache.calcEventCacheAfterServerOverwrite(changePath, oldEventNode, serverNode);\r\n\t if (updatedPriority != null) {\r\n\t newEventCache = this.filter_.updatePriority(oldEventNode, updatedPriority);\r\n\t }\r\n\t else {\r\n\t // priority didn't change, keep old node\r\n\t newEventCache = oldEventSnap.getNode();\r\n\t }\r\n\t }\r\n\t else {\r\n\t var childChangePath = changePath.popFront();\r\n\t // update child\r\n\t var newEventChild = void 0;\r\n\t if (oldEventSnap.isCompleteForChild(childKey)) {\r\n\t serverNode = viewCache.getServerCache().getNode();\r\n\t var eventChildUpdate = writesCache.calcEventCacheAfterServerOverwrite(changePath, oldEventSnap.getNode(), serverNode);\r\n\t if (eventChildUpdate != null) {\r\n\t newEventChild = oldEventSnap\r\n\t .getNode()\r\n\t .getImmediateChild(childKey)\r\n\t .updateChild(childChangePath, eventChildUpdate);\r\n\t }\r\n\t else {\r\n\t // Nothing changed, just keep the old child\r\n\t newEventChild = oldEventSnap\r\n\t .getNode()\r\n\t .getImmediateChild(childKey);\r\n\t }\r\n\t }\r\n\t else {\r\n\t newEventChild = writesCache.calcCompleteChild(childKey, viewCache.getServerCache());\r\n\t }\r\n\t if (newEventChild != null) {\r\n\t newEventCache = this.filter_.updateChild(oldEventSnap.getNode(), childKey, newEventChild, childChangePath, source, accumulator);\r\n\t }\r\n\t else {\r\n\t // no complete child available or no change\r\n\t newEventCache = oldEventSnap.getNode();\r\n\t }\r\n\t }\r\n\t }\r\n\t return viewCache.updateEventSnap(newEventCache, oldEventSnap.isFullyInitialized() || changePath.isEmpty(), this.filter_.filtersNodes());\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!ViewCache} oldViewCache\r\n\t * @param {!Path} changePath\r\n\t * @param {!Node} changedSnap\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @param {?Node} completeCache\r\n\t * @param {boolean} filterServerNode\r\n\t * @param {!ChildChangeAccumulator} accumulator\r\n\t * @return {!ViewCache}\r\n\t * @private\r\n\t */\r\n\t ViewProcessor.prototype.applyServerOverwrite_ = function (oldViewCache, changePath, changedSnap, writesCache, completeCache, filterServerNode, accumulator) {\r\n\t var oldServerSnap = oldViewCache.getServerCache();\r\n\t var newServerCache;\r\n\t var serverFilter = filterServerNode\r\n\t ? this.filter_\r\n\t : this.filter_.getIndexedFilter();\r\n\t if (changePath.isEmpty()) {\r\n\t newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), changedSnap, null);\r\n\t }\r\n\t else if (serverFilter.filtersNodes() && !oldServerSnap.isFiltered()) {\r\n\t // we want to filter the server node, but we didn't filter the server node yet, so simulate a full update\r\n\t var newServerNode = oldServerSnap\r\n\t .getNode()\r\n\t .updateChild(changePath, changedSnap);\r\n\t newServerCache = serverFilter.updateFullNode(oldServerSnap.getNode(), newServerNode, null);\r\n\t }\r\n\t else {\r\n\t var childKey = changePath.getFront();\r\n\t if (!oldServerSnap.isCompleteForPath(changePath) &&\r\n\t changePath.getLength() > 1) {\r\n\t // We don't update incomplete nodes with updates intended for other listeners\r\n\t return oldViewCache;\r\n\t }\r\n\t var childChangePath = changePath.popFront();\r\n\t var childNode = oldServerSnap.getNode().getImmediateChild(childKey);\r\n\t var newChildNode = childNode.updateChild(childChangePath, changedSnap);\r\n\t if (childKey == '.priority') {\r\n\t newServerCache = serverFilter.updatePriority(oldServerSnap.getNode(), newChildNode);\r\n\t }\r\n\t else {\r\n\t newServerCache = serverFilter.updateChild(oldServerSnap.getNode(), childKey, newChildNode, childChangePath, NO_COMPLETE_CHILD_SOURCE, null);\r\n\t }\r\n\t }\r\n\t var newViewCache = oldViewCache.updateServerSnap(newServerCache, oldServerSnap.isFullyInitialized() || changePath.isEmpty(), serverFilter.filtersNodes());\r\n\t var source = new WriteTreeCompleteChildSource(writesCache, newViewCache, completeCache);\r\n\t return this.generateEventCacheAfterServerEvent_(newViewCache, changePath, writesCache, source, accumulator);\r\n\t };\r\n\t /**\r\n\t * @param {!ViewCache} oldViewCache\r\n\t * @param {!Path} changePath\r\n\t * @param {!Node} changedSnap\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @param {?Node} completeCache\r\n\t * @param {!ChildChangeAccumulator} accumulator\r\n\t * @return {!ViewCache}\r\n\t * @private\r\n\t */\r\n\t ViewProcessor.prototype.applyUserOverwrite_ = function (oldViewCache, changePath, changedSnap, writesCache, completeCache, accumulator) {\r\n\t var oldEventSnap = oldViewCache.getEventCache();\r\n\t var newViewCache, newEventCache;\r\n\t var source = new WriteTreeCompleteChildSource(writesCache, oldViewCache, completeCache);\r\n\t if (changePath.isEmpty()) {\r\n\t newEventCache = this.filter_.updateFullNode(oldViewCache.getEventCache().getNode(), changedSnap, accumulator);\r\n\t newViewCache = oldViewCache.updateEventSnap(newEventCache, true, this.filter_.filtersNodes());\r\n\t }\r\n\t else {\r\n\t var childKey = changePath.getFront();\r\n\t if (childKey === '.priority') {\r\n\t newEventCache = this.filter_.updatePriority(oldViewCache.getEventCache().getNode(), changedSnap);\r\n\t newViewCache = oldViewCache.updateEventSnap(newEventCache, oldEventSnap.isFullyInitialized(), oldEventSnap.isFiltered());\r\n\t }\r\n\t else {\r\n\t var childChangePath = changePath.popFront();\r\n\t var oldChild = oldEventSnap.getNode().getImmediateChild(childKey);\r\n\t var newChild = void 0;\r\n\t if (childChangePath.isEmpty()) {\r\n\t // Child overwrite, we can replace the child\r\n\t newChild = changedSnap;\r\n\t }\r\n\t else {\r\n\t var childNode = source.getCompleteChild(childKey);\r\n\t if (childNode != null) {\r\n\t if (childChangePath.getBack() === '.priority' &&\r\n\t childNode.getChild(childChangePath.parent()).isEmpty()) {\r\n\t // This is a priority update on an empty node. If this node exists on the server, the\r\n\t // server will send down the priority in the update, so ignore for now\r\n\t newChild = childNode;\r\n\t }\r\n\t else {\r\n\t newChild = childNode.updateChild(childChangePath, changedSnap);\r\n\t }\r\n\t }\r\n\t else {\r\n\t // There is no complete child node available\r\n\t newChild = ChildrenNode.EMPTY_NODE;\r\n\t }\r\n\t }\r\n\t if (!oldChild.equals(newChild)) {\r\n\t var newEventSnap = this.filter_.updateChild(oldEventSnap.getNode(), childKey, newChild, childChangePath, source, accumulator);\r\n\t newViewCache = oldViewCache.updateEventSnap(newEventSnap, oldEventSnap.isFullyInitialized(), this.filter_.filtersNodes());\r\n\t }\r\n\t else {\r\n\t newViewCache = oldViewCache;\r\n\t }\r\n\t }\r\n\t }\r\n\t return newViewCache;\r\n\t };\r\n\t /**\r\n\t * @param {!ViewCache} viewCache\r\n\t * @param {string} childKey\r\n\t * @return {boolean}\r\n\t * @private\r\n\t */\r\n\t ViewProcessor.cacheHasChild_ = function (viewCache, childKey) {\r\n\t return viewCache.getEventCache().isCompleteForChild(childKey);\r\n\t };\r\n\t /**\r\n\t * @param {!ViewCache} viewCache\r\n\t * @param {!Path} path\r\n\t * @param {ImmutableTree.} changedChildren\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @param {?Node} serverCache\r\n\t * @param {!ChildChangeAccumulator} accumulator\r\n\t * @return {!ViewCache}\r\n\t * @private\r\n\t */\r\n\t ViewProcessor.prototype.applyUserMerge_ = function (viewCache, path, changedChildren, writesCache, serverCache, accumulator) {\r\n\t var _this = this;\r\n\t // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n\t // window leaving room for new items. It's important we process these changes first, so we\r\n\t // iterate the changes twice, first processing any that affect items currently in view.\r\n\t // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n\t // and event snap. I'm not sure if this will result in edge cases when a child is in one but\r\n\t // not the other.\r\n\t var curViewCache = viewCache;\r\n\t changedChildren.foreach(function (relativePath, childNode) {\r\n\t var writePath = path.child(relativePath);\r\n\t if (ViewProcessor.cacheHasChild_(viewCache, writePath.getFront())) {\r\n\t curViewCache = _this.applyUserOverwrite_(curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n\t }\r\n\t });\r\n\t changedChildren.foreach(function (relativePath, childNode) {\r\n\t var writePath = path.child(relativePath);\r\n\t if (!ViewProcessor.cacheHasChild_(viewCache, writePath.getFront())) {\r\n\t curViewCache = _this.applyUserOverwrite_(curViewCache, writePath, childNode, writesCache, serverCache, accumulator);\r\n\t }\r\n\t });\r\n\t return curViewCache;\r\n\t };\r\n\t /**\r\n\t * @param {!Node} node\r\n\t * @param {ImmutableTree.} merge\r\n\t * @return {!Node}\r\n\t * @private\r\n\t */\r\n\t ViewProcessor.prototype.applyMerge_ = function (node, merge) {\r\n\t merge.foreach(function (relativePath, childNode) {\r\n\t node = node.updateChild(relativePath, childNode);\r\n\t });\r\n\t return node;\r\n\t };\r\n\t /**\r\n\t * @param {!ViewCache} viewCache\r\n\t * @param {!Path} path\r\n\t * @param {!ImmutableTree.} changedChildren\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @param {?Node} serverCache\r\n\t * @param {boolean} filterServerNode\r\n\t * @param {!ChildChangeAccumulator} accumulator\r\n\t * @return {!ViewCache}\r\n\t * @private\r\n\t */\r\n\t ViewProcessor.prototype.applyServerMerge_ = function (viewCache, path, changedChildren, writesCache, serverCache, filterServerNode, accumulator) {\r\n\t var _this = this;\r\n\t // If we don't have a cache yet, this merge was intended for a previously listen in the same location. Ignore it and\r\n\t // wait for the complete data update coming soon.\r\n\t if (viewCache\r\n\t .getServerCache()\r\n\t .getNode()\r\n\t .isEmpty() &&\r\n\t !viewCache.getServerCache().isFullyInitialized()) {\r\n\t return viewCache;\r\n\t }\r\n\t // HACK: In the case of a limit query, there may be some changes that bump things out of the\r\n\t // window leaving room for new items. It's important we process these changes first, so we\r\n\t // iterate the changes twice, first processing any that affect items currently in view.\r\n\t // TODO: I consider an item \"in view\" if cacheHasChild is true, which checks both the server\r\n\t // and event snap. I'm not sure if this will result in edge cases when a child is in one but\r\n\t // not the other.\r\n\t var curViewCache = viewCache;\r\n\t var viewMergeTree;\r\n\t if (path.isEmpty()) {\r\n\t viewMergeTree = changedChildren;\r\n\t }\r\n\t else {\r\n\t viewMergeTree = ImmutableTree.Empty.setTree(path, changedChildren);\r\n\t }\r\n\t var serverNode = viewCache.getServerCache().getNode();\r\n\t viewMergeTree.children.inorderTraversal(function (childKey, childTree) {\r\n\t if (serverNode.hasChild(childKey)) {\r\n\t var serverChild = viewCache\r\n\t .getServerCache()\r\n\t .getNode()\r\n\t .getImmediateChild(childKey);\r\n\t var newChild = _this.applyMerge_(serverChild, childTree);\r\n\t curViewCache = _this.applyServerOverwrite_(curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n\t }\r\n\t });\r\n\t viewMergeTree.children.inorderTraversal(function (childKey, childMergeTree) {\r\n\t var isUnknownDeepMerge = !viewCache.getServerCache().isCompleteForChild(childKey) &&\r\n\t childMergeTree.value == null;\r\n\t if (!serverNode.hasChild(childKey) && !isUnknownDeepMerge) {\r\n\t var serverChild = viewCache\r\n\t .getServerCache()\r\n\t .getNode()\r\n\t .getImmediateChild(childKey);\r\n\t var newChild = _this.applyMerge_(serverChild, childMergeTree);\r\n\t curViewCache = _this.applyServerOverwrite_(curViewCache, new Path(childKey), newChild, writesCache, serverCache, filterServerNode, accumulator);\r\n\t }\r\n\t });\r\n\t return curViewCache;\r\n\t };\r\n\t /**\r\n\t * @param {!ViewCache} viewCache\r\n\t * @param {!Path} ackPath\r\n\t * @param {!ImmutableTree} affectedTree\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @param {?Node} completeCache\r\n\t * @param {!ChildChangeAccumulator} accumulator\r\n\t * @return {!ViewCache}\r\n\t * @private\r\n\t */\r\n\t ViewProcessor.prototype.ackUserWrite_ = function (viewCache, ackPath, affectedTree, writesCache, completeCache, accumulator) {\r\n\t if (writesCache.shadowingWrite(ackPath) != null) {\r\n\t return viewCache;\r\n\t }\r\n\t // Only filter server node if it is currently filtered\r\n\t var filterServerNode = viewCache.getServerCache().isFiltered();\r\n\t // Essentially we'll just get our existing server cache for the affected paths and re-apply it as a server update\r\n\t // now that it won't be shadowed.\r\n\t var serverCache = viewCache.getServerCache();\r\n\t if (affectedTree.value != null) {\r\n\t // This is an overwrite.\r\n\t if ((ackPath.isEmpty() && serverCache.isFullyInitialized()) ||\r\n\t serverCache.isCompleteForPath(ackPath)) {\r\n\t return this.applyServerOverwrite_(viewCache, ackPath, serverCache.getNode().getChild(ackPath), writesCache, completeCache, filterServerNode, accumulator);\r\n\t }\r\n\t else if (ackPath.isEmpty()) {\r\n\t // This is a goofy edge case where we are acking data at this location but don't have full data. We\r\n\t // should just re-apply whatever we have in our cache as a merge.\r\n\t var changedChildren_1 = ImmutableTree.Empty;\r\n\t serverCache.getNode().forEachChild(KEY_INDEX, function (name, node) {\r\n\t changedChildren_1 = changedChildren_1.set(new Path(name), node);\r\n\t });\r\n\t return this.applyServerMerge_(viewCache, ackPath, changedChildren_1, writesCache, completeCache, filterServerNode, accumulator);\r\n\t }\r\n\t else {\r\n\t return viewCache;\r\n\t }\r\n\t }\r\n\t else {\r\n\t // This is a merge.\r\n\t var changedChildren_2 = ImmutableTree.Empty;\r\n\t affectedTree.foreach(function (mergePath, value) {\r\n\t var serverCachePath = ackPath.child(mergePath);\r\n\t if (serverCache.isCompleteForPath(serverCachePath)) {\r\n\t changedChildren_2 = changedChildren_2.set(mergePath, serverCache.getNode().getChild(serverCachePath));\r\n\t }\r\n\t });\r\n\t return this.applyServerMerge_(viewCache, ackPath, changedChildren_2, writesCache, completeCache, filterServerNode, accumulator);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!ViewCache} viewCache\r\n\t * @param {!Path} path\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @param {!ChildChangeAccumulator} accumulator\r\n\t * @return {!ViewCache}\r\n\t * @private\r\n\t */\r\n\t ViewProcessor.prototype.listenComplete_ = function (viewCache, path, writesCache, accumulator) {\r\n\t var oldServerNode = viewCache.getServerCache();\r\n\t var newViewCache = viewCache.updateServerSnap(oldServerNode.getNode(), oldServerNode.isFullyInitialized() || path.isEmpty(), oldServerNode.isFiltered());\r\n\t return this.generateEventCacheAfterServerEvent_(newViewCache, path, writesCache, NO_COMPLETE_CHILD_SOURCE, accumulator);\r\n\t };\r\n\t /**\r\n\t * @param {!ViewCache} viewCache\r\n\t * @param {!Path} path\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @param {?Node} completeServerCache\r\n\t * @param {!ChildChangeAccumulator} accumulator\r\n\t * @return {!ViewCache}\r\n\t * @private\r\n\t */\r\n\t ViewProcessor.prototype.revertUserWrite_ = function (viewCache, path, writesCache, completeServerCache, accumulator) {\r\n\t var complete;\r\n\t if (writesCache.shadowingWrite(path) != null) {\r\n\t return viewCache;\r\n\t }\r\n\t else {\r\n\t var source = new WriteTreeCompleteChildSource(writesCache, viewCache, completeServerCache);\r\n\t var oldEventCache = viewCache.getEventCache().getNode();\r\n\t var newEventCache = void 0;\r\n\t if (path.isEmpty() || path.getFront() === '.priority') {\r\n\t var newNode = void 0;\r\n\t if (viewCache.getServerCache().isFullyInitialized()) {\r\n\t newNode = writesCache.calcCompleteEventCache(viewCache.getCompleteServerSnap());\r\n\t }\r\n\t else {\r\n\t var serverChildren = viewCache.getServerCache().getNode();\r\n\t util.assert(serverChildren instanceof ChildrenNode, 'serverChildren would be complete if leaf node');\r\n\t newNode = writesCache.calcCompleteEventChildren(serverChildren);\r\n\t }\r\n\t newNode = newNode;\r\n\t newEventCache = this.filter_.updateFullNode(oldEventCache, newNode, accumulator);\r\n\t }\r\n\t else {\r\n\t var childKey = path.getFront();\r\n\t var newChild = writesCache.calcCompleteChild(childKey, viewCache.getServerCache());\r\n\t if (newChild == null &&\r\n\t viewCache.getServerCache().isCompleteForChild(childKey)) {\r\n\t newChild = oldEventCache.getImmediateChild(childKey);\r\n\t }\r\n\t if (newChild != null) {\r\n\t newEventCache = this.filter_.updateChild(oldEventCache, childKey, newChild, path.popFront(), source, accumulator);\r\n\t }\r\n\t else if (viewCache\r\n\t .getEventCache()\r\n\t .getNode()\r\n\t .hasChild(childKey)) {\r\n\t // No complete child available, delete the existing one, if any\r\n\t newEventCache = this.filter_.updateChild(oldEventCache, childKey, ChildrenNode.EMPTY_NODE, path.popFront(), source, accumulator);\r\n\t }\r\n\t else {\r\n\t newEventCache = oldEventCache;\r\n\t }\r\n\t if (newEventCache.isEmpty() &&\r\n\t viewCache.getServerCache().isFullyInitialized()) {\r\n\t // We might have reverted all child writes. Maybe the old event was a leaf node\r\n\t complete = writesCache.calcCompleteEventCache(viewCache.getCompleteServerSnap());\r\n\t if (complete.isLeafNode()) {\r\n\t newEventCache = this.filter_.updateFullNode(newEventCache, complete, accumulator);\r\n\t }\r\n\t }\r\n\t }\r\n\t complete =\r\n\t viewCache.getServerCache().isFullyInitialized() ||\r\n\t writesCache.shadowingWrite(Path.Empty) != null;\r\n\t return viewCache.updateEventSnap(newEventCache, complete, this.filter_.filtersNodes());\r\n\t }\r\n\t };\r\n\t return ViewProcessor;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * An EventGenerator is used to convert \"raw\" changes (Change) as computed by the\r\n\t * CacheDiffer into actual events (Event) that can be raised. See generateEventsForChanges()\r\n\t * for details.\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar EventGenerator = /** @class */ (function () {\r\n\t /**\r\n\t *\r\n\t * @param {!Query} query_\r\n\t */\r\n\t function EventGenerator(query_) {\r\n\t this.query_ = query_;\r\n\t /**\r\n\t * @private\r\n\t * @type {!Index}\r\n\t */\r\n\t this.index_ = this.query_.getQueryParams().getIndex();\r\n\t }\r\n\t /**\r\n\t * Given a set of raw changes (no moved events and prevName not specified yet), and a set of\r\n\t * EventRegistrations that should be notified of these changes, generate the actual events to be raised.\r\n\t *\r\n\t * Notes:\r\n\t * - child_moved events will be synthesized at this time for any child_changed events that affect\r\n\t * our index.\r\n\t * - prevName will be calculated based on the index ordering.\r\n\t *\r\n\t * @param {!Array.} changes\r\n\t * @param {!Node} eventCache\r\n\t * @param {!Array.} eventRegistrations\r\n\t * @return {!Array.}\r\n\t */\r\n\t EventGenerator.prototype.generateEventsForChanges = function (changes, eventCache, eventRegistrations) {\r\n\t var _this = this;\r\n\t var events = [];\r\n\t var moves = [];\r\n\t changes.forEach(function (change) {\r\n\t if (change.type === Change.CHILD_CHANGED &&\r\n\t _this.index_.indexedValueChanged(change.oldSnap, change.snapshotNode)) {\r\n\t moves.push(Change.childMovedChange(change.childName, change.snapshotNode));\r\n\t }\r\n\t });\r\n\t this.generateEventsForType_(events, Change.CHILD_REMOVED, changes, eventRegistrations, eventCache);\r\n\t this.generateEventsForType_(events, Change.CHILD_ADDED, changes, eventRegistrations, eventCache);\r\n\t this.generateEventsForType_(events, Change.CHILD_MOVED, moves, eventRegistrations, eventCache);\r\n\t this.generateEventsForType_(events, Change.CHILD_CHANGED, changes, eventRegistrations, eventCache);\r\n\t this.generateEventsForType_(events, Change.VALUE, changes, eventRegistrations, eventCache);\r\n\t return events;\r\n\t };\r\n\t /**\r\n\t * Given changes of a single change type, generate the corresponding events.\r\n\t *\r\n\t * @param {!Array.} events\r\n\t * @param {!string} eventType\r\n\t * @param {!Array.} changes\r\n\t * @param {!Array.} registrations\r\n\t * @param {!Node} eventCache\r\n\t * @private\r\n\t */\r\n\t EventGenerator.prototype.generateEventsForType_ = function (events, eventType, changes, registrations, eventCache) {\r\n\t var _this = this;\r\n\t var filteredChanges = changes.filter(function (change) { return change.type === eventType; });\r\n\t filteredChanges.sort(this.compareChanges_.bind(this));\r\n\t filteredChanges.forEach(function (change) {\r\n\t var materializedChange = _this.materializeSingleChange_(change, eventCache);\r\n\t registrations.forEach(function (registration) {\r\n\t if (registration.respondsTo(change.type)) {\r\n\t events.push(registration.createEvent(materializedChange, _this.query_));\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @param {!Change} change\r\n\t * @param {!Node} eventCache\r\n\t * @return {!Change}\r\n\t * @private\r\n\t */\r\n\t EventGenerator.prototype.materializeSingleChange_ = function (change, eventCache) {\r\n\t if (change.type === 'value' || change.type === 'child_removed') {\r\n\t return change;\r\n\t }\r\n\t else {\r\n\t change.prevName = eventCache.getPredecessorChildName(\r\n\t /** @type {!string} */\r\n\t change.childName, change.snapshotNode, this.index_);\r\n\t return change;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!Change} a\r\n\t * @param {!Change} b\r\n\t * @return {number}\r\n\t * @private\r\n\t */\r\n\t EventGenerator.prototype.compareChanges_ = function (a, b) {\r\n\t if (a.childName == null || b.childName == null) {\r\n\t throw util.assertionError('Should only compare child_ events.');\r\n\t }\r\n\t var aWrapped = new NamedNode(a.childName, a.snapshotNode);\r\n\t var bWrapped = new NamedNode(b.childName, b.snapshotNode);\r\n\t return this.index_.compare(aWrapped, bWrapped);\r\n\t };\r\n\t return EventGenerator;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * A view represents a specific location and query that has 1 or more event registrations.\r\n\t *\r\n\t * It does several things:\r\n\t * - Maintains the list of event registrations for this location/query.\r\n\t * - Maintains a cache of the data visible for this location/query.\r\n\t * - Applies new operations (via applyOperation), updates the cache, and based on the event\r\n\t * registrations returns the set of events to be raised.\r\n\t * @constructor\r\n\t */\r\n\tvar View = /** @class */ (function () {\r\n\t /**\r\n\t *\r\n\t * @param {!Query} query_\r\n\t * @param {!ViewCache} initialViewCache\r\n\t */\r\n\t function View(query_, initialViewCache) {\r\n\t this.query_ = query_;\r\n\t this.eventRegistrations_ = [];\r\n\t var params = this.query_.getQueryParams();\r\n\t var indexFilter = new IndexedFilter(params.getIndex());\r\n\t var filter = params.getNodeFilter();\r\n\t /**\r\n\t * @type {ViewProcessor}\r\n\t * @private\r\n\t */\r\n\t this.processor_ = new ViewProcessor(filter);\r\n\t var initialServerCache = initialViewCache.getServerCache();\r\n\t var initialEventCache = initialViewCache.getEventCache();\r\n\t // Don't filter server node with other filter than index, wait for tagged listen\r\n\t var serverSnap = indexFilter.updateFullNode(ChildrenNode.EMPTY_NODE, initialServerCache.getNode(), null);\r\n\t var eventSnap = filter.updateFullNode(ChildrenNode.EMPTY_NODE, initialEventCache.getNode(), null);\r\n\t var newServerCache = new CacheNode(serverSnap, initialServerCache.isFullyInitialized(), indexFilter.filtersNodes());\r\n\t var newEventCache = new CacheNode(eventSnap, initialEventCache.isFullyInitialized(), filter.filtersNodes());\r\n\t /**\r\n\t * @type {!ViewCache}\r\n\t * @private\r\n\t */\r\n\t this.viewCache_ = new ViewCache(newEventCache, newServerCache);\r\n\t /**\r\n\t * @type {!EventGenerator}\r\n\t * @private\r\n\t */\r\n\t this.eventGenerator_ = new EventGenerator(this.query_);\r\n\t }\r\n\t /**\r\n\t * @return {!Query}\r\n\t */\r\n\t View.prototype.getQuery = function () {\r\n\t return this.query_;\r\n\t };\r\n\t /**\r\n\t * @return {?Node}\r\n\t */\r\n\t View.prototype.getServerCache = function () {\r\n\t return this.viewCache_.getServerCache().getNode();\r\n\t };\r\n\t /**\r\n\t * @param {!Path} path\r\n\t * @return {?Node}\r\n\t */\r\n\t View.prototype.getCompleteServerCache = function (path) {\r\n\t var cache = this.viewCache_.getCompleteServerSnap();\r\n\t if (cache) {\r\n\t // If this isn't a \"loadsAllData\" view, then cache isn't actually a complete cache and\r\n\t // we need to see if it contains the child we're interested in.\r\n\t if (this.query_.getQueryParams().loadsAllData() ||\r\n\t (!path.isEmpty() && !cache.getImmediateChild(path.getFront()).isEmpty())) {\r\n\t return cache.getChild(path);\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\t /**\r\n\t * @return {boolean}\r\n\t */\r\n\t View.prototype.isEmpty = function () {\r\n\t return this.eventRegistrations_.length === 0;\r\n\t };\r\n\t /**\r\n\t * @param {!EventRegistration} eventRegistration\r\n\t */\r\n\t View.prototype.addEventRegistration = function (eventRegistration) {\r\n\t this.eventRegistrations_.push(eventRegistration);\r\n\t };\r\n\t /**\r\n\t * @param {?EventRegistration} eventRegistration If null, remove all callbacks.\r\n\t * @param {Error=} cancelError If a cancelError is provided, appropriate cancel events will be returned.\r\n\t * @return {!Array.} Cancel events, if cancelError was provided.\r\n\t */\r\n\t View.prototype.removeEventRegistration = function (eventRegistration, cancelError) {\r\n\t var cancelEvents = [];\r\n\t if (cancelError) {\r\n\t util.assert(eventRegistration == null, 'A cancel should cancel all event registrations.');\r\n\t var path_1 = this.query_.path;\r\n\t this.eventRegistrations_.forEach(function (registration) {\r\n\t cancelError /** @type {!Error} */ = cancelError;\r\n\t var maybeEvent = registration.createCancelEvent(cancelError, path_1);\r\n\t if (maybeEvent) {\r\n\t cancelEvents.push(maybeEvent);\r\n\t }\r\n\t });\r\n\t }\r\n\t if (eventRegistration) {\r\n\t var remaining = [];\r\n\t for (var i = 0; i < this.eventRegistrations_.length; ++i) {\r\n\t var existing = this.eventRegistrations_[i];\r\n\t if (!existing.matches(eventRegistration)) {\r\n\t remaining.push(existing);\r\n\t }\r\n\t else if (eventRegistration.hasAnyCallback()) {\r\n\t // We're removing just this one\r\n\t remaining = remaining.concat(this.eventRegistrations_.slice(i + 1));\r\n\t break;\r\n\t }\r\n\t }\r\n\t this.eventRegistrations_ = remaining;\r\n\t }\r\n\t else {\r\n\t this.eventRegistrations_ = [];\r\n\t }\r\n\t return cancelEvents;\r\n\t };\r\n\t /**\r\n\t * Applies the given Operation, updates our cache, and returns the appropriate events.\r\n\t *\r\n\t * @param {!Operation} operation\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @param {?Node} completeServerCache\r\n\t * @return {!Array.}\r\n\t */\r\n\t View.prototype.applyOperation = function (operation, writesCache, completeServerCache) {\r\n\t if (operation.type === OperationType.MERGE &&\r\n\t operation.source.queryId !== null) {\r\n\t util.assert(this.viewCache_.getCompleteServerSnap(), 'We should always have a full cache before handling merges');\r\n\t util.assert(this.viewCache_.getCompleteEventSnap(), 'Missing event cache, even though we have a server cache');\r\n\t }\r\n\t var oldViewCache = this.viewCache_;\r\n\t var result = this.processor_.applyOperation(oldViewCache, operation, writesCache, completeServerCache);\r\n\t this.processor_.assertIndexed(result.viewCache);\r\n\t util.assert(result.viewCache.getServerCache().isFullyInitialized() ||\r\n\t !oldViewCache.getServerCache().isFullyInitialized(), 'Once a server snap is complete, it should never go back');\r\n\t this.viewCache_ = result.viewCache;\r\n\t return this.generateEventsForChanges_(result.changes, result.viewCache.getEventCache().getNode(), null);\r\n\t };\r\n\t /**\r\n\t * @param {!EventRegistration} registration\r\n\t * @return {!Array.}\r\n\t */\r\n\t View.prototype.getInitialEvents = function (registration) {\r\n\t var eventSnap = this.viewCache_.getEventCache();\r\n\t var initialChanges = [];\r\n\t if (!eventSnap.getNode().isLeafNode()) {\r\n\t var eventNode = eventSnap.getNode();\r\n\t eventNode.forEachChild(PRIORITY_INDEX, function (key, childNode) {\r\n\t initialChanges.push(Change.childAddedChange(key, childNode));\r\n\t });\r\n\t }\r\n\t if (eventSnap.isFullyInitialized()) {\r\n\t initialChanges.push(Change.valueChange(eventSnap.getNode()));\r\n\t }\r\n\t return this.generateEventsForChanges_(initialChanges, eventSnap.getNode(), registration);\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t * @param {!Array.} changes\r\n\t * @param {!Node} eventCache\r\n\t * @param {EventRegistration=} eventRegistration\r\n\t * @return {!Array.}\r\n\t */\r\n\t View.prototype.generateEventsForChanges_ = function (changes, eventCache, eventRegistration) {\r\n\t var registrations = eventRegistration\r\n\t ? [eventRegistration]\r\n\t : this.eventRegistrations_;\r\n\t return this.eventGenerator_.generateEventsForChanges(changes, eventCache, registrations);\r\n\t };\r\n\t return View;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar __referenceConstructor$1;\r\n\t/**\r\n\t * SyncPoint represents a single location in a SyncTree with 1 or more event registrations, meaning we need to\r\n\t * maintain 1 or more Views at this location to cache server data and raise appropriate events for server changes\r\n\t * and user writes (set, transaction, update).\r\n\t *\r\n\t * It's responsible for:\r\n\t * - Maintaining the set of 1 or more views necessary at this location (a SyncPoint with 0 views should be removed).\r\n\t * - Proxying user / server operations to the views as appropriate (i.e. applyServerOverwrite,\r\n\t * applyUserOverwrite, etc.)\r\n\t */\r\n\tvar SyncPoint = /** @class */ (function () {\r\n\t function SyncPoint() {\r\n\t /**\r\n\t * The Views being tracked at this location in the tree, stored as a map where the key is a\r\n\t * queryId and the value is the View for that query.\r\n\t *\r\n\t * NOTE: This list will be quite small (usually 1, but perhaps 2 or 3; any more is an odd use case).\r\n\t *\r\n\t * @type {!Object.}\r\n\t * @private\r\n\t */\r\n\t this.views_ = {};\r\n\t }\r\n\t Object.defineProperty(SyncPoint, \"__referenceConstructor\", {\r\n\t get: function () {\r\n\t util.assert(__referenceConstructor$1, 'Reference.ts has not been loaded');\r\n\t return __referenceConstructor$1;\r\n\t },\r\n\t set: function (val) {\r\n\t util.assert(!__referenceConstructor$1, '__referenceConstructor has already been defined');\r\n\t __referenceConstructor$1 = val;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t /**\r\n\t * @return {boolean}\r\n\t */\r\n\t SyncPoint.prototype.isEmpty = function () {\r\n\t return util.isEmpty(this.views_);\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {!Operation} operation\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @param {?Node} optCompleteServerCache\r\n\t * @return {!Array.}\r\n\t */\r\n\t SyncPoint.prototype.applyOperation = function (operation, writesCache, optCompleteServerCache) {\r\n\t var queryId = operation.source.queryId;\r\n\t if (queryId !== null) {\r\n\t var view = util.safeGet(this.views_, queryId);\r\n\t util.assert(view != null, 'SyncTree gave us an op for an invalid query.');\r\n\t return view.applyOperation(operation, writesCache, optCompleteServerCache);\r\n\t }\r\n\t else {\r\n\t var events_1 = [];\r\n\t util.forEach(this.views_, function (key, view) {\r\n\t events_1 = events_1.concat(view.applyOperation(operation, writesCache, optCompleteServerCache));\r\n\t });\r\n\t return events_1;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Add an event callback for the specified query.\r\n\t *\r\n\t * @param {!Query} query\r\n\t * @param {!EventRegistration} eventRegistration\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @param {?Node} serverCache Complete server cache, if we have it.\r\n\t * @param {boolean} serverCacheComplete\r\n\t * @return {!Array.} Events to raise.\r\n\t */\r\n\t SyncPoint.prototype.addEventRegistration = function (query, eventRegistration, writesCache, serverCache, serverCacheComplete) {\r\n\t var queryId = query.queryIdentifier();\r\n\t var view = util.safeGet(this.views_, queryId);\r\n\t if (!view) {\r\n\t // TODO: make writesCache take flag for complete server node\r\n\t var eventCache = writesCache.calcCompleteEventCache(serverCacheComplete ? serverCache : null);\r\n\t var eventCacheComplete = false;\r\n\t if (eventCache) {\r\n\t eventCacheComplete = true;\r\n\t }\r\n\t else if (serverCache instanceof ChildrenNode) {\r\n\t eventCache = writesCache.calcCompleteEventChildren(serverCache);\r\n\t eventCacheComplete = false;\r\n\t }\r\n\t else {\r\n\t eventCache = ChildrenNode.EMPTY_NODE;\r\n\t eventCacheComplete = false;\r\n\t }\r\n\t var viewCache = new ViewCache(new CacheNode(\r\n\t /** @type {!Node} */ (eventCache), eventCacheComplete, false), new CacheNode(\r\n\t /** @type {!Node} */ (serverCache), serverCacheComplete, false));\r\n\t view = new View(query, viewCache);\r\n\t this.views_[queryId] = view;\r\n\t }\r\n\t // This is guaranteed to exist now, we just created anything that was missing\r\n\t view.addEventRegistration(eventRegistration);\r\n\t return view.getInitialEvents(eventRegistration);\r\n\t };\r\n\t /**\r\n\t * Remove event callback(s). Return cancelEvents if a cancelError is specified.\r\n\t *\r\n\t * If query is the default query, we'll check all views for the specified eventRegistration.\r\n\t * If eventRegistration is null, we'll remove all callbacks for the specified view(s).\r\n\t *\r\n\t * @param {!Query} query\r\n\t * @param {?EventRegistration} eventRegistration If null, remove all callbacks.\r\n\t * @param {Error=} cancelError If a cancelError is provided, appropriate cancel events will be returned.\r\n\t * @return {{removed:!Array., events:!Array.}} removed queries and any cancel events\r\n\t */\r\n\t SyncPoint.prototype.removeEventRegistration = function (query, eventRegistration, cancelError) {\r\n\t var queryId = query.queryIdentifier();\r\n\t var removed = [];\r\n\t var cancelEvents = [];\r\n\t var hadCompleteView = this.hasCompleteView();\r\n\t if (queryId === 'default') {\r\n\t // When you do ref.off(...), we search all views for the registration to remove.\r\n\t var self_1 = this;\r\n\t util.forEach(this.views_, function (viewQueryId, view) {\r\n\t cancelEvents = cancelEvents.concat(view.removeEventRegistration(eventRegistration, cancelError));\r\n\t if (view.isEmpty()) {\r\n\t delete self_1.views_[viewQueryId];\r\n\t // We'll deal with complete views later.\r\n\t if (!view\r\n\t .getQuery()\r\n\t .getQueryParams()\r\n\t .loadsAllData()) {\r\n\t removed.push(view.getQuery());\r\n\t }\r\n\t }\r\n\t });\r\n\t }\r\n\t else {\r\n\t // remove the callback from the specific view.\r\n\t var view = util.safeGet(this.views_, queryId);\r\n\t if (view) {\r\n\t cancelEvents = cancelEvents.concat(view.removeEventRegistration(eventRegistration, cancelError));\r\n\t if (view.isEmpty()) {\r\n\t delete this.views_[queryId];\r\n\t // We'll deal with complete views later.\r\n\t if (!view\r\n\t .getQuery()\r\n\t .getQueryParams()\r\n\t .loadsAllData()) {\r\n\t removed.push(view.getQuery());\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if (hadCompleteView && !this.hasCompleteView()) {\r\n\t // We removed our last complete view.\r\n\t removed.push(new SyncPoint.__referenceConstructor(query.repo, query.path));\r\n\t }\r\n\t return { removed: removed, events: cancelEvents };\r\n\t };\r\n\t /**\r\n\t * @return {!Array.}\r\n\t */\r\n\t SyncPoint.prototype.getQueryViews = function () {\r\n\t var _this = this;\r\n\t var values = Object.keys(this.views_).map(function (key) { return _this.views_[key]; });\r\n\t return values.filter(function (view) {\r\n\t return !view\r\n\t .getQuery()\r\n\t .getQueryParams()\r\n\t .loadsAllData();\r\n\t });\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {!Path} path The path to the desired complete snapshot\r\n\t * @return {?Node} A complete cache, if it exists\r\n\t */\r\n\t SyncPoint.prototype.getCompleteServerCache = function (path) {\r\n\t var serverCache = null;\r\n\t util.forEach(this.views_, function (key, view) {\r\n\t serverCache = serverCache || view.getCompleteServerCache(path);\r\n\t });\r\n\t return serverCache;\r\n\t };\r\n\t /**\r\n\t * @param {!Query} query\r\n\t * @return {?View}\r\n\t */\r\n\t SyncPoint.prototype.viewForQuery = function (query) {\r\n\t var params = query.getQueryParams();\r\n\t if (params.loadsAllData()) {\r\n\t return this.getCompleteView();\r\n\t }\r\n\t else {\r\n\t var queryId = query.queryIdentifier();\r\n\t return util.safeGet(this.views_, queryId);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!Query} query\r\n\t * @return {boolean}\r\n\t */\r\n\t SyncPoint.prototype.viewExistsForQuery = function (query) {\r\n\t return this.viewForQuery(query) != null;\r\n\t };\r\n\t /**\r\n\t * @return {boolean}\r\n\t */\r\n\t SyncPoint.prototype.hasCompleteView = function () {\r\n\t return this.getCompleteView() != null;\r\n\t };\r\n\t /**\r\n\t * @return {?View}\r\n\t */\r\n\t SyncPoint.prototype.getCompleteView = function () {\r\n\t var completeView = util.findValue(this.views_, function (view) {\r\n\t return view\r\n\t .getQuery()\r\n\t .getQueryParams()\r\n\t .loadsAllData();\r\n\t });\r\n\t return completeView || null;\r\n\t };\r\n\t return SyncPoint;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * This class holds a collection of writes that can be applied to nodes in unison. It abstracts away the logic with\r\n\t * dealing with priority writes and multiple nested writes. At any given path there is only allowed to be one write\r\n\t * modifying that path. Any write to an existing path or shadowing an existing path will modify that existing write\r\n\t * to reflect the write added.\r\n\t *\r\n\t * @constructor\r\n\t * @param {!ImmutableTree.} writeTree\r\n\t */\r\n\tvar CompoundWrite = /** @class */ (function () {\r\n\t function CompoundWrite(writeTree_) {\r\n\t this.writeTree_ = writeTree_;\r\n\t }\r\n\t /**\r\n\t * @param {!Path} path\r\n\t * @param {!Node} node\r\n\t * @return {!CompoundWrite}\r\n\t */\r\n\t CompoundWrite.prototype.addWrite = function (path, node) {\r\n\t if (path.isEmpty()) {\r\n\t return new CompoundWrite(new ImmutableTree(node));\r\n\t }\r\n\t else {\r\n\t var rootmost = this.writeTree_.findRootMostValueAndPath(path);\r\n\t if (rootmost != null) {\r\n\t var rootMostPath = rootmost.path;\r\n\t var value = rootmost.value;\r\n\t var relativePath = Path.relativePath(rootMostPath, path);\r\n\t value = value.updateChild(relativePath, node);\r\n\t return new CompoundWrite(this.writeTree_.set(rootMostPath, value));\r\n\t }\r\n\t else {\r\n\t var subtree = new ImmutableTree(node);\r\n\t var newWriteTree = this.writeTree_.setTree(path, subtree);\r\n\t return new CompoundWrite(newWriteTree);\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!Path} path\r\n\t * @param {!Object.} updates\r\n\t * @return {!CompoundWrite}\r\n\t */\r\n\t CompoundWrite.prototype.addWrites = function (path, updates) {\r\n\t var newWrite = this;\r\n\t util.forEach(updates, function (childKey, node) {\r\n\t newWrite = newWrite.addWrite(path.child(childKey), node);\r\n\t });\r\n\t return newWrite;\r\n\t };\r\n\t /**\r\n\t * Will remove a write at the given path and deeper paths. This will not modify a write at a higher\r\n\t * location, which must be removed by calling this method with that path.\r\n\t *\r\n\t * @param {!Path} path The path at which a write and all deeper writes should be removed\r\n\t * @return {!CompoundWrite} The new CompoundWrite with the removed path\r\n\t */\r\n\t CompoundWrite.prototype.removeWrite = function (path) {\r\n\t if (path.isEmpty()) {\r\n\t return CompoundWrite.Empty;\r\n\t }\r\n\t else {\r\n\t var newWriteTree = this.writeTree_.setTree(path, ImmutableTree.Empty);\r\n\t return new CompoundWrite(newWriteTree);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Returns whether this CompoundWrite will fully overwrite a node at a given location and can therefore be\r\n\t * considered \"complete\".\r\n\t *\r\n\t * @param {!Path} path The path to check for\r\n\t * @return {boolean} Whether there is a complete write at that path\r\n\t */\r\n\t CompoundWrite.prototype.hasCompleteWrite = function (path) {\r\n\t return this.getCompleteNode(path) != null;\r\n\t };\r\n\t /**\r\n\t * Returns a node for a path if and only if the node is a \"complete\" overwrite at that path. This will not aggregate\r\n\t * writes from deeper paths, but will return child nodes from a more shallow path.\r\n\t *\r\n\t * @param {!Path} path The path to get a complete write\r\n\t * @return {?Node} The node if complete at that path, or null otherwise.\r\n\t */\r\n\t CompoundWrite.prototype.getCompleteNode = function (path) {\r\n\t var rootmost = this.writeTree_.findRootMostValueAndPath(path);\r\n\t if (rootmost != null) {\r\n\t return this.writeTree_\r\n\t .get(rootmost.path)\r\n\t .getChild(Path.relativePath(rootmost.path, path));\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Returns all children that are guaranteed to be a complete overwrite.\r\n\t *\r\n\t * @return {!Array.} A list of all complete children.\r\n\t */\r\n\t CompoundWrite.prototype.getCompleteChildren = function () {\r\n\t var children = [];\r\n\t var node = this.writeTree_.value;\r\n\t if (node != null) {\r\n\t // If it's a leaf node, it has no children; so nothing to do.\r\n\t if (!node.isLeafNode()) {\r\n\t node.forEachChild(PRIORITY_INDEX, function (childName, childNode) {\r\n\t children.push(new NamedNode(childName, childNode));\r\n\t });\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.writeTree_.children.inorderTraversal(function (childName, childTree) {\r\n\t if (childTree.value != null) {\r\n\t children.push(new NamedNode(childName, childTree.value));\r\n\t }\r\n\t });\r\n\t }\r\n\t return children;\r\n\t };\r\n\t /**\r\n\t * @param {!Path} path\r\n\t * @return {!CompoundWrite}\r\n\t */\r\n\t CompoundWrite.prototype.childCompoundWrite = function (path) {\r\n\t if (path.isEmpty()) {\r\n\t return this;\r\n\t }\r\n\t else {\r\n\t var shadowingNode = this.getCompleteNode(path);\r\n\t if (shadowingNode != null) {\r\n\t return new CompoundWrite(new ImmutableTree(shadowingNode));\r\n\t }\r\n\t else {\r\n\t return new CompoundWrite(this.writeTree_.subtree(path));\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Returns true if this CompoundWrite is empty and therefore does not modify any nodes.\r\n\t * @return {boolean} Whether this CompoundWrite is empty\r\n\t */\r\n\t CompoundWrite.prototype.isEmpty = function () {\r\n\t return this.writeTree_.isEmpty();\r\n\t };\r\n\t /**\r\n\t * Applies this CompoundWrite to a node. The node is returned with all writes from this CompoundWrite applied to the\r\n\t * node\r\n\t * @param {!Node} node The node to apply this CompoundWrite to\r\n\t * @return {!Node} The node with all writes applied\r\n\t */\r\n\t CompoundWrite.prototype.apply = function (node) {\r\n\t return CompoundWrite.applySubtreeWrite_(Path.Empty, this.writeTree_, node);\r\n\t };\r\n\t /**\r\n\t * @type {!CompoundWrite}\r\n\t */\r\n\t CompoundWrite.Empty = new CompoundWrite(new ImmutableTree(null));\r\n\t /**\r\n\t * @param {!Path} relativePath\r\n\t * @param {!ImmutableTree.} writeTree\r\n\t * @param {!Node} node\r\n\t * @return {!Node}\r\n\t * @private\r\n\t */\r\n\t CompoundWrite.applySubtreeWrite_ = function (relativePath, writeTree, node) {\r\n\t if (writeTree.value != null) {\r\n\t // Since there a write is always a leaf, we're done here\r\n\t return node.updateChild(relativePath, writeTree.value);\r\n\t }\r\n\t else {\r\n\t var priorityWrite_1 = null;\r\n\t writeTree.children.inorderTraversal(function (childKey, childTree) {\r\n\t if (childKey === '.priority') {\r\n\t // Apply priorities at the end so we don't update priorities for either empty nodes or forget\r\n\t // to apply priorities to empty nodes that are later filled\r\n\t util.assert(childTree.value !== null, 'Priority writes must always be leaf nodes');\r\n\t priorityWrite_1 = childTree.value;\r\n\t }\r\n\t else {\r\n\t node = CompoundWrite.applySubtreeWrite_(relativePath.child(childKey), childTree, node);\r\n\t }\r\n\t });\r\n\t // If there was a priority write, we only apply it if the node is not empty\r\n\t if (!node.getChild(relativePath).isEmpty() && priorityWrite_1 !== null) {\r\n\t node = node.updateChild(relativePath.child('.priority'), priorityWrite_1);\r\n\t }\r\n\t return node;\r\n\t }\r\n\t };\r\n\t return CompoundWrite;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * WriteTree tracks all pending user-initiated writes and has methods to calculate the result of merging them\r\n\t * with underlying server data (to create \"event cache\" data). Pending writes are added with addOverwrite()\r\n\t * and addMerge(), and removed with removeWrite().\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar WriteTree = /** @class */ (function () {\r\n\t function WriteTree() {\r\n\t /**\r\n\t * A tree tracking the result of applying all visible writes. This does not include transactions with\r\n\t * applyLocally=false or writes that are completely shadowed by other writes.\r\n\t *\r\n\t * @type {!CompoundWrite}\r\n\t * @private\r\n\t */\r\n\t this.visibleWrites_ = CompoundWrite.Empty;\r\n\t /**\r\n\t * A list of all pending writes, regardless of visibility and shadowed-ness. Used to calculate arbitrary\r\n\t * sets of the changed data, such as hidden writes (from transactions) or changes with certain writes excluded (also\r\n\t * used by transactions).\r\n\t *\r\n\t * @type {!Array.}\r\n\t * @private\r\n\t */\r\n\t this.allWrites_ = [];\r\n\t this.lastWriteId_ = -1;\r\n\t }\r\n\t /**\r\n\t * Create a new WriteTreeRef for the given path. For use with a new sync point at the given path.\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @return {!WriteTreeRef}\r\n\t */\r\n\t WriteTree.prototype.childWrites = function (path) {\r\n\t return new WriteTreeRef(path, this);\r\n\t };\r\n\t /**\r\n\t * Record a new overwrite from user code.\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @param {!Node} snap\r\n\t * @param {!number} writeId\r\n\t * @param {boolean=} visible This is set to false by some transactions. It should be excluded from event caches\r\n\t */\r\n\t WriteTree.prototype.addOverwrite = function (path, snap, writeId, visible) {\r\n\t util.assert(writeId > this.lastWriteId_, 'Stacking an older write on top of newer ones');\r\n\t if (visible === undefined) {\r\n\t visible = true;\r\n\t }\r\n\t this.allWrites_.push({\r\n\t path: path,\r\n\t snap: snap,\r\n\t writeId: writeId,\r\n\t visible: visible\r\n\t });\r\n\t if (visible) {\r\n\t this.visibleWrites_ = this.visibleWrites_.addWrite(path, snap);\r\n\t }\r\n\t this.lastWriteId_ = writeId;\r\n\t };\r\n\t /**\r\n\t * Record a new merge from user code.\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @param {!Object.} changedChildren\r\n\t * @param {!number} writeId\r\n\t */\r\n\t WriteTree.prototype.addMerge = function (path, changedChildren, writeId) {\r\n\t util.assert(writeId > this.lastWriteId_, 'Stacking an older merge on top of newer ones');\r\n\t this.allWrites_.push({\r\n\t path: path,\r\n\t children: changedChildren,\r\n\t writeId: writeId,\r\n\t visible: true\r\n\t });\r\n\t this.visibleWrites_ = this.visibleWrites_.addWrites(path, changedChildren);\r\n\t this.lastWriteId_ = writeId;\r\n\t };\r\n\t /**\r\n\t * @param {!number} writeId\r\n\t * @return {?WriteRecord}\r\n\t */\r\n\t WriteTree.prototype.getWrite = function (writeId) {\r\n\t for (var i = 0; i < this.allWrites_.length; i++) {\r\n\t var record = this.allWrites_[i];\r\n\t if (record.writeId === writeId) {\r\n\t return record;\r\n\t }\r\n\t }\r\n\t return null;\r\n\t };\r\n\t /**\r\n\t * Remove a write (either an overwrite or merge) that has been successfully acknowledge by the server. Recalculates\r\n\t * the tree if necessary. We return true if it may have been visible, meaning views need to reevaluate.\r\n\t *\r\n\t * @param {!number} writeId\r\n\t * @return {boolean} true if the write may have been visible (meaning we'll need to reevaluate / raise\r\n\t * events as a result).\r\n\t */\r\n\t WriteTree.prototype.removeWrite = function (writeId) {\r\n\t // Note: disabling this check. It could be a transaction that preempted another transaction, and thus was applied\r\n\t // out of order.\r\n\t //const validClear = revert || this.allWrites_.length === 0 || writeId <= this.allWrites_[0].writeId;\r\n\t //assert(validClear, \"Either we don't have this write, or it's the first one in the queue\");\r\n\t var _this = this;\r\n\t var idx = this.allWrites_.findIndex(function (s) {\r\n\t return s.writeId === writeId;\r\n\t });\r\n\t util.assert(idx >= 0, 'removeWrite called with nonexistent writeId.');\r\n\t var writeToRemove = this.allWrites_[idx];\r\n\t this.allWrites_.splice(idx, 1);\r\n\t var removedWriteWasVisible = writeToRemove.visible;\r\n\t var removedWriteOverlapsWithOtherWrites = false;\r\n\t var i = this.allWrites_.length - 1;\r\n\t while (removedWriteWasVisible && i >= 0) {\r\n\t var currentWrite = this.allWrites_[i];\r\n\t if (currentWrite.visible) {\r\n\t if (i >= idx &&\r\n\t this.recordContainsPath_(currentWrite, writeToRemove.path)) {\r\n\t // The removed write was completely shadowed by a subsequent write.\r\n\t removedWriteWasVisible = false;\r\n\t }\r\n\t else if (writeToRemove.path.contains(currentWrite.path)) {\r\n\t // Either we're covering some writes or they're covering part of us (depending on which came first).\r\n\t removedWriteOverlapsWithOtherWrites = true;\r\n\t }\r\n\t }\r\n\t i--;\r\n\t }\r\n\t if (!removedWriteWasVisible) {\r\n\t return false;\r\n\t }\r\n\t else if (removedWriteOverlapsWithOtherWrites) {\r\n\t // There's some shadowing going on. Just rebuild the visible writes from scratch.\r\n\t this.resetTree_();\r\n\t return true;\r\n\t }\r\n\t else {\r\n\t // There's no shadowing. We can safely just remove the write(s) from visibleWrites.\r\n\t if (writeToRemove.snap) {\r\n\t this.visibleWrites_ = this.visibleWrites_.removeWrite(writeToRemove.path);\r\n\t }\r\n\t else {\r\n\t var children = writeToRemove.children;\r\n\t util.forEach(children, function (childName) {\r\n\t _this.visibleWrites_ = _this.visibleWrites_.removeWrite(writeToRemove.path.child(childName));\r\n\t });\r\n\t }\r\n\t return true;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Return a complete snapshot for the given path if there's visible write data at that path, else null.\r\n\t * No server data is considered.\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @return {?Node}\r\n\t */\r\n\t WriteTree.prototype.getCompleteWriteData = function (path) {\r\n\t return this.visibleWrites_.getCompleteNode(path);\r\n\t };\r\n\t /**\r\n\t * Given optional, underlying server data, and an optional set of constraints (exclude some sets, include hidden\r\n\t * writes), attempt to calculate a complete snapshot for the given path\r\n\t *\r\n\t * @param {!Path} treePath\r\n\t * @param {?Node} completeServerCache\r\n\t * @param {Array.=} writeIdsToExclude An optional set to be excluded\r\n\t * @param {boolean=} includeHiddenWrites Defaults to false, whether or not to layer on writes with visible set to false\r\n\t * @return {?Node}\r\n\t */\r\n\t WriteTree.prototype.calcCompleteEventCache = function (treePath, completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n\t if (!writeIdsToExclude && !includeHiddenWrites) {\r\n\t var shadowingNode = this.visibleWrites_.getCompleteNode(treePath);\r\n\t if (shadowingNode != null) {\r\n\t return shadowingNode;\r\n\t }\r\n\t else {\r\n\t var subMerge = this.visibleWrites_.childCompoundWrite(treePath);\r\n\t if (subMerge.isEmpty()) {\r\n\t return completeServerCache;\r\n\t }\r\n\t else if (completeServerCache == null &&\r\n\t !subMerge.hasCompleteWrite(Path.Empty)) {\r\n\t // We wouldn't have a complete snapshot, since there's no underlying data and no complete shadow\r\n\t return null;\r\n\t }\r\n\t else {\r\n\t var layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n\t return subMerge.apply(layeredCache);\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t var merge = this.visibleWrites_.childCompoundWrite(treePath);\r\n\t if (!includeHiddenWrites && merge.isEmpty()) {\r\n\t return completeServerCache;\r\n\t }\r\n\t else {\r\n\t // If the server cache is null, and we don't have a complete cache, we need to return null\r\n\t if (!includeHiddenWrites &&\r\n\t completeServerCache == null &&\r\n\t !merge.hasCompleteWrite(Path.Empty)) {\r\n\t return null;\r\n\t }\r\n\t else {\r\n\t var filter = function (write) {\r\n\t return ((write.visible || includeHiddenWrites) &&\r\n\t (!writeIdsToExclude ||\r\n\t !~writeIdsToExclude.indexOf(write.writeId)) &&\r\n\t (write.path.contains(treePath) || treePath.contains(write.path)));\r\n\t };\r\n\t var mergeAtPath = WriteTree.layerTree_(this.allWrites_, filter, treePath);\r\n\t var layeredCache = completeServerCache || ChildrenNode.EMPTY_NODE;\r\n\t return mergeAtPath.apply(layeredCache);\r\n\t }\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * With optional, underlying server data, attempt to return a children node of children that we have complete data for.\r\n\t * Used when creating new views, to pre-fill their complete event children snapshot.\r\n\t *\r\n\t * @param {!Path} treePath\r\n\t * @param {?ChildrenNode} completeServerChildren\r\n\t * @return {!ChildrenNode}\r\n\t */\r\n\t WriteTree.prototype.calcCompleteEventChildren = function (treePath, completeServerChildren) {\r\n\t var completeChildren = ChildrenNode.EMPTY_NODE;\r\n\t var topLevelSet = this.visibleWrites_.getCompleteNode(treePath);\r\n\t if (topLevelSet) {\r\n\t if (!topLevelSet.isLeafNode()) {\r\n\t // we're shadowing everything. Return the children.\r\n\t topLevelSet.forEachChild(PRIORITY_INDEX, function (childName, childSnap) {\r\n\t completeChildren = completeChildren.updateImmediateChild(childName, childSnap);\r\n\t });\r\n\t }\r\n\t return completeChildren;\r\n\t }\r\n\t else if (completeServerChildren) {\r\n\t // Layer any children we have on top of this\r\n\t // We know we don't have a top-level set, so just enumerate existing children\r\n\t var merge_1 = this.visibleWrites_.childCompoundWrite(treePath);\r\n\t completeServerChildren.forEachChild(PRIORITY_INDEX, function (childName, childNode) {\r\n\t var node = merge_1\r\n\t .childCompoundWrite(new Path(childName))\r\n\t .apply(childNode);\r\n\t completeChildren = completeChildren.updateImmediateChild(childName, node);\r\n\t });\r\n\t // Add any complete children we have from the set\r\n\t merge_1.getCompleteChildren().forEach(function (namedNode) {\r\n\t completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n\t });\r\n\t return completeChildren;\r\n\t }\r\n\t else {\r\n\t // We don't have anything to layer on top of. Layer on any children we have\r\n\t // Note that we can return an empty snap if we have a defined delete\r\n\t var merge = this.visibleWrites_.childCompoundWrite(treePath);\r\n\t merge.getCompleteChildren().forEach(function (namedNode) {\r\n\t completeChildren = completeChildren.updateImmediateChild(namedNode.name, namedNode.node);\r\n\t });\r\n\t return completeChildren;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Given that the underlying server data has updated, determine what, if anything, needs to be\r\n\t * applied to the event cache.\r\n\t *\r\n\t * Possibilities:\r\n\t *\r\n\t * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n\t *\r\n\t * 2. Some write is completely shadowing. No events to be raised\r\n\t *\r\n\t * 3. Is partially shadowed. Events\r\n\t *\r\n\t * Either existingEventSnap or existingServerSnap must exist\r\n\t *\r\n\t * @param {!Path} treePath\r\n\t * @param {!Path} childPath\r\n\t * @param {?Node} existingEventSnap\r\n\t * @param {?Node} existingServerSnap\r\n\t * @return {?Node}\r\n\t */\r\n\t WriteTree.prototype.calcEventCacheAfterServerOverwrite = function (treePath, childPath, existingEventSnap, existingServerSnap) {\r\n\t util.assert(existingEventSnap || existingServerSnap, 'Either existingEventSnap or existingServerSnap must exist');\r\n\t var path = treePath.child(childPath);\r\n\t if (this.visibleWrites_.hasCompleteWrite(path)) {\r\n\t // At this point we can probably guarantee that we're in case 2, meaning no events\r\n\t // May need to check visibility while doing the findRootMostValueAndPath call\r\n\t return null;\r\n\t }\r\n\t else {\r\n\t // No complete shadowing. We're either partially shadowing or not shadowing at all.\r\n\t var childMerge = this.visibleWrites_.childCompoundWrite(path);\r\n\t if (childMerge.isEmpty()) {\r\n\t // We're not shadowing at all. Case 1\r\n\t return existingServerSnap.getChild(childPath);\r\n\t }\r\n\t else {\r\n\t // This could be more efficient if the serverNode + updates doesn't change the eventSnap\r\n\t // However this is tricky to find out, since user updates don't necessary change the server\r\n\t // snap, e.g. priority updates on empty nodes, or deep deletes. Another special case is if the server\r\n\t // adds nodes, but doesn't change any existing writes. It is therefore not enough to\r\n\t // only check if the updates change the serverNode.\r\n\t // Maybe check if the merge tree contains these special cases and only do a full overwrite in that case?\r\n\t return childMerge.apply(existingServerSnap.getChild(childPath));\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n\t * complete child for this ChildKey.\r\n\t *\r\n\t * @param {!Path} treePath\r\n\t * @param {!string} childKey\r\n\t * @param {!CacheNode} existingServerSnap\r\n\t * @return {?Node}\r\n\t */\r\n\t WriteTree.prototype.calcCompleteChild = function (treePath, childKey, existingServerSnap) {\r\n\t var path = treePath.child(childKey);\r\n\t var shadowingNode = this.visibleWrites_.getCompleteNode(path);\r\n\t if (shadowingNode != null) {\r\n\t return shadowingNode;\r\n\t }\r\n\t else {\r\n\t if (existingServerSnap.isCompleteForChild(childKey)) {\r\n\t var childMerge = this.visibleWrites_.childCompoundWrite(path);\r\n\t return childMerge.apply(existingServerSnap.getNode().getImmediateChild(childKey));\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n\t * a higher path, this will return the child of that write relative to the write and this path.\r\n\t * Returns null if there is no write at this path.\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @return {?Node}\r\n\t */\r\n\t WriteTree.prototype.shadowingWrite = function (path) {\r\n\t return this.visibleWrites_.getCompleteNode(path);\r\n\t };\r\n\t /**\r\n\t * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n\t * the window, but may now be in the window.\r\n\t *\r\n\t * @param {!Path} treePath\r\n\t * @param {?Node} completeServerData\r\n\t * @param {!NamedNode} startPost\r\n\t * @param {!number} count\r\n\t * @param {boolean} reverse\r\n\t * @param {!Index} index\r\n\t * @return {!Array.}\r\n\t */\r\n\t WriteTree.prototype.calcIndexedSlice = function (treePath, completeServerData, startPost, count, reverse, index) {\r\n\t var toIterate;\r\n\t var merge = this.visibleWrites_.childCompoundWrite(treePath);\r\n\t var shadowingNode = merge.getCompleteNode(Path.Empty);\r\n\t if (shadowingNode != null) {\r\n\t toIterate = shadowingNode;\r\n\t }\r\n\t else if (completeServerData != null) {\r\n\t toIterate = merge.apply(completeServerData);\r\n\t }\r\n\t else {\r\n\t // no children to iterate on\r\n\t return [];\r\n\t }\r\n\t toIterate = toIterate.withIndex(index);\r\n\t if (!toIterate.isEmpty() && !toIterate.isLeafNode()) {\r\n\t var nodes = [];\r\n\t var cmp = index.getCompare();\r\n\t var iter = reverse\r\n\t ? toIterate.getReverseIteratorFrom(startPost, index)\r\n\t : toIterate.getIteratorFrom(startPost, index);\r\n\t var next = iter.getNext();\r\n\t while (next && nodes.length < count) {\r\n\t if (cmp(next, startPost) !== 0) {\r\n\t nodes.push(next);\r\n\t }\r\n\t next = iter.getNext();\r\n\t }\r\n\t return nodes;\r\n\t }\r\n\t else {\r\n\t return [];\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!WriteRecord} writeRecord\r\n\t * @param {!Path} path\r\n\t * @return {boolean}\r\n\t * @private\r\n\t */\r\n\t WriteTree.prototype.recordContainsPath_ = function (writeRecord, path) {\r\n\t if (writeRecord.snap) {\r\n\t return writeRecord.path.contains(path);\r\n\t }\r\n\t else {\r\n\t // findKey can return undefined, so use !! to coerce to boolean\r\n\t return !!util.findKey(writeRecord.children, function (childSnap, childName) {\r\n\t return writeRecord.path.child(childName).contains(path);\r\n\t });\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Re-layer the writes and merges into a tree so we can efficiently calculate event snapshots\r\n\t * @private\r\n\t */\r\n\t WriteTree.prototype.resetTree_ = function () {\r\n\t this.visibleWrites_ = WriteTree.layerTree_(this.allWrites_, WriteTree.DefaultFilter_, Path.Empty);\r\n\t if (this.allWrites_.length > 0) {\r\n\t this.lastWriteId_ = this.allWrites_[this.allWrites_.length - 1].writeId;\r\n\t }\r\n\t else {\r\n\t this.lastWriteId_ = -1;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * The default filter used when constructing the tree. Keep everything that's visible.\r\n\t *\r\n\t * @param {!WriteRecord} write\r\n\t * @return {boolean}\r\n\t * @private\r\n\t */\r\n\t WriteTree.DefaultFilter_ = function (write) {\r\n\t return write.visible;\r\n\t };\r\n\t /**\r\n\t * Static method. Given an array of WriteRecords, a filter for which ones to include, and a path, construct the tree of\r\n\t * event data at that path.\r\n\t *\r\n\t * @param {!Array.} writes\r\n\t * @param {!function(!WriteRecord):boolean} filter\r\n\t * @param {!Path} treeRoot\r\n\t * @return {!CompoundWrite}\r\n\t * @private\r\n\t */\r\n\t WriteTree.layerTree_ = function (writes, filter, treeRoot) {\r\n\t var compoundWrite = CompoundWrite.Empty;\r\n\t for (var i = 0; i < writes.length; ++i) {\r\n\t var write = writes[i];\r\n\t // Theory, a later set will either:\r\n\t // a) abort a relevant transaction, so no need to worry about excluding it from calculating that transaction\r\n\t // b) not be relevant to a transaction (separate branch), so again will not affect the data for that transaction\r\n\t if (filter(write)) {\r\n\t var writePath = write.path;\r\n\t var relativePath = void 0;\r\n\t if (write.snap) {\r\n\t if (treeRoot.contains(writePath)) {\r\n\t relativePath = Path.relativePath(treeRoot, writePath);\r\n\t compoundWrite = compoundWrite.addWrite(relativePath, write.snap);\r\n\t }\r\n\t else if (writePath.contains(treeRoot)) {\r\n\t relativePath = Path.relativePath(writePath, treeRoot);\r\n\t compoundWrite = compoundWrite.addWrite(Path.Empty, write.snap.getChild(relativePath));\r\n\t }\r\n\t else {\r\n\t // There is no overlap between root path and write path, ignore write\r\n\t }\r\n\t }\r\n\t else if (write.children) {\r\n\t if (treeRoot.contains(writePath)) {\r\n\t relativePath = Path.relativePath(treeRoot, writePath);\r\n\t compoundWrite = compoundWrite.addWrites(relativePath, write.children);\r\n\t }\r\n\t else if (writePath.contains(treeRoot)) {\r\n\t relativePath = Path.relativePath(writePath, treeRoot);\r\n\t if (relativePath.isEmpty()) {\r\n\t compoundWrite = compoundWrite.addWrites(Path.Empty, write.children);\r\n\t }\r\n\t else {\r\n\t var child = util.safeGet(write.children, relativePath.getFront());\r\n\t if (child) {\r\n\t // There exists a child in this node that matches the root path\r\n\t var deepNode = child.getChild(relativePath.popFront());\r\n\t compoundWrite = compoundWrite.addWrite(Path.Empty, deepNode);\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t // There is no overlap between root path and write path, ignore write\r\n\t }\r\n\t }\r\n\t else {\r\n\t throw util.assertionError('WriteRecord should have .snap or .children');\r\n\t }\r\n\t }\r\n\t }\r\n\t return compoundWrite;\r\n\t };\r\n\t return WriteTree;\r\n\t}());\r\n\t/**\r\n\t * A WriteTreeRef wraps a WriteTree and a path, for convenient access to a particular subtree. All of the methods\r\n\t * just proxy to the underlying WriteTree.\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar WriteTreeRef = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!Path} path\r\n\t * @param {!WriteTree} writeTree\r\n\t */\r\n\t function WriteTreeRef(path, writeTree) {\r\n\t this.treePath_ = path;\r\n\t this.writeTree_ = writeTree;\r\n\t }\r\n\t /**\r\n\t * If possible, returns a complete event cache, using the underlying server data if possible. In addition, can be used\r\n\t * to get a cache that includes hidden writes, and excludes arbitrary writes. Note that customizing the returned node\r\n\t * can lead to a more expensive calculation.\r\n\t *\r\n\t * @param {?Node} completeServerCache\r\n\t * @param {Array.=} writeIdsToExclude Optional writes to exclude.\r\n\t * @param {boolean=} includeHiddenWrites Defaults to false, whether or not to layer on writes with visible set to false\r\n\t * @return {?Node}\r\n\t */\r\n\t WriteTreeRef.prototype.calcCompleteEventCache = function (completeServerCache, writeIdsToExclude, includeHiddenWrites) {\r\n\t return this.writeTree_.calcCompleteEventCache(this.treePath_, completeServerCache, writeIdsToExclude, includeHiddenWrites);\r\n\t };\r\n\t /**\r\n\t * If possible, returns a children node containing all of the complete children we have data for. The returned data is a\r\n\t * mix of the given server data and write data.\r\n\t *\r\n\t * @param {?ChildrenNode} completeServerChildren\r\n\t * @return {!ChildrenNode}\r\n\t */\r\n\t WriteTreeRef.prototype.calcCompleteEventChildren = function (completeServerChildren) {\r\n\t return this.writeTree_.calcCompleteEventChildren(this.treePath_, completeServerChildren);\r\n\t };\r\n\t /**\r\n\t * Given that either the underlying server data has updated or the outstanding writes have updated, determine what,\r\n\t * if anything, needs to be applied to the event cache.\r\n\t *\r\n\t * Possibilities:\r\n\t *\r\n\t * 1. No writes are shadowing. Events should be raised, the snap to be applied comes from the server data\r\n\t *\r\n\t * 2. Some write is completely shadowing. No events to be raised\r\n\t *\r\n\t * 3. Is partially shadowed. Events should be raised\r\n\t *\r\n\t * Either existingEventSnap or existingServerSnap must exist, this is validated via an assert\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @param {?Node} existingEventSnap\r\n\t * @param {?Node} existingServerSnap\r\n\t * @return {?Node}\r\n\t */\r\n\t WriteTreeRef.prototype.calcEventCacheAfterServerOverwrite = function (path, existingEventSnap, existingServerSnap) {\r\n\t return this.writeTree_.calcEventCacheAfterServerOverwrite(this.treePath_, path, existingEventSnap, existingServerSnap);\r\n\t };\r\n\t /**\r\n\t * Returns a node if there is a complete overwrite for this path. More specifically, if there is a write at\r\n\t * a higher path, this will return the child of that write relative to the write and this path.\r\n\t * Returns null if there is no write at this path.\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @return {?Node}\r\n\t */\r\n\t WriteTreeRef.prototype.shadowingWrite = function (path) {\r\n\t return this.writeTree_.shadowingWrite(this.treePath_.child(path));\r\n\t };\r\n\t /**\r\n\t * This method is used when processing child remove events on a query. If we can, we pull in children that were outside\r\n\t * the window, but may now be in the window\r\n\t *\r\n\t * @param {?Node} completeServerData\r\n\t * @param {!NamedNode} startPost\r\n\t * @param {!number} count\r\n\t * @param {boolean} reverse\r\n\t * @param {!Index} index\r\n\t * @return {!Array.}\r\n\t */\r\n\t WriteTreeRef.prototype.calcIndexedSlice = function (completeServerData, startPost, count, reverse, index) {\r\n\t return this.writeTree_.calcIndexedSlice(this.treePath_, completeServerData, startPost, count, reverse, index);\r\n\t };\r\n\t /**\r\n\t * Returns a complete child for a given server snap after applying all user writes or null if there is no\r\n\t * complete child for this ChildKey.\r\n\t *\r\n\t * @param {!string} childKey\r\n\t * @param {!CacheNode} existingServerCache\r\n\t * @return {?Node}\r\n\t */\r\n\t WriteTreeRef.prototype.calcCompleteChild = function (childKey, existingServerCache) {\r\n\t return this.writeTree_.calcCompleteChild(this.treePath_, childKey, existingServerCache);\r\n\t };\r\n\t /**\r\n\t * Return a WriteTreeRef for a child.\r\n\t *\r\n\t * @param {string} childName\r\n\t * @return {!WriteTreeRef}\r\n\t */\r\n\t WriteTreeRef.prototype.child = function (childName) {\r\n\t return new WriteTreeRef(this.treePath_.child(childName), this.writeTree_);\r\n\t };\r\n\t return WriteTreeRef;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * SyncTree is the central class for managing event callback registration, data caching, views\r\n\t * (query processing), and event generation. There are typically two SyncTree instances for\r\n\t * each Repo, one for the normal Firebase data, and one for the .info data.\r\n\t *\r\n\t * It has a number of responsibilities, including:\r\n\t * - Tracking all user event callbacks (registered via addEventRegistration() and removeEventRegistration()).\r\n\t * - Applying and caching data changes for user set(), transaction(), and update() calls\r\n\t * (applyUserOverwrite(), applyUserMerge()).\r\n\t * - Applying and caching data changes for server data changes (applyServerOverwrite(),\r\n\t * applyServerMerge()).\r\n\t * - Generating user-facing events for server and user changes (all of the apply* methods\r\n\t * return the set of events that need to be raised as a result).\r\n\t * - Maintaining the appropriate set of server listens to ensure we are always subscribed\r\n\t * to the correct set of paths and queries to satisfy the current set of user event\r\n\t * callbacks (listens are started/stopped using the provided listenProvider).\r\n\t *\r\n\t * NOTE: Although SyncTree tracks event callbacks and calculates events to raise, the actual\r\n\t * events are returned to the caller rather than raised synchronously.\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar SyncTree = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!ListenProvider} listenProvider_ Used by SyncTree to start / stop listening\r\n\t * to server data.\r\n\t */\r\n\t function SyncTree(listenProvider_) {\r\n\t this.listenProvider_ = listenProvider_;\r\n\t /**\r\n\t * Tree of SyncPoints. There's a SyncPoint at any location that has 1 or more views.\r\n\t * @type {!ImmutableTree.}\r\n\t * @private\r\n\t */\r\n\t this.syncPointTree_ = ImmutableTree.Empty;\r\n\t /**\r\n\t * A tree of all pending user writes (user-initiated set()'s, transaction()'s, update()'s, etc.).\r\n\t * @type {!WriteTree}\r\n\t * @private\r\n\t */\r\n\t this.pendingWriteTree_ = new WriteTree();\r\n\t this.tagToQueryMap_ = {};\r\n\t this.queryToTagMap_ = {};\r\n\t }\r\n\t /**\r\n\t * Apply the data changes for a user-generated set() or transaction() call.\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @param {!Node} newData\r\n\t * @param {number} writeId\r\n\t * @param {boolean=} visible\r\n\t * @return {!Array.} Events to raise.\r\n\t */\r\n\t SyncTree.prototype.applyUserOverwrite = function (path, newData, writeId, visible) {\r\n\t // Record pending write.\r\n\t this.pendingWriteTree_.addOverwrite(path, newData, writeId, visible);\r\n\t if (!visible) {\r\n\t return [];\r\n\t }\r\n\t else {\r\n\t return this.applyOperationToSyncPoints_(new Overwrite(OperationSource.User, path, newData));\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Apply the data from a user-generated update() call\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @param {!Object.} changedChildren\r\n\t * @param {!number} writeId\r\n\t * @return {!Array.} Events to raise.\r\n\t */\r\n\t SyncTree.prototype.applyUserMerge = function (path, changedChildren, writeId) {\r\n\t // Record pending merge.\r\n\t this.pendingWriteTree_.addMerge(path, changedChildren, writeId);\r\n\t var changeTree = ImmutableTree.fromObject(changedChildren);\r\n\t return this.applyOperationToSyncPoints_(new Merge(OperationSource.User, path, changeTree));\r\n\t };\r\n\t /**\r\n\t * Acknowledge a pending user write that was previously registered with applyUserOverwrite() or applyUserMerge().\r\n\t *\r\n\t * @param {!number} writeId\r\n\t * @param {boolean=} revert True if the given write failed and needs to be reverted\r\n\t * @return {!Array.} Events to raise.\r\n\t */\r\n\t SyncTree.prototype.ackUserWrite = function (writeId, revert) {\r\n\t if (revert === void 0) { revert = false; }\r\n\t var write = this.pendingWriteTree_.getWrite(writeId);\r\n\t var needToReevaluate = this.pendingWriteTree_.removeWrite(writeId);\r\n\t if (!needToReevaluate) {\r\n\t return [];\r\n\t }\r\n\t else {\r\n\t var affectedTree_1 = ImmutableTree.Empty;\r\n\t if (write.snap != null) {\r\n\t // overwrite\r\n\t affectedTree_1 = affectedTree_1.set(Path.Empty, true);\r\n\t }\r\n\t else {\r\n\t util.forEach(write.children, function (pathString, node) {\r\n\t affectedTree_1 = affectedTree_1.set(new Path(pathString), node);\r\n\t });\r\n\t }\r\n\t return this.applyOperationToSyncPoints_(new AckUserWrite(write.path, affectedTree_1, revert));\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Apply new server data for the specified path..\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @param {!Node} newData\r\n\t * @return {!Array.} Events to raise.\r\n\t */\r\n\t SyncTree.prototype.applyServerOverwrite = function (path, newData) {\r\n\t return this.applyOperationToSyncPoints_(new Overwrite(OperationSource.Server, path, newData));\r\n\t };\r\n\t /**\r\n\t * Apply new server data to be merged in at the specified path.\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @param {!Object.} changedChildren\r\n\t * @return {!Array.} Events to raise.\r\n\t */\r\n\t SyncTree.prototype.applyServerMerge = function (path, changedChildren) {\r\n\t var changeTree = ImmutableTree.fromObject(changedChildren);\r\n\t return this.applyOperationToSyncPoints_(new Merge(OperationSource.Server, path, changeTree));\r\n\t };\r\n\t /**\r\n\t * Apply a listen complete for a query\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @return {!Array.} Events to raise.\r\n\t */\r\n\t SyncTree.prototype.applyListenComplete = function (path) {\r\n\t return this.applyOperationToSyncPoints_(new ListenComplete(OperationSource.Server, path));\r\n\t };\r\n\t /**\r\n\t * Apply new server data for the specified tagged query.\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @param {!Node} snap\r\n\t * @param {!number} tag\r\n\t * @return {!Array.} Events to raise.\r\n\t */\r\n\t SyncTree.prototype.applyTaggedQueryOverwrite = function (path, snap, tag) {\r\n\t var queryKey = this.queryKeyForTag_(tag);\r\n\t if (queryKey != null) {\r\n\t var r = SyncTree.parseQueryKey_(queryKey);\r\n\t var queryPath = r.path, queryId = r.queryId;\r\n\t var relativePath = Path.relativePath(queryPath, path);\r\n\t var op = new Overwrite(OperationSource.forServerTaggedQuery(queryId), relativePath, snap);\r\n\t return this.applyTaggedOperation_(queryPath, op);\r\n\t }\r\n\t else {\r\n\t // Query must have been removed already\r\n\t return [];\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Apply server data to be merged in for the specified tagged query.\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @param {!Object.} changedChildren\r\n\t * @param {!number} tag\r\n\t * @return {!Array.} Events to raise.\r\n\t */\r\n\t SyncTree.prototype.applyTaggedQueryMerge = function (path, changedChildren, tag) {\r\n\t var queryKey = this.queryKeyForTag_(tag);\r\n\t if (queryKey) {\r\n\t var r = SyncTree.parseQueryKey_(queryKey);\r\n\t var queryPath = r.path, queryId = r.queryId;\r\n\t var relativePath = Path.relativePath(queryPath, path);\r\n\t var changeTree = ImmutableTree.fromObject(changedChildren);\r\n\t var op = new Merge(OperationSource.forServerTaggedQuery(queryId), relativePath, changeTree);\r\n\t return this.applyTaggedOperation_(queryPath, op);\r\n\t }\r\n\t else {\r\n\t // We've already removed the query. No big deal, ignore the update\r\n\t return [];\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Apply a listen complete for a tagged query\r\n\t *\r\n\t * @param {!Path} path\r\n\t * @param {!number} tag\r\n\t * @return {!Array.} Events to raise.\r\n\t */\r\n\t SyncTree.prototype.applyTaggedListenComplete = function (path, tag) {\r\n\t var queryKey = this.queryKeyForTag_(tag);\r\n\t if (queryKey) {\r\n\t var r = SyncTree.parseQueryKey_(queryKey);\r\n\t var queryPath = r.path, queryId = r.queryId;\r\n\t var relativePath = Path.relativePath(queryPath, path);\r\n\t var op = new ListenComplete(OperationSource.forServerTaggedQuery(queryId), relativePath);\r\n\t return this.applyTaggedOperation_(queryPath, op);\r\n\t }\r\n\t else {\r\n\t // We've already removed the query. No big deal, ignore the update\r\n\t return [];\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Add an event callback for the specified query.\r\n\t *\r\n\t * @param {!Query} query\r\n\t * @param {!EventRegistration} eventRegistration\r\n\t * @return {!Array.} Events to raise.\r\n\t */\r\n\t SyncTree.prototype.addEventRegistration = function (query, eventRegistration) {\r\n\t var path = query.path;\r\n\t var serverCache = null;\r\n\t var foundAncestorDefaultView = false;\r\n\t // Any covering writes will necessarily be at the root, so really all we need to find is the server cache.\r\n\t // Consider optimizing this once there's a better understanding of what actual behavior will be.\r\n\t this.syncPointTree_.foreachOnPath(path, function (pathToSyncPoint, sp) {\r\n\t var relativePath = Path.relativePath(pathToSyncPoint, path);\r\n\t serverCache = serverCache || sp.getCompleteServerCache(relativePath);\r\n\t foundAncestorDefaultView =\r\n\t foundAncestorDefaultView || sp.hasCompleteView();\r\n\t });\r\n\t var syncPoint = this.syncPointTree_.get(path);\r\n\t if (!syncPoint) {\r\n\t syncPoint = new SyncPoint();\r\n\t this.syncPointTree_ = this.syncPointTree_.set(path, syncPoint);\r\n\t }\r\n\t else {\r\n\t foundAncestorDefaultView =\r\n\t foundAncestorDefaultView || syncPoint.hasCompleteView();\r\n\t serverCache = serverCache || syncPoint.getCompleteServerCache(Path.Empty);\r\n\t }\r\n\t var serverCacheComplete;\r\n\t if (serverCache != null) {\r\n\t serverCacheComplete = true;\r\n\t }\r\n\t else {\r\n\t serverCacheComplete = false;\r\n\t serverCache = ChildrenNode.EMPTY_NODE;\r\n\t var subtree = this.syncPointTree_.subtree(path);\r\n\t subtree.foreachChild(function (childName, childSyncPoint) {\r\n\t var completeCache = childSyncPoint.getCompleteServerCache(Path.Empty);\r\n\t if (completeCache) {\r\n\t serverCache = serverCache.updateImmediateChild(childName, completeCache);\r\n\t }\r\n\t });\r\n\t }\r\n\t var viewAlreadyExists = syncPoint.viewExistsForQuery(query);\r\n\t if (!viewAlreadyExists && !query.getQueryParams().loadsAllData()) {\r\n\t // We need to track a tag for this query\r\n\t var queryKey = SyncTree.makeQueryKey_(query);\r\n\t util.assert(!(queryKey in this.queryToTagMap_), 'View does not exist, but we have a tag');\r\n\t var tag = SyncTree.getNextQueryTag_();\r\n\t this.queryToTagMap_[queryKey] = tag;\r\n\t // Coerce to string to avoid sparse arrays.\r\n\t this.tagToQueryMap_['_' + tag] = queryKey;\r\n\t }\r\n\t var writesCache = this.pendingWriteTree_.childWrites(path);\r\n\t var events = syncPoint.addEventRegistration(query, eventRegistration, writesCache, serverCache, serverCacheComplete);\r\n\t if (!viewAlreadyExists && !foundAncestorDefaultView) {\r\n\t var view /** @type !View */ = syncPoint.viewForQuery(query);\r\n\t events = events.concat(this.setupListener_(query, view));\r\n\t }\r\n\t return events;\r\n\t };\r\n\t /**\r\n\t * Remove event callback(s).\r\n\t *\r\n\t * If query is the default query, we'll check all queries for the specified eventRegistration.\r\n\t * If eventRegistration is null, we'll remove all callbacks for the specified query/queries.\r\n\t *\r\n\t * @param {!Query} query\r\n\t * @param {?EventRegistration} eventRegistration If null, all callbacks are removed.\r\n\t * @param {Error=} cancelError If a cancelError is provided, appropriate cancel events will be returned.\r\n\t * @return {!Array.} Cancel events, if cancelError was provided.\r\n\t */\r\n\t SyncTree.prototype.removeEventRegistration = function (query, eventRegistration, cancelError) {\r\n\t var _this = this;\r\n\t // Find the syncPoint first. Then deal with whether or not it has matching listeners\r\n\t var path = query.path;\r\n\t var maybeSyncPoint = this.syncPointTree_.get(path);\r\n\t var cancelEvents = [];\r\n\t // A removal on a default query affects all queries at that location. A removal on an indexed query, even one without\r\n\t // other query constraints, does *not* affect all queries at that location. So this check must be for 'default', and\r\n\t // not loadsAllData().\r\n\t if (maybeSyncPoint &&\r\n\t (query.queryIdentifier() === 'default' ||\r\n\t maybeSyncPoint.viewExistsForQuery(query))) {\r\n\t /**\r\n\t * @type {{removed: !Array., events: !Array.}}\r\n\t */\r\n\t var removedAndEvents = maybeSyncPoint.removeEventRegistration(query, eventRegistration, cancelError);\r\n\t if (maybeSyncPoint.isEmpty()) {\r\n\t this.syncPointTree_ = this.syncPointTree_.remove(path);\r\n\t }\r\n\t var removed = removedAndEvents.removed;\r\n\t cancelEvents = removedAndEvents.events;\r\n\t // We may have just removed one of many listeners and can short-circuit this whole process\r\n\t // We may also not have removed a default listener, in which case all of the descendant listeners should already be\r\n\t // properly set up.\r\n\t //\r\n\t // Since indexed queries can shadow if they don't have other query constraints, check for loadsAllData(), instead of\r\n\t // queryId === 'default'\r\n\t var removingDefault = -1 !==\r\n\t removed.findIndex(function (query) {\r\n\t return query.getQueryParams().loadsAllData();\r\n\t });\r\n\t var covered = this.syncPointTree_.findOnPath(path, function (relativePath, parentSyncPoint) {\r\n\t return parentSyncPoint.hasCompleteView();\r\n\t });\r\n\t if (removingDefault && !covered) {\r\n\t var subtree = this.syncPointTree_.subtree(path);\r\n\t // There are potentially child listeners. Determine what if any listens we need to send before executing the\r\n\t // removal\r\n\t if (!subtree.isEmpty()) {\r\n\t // We need to fold over our subtree and collect the listeners to send\r\n\t var newViews = this.collectDistinctViewsForSubTree_(subtree);\r\n\t // Ok, we've collected all the listens we need. Set them up.\r\n\t for (var i = 0; i < newViews.length; ++i) {\r\n\t var view = newViews[i], newQuery = view.getQuery();\r\n\t var listener = this.createListenerForView_(view);\r\n\t this.listenProvider_.startListening(SyncTree.queryForListening_(newQuery), this.tagForQuery_(newQuery), listener.hashFn, listener.onComplete);\r\n\t }\r\n\t }\r\n\t else {\r\n\t // There's nothing below us, so nothing we need to start listening on\r\n\t }\r\n\t }\r\n\t // If we removed anything and we're not covered by a higher up listen, we need to stop listening on this query\r\n\t // The above block has us covered in terms of making sure we're set up on listens lower in the tree.\r\n\t // Also, note that if we have a cancelError, it's already been removed at the provider level.\r\n\t if (!covered && removed.length > 0 && !cancelError) {\r\n\t // If we removed a default, then we weren't listening on any of the other queries here. Just cancel the one\r\n\t // default. Otherwise, we need to iterate through and cancel each individual query\r\n\t if (removingDefault) {\r\n\t // We don't tag default listeners\r\n\t var defaultTag = null;\r\n\t this.listenProvider_.stopListening(SyncTree.queryForListening_(query), defaultTag);\r\n\t }\r\n\t else {\r\n\t removed.forEach(function (queryToRemove) {\r\n\t var tagToRemove = _this.queryToTagMap_[SyncTree.makeQueryKey_(queryToRemove)];\r\n\t _this.listenProvider_.stopListening(SyncTree.queryForListening_(queryToRemove), tagToRemove);\r\n\t });\r\n\t }\r\n\t }\r\n\t // Now, clear all of the tags we're tracking for the removed listens\r\n\t this.removeTags_(removed);\r\n\t }\r\n\t else {\r\n\t // No-op, this listener must've been already removed\r\n\t }\r\n\t return cancelEvents;\r\n\t };\r\n\t /**\r\n\t * Returns a complete cache, if we have one, of the data at a particular path. The location must have a listener above\r\n\t * it, but as this is only used by transaction code, that should always be the case anyways.\r\n\t *\r\n\t * Note: this method will *include* hidden writes from transaction with applyLocally set to false.\r\n\t * @param {!Path} path The path to the data we want\r\n\t * @param {Array.=} writeIdsToExclude A specific set to be excluded\r\n\t * @return {?Node}\r\n\t */\r\n\t SyncTree.prototype.calcCompleteEventCache = function (path, writeIdsToExclude) {\r\n\t var includeHiddenSets = true;\r\n\t var writeTree = this.pendingWriteTree_;\r\n\t var serverCache = this.syncPointTree_.findOnPath(path, function (pathSoFar, syncPoint) {\r\n\t var relativePath = Path.relativePath(pathSoFar, path);\r\n\t var serverCache = syncPoint.getCompleteServerCache(relativePath);\r\n\t if (serverCache) {\r\n\t return serverCache;\r\n\t }\r\n\t });\r\n\t return writeTree.calcCompleteEventCache(path, serverCache, writeIdsToExclude, includeHiddenSets);\r\n\t };\r\n\t /**\r\n\t * This collapses multiple unfiltered views into a single view, since we only need a single\r\n\t * listener for them.\r\n\t *\r\n\t * @param {!ImmutableTree.} subtree\r\n\t * @return {!Array.}\r\n\t * @private\r\n\t */\r\n\t SyncTree.prototype.collectDistinctViewsForSubTree_ = function (subtree) {\r\n\t return subtree.fold(function (relativePath, maybeChildSyncPoint, childMap) {\r\n\t if (maybeChildSyncPoint && maybeChildSyncPoint.hasCompleteView()) {\r\n\t var completeView = maybeChildSyncPoint.getCompleteView();\r\n\t return [completeView];\r\n\t }\r\n\t else {\r\n\t // No complete view here, flatten any deeper listens into an array\r\n\t var views_1 = [];\r\n\t if (maybeChildSyncPoint) {\r\n\t views_1 = maybeChildSyncPoint.getQueryViews();\r\n\t }\r\n\t util.forEach(childMap, function (key, childViews) {\r\n\t views_1 = views_1.concat(childViews);\r\n\t });\r\n\t return views_1;\r\n\t }\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @param {!Array.} queries\r\n\t * @private\r\n\t */\r\n\t SyncTree.prototype.removeTags_ = function (queries) {\r\n\t for (var j = 0; j < queries.length; ++j) {\r\n\t var removedQuery = queries[j];\r\n\t if (!removedQuery.getQueryParams().loadsAllData()) {\r\n\t // We should have a tag for this\r\n\t var removedQueryKey = SyncTree.makeQueryKey_(removedQuery);\r\n\t var removedQueryTag = this.queryToTagMap_[removedQueryKey];\r\n\t delete this.queryToTagMap_[removedQueryKey];\r\n\t delete this.tagToQueryMap_['_' + removedQueryTag];\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Normalizes a query to a query we send the server for listening\r\n\t * @param {!Query} query\r\n\t * @return {!Query} The normalized query\r\n\t * @private\r\n\t */\r\n\t SyncTree.queryForListening_ = function (query) {\r\n\t if (query.getQueryParams().loadsAllData() &&\r\n\t !query.getQueryParams().isDefault()) {\r\n\t // We treat queries that load all data as default queries\r\n\t // Cast is necessary because ref() technically returns Firebase which is actually fb.api.Firebase which inherits\r\n\t // from Query\r\n\t return /** @type {!Query} */ query.getRef();\r\n\t }\r\n\t else {\r\n\t return query;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * For a given new listen, manage the de-duplication of outstanding subscriptions.\r\n\t *\r\n\t * @param {!Query} query\r\n\t * @param {!View} view\r\n\t * @return {!Array.} This method can return events to support synchronous data sources\r\n\t * @private\r\n\t */\r\n\t SyncTree.prototype.setupListener_ = function (query, view) {\r\n\t var path = query.path;\r\n\t var tag = this.tagForQuery_(query);\r\n\t var listener = this.createListenerForView_(view);\r\n\t var events = this.listenProvider_.startListening(SyncTree.queryForListening_(query), tag, listener.hashFn, listener.onComplete);\r\n\t var subtree = this.syncPointTree_.subtree(path);\r\n\t // The root of this subtree has our query. We're here because we definitely need to send a listen for that, but we\r\n\t // may need to shadow other listens as well.\r\n\t if (tag) {\r\n\t util.assert(!subtree.value.hasCompleteView(), \"If we're adding a query, it shouldn't be shadowed\");\r\n\t }\r\n\t else {\r\n\t // Shadow everything at or below this location, this is a default listener.\r\n\t var queriesToStop = subtree.fold(function (relativePath, maybeChildSyncPoint, childMap) {\r\n\t if (!relativePath.isEmpty() &&\r\n\t maybeChildSyncPoint &&\r\n\t maybeChildSyncPoint.hasCompleteView()) {\r\n\t return [maybeChildSyncPoint.getCompleteView().getQuery()];\r\n\t }\r\n\t else {\r\n\t // No default listener here, flatten any deeper queries into an array\r\n\t var queries_1 = [];\r\n\t if (maybeChildSyncPoint) {\r\n\t queries_1 = queries_1.concat(maybeChildSyncPoint.getQueryViews().map(function (view) { return view.getQuery(); }));\r\n\t }\r\n\t util.forEach(childMap, function (key, childQueries) {\r\n\t queries_1 = queries_1.concat(childQueries);\r\n\t });\r\n\t return queries_1;\r\n\t }\r\n\t });\r\n\t for (var i = 0; i < queriesToStop.length; ++i) {\r\n\t var queryToStop = queriesToStop[i];\r\n\t this.listenProvider_.stopListening(SyncTree.queryForListening_(queryToStop), this.tagForQuery_(queryToStop));\r\n\t }\r\n\t }\r\n\t return events;\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {!View} view\r\n\t * @return {{hashFn: function(), onComplete: function(!string, *)}}\r\n\t * @private\r\n\t */\r\n\t SyncTree.prototype.createListenerForView_ = function (view) {\r\n\t var _this = this;\r\n\t var query = view.getQuery();\r\n\t var tag = this.tagForQuery_(query);\r\n\t return {\r\n\t hashFn: function () {\r\n\t var cache = view.getServerCache() || ChildrenNode.EMPTY_NODE;\r\n\t return cache.hash();\r\n\t },\r\n\t onComplete: function (status) {\r\n\t if (status === 'ok') {\r\n\t if (tag) {\r\n\t return _this.applyTaggedListenComplete(query.path, tag);\r\n\t }\r\n\t else {\r\n\t return _this.applyListenComplete(query.path);\r\n\t }\r\n\t }\r\n\t else {\r\n\t // If a listen failed, kill all of the listeners here, not just the one that triggered the error.\r\n\t // Note that this may need to be scoped to just this listener if we change permissions on filtered children\r\n\t var error$$1 = errorForServerCode(status, query);\r\n\t return _this.removeEventRegistration(query, \r\n\t /*eventRegistration*/ null, error$$1);\r\n\t }\r\n\t }\r\n\t };\r\n\t };\r\n\t /**\r\n\t * Given a query, computes a \"queryKey\" suitable for use in our queryToTagMap_.\r\n\t * @private\r\n\t * @param {!Query} query\r\n\t * @return {string}\r\n\t */\r\n\t SyncTree.makeQueryKey_ = function (query) {\r\n\t return query.path.toString() + '$' + query.queryIdentifier();\r\n\t };\r\n\t /**\r\n\t * Given a queryKey (created by makeQueryKey), parse it back into a path and queryId.\r\n\t * @private\r\n\t * @param {!string} queryKey\r\n\t * @return {{queryId: !string, path: !Path}}\r\n\t */\r\n\t SyncTree.parseQueryKey_ = function (queryKey) {\r\n\t var splitIndex = queryKey.indexOf('$');\r\n\t util.assert(splitIndex !== -1 && splitIndex < queryKey.length - 1, 'Bad queryKey.');\r\n\t return {\r\n\t queryId: queryKey.substr(splitIndex + 1),\r\n\t path: new Path(queryKey.substr(0, splitIndex))\r\n\t };\r\n\t };\r\n\t /**\r\n\t * Return the query associated with the given tag, if we have one\r\n\t * @param {!number} tag\r\n\t * @return {?string}\r\n\t * @private\r\n\t */\r\n\t SyncTree.prototype.queryKeyForTag_ = function (tag) {\r\n\t return this.tagToQueryMap_['_' + tag];\r\n\t };\r\n\t /**\r\n\t * Return the tag associated with the given query.\r\n\t * @param {!Query} query\r\n\t * @return {?number}\r\n\t * @private\r\n\t */\r\n\t SyncTree.prototype.tagForQuery_ = function (query) {\r\n\t var queryKey = SyncTree.makeQueryKey_(query);\r\n\t return util.safeGet(this.queryToTagMap_, queryKey);\r\n\t };\r\n\t /**\r\n\t * Static accessor for query tags.\r\n\t * @return {number}\r\n\t * @private\r\n\t */\r\n\t SyncTree.getNextQueryTag_ = function () {\r\n\t return SyncTree.nextQueryTag_++;\r\n\t };\r\n\t /**\r\n\t * A helper method to apply tagged operations\r\n\t *\r\n\t * @param {!Path} queryPath\r\n\t * @param {!Operation} operation\r\n\t * @return {!Array.}\r\n\t * @private\r\n\t */\r\n\t SyncTree.prototype.applyTaggedOperation_ = function (queryPath, operation) {\r\n\t var syncPoint = this.syncPointTree_.get(queryPath);\r\n\t util.assert(syncPoint, \"Missing sync point for query tag that we're tracking\");\r\n\t var writesCache = this.pendingWriteTree_.childWrites(queryPath);\r\n\t return syncPoint.applyOperation(operation, writesCache, \r\n\t /*serverCache=*/ null);\r\n\t };\r\n\t /**\r\n\t * A helper method that visits all descendant and ancestor SyncPoints, applying the operation.\r\n\t *\r\n\t * NOTES:\r\n\t * - Descendant SyncPoints will be visited first (since we raise events depth-first).\r\n\t \n\t * - We call applyOperation() on each SyncPoint passing three things:\r\n\t * 1. A version of the Operation that has been made relative to the SyncPoint location.\r\n\t * 2. A WriteTreeRef of any writes we have cached at the SyncPoint location.\r\n\t * 3. A snapshot Node with cached server data, if we have it.\r\n\t \n\t * - We concatenate all of the events returned by each SyncPoint and return the result.\r\n\t *\r\n\t * @param {!Operation} operation\r\n\t * @return {!Array.}\r\n\t * @private\r\n\t */\r\n\t SyncTree.prototype.applyOperationToSyncPoints_ = function (operation) {\r\n\t return this.applyOperationHelper_(operation, this.syncPointTree_, \r\n\t /*serverCache=*/ null, this.pendingWriteTree_.childWrites(Path.Empty));\r\n\t };\r\n\t /**\r\n\t * Recursive helper for applyOperationToSyncPoints_\r\n\t *\r\n\t * @private\r\n\t * @param {!Operation} operation\r\n\t * @param {ImmutableTree.} syncPointTree\r\n\t * @param {?Node} serverCache\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @return {!Array.}\r\n\t */\r\n\t SyncTree.prototype.applyOperationHelper_ = function (operation, syncPointTree, serverCache, writesCache) {\r\n\t if (operation.path.isEmpty()) {\r\n\t return this.applyOperationDescendantsHelper_(operation, syncPointTree, serverCache, writesCache);\r\n\t }\r\n\t else {\r\n\t var syncPoint = syncPointTree.get(Path.Empty);\r\n\t // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n\t if (serverCache == null && syncPoint != null) {\r\n\t serverCache = syncPoint.getCompleteServerCache(Path.Empty);\r\n\t }\r\n\t var events = [];\r\n\t var childName = operation.path.getFront();\r\n\t var childOperation = operation.operationForChild(childName);\r\n\t var childTree = syncPointTree.children.get(childName);\r\n\t if (childTree && childOperation) {\r\n\t var childServerCache = serverCache\r\n\t ? serverCache.getImmediateChild(childName)\r\n\t : null;\r\n\t var childWritesCache = writesCache.child(childName);\r\n\t events = events.concat(this.applyOperationHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n\t }\r\n\t if (syncPoint) {\r\n\t events = events.concat(syncPoint.applyOperation(operation, writesCache, serverCache));\r\n\t }\r\n\t return events;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Recursive helper for applyOperationToSyncPoints_\r\n\t *\r\n\t * @private\r\n\t * @param {!Operation} operation\r\n\t * @param {ImmutableTree.} syncPointTree\r\n\t * @param {?Node} serverCache\r\n\t * @param {!WriteTreeRef} writesCache\r\n\t * @return {!Array.}\r\n\t */\r\n\t SyncTree.prototype.applyOperationDescendantsHelper_ = function (operation, syncPointTree, serverCache, writesCache) {\r\n\t var _this = this;\r\n\t var syncPoint = syncPointTree.get(Path.Empty);\r\n\t // If we don't have cached server data, see if we can get it from this SyncPoint.\r\n\t if (serverCache == null && syncPoint != null) {\r\n\t serverCache = syncPoint.getCompleteServerCache(Path.Empty);\r\n\t }\r\n\t var events = [];\r\n\t syncPointTree.children.inorderTraversal(function (childName, childTree) {\r\n\t var childServerCache = serverCache\r\n\t ? serverCache.getImmediateChild(childName)\r\n\t : null;\r\n\t var childWritesCache = writesCache.child(childName);\r\n\t var childOperation = operation.operationForChild(childName);\r\n\t if (childOperation) {\r\n\t events = events.concat(_this.applyOperationDescendantsHelper_(childOperation, childTree, childServerCache, childWritesCache));\r\n\t }\r\n\t });\r\n\t if (syncPoint) {\r\n\t events = events.concat(syncPoint.applyOperation(operation, writesCache, serverCache));\r\n\t }\r\n\t return events;\r\n\t };\r\n\t /**\r\n\t * Static tracker for next query tag.\r\n\t * @type {number}\r\n\t * @private\r\n\t */\r\n\t SyncTree.nextQueryTag_ = 1;\r\n\t return SyncTree;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Mutable object which basically just stores a reference to the \"latest\" immutable snapshot.\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar SnapshotHolder = /** @class */ (function () {\r\n\t function SnapshotHolder() {\r\n\t this.rootNode_ = ChildrenNode.EMPTY_NODE;\r\n\t }\r\n\t SnapshotHolder.prototype.getNode = function (path) {\r\n\t return this.rootNode_.getChild(path);\r\n\t };\r\n\t SnapshotHolder.prototype.updateSnapshot = function (path, newSnapshotNode) {\r\n\t this.rootNode_ = this.rootNode_.updateChild(path, newSnapshotNode);\r\n\t };\r\n\t return SnapshotHolder;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Abstraction around FirebaseApp's token fetching capabilities.\r\n\t */\r\n\tvar AuthTokenProvider = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!FirebaseApp} app_\r\n\t */\r\n\t function AuthTokenProvider(app_) {\r\n\t this.app_ = app_;\r\n\t }\r\n\t /**\r\n\t * @param {boolean} forceRefresh\r\n\t * @return {!Promise}\r\n\t */\r\n\t AuthTokenProvider.prototype.getToken = function (forceRefresh) {\r\n\t return this.app_['INTERNAL']['getToken'](forceRefresh).then(null, \r\n\t // .catch\r\n\t function (error$$1) {\r\n\t // TODO: Need to figure out all the cases this is raised and whether\r\n\t // this makes sense.\r\n\t if (error$$1 && error$$1.code === 'auth/token-not-initialized') {\r\n\t log('Got auth/token-not-initialized error. Treating as null token.');\r\n\t return null;\r\n\t }\r\n\t else {\r\n\t return Promise.reject(error$$1);\r\n\t }\r\n\t });\r\n\t };\r\n\t AuthTokenProvider.prototype.addTokenChangeListener = function (listener) {\r\n\t // TODO: We might want to wrap the listener and call it with no args to\r\n\t // avoid a leaky abstraction, but that makes removing the listener harder.\r\n\t this.app_['INTERNAL']['addAuthTokenListener'](listener);\r\n\t };\r\n\t AuthTokenProvider.prototype.removeTokenChangeListener = function (listener) {\r\n\t this.app_['INTERNAL']['removeAuthTokenListener'](listener);\r\n\t };\r\n\t AuthTokenProvider.prototype.notifyForInvalidToken = function () {\r\n\t var errorMessage = 'Provided authentication credentials for the app named \"' +\r\n\t this.app_.name +\r\n\t '\" are invalid. This usually indicates your app was not ' +\r\n\t 'initialized correctly. ';\r\n\t if ('credential' in this.app_.options) {\r\n\t errorMessage +=\r\n\t 'Make sure the \"credential\" property provided to initializeApp() ' +\r\n\t 'is authorized to access the specified \"databaseURL\" and is from the correct ' +\r\n\t 'project.';\r\n\t }\r\n\t else if ('serviceAccount' in this.app_.options) {\r\n\t errorMessage +=\r\n\t 'Make sure the \"serviceAccount\" property provided to initializeApp() ' +\r\n\t 'is authorized to access the specified \"databaseURL\" and is from the correct ' +\r\n\t 'project.';\r\n\t }\r\n\t else {\r\n\t errorMessage +=\r\n\t 'Make sure the \"apiKey\" and \"databaseURL\" properties provided to ' +\r\n\t 'initializeApp() match the values provided for your app at ' +\r\n\t 'https://console.firebase.google.com/.';\r\n\t }\r\n\t warn(errorMessage);\r\n\t };\r\n\t return AuthTokenProvider;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Tracks a collection of stats.\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar StatsCollection = /** @class */ (function () {\r\n\t function StatsCollection() {\r\n\t this.counters_ = {};\r\n\t }\r\n\t StatsCollection.prototype.incrementCounter = function (name, amount) {\r\n\t if (amount === void 0) { amount = 1; }\r\n\t if (!util.contains(this.counters_, name))\r\n\t this.counters_[name] = 0;\r\n\t this.counters_[name] += amount;\r\n\t };\r\n\t StatsCollection.prototype.get = function () {\r\n\t return util.deepCopy(this.counters_);\r\n\t };\r\n\t return StatsCollection;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar StatsManager = /** @class */ (function () {\r\n\t function StatsManager() {\r\n\t }\r\n\t StatsManager.getCollection = function (repoInfo) {\r\n\t var hashString = repoInfo.toString();\r\n\t if (!this.collections_[hashString]) {\r\n\t this.collections_[hashString] = new StatsCollection();\r\n\t }\r\n\t return this.collections_[hashString];\r\n\t };\r\n\t StatsManager.getOrCreateReporter = function (repoInfo, creatorFunction) {\r\n\t var hashString = repoInfo.toString();\r\n\t if (!this.reporters_[hashString]) {\r\n\t this.reporters_[hashString] = creatorFunction();\r\n\t }\r\n\t return this.reporters_[hashString];\r\n\t };\r\n\t StatsManager.collections_ = {};\r\n\t StatsManager.reporters_ = {};\r\n\t return StatsManager;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Returns the delta from the previous call to get stats.\r\n\t *\r\n\t * @param collection_ The collection to \"listen\" to.\r\n\t * @constructor\r\n\t */\r\n\tvar StatsListener = /** @class */ (function () {\r\n\t function StatsListener(collection_) {\r\n\t this.collection_ = collection_;\r\n\t this.last_ = null;\r\n\t }\r\n\t StatsListener.prototype.get = function () {\r\n\t var newStats = this.collection_.get();\r\n\t var delta = util.clone(newStats);\r\n\t if (this.last_) {\r\n\t util.forEach(this.last_, function (stat, value) {\r\n\t delta[stat] = delta[stat] - value;\r\n\t });\r\n\t }\r\n\t this.last_ = newStats;\r\n\t return delta;\r\n\t };\r\n\t return StatsListener;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t// Assuming some apps may have a short amount of time on page, and a bulk of firebase operations probably\r\n\t// happen on page load, we try to report our first set of stats pretty quickly, but we wait at least 10\r\n\t// seconds to try to ensure the Firebase connection is established / settled.\r\n\tvar FIRST_STATS_MIN_TIME = 10 * 1000;\r\n\tvar FIRST_STATS_MAX_TIME = 30 * 1000;\r\n\t// We'll continue to report stats on average every 5 minutes.\r\n\tvar REPORT_STATS_INTERVAL = 5 * 60 * 1000;\r\n\t/**\r\n\t * @constructor\r\n\t */\r\n\tvar StatsReporter = /** @class */ (function () {\r\n\t /**\r\n\t * @param collection\r\n\t * @param server_\r\n\t */\r\n\t function StatsReporter(collection, server_) {\r\n\t this.server_ = server_;\r\n\t this.statsToReport_ = {};\r\n\t this.statsListener_ = new StatsListener(collection);\r\n\t var timeout = FIRST_STATS_MIN_TIME +\r\n\t (FIRST_STATS_MAX_TIME - FIRST_STATS_MIN_TIME) * Math.random();\r\n\t setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(timeout));\r\n\t }\r\n\t StatsReporter.prototype.includeStat = function (stat) {\r\n\t this.statsToReport_[stat] = true;\r\n\t };\r\n\t StatsReporter.prototype.reportStats_ = function () {\r\n\t var _this = this;\r\n\t var stats = this.statsListener_.get();\r\n\t var reportedStats = {};\r\n\t var haveStatsToReport = false;\r\n\t util.forEach(stats, function (stat, value) {\r\n\t if (value > 0 && util.contains(_this.statsToReport_, stat)) {\r\n\t reportedStats[stat] = value;\r\n\t haveStatsToReport = true;\r\n\t }\r\n\t });\r\n\t if (haveStatsToReport) {\r\n\t this.server_.reportStats(reportedStats);\r\n\t }\r\n\t // queue our next run.\r\n\t setTimeoutNonBlocking(this.reportStats_.bind(this), Math.floor(Math.random() * 2 * REPORT_STATS_INTERVAL));\r\n\t };\r\n\t return StatsReporter;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * The event queue serves a few purposes:\r\n\t * 1. It ensures we maintain event order in the face of event callbacks doing operations that result in more\r\n\t * events being queued.\r\n\t * 2. raiseQueuedEvents() handles being called reentrantly nicely. That is, if in the course of raising events,\r\n\t * raiseQueuedEvents() is called again, the \"inner\" call will pick up raising events where the \"outer\" call\r\n\t * left off, ensuring that the events are still raised synchronously and in order.\r\n\t * 3. You can use raiseEventsAtPath and raiseEventsForChangedPath to ensure only relevant previously-queued\r\n\t * events are raised synchronously.\r\n\t *\r\n\t * NOTE: This can all go away if/when we move to async events.\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar EventQueue = /** @class */ (function () {\r\n\t function EventQueue() {\r\n\t /**\r\n\t * @private\r\n\t * @type {!Array.}\r\n\t */\r\n\t this.eventLists_ = [];\r\n\t /**\r\n\t * Tracks recursion depth of raiseQueuedEvents_, for debugging purposes.\r\n\t * @private\r\n\t * @type {!number}\r\n\t */\r\n\t this.recursionDepth_ = 0;\r\n\t }\r\n\t /**\r\n\t * @param {!Array.} eventDataList The new events to queue.\r\n\t */\r\n\t EventQueue.prototype.queueEvents = function (eventDataList) {\r\n\t // We group events by path, storing them in a single EventList, to make it easier to skip over them quickly.\r\n\t var currList = null;\r\n\t for (var i = 0; i < eventDataList.length; i++) {\r\n\t var eventData = eventDataList[i];\r\n\t var eventPath = eventData.getPath();\r\n\t if (currList !== null && !eventPath.equals(currList.getPath())) {\r\n\t this.eventLists_.push(currList);\r\n\t currList = null;\r\n\t }\r\n\t if (currList === null) {\r\n\t currList = new EventList(eventPath);\r\n\t }\r\n\t currList.add(eventData);\r\n\t }\r\n\t if (currList) {\r\n\t this.eventLists_.push(currList);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Queues the specified events and synchronously raises all events (including previously queued ones)\r\n\t * for the specified path.\r\n\t *\r\n\t * It is assumed that the new events are all for the specified path.\r\n\t *\r\n\t * @param {!Path} path The path to raise events for.\r\n\t * @param {!Array.} eventDataList The new events to raise.\r\n\t */\r\n\t EventQueue.prototype.raiseEventsAtPath = function (path, eventDataList) {\r\n\t this.queueEvents(eventDataList);\r\n\t this.raiseQueuedEventsMatchingPredicate_(function (eventPath) {\r\n\t return eventPath.equals(path);\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Queues the specified events and synchronously raises all events (including previously queued ones) for\r\n\t * locations related to the specified change path (i.e. all ancestors and descendants).\r\n\t *\r\n\t * It is assumed that the new events are all related (ancestor or descendant) to the specified path.\r\n\t *\r\n\t * @param {!Path} changedPath The path to raise events for.\r\n\t * @param {!Array.} eventDataList The events to raise\r\n\t */\r\n\t EventQueue.prototype.raiseEventsForChangedPath = function (changedPath, eventDataList) {\r\n\t this.queueEvents(eventDataList);\r\n\t this.raiseQueuedEventsMatchingPredicate_(function (eventPath) {\r\n\t return eventPath.contains(changedPath) || changedPath.contains(eventPath);\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @param {!function(!Path):boolean} predicate\r\n\t * @private\r\n\t */\r\n\t EventQueue.prototype.raiseQueuedEventsMatchingPredicate_ = function (predicate) {\r\n\t this.recursionDepth_++;\r\n\t var sentAll = true;\r\n\t for (var i = 0; i < this.eventLists_.length; i++) {\r\n\t var eventList = this.eventLists_[i];\r\n\t if (eventList) {\r\n\t var eventPath = eventList.getPath();\r\n\t if (predicate(eventPath)) {\r\n\t this.eventLists_[i].raise();\r\n\t this.eventLists_[i] = null;\r\n\t }\r\n\t else {\r\n\t sentAll = false;\r\n\t }\r\n\t }\r\n\t }\r\n\t if (sentAll) {\r\n\t this.eventLists_ = [];\r\n\t }\r\n\t this.recursionDepth_--;\r\n\t };\r\n\t return EventQueue;\r\n\t}());\r\n\t/**\r\n\t * @param {!Path} path\r\n\t * @constructor\r\n\t */\r\n\tvar EventList = /** @class */ (function () {\r\n\t function EventList(path_) {\r\n\t this.path_ = path_;\r\n\t /**\r\n\t * @type {!Array.}\r\n\t * @private\r\n\t */\r\n\t this.events_ = [];\r\n\t }\r\n\t /**\r\n\t * @param {!Event} eventData\r\n\t */\r\n\t EventList.prototype.add = function (eventData) {\r\n\t this.events_.push(eventData);\r\n\t };\r\n\t /**\r\n\t * Iterates through the list and raises each event\r\n\t */\r\n\t EventList.prototype.raise = function () {\r\n\t for (var i = 0; i < this.events_.length; i++) {\r\n\t var eventData = this.events_[i];\r\n\t if (eventData !== null) {\r\n\t this.events_[i] = null;\r\n\t var eventFn = eventData.getEventRunner();\r\n\t if (logger$1) {\r\n\t log('event: ' + eventData.toString());\r\n\t }\r\n\t exceptionGuard(eventFn);\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @return {!Path}\r\n\t */\r\n\t EventList.prototype.getPath = function () {\r\n\t return this.path_;\r\n\t };\r\n\t return EventList;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Base class to be used if you want to emit events. Call the constructor with\r\n\t * the set of allowed event names.\r\n\t */\r\n\tvar EventEmitter = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!Array.} allowedEvents_\r\n\t */\r\n\t function EventEmitter(allowedEvents_) {\r\n\t this.allowedEvents_ = allowedEvents_;\r\n\t this.listeners_ = {};\r\n\t util.assert(Array.isArray(allowedEvents_) && allowedEvents_.length > 0, 'Requires a non-empty array');\r\n\t }\r\n\t /**\r\n\t * To be called by derived classes to trigger events.\r\n\t * @param {!string} eventType\r\n\t * @param {...*} var_args\r\n\t */\r\n\t EventEmitter.prototype.trigger = function (eventType) {\r\n\t var var_args = [];\r\n\t for (var _i = 1; _i < arguments.length; _i++) {\r\n\t var_args[_i - 1] = arguments[_i];\r\n\t }\r\n\t if (Array.isArray(this.listeners_[eventType])) {\r\n\t // Clone the list, since callbacks could add/remove listeners.\r\n\t var listeners = this.listeners_[eventType].slice();\r\n\t for (var i = 0; i < listeners.length; i++) {\r\n\t listeners[i].callback.apply(listeners[i].context, var_args);\r\n\t }\r\n\t }\r\n\t };\r\n\t EventEmitter.prototype.on = function (eventType, callback, context) {\r\n\t this.validateEventType_(eventType);\r\n\t this.listeners_[eventType] = this.listeners_[eventType] || [];\r\n\t this.listeners_[eventType].push({ callback: callback, context: context });\r\n\t var eventData = this.getInitialEvent(eventType);\r\n\t if (eventData) {\r\n\t callback.apply(context, eventData);\r\n\t }\r\n\t };\r\n\t EventEmitter.prototype.off = function (eventType, callback, context) {\r\n\t this.validateEventType_(eventType);\r\n\t var listeners = this.listeners_[eventType] || [];\r\n\t for (var i = 0; i < listeners.length; i++) {\r\n\t if (listeners[i].callback === callback &&\r\n\t (!context || context === listeners[i].context)) {\r\n\t listeners.splice(i, 1);\r\n\t return;\r\n\t }\r\n\t }\r\n\t };\r\n\t EventEmitter.prototype.validateEventType_ = function (eventType) {\r\n\t util.assert(this.allowedEvents_.find(function (et) {\r\n\t return et === eventType;\r\n\t }), 'Unknown event: ' + eventType);\r\n\t };\r\n\t return EventEmitter;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @extends {EventEmitter}\r\n\t */\r\n\tvar VisibilityMonitor = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(VisibilityMonitor, _super);\r\n\t function VisibilityMonitor() {\r\n\t var _this = _super.call(this, ['visible']) || this;\r\n\t var hidden;\r\n\t var visibilityChange;\r\n\t if (typeof document !== 'undefined' &&\r\n\t typeof document.addEventListener !== 'undefined') {\r\n\t if (typeof document['hidden'] !== 'undefined') {\r\n\t // Opera 12.10 and Firefox 18 and later support\r\n\t visibilityChange = 'visibilitychange';\r\n\t hidden = 'hidden';\r\n\t }\r\n\t else if (typeof document['mozHidden'] !== 'undefined') {\r\n\t visibilityChange = 'mozvisibilitychange';\r\n\t hidden = 'mozHidden';\r\n\t }\r\n\t else if (typeof document['msHidden'] !== 'undefined') {\r\n\t visibilityChange = 'msvisibilitychange';\r\n\t hidden = 'msHidden';\r\n\t }\r\n\t else if (typeof document['webkitHidden'] !== 'undefined') {\r\n\t visibilityChange = 'webkitvisibilitychange';\r\n\t hidden = 'webkitHidden';\r\n\t }\r\n\t }\r\n\t // Initially, we always assume we are visible. This ensures that in browsers\r\n\t // without page visibility support or in cases where we are never visible\r\n\t // (e.g. chrome extension), we act as if we are visible, i.e. don't delay\r\n\t // reconnects\r\n\t _this.visible_ = true;\r\n\t if (visibilityChange) {\r\n\t document.addEventListener(visibilityChange, function () {\r\n\t var visible = !document[hidden];\r\n\t if (visible !== _this.visible_) {\r\n\t _this.visible_ = visible;\r\n\t _this.trigger('visible', visible);\r\n\t }\r\n\t }, false);\r\n\t }\r\n\t return _this;\r\n\t }\r\n\t VisibilityMonitor.getInstance = function () {\r\n\t return new VisibilityMonitor();\r\n\t };\r\n\t /**\r\n\t * @param {!string} eventType\r\n\t * @return {Array.}\r\n\t */\r\n\t VisibilityMonitor.prototype.getInitialEvent = function (eventType) {\r\n\t util.assert(eventType === 'visible', 'Unknown event type: ' + eventType);\r\n\t return [this.visible_];\r\n\t };\r\n\t return VisibilityMonitor;\r\n\t}(EventEmitter));\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Monitors online state (as reported by window.online/offline events).\r\n\t *\r\n\t * The expectation is that this could have many false positives (thinks we are online\r\n\t * when we're not), but no false negatives. So we can safely use it to determine when\r\n\t * we definitely cannot reach the internet.\r\n\t *\r\n\t * @extends {EventEmitter}\r\n\t */\r\n\tvar OnlineMonitor = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(OnlineMonitor, _super);\r\n\t function OnlineMonitor() {\r\n\t var _this = _super.call(this, ['online']) || this;\r\n\t _this.online_ = true;\r\n\t // We've had repeated complaints that Cordova apps can get stuck \"offline\", e.g.\r\n\t // https://forum.ionicframework.com/t/firebase-connection-is-lost-and-never-come-back/43810\r\n\t // It would seem that the 'online' event does not always fire consistently. So we disable it\r\n\t // for Cordova.\r\n\t if (typeof window !== 'undefined' &&\r\n\t typeof window.addEventListener !== 'undefined' &&\r\n\t !util.isMobileCordova()) {\r\n\t window.addEventListener('online', function () {\r\n\t if (!_this.online_) {\r\n\t _this.online_ = true;\r\n\t _this.trigger('online', true);\r\n\t }\r\n\t }, false);\r\n\t window.addEventListener('offline', function () {\r\n\t if (_this.online_) {\r\n\t _this.online_ = false;\r\n\t _this.trigger('online', false);\r\n\t }\r\n\t }, false);\r\n\t }\r\n\t return _this;\r\n\t }\r\n\t OnlineMonitor.getInstance = function () {\r\n\t return new OnlineMonitor();\r\n\t };\r\n\t /**\r\n\t * @param {!string} eventType\r\n\t * @return {Array.}\r\n\t */\r\n\t OnlineMonitor.prototype.getInitialEvent = function (eventType) {\r\n\t util.assert(eventType === 'online', 'Unknown event type: ' + eventType);\r\n\t return [this.online_];\r\n\t };\r\n\t /**\r\n\t * @return {boolean}\r\n\t */\r\n\t OnlineMonitor.prototype.currentlyOnline = function () {\r\n\t return this.online_;\r\n\t };\r\n\t return OnlineMonitor;\r\n\t}(EventEmitter));\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * This class ensures the packets from the server arrive in order\r\n\t * This class takes data from the server and ensures it gets passed into the callbacks in order.\r\n\t * @constructor\r\n\t */\r\n\tvar PacketReceiver = /** @class */ (function () {\r\n\t /**\r\n\t * @param onMessage_\r\n\t */\r\n\t function PacketReceiver(onMessage_) {\r\n\t this.onMessage_ = onMessage_;\r\n\t this.pendingResponses = [];\r\n\t this.currentResponseNum = 0;\r\n\t this.closeAfterResponse = -1;\r\n\t this.onClose = null;\r\n\t }\r\n\t PacketReceiver.prototype.closeAfter = function (responseNum, callback) {\r\n\t this.closeAfterResponse = responseNum;\r\n\t this.onClose = callback;\r\n\t if (this.closeAfterResponse < this.currentResponseNum) {\r\n\t this.onClose();\r\n\t this.onClose = null;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Each message from the server comes with a response number, and an array of data. The responseNumber\r\n\t * allows us to ensure that we process them in the right order, since we can't be guaranteed that all\r\n\t * browsers will respond in the same order as the requests we sent\r\n\t * @param {number} requestNum\r\n\t * @param {Array} data\r\n\t */\r\n\t PacketReceiver.prototype.handleResponse = function (requestNum, data) {\r\n\t var _this = this;\r\n\t this.pendingResponses[requestNum] = data;\r\n\t var _loop_1 = function () {\r\n\t var toProcess = this_1.pendingResponses[this_1.currentResponseNum];\r\n\t delete this_1.pendingResponses[this_1.currentResponseNum];\r\n\t var _loop_2 = function (i) {\r\n\t if (toProcess[i]) {\r\n\t exceptionGuard(function () {\r\n\t _this.onMessage_(toProcess[i]);\r\n\t });\r\n\t }\r\n\t };\r\n\t for (var i = 0; i < toProcess.length; ++i) {\r\n\t _loop_2(i);\r\n\t }\r\n\t if (this_1.currentResponseNum === this_1.closeAfterResponse) {\r\n\t if (this_1.onClose) {\r\n\t this_1.onClose();\r\n\t this_1.onClose = null;\r\n\t }\r\n\t return \"break\";\r\n\t }\r\n\t this_1.currentResponseNum++;\r\n\t };\r\n\t var this_1 = this;\r\n\t while (this.pendingResponses[this.currentResponseNum]) {\r\n\t var state_1 = _loop_1();\r\n\t if (state_1 === \"break\")\r\n\t break;\r\n\t }\r\n\t };\r\n\t return PacketReceiver;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t// URL query parameters associated with longpolling\r\n\tvar FIREBASE_LONGPOLL_START_PARAM = 'start';\r\n\tvar FIREBASE_LONGPOLL_CLOSE_COMMAND = 'close';\r\n\tvar FIREBASE_LONGPOLL_COMMAND_CB_NAME = 'pLPCommand';\r\n\tvar FIREBASE_LONGPOLL_DATA_CB_NAME = 'pRTLPCB';\r\n\tvar FIREBASE_LONGPOLL_ID_PARAM = 'id';\r\n\tvar FIREBASE_LONGPOLL_PW_PARAM = 'pw';\r\n\tvar FIREBASE_LONGPOLL_SERIAL_PARAM = 'ser';\r\n\tvar FIREBASE_LONGPOLL_CALLBACK_ID_PARAM = 'cb';\r\n\tvar FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM = 'seg';\r\n\tvar FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET = 'ts';\r\n\tvar FIREBASE_LONGPOLL_DATA_PARAM = 'd';\r\n\tvar FIREBASE_LONGPOLL_DISCONN_FRAME_PARAM = 'disconn';\r\n\tvar FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM = 'dframe';\r\n\t//Data size constants.\r\n\t//TODO: Perf: the maximum length actually differs from browser to browser.\r\n\t// We should check what browser we're on and set accordingly.\r\n\tvar MAX_URL_DATA_SIZE = 1870;\r\n\tvar SEG_HEADER_SIZE = 30; //ie: &seg=8299234&ts=982389123&d=\r\n\tvar MAX_PAYLOAD_SIZE = MAX_URL_DATA_SIZE - SEG_HEADER_SIZE;\r\n\t/**\r\n\t * Keepalive period\r\n\t * send a fresh request at minimum every 25 seconds. Opera has a maximum request\r\n\t * length of 30 seconds that we can't exceed.\r\n\t * @const\r\n\t * @type {number}\r\n\t */\r\n\tvar KEEPALIVE_REQUEST_INTERVAL = 25000;\r\n\t/**\r\n\t * How long to wait before aborting a long-polling connection attempt.\r\n\t * @const\r\n\t * @type {number}\r\n\t */\r\n\tvar LP_CONNECT_TIMEOUT = 30000;\r\n\t/**\r\n\t * This class manages a single long-polling connection.\r\n\t *\r\n\t * @constructor\r\n\t * @implements {Transport}\r\n\t */\r\n\tvar BrowserPollConnection = /** @class */ (function () {\r\n\t /**\r\n\t * @param {string} connId An identifier for this connection, used for logging\r\n\t * @param {RepoInfo} repoInfo The info for the endpoint to send data to.\r\n\t * @param {string=} transportSessionId Optional transportSessionid if we are reconnecting for an existing\r\n\t * transport session\r\n\t * @param {string=} lastSessionId Optional lastSessionId if the PersistentConnection has already created a\r\n\t * connection previously\r\n\t */\r\n\t function BrowserPollConnection(connId, repoInfo, transportSessionId, lastSessionId) {\r\n\t this.connId = connId;\r\n\t this.repoInfo = repoInfo;\r\n\t this.transportSessionId = transportSessionId;\r\n\t this.lastSessionId = lastSessionId;\r\n\t this.bytesSent = 0;\r\n\t this.bytesReceived = 0;\r\n\t this.everConnected_ = false;\r\n\t this.log_ = logWrapper(connId);\r\n\t this.stats_ = StatsManager.getCollection(repoInfo);\r\n\t this.urlFn = function (params) {\r\n\t return repoInfo.connectionURL(LONG_POLLING, params);\r\n\t };\r\n\t }\r\n\t /**\r\n\t *\r\n\t * @param {function(Object)} onMessage Callback when messages arrive\r\n\t * @param {function()} onDisconnect Callback with connection lost.\r\n\t */\r\n\t BrowserPollConnection.prototype.open = function (onMessage, onDisconnect) {\r\n\t var _this = this;\r\n\t this.curSegmentNum = 0;\r\n\t this.onDisconnect_ = onDisconnect;\r\n\t this.myPacketOrderer = new PacketReceiver(onMessage);\r\n\t this.isClosed_ = false;\r\n\t this.connectTimeoutTimer_ = setTimeout(function () {\r\n\t _this.log_('Timed out trying to connect.');\r\n\t // Make sure we clear the host cache\r\n\t _this.onClosed_();\r\n\t _this.connectTimeoutTimer_ = null;\r\n\t }, Math.floor(LP_CONNECT_TIMEOUT));\r\n\t // Ensure we delay the creation of the iframe until the DOM is loaded.\r\n\t executeWhenDOMReady(function () {\r\n\t if (_this.isClosed_)\r\n\t return;\r\n\t //Set up a callback that gets triggered once a connection is set up.\r\n\t _this.scriptTagHolder = new FirebaseIFrameScriptHolder(function () {\r\n\t var args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t args[_i] = arguments[_i];\r\n\t }\r\n\t var command = args[0], arg1 = args[1], arg2 = args[2];\r\n\t _this.incrementIncomingBytes_(args);\r\n\t if (!_this.scriptTagHolder)\r\n\t return; // we closed the connection.\r\n\t if (_this.connectTimeoutTimer_) {\r\n\t clearTimeout(_this.connectTimeoutTimer_);\r\n\t _this.connectTimeoutTimer_ = null;\r\n\t }\r\n\t _this.everConnected_ = true;\r\n\t if (command == FIREBASE_LONGPOLL_START_PARAM) {\r\n\t _this.id = arg1;\r\n\t _this.password = arg2;\r\n\t }\r\n\t else if (command === FIREBASE_LONGPOLL_CLOSE_COMMAND) {\r\n\t // Don't clear the host cache. We got a response from the server, so we know it's reachable\r\n\t if (arg1) {\r\n\t // We aren't expecting any more data (other than what the server's already in the process of sending us\r\n\t // through our already open polls), so don't send any more.\r\n\t _this.scriptTagHolder.sendNewPolls = false;\r\n\t // arg1 in this case is the last response number sent by the server. We should try to receive\r\n\t // all of the responses up to this one before closing\r\n\t _this.myPacketOrderer.closeAfter(arg1, function () {\r\n\t _this.onClosed_();\r\n\t });\r\n\t }\r\n\t else {\r\n\t _this.onClosed_();\r\n\t }\r\n\t }\r\n\t else {\r\n\t throw new Error('Unrecognized command received: ' + command);\r\n\t }\r\n\t }, function () {\r\n\t var args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t args[_i] = arguments[_i];\r\n\t }\r\n\t var pN = args[0], data = args[1];\r\n\t _this.incrementIncomingBytes_(args);\r\n\t _this.myPacketOrderer.handleResponse(pN, data);\r\n\t }, function () {\r\n\t _this.onClosed_();\r\n\t }, _this.urlFn);\r\n\t //Send the initial request to connect. The serial number is simply to keep the browser from pulling previous results\r\n\t //from cache.\r\n\t var urlParams = {};\r\n\t urlParams[FIREBASE_LONGPOLL_START_PARAM] = 't';\r\n\t urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = Math.floor(Math.random() * 100000000);\r\n\t if (_this.scriptTagHolder.uniqueCallbackIdentifier)\r\n\t urlParams[FIREBASE_LONGPOLL_CALLBACK_ID_PARAM] = _this.scriptTagHolder.uniqueCallbackIdentifier;\r\n\t urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n\t if (_this.transportSessionId) {\r\n\t urlParams[TRANSPORT_SESSION_PARAM] = _this.transportSessionId;\r\n\t }\r\n\t if (_this.lastSessionId) {\r\n\t urlParams[LAST_SESSION_PARAM] = _this.lastSessionId;\r\n\t }\r\n\t if (!util.isNodeSdk() &&\r\n\t typeof location !== 'undefined' &&\r\n\t location.href &&\r\n\t location.href.indexOf(FORGE_DOMAIN) !== -1) {\r\n\t urlParams[REFERER_PARAM] = FORGE_REF;\r\n\t }\r\n\t var connectURL = _this.urlFn(urlParams);\r\n\t _this.log_('Connecting via long-poll to ' + connectURL);\r\n\t _this.scriptTagHolder.addTag(connectURL, function () {\r\n\t /* do nothing */\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Call this when a handshake has completed successfully and we want to consider the connection established\r\n\t */\r\n\t BrowserPollConnection.prototype.start = function () {\r\n\t this.scriptTagHolder.startLongPoll(this.id, this.password);\r\n\t this.addDisconnectPingFrame(this.id, this.password);\r\n\t };\r\n\t /**\r\n\t * Forces long polling to be considered as a potential transport\r\n\t */\r\n\t BrowserPollConnection.forceAllow = function () {\r\n\t BrowserPollConnection.forceAllow_ = true;\r\n\t };\r\n\t /**\r\n\t * Forces longpolling to not be considered as a potential transport\r\n\t */\r\n\t BrowserPollConnection.forceDisallow = function () {\r\n\t BrowserPollConnection.forceDisallow_ = true;\r\n\t };\r\n\t // Static method, use string literal so it can be accessed in a generic way\r\n\t BrowserPollConnection.isAvailable = function () {\r\n\t // NOTE: In React-Native there's normally no 'document', but if you debug a React-Native app in\r\n\t // the Chrome debugger, 'document' is defined, but document.createElement is null (2015/06/08).\r\n\t return (BrowserPollConnection.forceAllow_ ||\r\n\t (!BrowserPollConnection.forceDisallow_ &&\r\n\t typeof document !== 'undefined' &&\r\n\t document.createElement != null &&\r\n\t !isChromeExtensionContentScript() &&\r\n\t !isWindowsStoreApp() &&\r\n\t !util.isNodeSdk()));\r\n\t };\r\n\t /**\r\n\t * No-op for polling\r\n\t */\r\n\t BrowserPollConnection.prototype.markConnectionHealthy = function () { };\r\n\t /**\r\n\t * Stops polling and cleans up the iframe\r\n\t * @private\r\n\t */\r\n\t BrowserPollConnection.prototype.shutdown_ = function () {\r\n\t this.isClosed_ = true;\r\n\t if (this.scriptTagHolder) {\r\n\t this.scriptTagHolder.close();\r\n\t this.scriptTagHolder = null;\r\n\t }\r\n\t //remove the disconnect frame, which will trigger an XHR call to the server to tell it we're leaving.\r\n\t if (this.myDisconnFrame) {\r\n\t document.body.removeChild(this.myDisconnFrame);\r\n\t this.myDisconnFrame = null;\r\n\t }\r\n\t if (this.connectTimeoutTimer_) {\r\n\t clearTimeout(this.connectTimeoutTimer_);\r\n\t this.connectTimeoutTimer_ = null;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Triggered when this transport is closed\r\n\t * @private\r\n\t */\r\n\t BrowserPollConnection.prototype.onClosed_ = function () {\r\n\t if (!this.isClosed_) {\r\n\t this.log_('Longpoll is closing itself');\r\n\t this.shutdown_();\r\n\t if (this.onDisconnect_) {\r\n\t this.onDisconnect_(this.everConnected_);\r\n\t this.onDisconnect_ = null;\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * External-facing close handler. RealTime has requested we shut down. Kill our connection and tell the server\r\n\t * that we've left.\r\n\t */\r\n\t BrowserPollConnection.prototype.close = function () {\r\n\t if (!this.isClosed_) {\r\n\t this.log_('Longpoll is being closed.');\r\n\t this.shutdown_();\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Send the JSON object down to the server. It will need to be stringified, base64 encoded, and then\r\n\t * broken into chunks (since URLs have a small maximum length).\r\n\t * @param {!Object} data The JSON data to transmit.\r\n\t */\r\n\t BrowserPollConnection.prototype.send = function (data) {\r\n\t var dataStr = util.stringify(data);\r\n\t this.bytesSent += dataStr.length;\r\n\t this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n\t //first, lets get the base64-encoded data\r\n\t var base64data = util.base64Encode(dataStr);\r\n\t //We can only fit a certain amount in each URL, so we need to split this request\r\n\t //up into multiple pieces if it doesn't fit in one request.\r\n\t var dataSegs = splitStringBySize(base64data, MAX_PAYLOAD_SIZE);\r\n\t //Enqueue each segment for transmission. We assign each chunk a sequential ID and a total number\r\n\t //of segments so that we can reassemble the packet on the server.\r\n\t for (var i = 0; i < dataSegs.length; i++) {\r\n\t this.scriptTagHolder.enqueueSegment(this.curSegmentNum, dataSegs.length, dataSegs[i]);\r\n\t this.curSegmentNum++;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * This is how we notify the server that we're leaving.\r\n\t * We aren't able to send requests with DHTML on a window close event, but we can\r\n\t * trigger XHR requests in some browsers (everything but Opera basically).\r\n\t * @param {!string} id\r\n\t * @param {!string} pw\r\n\t */\r\n\t BrowserPollConnection.prototype.addDisconnectPingFrame = function (id, pw) {\r\n\t if (util.isNodeSdk())\r\n\t return;\r\n\t this.myDisconnFrame = document.createElement('iframe');\r\n\t var urlParams = {};\r\n\t urlParams[FIREBASE_LONGPOLL_DISCONN_FRAME_REQUEST_PARAM] = 't';\r\n\t urlParams[FIREBASE_LONGPOLL_ID_PARAM] = id;\r\n\t urlParams[FIREBASE_LONGPOLL_PW_PARAM] = pw;\r\n\t this.myDisconnFrame.src = this.urlFn(urlParams);\r\n\t this.myDisconnFrame.style.display = 'none';\r\n\t document.body.appendChild(this.myDisconnFrame);\r\n\t };\r\n\t /**\r\n\t * Used to track the bytes received by this client\r\n\t * @param {*} args\r\n\t * @private\r\n\t */\r\n\t BrowserPollConnection.prototype.incrementIncomingBytes_ = function (args) {\r\n\t // TODO: This is an annoying perf hit just to track the number of incoming bytes. Maybe it should be opt-in.\r\n\t var bytesReceived = util.stringify(args).length;\r\n\t this.bytesReceived += bytesReceived;\r\n\t this.stats_.incrementCounter('bytes_received', bytesReceived);\r\n\t };\r\n\t return BrowserPollConnection;\r\n\t}());\r\n\t/*********************************************************************************************\r\n\t * A wrapper around an iframe that is used as a long-polling script holder.\r\n\t * @constructor\r\n\t *********************************************************************************************/\r\n\tvar FirebaseIFrameScriptHolder = /** @class */ (function () {\r\n\t /**\r\n\t * @param commandCB - The callback to be called when control commands are recevied from the server.\r\n\t * @param onMessageCB - The callback to be triggered when responses arrive from the server.\r\n\t * @param onDisconnect - The callback to be triggered when this tag holder is closed\r\n\t * @param urlFn - A function that provides the URL of the endpoint to send data to.\r\n\t */\r\n\t function FirebaseIFrameScriptHolder(commandCB, onMessageCB, onDisconnect, urlFn) {\r\n\t this.onDisconnect = onDisconnect;\r\n\t this.urlFn = urlFn;\r\n\t //We maintain a count of all of the outstanding requests, because if we have too many active at once it can cause\r\n\t //problems in some browsers.\r\n\t /**\r\n\t * @type {CountedSet.}\r\n\t */\r\n\t this.outstandingRequests = new CountedSet();\r\n\t //A queue of the pending segments waiting for transmission to the server.\r\n\t this.pendingSegs = [];\r\n\t //A serial number. We use this for two things:\r\n\t // 1) A way to ensure the browser doesn't cache responses to polls\r\n\t // 2) A way to make the server aware when long-polls arrive in a different order than we started them. The\r\n\t // server needs to release both polls in this case or it will cause problems in Opera since Opera can only execute\r\n\t // JSONP code in the order it was added to the iframe.\r\n\t this.currentSerial = Math.floor(Math.random() * 100000000);\r\n\t // This gets set to false when we're \"closing down\" the connection (e.g. we're switching transports but there's still\r\n\t // incoming data from the server that we're waiting for).\r\n\t this.sendNewPolls = true;\r\n\t if (!util.isNodeSdk()) {\r\n\t //Each script holder registers a couple of uniquely named callbacks with the window. These are called from the\r\n\t //iframes where we put the long-polling script tags. We have two callbacks:\r\n\t // 1) Command Callback - Triggered for control issues, like starting a connection.\r\n\t // 2) Message Callback - Triggered when new data arrives.\r\n\t this.uniqueCallbackIdentifier = LUIDGenerator();\r\n\t window[FIREBASE_LONGPOLL_COMMAND_CB_NAME + this.uniqueCallbackIdentifier] = commandCB;\r\n\t window[FIREBASE_LONGPOLL_DATA_CB_NAME + this.uniqueCallbackIdentifier] = onMessageCB;\r\n\t //Create an iframe for us to add script tags to.\r\n\t this.myIFrame = FirebaseIFrameScriptHolder.createIFrame_();\r\n\t // Set the iframe's contents.\r\n\t var script = '';\r\n\t // if we set a javascript url, it's IE and we need to set the document domain. The javascript url is sufficient\r\n\t // for ie9, but ie8 needs to do it again in the document itself.\r\n\t if (this.myIFrame.src &&\r\n\t this.myIFrame.src.substr(0, 'javascript:'.length) === 'javascript:') {\r\n\t var currentDomain = document.domain;\r\n\t script = '';\r\n\t }\r\n\t var iframeContents = '' + script + '';\r\n\t try {\r\n\t this.myIFrame.doc.open();\r\n\t this.myIFrame.doc.write(iframeContents);\r\n\t this.myIFrame.doc.close();\r\n\t }\r\n\t catch (e) {\r\n\t log('frame writing exception');\r\n\t if (e.stack) {\r\n\t log(e.stack);\r\n\t }\r\n\t log(e);\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.commandCB = commandCB;\r\n\t this.onMessageCB = onMessageCB;\r\n\t }\r\n\t }\r\n\t /**\r\n\t * Each browser has its own funny way to handle iframes. Here we mush them all together into one object that I can\r\n\t * actually use.\r\n\t * @private\r\n\t * @return {Element}\r\n\t */\r\n\t FirebaseIFrameScriptHolder.createIFrame_ = function () {\r\n\t var iframe = document.createElement('iframe');\r\n\t iframe.style.display = 'none';\r\n\t // This is necessary in order to initialize the document inside the iframe\r\n\t if (document.body) {\r\n\t document.body.appendChild(iframe);\r\n\t try {\r\n\t // If document.domain has been modified in IE, this will throw an error, and we need to set the\r\n\t // domain of the iframe's document manually. We can do this via a javascript: url as the src attribute\r\n\t // Also note that we must do this *after* the iframe has been appended to the page. Otherwise it doesn't work.\r\n\t var a = iframe.contentWindow.document;\r\n\t if (!a) {\r\n\t // Apologies for the log-spam, I need to do something to keep closure from optimizing out the assignment above.\r\n\t log('No IE domain setting required');\r\n\t }\r\n\t }\r\n\t catch (e) {\r\n\t var domain = document.domain;\r\n\t iframe.src =\r\n\t \"javascript:void((function(){document.open();document.domain='\" +\r\n\t domain +\r\n\t \"';document.close();})())\";\r\n\t }\r\n\t }\r\n\t else {\r\n\t // LongPollConnection attempts to delay initialization until the document is ready, so hopefully this\r\n\t // never gets hit.\r\n\t throw 'Document body has not initialized. Wait to initialize Firebase until after the document is ready.';\r\n\t }\r\n\t // Get the document of the iframe in a browser-specific way.\r\n\t if (iframe.contentDocument) {\r\n\t iframe.doc = iframe.contentDocument; // Firefox, Opera, Safari\r\n\t }\r\n\t else if (iframe.contentWindow) {\r\n\t iframe.doc = iframe.contentWindow.document; // Internet Explorer\r\n\t }\r\n\t else if (iframe.document) {\r\n\t iframe.doc = iframe.document; //others?\r\n\t }\r\n\t return iframe;\r\n\t };\r\n\t /**\r\n\t * Cancel all outstanding queries and remove the frame.\r\n\t */\r\n\t FirebaseIFrameScriptHolder.prototype.close = function () {\r\n\t var _this = this;\r\n\t //Mark this iframe as dead, so no new requests are sent.\r\n\t this.alive = false;\r\n\t if (this.myIFrame) {\r\n\t //We have to actually remove all of the html inside this iframe before removing it from the\r\n\t //window, or IE will continue loading and executing the script tags we've already added, which\r\n\t //can lead to some errors being thrown. Setting innerHTML seems to be the easiest way to do this.\r\n\t this.myIFrame.doc.body.innerHTML = '';\r\n\t setTimeout(function () {\r\n\t if (_this.myIFrame !== null) {\r\n\t document.body.removeChild(_this.myIFrame);\r\n\t _this.myIFrame = null;\r\n\t }\r\n\t }, Math.floor(0));\r\n\t }\r\n\t if (util.isNodeSdk() && this.myID) {\r\n\t var urlParams = {};\r\n\t urlParams[FIREBASE_LONGPOLL_DISCONN_FRAME_PARAM] = 't';\r\n\t urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\r\n\t urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\r\n\t var theURL = this.urlFn(urlParams);\r\n\t FirebaseIFrameScriptHolder.nodeRestRequest(theURL);\r\n\t }\r\n\t // Protect from being called recursively.\r\n\t var onDisconnect = this.onDisconnect;\r\n\t if (onDisconnect) {\r\n\t this.onDisconnect = null;\r\n\t onDisconnect();\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Actually start the long-polling session by adding the first script tag(s) to the iframe.\r\n\t * @param {!string} id - The ID of this connection\r\n\t * @param {!string} pw - The password for this connection\r\n\t */\r\n\t FirebaseIFrameScriptHolder.prototype.startLongPoll = function (id, pw) {\r\n\t this.myID = id;\r\n\t this.myPW = pw;\r\n\t this.alive = true;\r\n\t //send the initial request. If there are requests queued, make sure that we transmit as many as we are currently able to.\r\n\t while (this.newRequest_()) { }\r\n\t };\r\n\t /**\r\n\t * This is called any time someone might want a script tag to be added. It adds a script tag when there aren't\r\n\t * too many outstanding requests and we are still alive.\r\n\t *\r\n\t * If there are outstanding packet segments to send, it sends one. If there aren't, it sends a long-poll anyways if\r\n\t * needed.\r\n\t */\r\n\t FirebaseIFrameScriptHolder.prototype.newRequest_ = function () {\r\n\t // We keep one outstanding request open all the time to receive data, but if we need to send data\r\n\t // (pendingSegs.length > 0) then we create a new request to send the data. The server will automatically\r\n\t // close the old request.\r\n\t if (this.alive &&\r\n\t this.sendNewPolls &&\r\n\t this.outstandingRequests.count() < (this.pendingSegs.length > 0 ? 2 : 1)) {\r\n\t //construct our url\r\n\t this.currentSerial++;\r\n\t var urlParams = {};\r\n\t urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\r\n\t urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\r\n\t urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = this.currentSerial;\r\n\t var theURL = this.urlFn(urlParams);\r\n\t //Now add as much data as we can.\r\n\t var curDataString = '';\r\n\t var i = 0;\r\n\t while (this.pendingSegs.length > 0) {\r\n\t //first, lets see if the next segment will fit.\r\n\t var nextSeg = this.pendingSegs[0];\r\n\t if (nextSeg.d.length + SEG_HEADER_SIZE + curDataString.length <=\r\n\t MAX_URL_DATA_SIZE) {\r\n\t //great, the segment will fit. Lets append it.\r\n\t var theSeg = this.pendingSegs.shift();\r\n\t curDataString =\r\n\t curDataString +\r\n\t '&' +\r\n\t FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM +\r\n\t i +\r\n\t '=' +\r\n\t theSeg.seg +\r\n\t '&' +\r\n\t FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET +\r\n\t i +\r\n\t '=' +\r\n\t theSeg.ts +\r\n\t '&' +\r\n\t FIREBASE_LONGPOLL_DATA_PARAM +\r\n\t i +\r\n\t '=' +\r\n\t theSeg.d;\r\n\t i++;\r\n\t }\r\n\t else {\r\n\t break;\r\n\t }\r\n\t }\r\n\t theURL = theURL + curDataString;\r\n\t this.addLongPollTag_(theURL, this.currentSerial);\r\n\t return true;\r\n\t }\r\n\t else {\r\n\t return false;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Queue a packet for transmission to the server.\r\n\t * @param segnum - A sequential id for this packet segment used for reassembly\r\n\t * @param totalsegs - The total number of segments in this packet\r\n\t * @param data - The data for this segment.\r\n\t */\r\n\t FirebaseIFrameScriptHolder.prototype.enqueueSegment = function (segnum, totalsegs, data) {\r\n\t //add this to the queue of segments to send.\r\n\t this.pendingSegs.push({ seg: segnum, ts: totalsegs, d: data });\r\n\t //send the data immediately if there isn't already data being transmitted, unless\r\n\t //startLongPoll hasn't been called yet.\r\n\t if (this.alive) {\r\n\t this.newRequest_();\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Add a script tag for a regular long-poll request.\r\n\t * @param {!string} url - The URL of the script tag.\r\n\t * @param {!number} serial - The serial number of the request.\r\n\t * @private\r\n\t */\r\n\t FirebaseIFrameScriptHolder.prototype.addLongPollTag_ = function (url, serial) {\r\n\t var _this = this;\r\n\t //remember that we sent this request.\r\n\t this.outstandingRequests.add(serial, 1);\r\n\t var doNewRequest = function () {\r\n\t _this.outstandingRequests.remove(serial);\r\n\t _this.newRequest_();\r\n\t };\r\n\t // If this request doesn't return on its own accord (by the server sending us some data), we'll\r\n\t // create a new one after the KEEPALIVE interval to make sure we always keep a fresh request open.\r\n\t var keepaliveTimeout = setTimeout(doNewRequest, Math.floor(KEEPALIVE_REQUEST_INTERVAL));\r\n\t var readyStateCB = function () {\r\n\t // Request completed. Cancel the keepalive.\r\n\t clearTimeout(keepaliveTimeout);\r\n\t // Trigger a new request so we can continue receiving data.\r\n\t doNewRequest();\r\n\t };\r\n\t this.addTag(url, readyStateCB);\r\n\t };\r\n\t /**\r\n\t * Add an arbitrary script tag to the iframe.\r\n\t * @param {!string} url - The URL for the script tag source.\r\n\t * @param {!function()} loadCB - A callback to be triggered once the script has loaded.\r\n\t */\r\n\t FirebaseIFrameScriptHolder.prototype.addTag = function (url, loadCB) {\r\n\t var _this = this;\r\n\t if (util.isNodeSdk()) {\r\n\t this.doNodeLongPoll(url, loadCB);\r\n\t }\r\n\t else {\r\n\t setTimeout(function () {\r\n\t try {\r\n\t // if we're already closed, don't add this poll\r\n\t if (!_this.sendNewPolls)\r\n\t return;\r\n\t var newScript_1 = _this.myIFrame.doc.createElement('script');\r\n\t newScript_1.type = 'text/javascript';\r\n\t newScript_1.async = true;\r\n\t newScript_1.src = url;\r\n\t newScript_1.onload = newScript_1.onreadystatechange = function () {\r\n\t var rstate = newScript_1.readyState;\r\n\t if (!rstate || rstate === 'loaded' || rstate === 'complete') {\r\n\t newScript_1.onload = newScript_1.onreadystatechange = null;\r\n\t if (newScript_1.parentNode) {\r\n\t newScript_1.parentNode.removeChild(newScript_1);\r\n\t }\r\n\t loadCB();\r\n\t }\r\n\t };\r\n\t newScript_1.onerror = function () {\r\n\t log('Long-poll script failed to load: ' + url);\r\n\t _this.sendNewPolls = false;\r\n\t _this.close();\r\n\t };\r\n\t _this.myIFrame.doc.body.appendChild(newScript_1);\r\n\t }\r\n\t catch (e) {\r\n\t // TODO: we should make this error visible somehow\r\n\t }\r\n\t }, Math.floor(1));\r\n\t }\r\n\t };\r\n\t return FirebaseIFrameScriptHolder;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar WEBSOCKET_MAX_FRAME_SIZE = 16384;\r\n\tvar WEBSOCKET_KEEPALIVE_INTERVAL = 45000;\r\n\tvar WebSocketImpl = null;\r\n\tif (typeof MozWebSocket !== 'undefined') {\r\n\t WebSocketImpl = MozWebSocket;\r\n\t}\r\n\telse if (typeof WebSocket !== 'undefined') {\r\n\t WebSocketImpl = WebSocket;\r\n\t}\r\n\t/**\r\n\t * Create a new websocket connection with the given callbacks.\r\n\t * @constructor\r\n\t * @implements {Transport}\r\n\t */\r\n\tvar WebSocketConnection = /** @class */ (function () {\r\n\t /**\r\n\t * @param {string} connId identifier for this transport\r\n\t * @param {RepoInfo} repoInfo The info for the websocket endpoint.\r\n\t * @param {string=} transportSessionId Optional transportSessionId if this is connecting to an existing transport\r\n\t * session\r\n\t * @param {string=} lastSessionId Optional lastSessionId if there was a previous connection\r\n\t */\r\n\t function WebSocketConnection(connId, repoInfo, transportSessionId, lastSessionId) {\r\n\t this.connId = connId;\r\n\t this.keepaliveTimer = null;\r\n\t this.frames = null;\r\n\t this.totalFrames = 0;\r\n\t this.bytesSent = 0;\r\n\t this.bytesReceived = 0;\r\n\t this.log_ = logWrapper(this.connId);\r\n\t this.stats_ = StatsManager.getCollection(repoInfo);\r\n\t this.connURL = WebSocketConnection.connectionURL_(repoInfo, transportSessionId, lastSessionId);\r\n\t }\r\n\t /**\r\n\t * @param {RepoInfo} repoInfo The info for the websocket endpoint.\r\n\t * @param {string=} transportSessionId Optional transportSessionId if this is connecting to an existing transport\r\n\t * session\r\n\t * @param {string=} lastSessionId Optional lastSessionId if there was a previous connection\r\n\t * @return {string} connection url\r\n\t * @private\r\n\t */\r\n\t WebSocketConnection.connectionURL_ = function (repoInfo, transportSessionId, lastSessionId) {\r\n\t var urlParams = {};\r\n\t urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n\t if (!util.isNodeSdk() &&\r\n\t typeof location !== 'undefined' &&\r\n\t location.href &&\r\n\t location.href.indexOf(FORGE_DOMAIN) !== -1) {\r\n\t urlParams[REFERER_PARAM] = FORGE_REF;\r\n\t }\r\n\t if (transportSessionId) {\r\n\t urlParams[TRANSPORT_SESSION_PARAM] = transportSessionId;\r\n\t }\r\n\t if (lastSessionId) {\r\n\t urlParams[LAST_SESSION_PARAM] = lastSessionId;\r\n\t }\r\n\t return repoInfo.connectionURL(WEBSOCKET, urlParams);\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param onMessage Callback when messages arrive\r\n\t * @param onDisconnect Callback with connection lost.\r\n\t */\r\n\t WebSocketConnection.prototype.open = function (onMessage, onDisconnect) {\r\n\t var _this = this;\r\n\t this.onDisconnect = onDisconnect;\r\n\t this.onMessage = onMessage;\r\n\t this.log_('Websocket connecting to ' + this.connURL);\r\n\t this.everConnected_ = false;\r\n\t // Assume failure until proven otherwise.\r\n\t PersistentStorage.set('previous_websocket_failure', true);\r\n\t try {\r\n\t if (util.isNodeSdk()) {\r\n\t var device = util.CONSTANTS.NODE_ADMIN ? 'AdminNode' : 'Node';\r\n\t // UA Format: Firebase////\r\n\t var options = {\r\n\t headers: {\r\n\t 'User-Agent': \"Firebase/\" + PROTOCOL_VERSION + \"/\" + firebase.SDK_VERSION + \"/\" + process.platform + \"/\" + device\r\n\t }\r\n\t };\r\n\t // Plumb appropriate http_proxy environment variable into faye-websocket if it exists.\r\n\t var env = process['env'];\r\n\t var proxy = this.connURL.indexOf('wss://') == 0\r\n\t ? env['HTTPS_PROXY'] || env['https_proxy']\r\n\t : env['HTTP_PROXY'] || env['http_proxy'];\r\n\t if (proxy) {\r\n\t options['proxy'] = { origin: proxy };\r\n\t }\r\n\t this.mySock = new WebSocketImpl(this.connURL, [], options);\r\n\t }\r\n\t else {\r\n\t this.mySock = new WebSocketImpl(this.connURL);\r\n\t }\r\n\t }\r\n\t catch (e) {\r\n\t this.log_('Error instantiating WebSocket.');\r\n\t var error$$1 = e.message || e.data;\r\n\t if (error$$1) {\r\n\t this.log_(error$$1);\r\n\t }\r\n\t this.onClosed_();\r\n\t return;\r\n\t }\r\n\t this.mySock.onopen = function () {\r\n\t _this.log_('Websocket connected.');\r\n\t _this.everConnected_ = true;\r\n\t };\r\n\t this.mySock.onclose = function () {\r\n\t _this.log_('Websocket connection was disconnected.');\r\n\t _this.mySock = null;\r\n\t _this.onClosed_();\r\n\t };\r\n\t this.mySock.onmessage = function (m) {\r\n\t _this.handleIncomingFrame(m);\r\n\t };\r\n\t this.mySock.onerror = function (e) {\r\n\t _this.log_('WebSocket error. Closing connection.');\r\n\t var error$$1 = e.message || e.data;\r\n\t if (error$$1) {\r\n\t _this.log_(error$$1);\r\n\t }\r\n\t _this.onClosed_();\r\n\t };\r\n\t };\r\n\t /**\r\n\t * No-op for websockets, we don't need to do anything once the connection is confirmed as open\r\n\t */\r\n\t WebSocketConnection.prototype.start = function () { };\r\n\t WebSocketConnection.forceDisallow = function () {\r\n\t WebSocketConnection.forceDisallow_ = true;\r\n\t };\r\n\t WebSocketConnection.isAvailable = function () {\r\n\t var isOldAndroid = false;\r\n\t if (typeof navigator !== 'undefined' && navigator.userAgent) {\r\n\t var oldAndroidRegex = /Android ([0-9]{0,}\\.[0-9]{0,})/;\r\n\t var oldAndroidMatch = navigator.userAgent.match(oldAndroidRegex);\r\n\t if (oldAndroidMatch && oldAndroidMatch.length > 1) {\r\n\t if (parseFloat(oldAndroidMatch[1]) < 4.4) {\r\n\t isOldAndroid = true;\r\n\t }\r\n\t }\r\n\t }\r\n\t return (!isOldAndroid &&\r\n\t WebSocketImpl !== null &&\r\n\t !WebSocketConnection.forceDisallow_);\r\n\t };\r\n\t /**\r\n\t * Returns true if we previously failed to connect with this transport.\r\n\t * @return {boolean}\r\n\t */\r\n\t WebSocketConnection.previouslyFailed = function () {\r\n\t // If our persistent storage is actually only in-memory storage,\r\n\t // we default to assuming that it previously failed to be safe.\r\n\t return (PersistentStorage.isInMemoryStorage ||\r\n\t PersistentStorage.get('previous_websocket_failure') === true);\r\n\t };\r\n\t WebSocketConnection.prototype.markConnectionHealthy = function () {\r\n\t PersistentStorage.remove('previous_websocket_failure');\r\n\t };\r\n\t WebSocketConnection.prototype.appendFrame_ = function (data) {\r\n\t this.frames.push(data);\r\n\t if (this.frames.length == this.totalFrames) {\r\n\t var fullMess = this.frames.join('');\r\n\t this.frames = null;\r\n\t var jsonMess = util.jsonEval(fullMess);\r\n\t //handle the message\r\n\t this.onMessage(jsonMess);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {number} frameCount The number of frames we are expecting from the server\r\n\t * @private\r\n\t */\r\n\t WebSocketConnection.prototype.handleNewFrameCount_ = function (frameCount) {\r\n\t this.totalFrames = frameCount;\r\n\t this.frames = [];\r\n\t };\r\n\t /**\r\n\t * Attempts to parse a frame count out of some text. If it can't, assumes a value of 1\r\n\t * @param {!String} data\r\n\t * @return {?String} Any remaining data to be process, or null if there is none\r\n\t * @private\r\n\t */\r\n\t WebSocketConnection.prototype.extractFrameCount_ = function (data) {\r\n\t util.assert(this.frames === null, 'We already have a frame buffer');\r\n\t // TODO: The server is only supposed to send up to 9999 frames (i.e. length <= 4), but that isn't being enforced\r\n\t // currently. So allowing larger frame counts (length <= 6). See https://app.asana.com/0/search/8688598998380/8237608042508\r\n\t if (data.length <= 6) {\r\n\t var frameCount = Number(data);\r\n\t if (!isNaN(frameCount)) {\r\n\t this.handleNewFrameCount_(frameCount);\r\n\t return null;\r\n\t }\r\n\t }\r\n\t this.handleNewFrameCount_(1);\r\n\t return data;\r\n\t };\r\n\t /**\r\n\t * Process a websocket frame that has arrived from the server.\r\n\t * @param mess The frame data\r\n\t */\r\n\t WebSocketConnection.prototype.handleIncomingFrame = function (mess) {\r\n\t if (this.mySock === null)\r\n\t return; // Chrome apparently delivers incoming packets even after we .close() the connection sometimes.\r\n\t var data = mess['data'];\r\n\t this.bytesReceived += data.length;\r\n\t this.stats_.incrementCounter('bytes_received', data.length);\r\n\t this.resetKeepAlive();\r\n\t if (this.frames !== null) {\r\n\t // we're buffering\r\n\t this.appendFrame_(data);\r\n\t }\r\n\t else {\r\n\t // try to parse out a frame count, otherwise, assume 1 and process it\r\n\t var remainingData = this.extractFrameCount_(data);\r\n\t if (remainingData !== null) {\r\n\t this.appendFrame_(remainingData);\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Send a message to the server\r\n\t * @param {Object} data The JSON object to transmit\r\n\t */\r\n\t WebSocketConnection.prototype.send = function (data) {\r\n\t this.resetKeepAlive();\r\n\t var dataStr = util.stringify(data);\r\n\t this.bytesSent += dataStr.length;\r\n\t this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n\t //We can only fit a certain amount in each websocket frame, so we need to split this request\r\n\t //up into multiple pieces if it doesn't fit in one request.\r\n\t var dataSegs = splitStringBySize(dataStr, WEBSOCKET_MAX_FRAME_SIZE);\r\n\t //Send the length header\r\n\t if (dataSegs.length > 1) {\r\n\t this.sendString_(String(dataSegs.length));\r\n\t }\r\n\t //Send the actual data in segments.\r\n\t for (var i = 0; i < dataSegs.length; i++) {\r\n\t this.sendString_(dataSegs[i]);\r\n\t }\r\n\t };\r\n\t WebSocketConnection.prototype.shutdown_ = function () {\r\n\t this.isClosed_ = true;\r\n\t if (this.keepaliveTimer) {\r\n\t clearInterval(this.keepaliveTimer);\r\n\t this.keepaliveTimer = null;\r\n\t }\r\n\t if (this.mySock) {\r\n\t this.mySock.close();\r\n\t this.mySock = null;\r\n\t }\r\n\t };\r\n\t WebSocketConnection.prototype.onClosed_ = function () {\r\n\t if (!this.isClosed_) {\r\n\t this.log_('WebSocket is closing itself');\r\n\t this.shutdown_();\r\n\t // since this is an internal close, trigger the close listener\r\n\t if (this.onDisconnect) {\r\n\t this.onDisconnect(this.everConnected_);\r\n\t this.onDisconnect = null;\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * External-facing close handler.\r\n\t * Close the websocket and kill the connection.\r\n\t */\r\n\t WebSocketConnection.prototype.close = function () {\r\n\t if (!this.isClosed_) {\r\n\t this.log_('WebSocket is being closed');\r\n\t this.shutdown_();\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Kill the current keepalive timer and start a new one, to ensure that it always fires N seconds after\r\n\t * the last activity.\r\n\t */\r\n\t WebSocketConnection.prototype.resetKeepAlive = function () {\r\n\t var _this = this;\r\n\t clearInterval(this.keepaliveTimer);\r\n\t this.keepaliveTimer = setInterval(function () {\r\n\t //If there has been no websocket activity for a while, send a no-op\r\n\t if (_this.mySock) {\r\n\t _this.sendString_('0');\r\n\t }\r\n\t _this.resetKeepAlive();\r\n\t }, Math.floor(WEBSOCKET_KEEPALIVE_INTERVAL));\r\n\t };\r\n\t /**\r\n\t * Send a string over the websocket.\r\n\t *\r\n\t * @param {string} str String to send.\r\n\t * @private\r\n\t */\r\n\t WebSocketConnection.prototype.sendString_ = function (str) {\r\n\t // Firefox seems to sometimes throw exceptions (NS_ERROR_UNEXPECTED) from websocket .send()\r\n\t // calls for some unknown reason. We treat these as an error and disconnect.\r\n\t // See https://app.asana.com/0/58926111402292/68021340250410\r\n\t try {\r\n\t this.mySock.send(str);\r\n\t }\r\n\t catch (e) {\r\n\t this.log_('Exception thrown from WebSocket.send():', e.message || e.data, 'Closing connection.');\r\n\t setTimeout(this.onClosed_.bind(this), 0);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Number of response before we consider the connection \"healthy.\"\r\n\t * @type {number}\r\n\t */\r\n\t WebSocketConnection.responsesRequiredToBeHealthy = 2;\r\n\t /**\r\n\t * Time to wait for the connection te become healthy before giving up.\r\n\t * @type {number}\r\n\t */\r\n\t WebSocketConnection.healthyTimeout = 30000;\r\n\t return WebSocketConnection;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Currently simplistic, this class manages what transport a Connection should use at various stages of its\r\n\t * lifecycle.\r\n\t *\r\n\t * It starts with longpolling in a browser, and httppolling on node. It then upgrades to websockets if\r\n\t * they are available.\r\n\t * @constructor\r\n\t */\r\n\tvar TransportManager = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!RepoInfo} repoInfo Metadata around the namespace we're connecting to\r\n\t */\r\n\t function TransportManager(repoInfo) {\r\n\t this.initTransports_(repoInfo);\r\n\t }\r\n\t Object.defineProperty(TransportManager, \"ALL_TRANSPORTS\", {\r\n\t /**\r\n\t * @const\r\n\t * @type {!Array.}\r\n\t */\r\n\t get: function () {\r\n\t return [BrowserPollConnection, WebSocketConnection];\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t /**\r\n\t * @param {!RepoInfo} repoInfo\r\n\t * @private\r\n\t */\r\n\t TransportManager.prototype.initTransports_ = function (repoInfo) {\r\n\t var isWebSocketsAvailable = WebSocketConnection && WebSocketConnection['isAvailable']();\r\n\t var isSkipPollConnection = isWebSocketsAvailable && !WebSocketConnection.previouslyFailed();\r\n\t if (repoInfo.webSocketOnly) {\r\n\t if (!isWebSocketsAvailable)\r\n\t warn(\"wss:// URL used, but browser isn't known to support websockets. Trying anyway.\");\r\n\t isSkipPollConnection = true;\r\n\t }\r\n\t if (isSkipPollConnection) {\r\n\t this.transports_ = [WebSocketConnection];\r\n\t }\r\n\t else {\r\n\t var transports_1 = (this.transports_ = []);\r\n\t each(TransportManager.ALL_TRANSPORTS, function (i, transport) {\r\n\t if (transport && transport['isAvailable']()) {\r\n\t transports_1.push(transport);\r\n\t }\r\n\t });\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @return {function(new:Transport, !string, !RepoInfo, string=, string=)} The constructor for the\r\n\t * initial transport to use\r\n\t */\r\n\t TransportManager.prototype.initialTransport = function () {\r\n\t if (this.transports_.length > 0) {\r\n\t return this.transports_[0];\r\n\t }\r\n\t else {\r\n\t throw new Error('No transports available');\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @return {?function(new:Transport, function(),function(), string=)} The constructor for the next\r\n\t * transport, or null\r\n\t */\r\n\t TransportManager.prototype.upgradeTransport = function () {\r\n\t if (this.transports_.length > 1) {\r\n\t return this.transports_[1];\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t };\r\n\t return TransportManager;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t// Abort upgrade attempt if it takes longer than 60s.\r\n\tvar UPGRADE_TIMEOUT = 60000;\r\n\t// For some transports (WebSockets), we need to \"validate\" the transport by exchanging a few requests and responses.\r\n\t// If we haven't sent enough requests within 5s, we'll start sending noop ping requests.\r\n\tvar DELAY_BEFORE_SENDING_EXTRA_REQUESTS = 5000;\r\n\t// If the initial data sent triggers a lot of bandwidth (i.e. it's a large put or a listen for a large amount of data)\r\n\t// then we may not be able to exchange our ping/pong requests within the healthy timeout. So if we reach the timeout\r\n\t// but we've sent/received enough bytes, we don't cancel the connection.\r\n\tvar BYTES_SENT_HEALTHY_OVERRIDE = 10 * 1024;\r\n\tvar BYTES_RECEIVED_HEALTHY_OVERRIDE = 100 * 1024;\r\n\tvar MESSAGE_TYPE = 't';\r\n\tvar MESSAGE_DATA = 'd';\r\n\tvar CONTROL_SHUTDOWN = 's';\r\n\tvar CONTROL_RESET = 'r';\r\n\tvar CONTROL_ERROR = 'e';\r\n\tvar CONTROL_PONG = 'o';\r\n\tvar SWITCH_ACK = 'a';\r\n\tvar END_TRANSMISSION = 'n';\r\n\tvar PING = 'p';\r\n\tvar SERVER_HELLO = 'h';\r\n\t/**\r\n\t * Creates a new real-time connection to the server using whichever method works\r\n\t * best in the current browser.\r\n\t *\r\n\t * @constructor\r\n\t */\r\n\tvar Connection = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!string} id - an id for this connection\r\n\t * @param {!RepoInfo} repoInfo_ - the info for the endpoint to connect to\r\n\t * @param {function(Object)} onMessage_ - the callback to be triggered when a server-push message arrives\r\n\t * @param {function(number, string)} onReady_ - the callback to be triggered when this connection is ready to send messages.\r\n\t * @param {function()} onDisconnect_ - the callback to be triggered when a connection was lost\r\n\t * @param {function(string)} onKill_ - the callback to be triggered when this connection has permanently shut down.\r\n\t * @param {string=} lastSessionId - last session id in persistent connection. is used to clean up old session in real-time server\r\n\t */\r\n\t function Connection(id, repoInfo_, onMessage_, onReady_, onDisconnect_, onKill_, lastSessionId) {\r\n\t this.id = id;\r\n\t this.repoInfo_ = repoInfo_;\r\n\t this.onMessage_ = onMessage_;\r\n\t this.onReady_ = onReady_;\r\n\t this.onDisconnect_ = onDisconnect_;\r\n\t this.onKill_ = onKill_;\r\n\t this.lastSessionId = lastSessionId;\r\n\t this.connectionCount = 0;\r\n\t this.pendingDataMessages = [];\r\n\t this.state_ = 0 /* CONNECTING */;\r\n\t this.log_ = logWrapper('c:' + this.id + ':');\r\n\t this.transportManager_ = new TransportManager(repoInfo_);\r\n\t this.log_('Connection created');\r\n\t this.start_();\r\n\t }\r\n\t /**\r\n\t * Starts a connection attempt\r\n\t * @private\r\n\t */\r\n\t Connection.prototype.start_ = function () {\r\n\t var _this = this;\r\n\t var conn = this.transportManager_.initialTransport();\r\n\t this.conn_ = new conn(this.nextTransportId_(), this.repoInfo_, undefined, this.lastSessionId);\r\n\t // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n\t // can consider the transport healthy.\r\n\t this.primaryResponsesRequired_ = conn['responsesRequiredToBeHealthy'] || 0;\r\n\t var onMessageReceived = this.connReceiver_(this.conn_);\r\n\t var onConnectionLost = this.disconnReceiver_(this.conn_);\r\n\t this.tx_ = this.conn_;\r\n\t this.rx_ = this.conn_;\r\n\t this.secondaryConn_ = null;\r\n\t this.isHealthy_ = false;\r\n\t /*\r\n\t * Firefox doesn't like when code from one iframe tries to create another iframe by way of the parent frame.\r\n\t * This can occur in the case of a redirect, i.e. we guessed wrong on what server to connect to and received a reset.\r\n\t * Somehow, setTimeout seems to make this ok. That doesn't make sense from a security perspective, since you should\r\n\t * still have the context of your originating frame.\r\n\t */\r\n\t setTimeout(function () {\r\n\t // this.conn_ gets set to null in some of the tests. Check to make sure it still exists before using it\r\n\t _this.conn_ && _this.conn_.open(onMessageReceived, onConnectionLost);\r\n\t }, Math.floor(0));\r\n\t var healthyTimeout_ms = conn['healthyTimeout'] || 0;\r\n\t if (healthyTimeout_ms > 0) {\r\n\t this.healthyTimeout_ = setTimeoutNonBlocking(function () {\r\n\t _this.healthyTimeout_ = null;\r\n\t if (!_this.isHealthy_) {\r\n\t if (_this.conn_ &&\r\n\t _this.conn_.bytesReceived > BYTES_RECEIVED_HEALTHY_OVERRIDE) {\r\n\t _this.log_('Connection exceeded healthy timeout but has received ' +\r\n\t _this.conn_.bytesReceived +\r\n\t ' bytes. Marking connection healthy.');\r\n\t _this.isHealthy_ = true;\r\n\t _this.conn_.markConnectionHealthy();\r\n\t }\r\n\t else if (_this.conn_ &&\r\n\t _this.conn_.bytesSent > BYTES_SENT_HEALTHY_OVERRIDE) {\r\n\t _this.log_('Connection exceeded healthy timeout but has sent ' +\r\n\t _this.conn_.bytesSent +\r\n\t ' bytes. Leaving connection alive.');\r\n\t // NOTE: We don't want to mark it healthy, since we have no guarantee that the bytes have made it to\r\n\t // the server.\r\n\t }\r\n\t else {\r\n\t _this.log_('Closing unhealthy connection after timeout.');\r\n\t _this.close();\r\n\t }\r\n\t }\r\n\t }, Math.floor(healthyTimeout_ms));\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @return {!string}\r\n\t * @private\r\n\t */\r\n\t Connection.prototype.nextTransportId_ = function () {\r\n\t return 'c:' + this.id + ':' + this.connectionCount++;\r\n\t };\r\n\t Connection.prototype.disconnReceiver_ = function (conn) {\r\n\t var _this = this;\r\n\t return function (everConnected) {\r\n\t if (conn === _this.conn_) {\r\n\t _this.onConnectionLost_(everConnected);\r\n\t }\r\n\t else if (conn === _this.secondaryConn_) {\r\n\t _this.log_('Secondary connection lost.');\r\n\t _this.onSecondaryConnectionLost_();\r\n\t }\r\n\t else {\r\n\t _this.log_('closing an old connection');\r\n\t }\r\n\t };\r\n\t };\r\n\t Connection.prototype.connReceiver_ = function (conn) {\r\n\t var _this = this;\r\n\t return function (message) {\r\n\t if (_this.state_ != 2 /* DISCONNECTED */) {\r\n\t if (conn === _this.rx_) {\r\n\t _this.onPrimaryMessageReceived_(message);\r\n\t }\r\n\t else if (conn === _this.secondaryConn_) {\r\n\t _this.onSecondaryMessageReceived_(message);\r\n\t }\r\n\t else {\r\n\t _this.log_('message on old connection');\r\n\t }\r\n\t }\r\n\t };\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {Object} dataMsg An arbitrary data message to be sent to the server\r\n\t */\r\n\t Connection.prototype.sendRequest = function (dataMsg) {\r\n\t // wrap in a data message envelope and send it on\r\n\t var msg = { t: 'd', d: dataMsg };\r\n\t this.sendData_(msg);\r\n\t };\r\n\t Connection.prototype.tryCleanupConnection = function () {\r\n\t if (this.tx_ === this.secondaryConn_ && this.rx_ === this.secondaryConn_) {\r\n\t this.log_('cleaning up and promoting a connection: ' + this.secondaryConn_.connId);\r\n\t this.conn_ = this.secondaryConn_;\r\n\t this.secondaryConn_ = null;\r\n\t // the server will shutdown the old connection\r\n\t }\r\n\t };\r\n\t Connection.prototype.onSecondaryControl_ = function (controlData) {\r\n\t if (MESSAGE_TYPE in controlData) {\r\n\t var cmd = controlData[MESSAGE_TYPE];\r\n\t if (cmd === SWITCH_ACK) {\r\n\t this.upgradeIfSecondaryHealthy_();\r\n\t }\r\n\t else if (cmd === CONTROL_RESET) {\r\n\t // Most likely the session wasn't valid. Abandon the switch attempt\r\n\t this.log_('Got a reset on secondary, closing it');\r\n\t this.secondaryConn_.close();\r\n\t // If we were already using this connection for something, than we need to fully close\r\n\t if (this.tx_ === this.secondaryConn_ ||\r\n\t this.rx_ === this.secondaryConn_) {\r\n\t this.close();\r\n\t }\r\n\t }\r\n\t else if (cmd === CONTROL_PONG) {\r\n\t this.log_('got pong on secondary.');\r\n\t this.secondaryResponsesRequired_--;\r\n\t this.upgradeIfSecondaryHealthy_();\r\n\t }\r\n\t }\r\n\t };\r\n\t Connection.prototype.onSecondaryMessageReceived_ = function (parsedData) {\r\n\t var layer = requireKey('t', parsedData);\r\n\t var data = requireKey('d', parsedData);\r\n\t if (layer == 'c') {\r\n\t this.onSecondaryControl_(data);\r\n\t }\r\n\t else if (layer == 'd') {\r\n\t // got a data message, but we're still second connection. Need to buffer it up\r\n\t this.pendingDataMessages.push(data);\r\n\t }\r\n\t else {\r\n\t throw new Error('Unknown protocol layer: ' + layer);\r\n\t }\r\n\t };\r\n\t Connection.prototype.upgradeIfSecondaryHealthy_ = function () {\r\n\t if (this.secondaryResponsesRequired_ <= 0) {\r\n\t this.log_('Secondary connection is healthy.');\r\n\t this.isHealthy_ = true;\r\n\t this.secondaryConn_.markConnectionHealthy();\r\n\t this.proceedWithUpgrade_();\r\n\t }\r\n\t else {\r\n\t // Send a ping to make sure the connection is healthy.\r\n\t this.log_('sending ping on secondary.');\r\n\t this.secondaryConn_.send({ t: 'c', d: { t: PING, d: {} } });\r\n\t }\r\n\t };\r\n\t Connection.prototype.proceedWithUpgrade_ = function () {\r\n\t // tell this connection to consider itself open\r\n\t this.secondaryConn_.start();\r\n\t // send ack\r\n\t this.log_('sending client ack on secondary');\r\n\t this.secondaryConn_.send({ t: 'c', d: { t: SWITCH_ACK, d: {} } });\r\n\t // send end packet on primary transport, switch to sending on this one\r\n\t // can receive on this one, buffer responses until end received on primary transport\r\n\t this.log_('Ending transmission on primary');\r\n\t this.conn_.send({ t: 'c', d: { t: END_TRANSMISSION, d: {} } });\r\n\t this.tx_ = this.secondaryConn_;\r\n\t this.tryCleanupConnection();\r\n\t };\r\n\t Connection.prototype.onPrimaryMessageReceived_ = function (parsedData) {\r\n\t // Must refer to parsedData properties in quotes, so closure doesn't touch them.\r\n\t var layer = requireKey('t', parsedData);\r\n\t var data = requireKey('d', parsedData);\r\n\t if (layer == 'c') {\r\n\t this.onControl_(data);\r\n\t }\r\n\t else if (layer == 'd') {\r\n\t this.onDataMessage_(data);\r\n\t }\r\n\t };\r\n\t Connection.prototype.onDataMessage_ = function (message) {\r\n\t this.onPrimaryResponse_();\r\n\t // We don't do anything with data messages, just kick them up a level\r\n\t this.onMessage_(message);\r\n\t };\r\n\t Connection.prototype.onPrimaryResponse_ = function () {\r\n\t if (!this.isHealthy_) {\r\n\t this.primaryResponsesRequired_--;\r\n\t if (this.primaryResponsesRequired_ <= 0) {\r\n\t this.log_('Primary connection is healthy.');\r\n\t this.isHealthy_ = true;\r\n\t this.conn_.markConnectionHealthy();\r\n\t }\r\n\t }\r\n\t };\r\n\t Connection.prototype.onControl_ = function (controlData) {\r\n\t var cmd = requireKey(MESSAGE_TYPE, controlData);\r\n\t if (MESSAGE_DATA in controlData) {\r\n\t var payload = controlData[MESSAGE_DATA];\r\n\t if (cmd === SERVER_HELLO) {\r\n\t this.onHandshake_(payload);\r\n\t }\r\n\t else if (cmd === END_TRANSMISSION) {\r\n\t this.log_('recvd end transmission on primary');\r\n\t this.rx_ = this.secondaryConn_;\r\n\t for (var i = 0; i < this.pendingDataMessages.length; ++i) {\r\n\t this.onDataMessage_(this.pendingDataMessages[i]);\r\n\t }\r\n\t this.pendingDataMessages = [];\r\n\t this.tryCleanupConnection();\r\n\t }\r\n\t else if (cmd === CONTROL_SHUTDOWN) {\r\n\t // This was previously the 'onKill' callback passed to the lower-level connection\r\n\t // payload in this case is the reason for the shutdown. Generally a human-readable error\r\n\t this.onConnectionShutdown_(payload);\r\n\t }\r\n\t else if (cmd === CONTROL_RESET) {\r\n\t // payload in this case is the host we should contact\r\n\t this.onReset_(payload);\r\n\t }\r\n\t else if (cmd === CONTROL_ERROR) {\r\n\t error('Server Error: ' + payload);\r\n\t }\r\n\t else if (cmd === CONTROL_PONG) {\r\n\t this.log_('got pong on primary.');\r\n\t this.onPrimaryResponse_();\r\n\t this.sendPingOnPrimaryIfNecessary_();\r\n\t }\r\n\t else {\r\n\t error('Unknown control packet command: ' + cmd);\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {Object} handshake The handshake data returned from the server\r\n\t * @private\r\n\t */\r\n\t Connection.prototype.onHandshake_ = function (handshake) {\r\n\t var timestamp = handshake.ts;\r\n\t var version = handshake.v;\r\n\t var host = handshake.h;\r\n\t this.sessionId = handshake.s;\r\n\t this.repoInfo_.updateHost(host);\r\n\t // if we've already closed the connection, then don't bother trying to progress further\r\n\t if (this.state_ == 0 /* CONNECTING */) {\r\n\t this.conn_.start();\r\n\t this.onConnectionEstablished_(this.conn_, timestamp);\r\n\t if (PROTOCOL_VERSION !== version) {\r\n\t warn('Protocol version mismatch detected');\r\n\t }\r\n\t // TODO: do we want to upgrade? when? maybe a delay?\r\n\t this.tryStartUpgrade_();\r\n\t }\r\n\t };\r\n\t Connection.prototype.tryStartUpgrade_ = function () {\r\n\t var conn = this.transportManager_.upgradeTransport();\r\n\t if (conn) {\r\n\t this.startUpgrade_(conn);\r\n\t }\r\n\t };\r\n\t Connection.prototype.startUpgrade_ = function (conn) {\r\n\t var _this = this;\r\n\t this.secondaryConn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.sessionId);\r\n\t // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n\t // can consider the transport healthy.\r\n\t this.secondaryResponsesRequired_ =\r\n\t conn['responsesRequiredToBeHealthy'] || 0;\r\n\t var onMessage = this.connReceiver_(this.secondaryConn_);\r\n\t var onDisconnect = this.disconnReceiver_(this.secondaryConn_);\r\n\t this.secondaryConn_.open(onMessage, onDisconnect);\r\n\t // If we haven't successfully upgraded after UPGRADE_TIMEOUT, give up and kill the secondary.\r\n\t setTimeoutNonBlocking(function () {\r\n\t if (_this.secondaryConn_) {\r\n\t _this.log_('Timed out trying to upgrade.');\r\n\t _this.secondaryConn_.close();\r\n\t }\r\n\t }, Math.floor(UPGRADE_TIMEOUT));\r\n\t };\r\n\t Connection.prototype.onReset_ = function (host) {\r\n\t this.log_('Reset packet received. New host: ' + host);\r\n\t this.repoInfo_.updateHost(host);\r\n\t // TODO: if we're already \"connected\", we need to trigger a disconnect at the next layer up.\r\n\t // We don't currently support resets after the connection has already been established\r\n\t if (this.state_ === 1 /* CONNECTED */) {\r\n\t this.close();\r\n\t }\r\n\t else {\r\n\t // Close whatever connections we have open and start again.\r\n\t this.closeConnections_();\r\n\t this.start_();\r\n\t }\r\n\t };\r\n\t Connection.prototype.onConnectionEstablished_ = function (conn, timestamp) {\r\n\t var _this = this;\r\n\t this.log_('Realtime connection established.');\r\n\t this.conn_ = conn;\r\n\t this.state_ = 1 /* CONNECTED */;\r\n\t if (this.onReady_) {\r\n\t this.onReady_(timestamp, this.sessionId);\r\n\t this.onReady_ = null;\r\n\t }\r\n\t // If after 5 seconds we haven't sent enough requests to the server to get the connection healthy,\r\n\t // send some pings.\r\n\t if (this.primaryResponsesRequired_ === 0) {\r\n\t this.log_('Primary connection is healthy.');\r\n\t this.isHealthy_ = true;\r\n\t }\r\n\t else {\r\n\t setTimeoutNonBlocking(function () {\r\n\t _this.sendPingOnPrimaryIfNecessary_();\r\n\t }, Math.floor(DELAY_BEFORE_SENDING_EXTRA_REQUESTS));\r\n\t }\r\n\t };\r\n\t Connection.prototype.sendPingOnPrimaryIfNecessary_ = function () {\r\n\t // If the connection isn't considered healthy yet, we'll send a noop ping packet request.\r\n\t if (!this.isHealthy_ && this.state_ === 1 /* CONNECTED */) {\r\n\t this.log_('sending ping on primary.');\r\n\t this.sendData_({ t: 'c', d: { t: PING, d: {} } });\r\n\t }\r\n\t };\r\n\t Connection.prototype.onSecondaryConnectionLost_ = function () {\r\n\t var conn = this.secondaryConn_;\r\n\t this.secondaryConn_ = null;\r\n\t if (this.tx_ === conn || this.rx_ === conn) {\r\n\t // we are relying on this connection already in some capacity. Therefore, a failure is real\r\n\t this.close();\r\n\t }\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {boolean} everConnected Whether or not the connection ever reached a server. Used to determine if\r\n\t * we should flush the host cache\r\n\t * @private\r\n\t */\r\n\t Connection.prototype.onConnectionLost_ = function (everConnected) {\r\n\t this.conn_ = null;\r\n\t // NOTE: IF you're seeing a Firefox error for this line, I think it might be because it's getting\r\n\t // called on window close and RealtimeState.CONNECTING is no longer defined. Just a guess.\r\n\t if (!everConnected && this.state_ === 0 /* CONNECTING */) {\r\n\t this.log_('Realtime connection failed.');\r\n\t // Since we failed to connect at all, clear any cached entry for this namespace in case the machine went away\r\n\t if (this.repoInfo_.isCacheableHost()) {\r\n\t PersistentStorage.remove('host:' + this.repoInfo_.host);\r\n\t // reset the internal host to what we would show the user, i.e. .firebaseio.com\r\n\t this.repoInfo_.internalHost = this.repoInfo_.host;\r\n\t }\r\n\t }\r\n\t else if (this.state_ === 1 /* CONNECTED */) {\r\n\t this.log_('Realtime connection lost.');\r\n\t }\r\n\t this.close();\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {string} reason\r\n\t * @private\r\n\t */\r\n\t Connection.prototype.onConnectionShutdown_ = function (reason) {\r\n\t this.log_('Connection shutdown command received. Shutting down...');\r\n\t if (this.onKill_) {\r\n\t this.onKill_(reason);\r\n\t this.onKill_ = null;\r\n\t }\r\n\t // We intentionally don't want to fire onDisconnect (kill is a different case),\r\n\t // so clear the callback.\r\n\t this.onDisconnect_ = null;\r\n\t this.close();\r\n\t };\r\n\t Connection.prototype.sendData_ = function (data) {\r\n\t if (this.state_ !== 1 /* CONNECTED */) {\r\n\t throw 'Connection is not connected';\r\n\t }\r\n\t else {\r\n\t this.tx_.send(data);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Cleans up this connection, calling the appropriate callbacks\r\n\t */\r\n\t Connection.prototype.close = function () {\r\n\t if (this.state_ !== 2 /* DISCONNECTED */) {\r\n\t this.log_('Closing realtime connection.');\r\n\t this.state_ = 2 /* DISCONNECTED */;\r\n\t this.closeConnections_();\r\n\t if (this.onDisconnect_) {\r\n\t this.onDisconnect_();\r\n\t this.onDisconnect_ = null;\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @private\r\n\t */\r\n\t Connection.prototype.closeConnections_ = function () {\r\n\t this.log_('Shutting down all connections');\r\n\t if (this.conn_) {\r\n\t this.conn_.close();\r\n\t this.conn_ = null;\r\n\t }\r\n\t if (this.secondaryConn_) {\r\n\t this.secondaryConn_.close();\r\n\t this.secondaryConn_ = null;\r\n\t }\r\n\t if (this.healthyTimeout_) {\r\n\t clearTimeout(this.healthyTimeout_);\r\n\t this.healthyTimeout_ = null;\r\n\t }\r\n\t };\r\n\t return Connection;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Interface defining the set of actions that can be performed against the Firebase server\r\n\t * (basically corresponds to our wire protocol).\r\n\t *\r\n\t * @interface\r\n\t */\r\n\tvar ServerActions = /** @class */ (function () {\r\n\t function ServerActions() {\r\n\t }\r\n\t /**\r\n\t * @param {string} pathString\r\n\t * @param {*} data\r\n\t * @param {function(string, string)=} onComplete\r\n\t * @param {string=} hash\r\n\t */\r\n\t ServerActions.prototype.put = function (pathString, data, onComplete, hash) { };\r\n\t /**\r\n\t * @param {string} pathString\r\n\t * @param {*} data\r\n\t * @param {function(string, ?string)} onComplete\r\n\t * @param {string=} hash\r\n\t */\r\n\t ServerActions.prototype.merge = function (pathString, data, onComplete, hash) { };\r\n\t /**\r\n\t * Refreshes the auth token for the current connection.\r\n\t * @param {string} token The authentication token\r\n\t */\r\n\t ServerActions.prototype.refreshAuthToken = function (token) { };\r\n\t /**\r\n\t * @param {string} pathString\r\n\t * @param {*} data\r\n\t * @param {function(string, string)=} onComplete\r\n\t */\r\n\t ServerActions.prototype.onDisconnectPut = function (pathString, data, onComplete) { };\r\n\t /**\r\n\t * @param {string} pathString\r\n\t * @param {*} data\r\n\t * @param {function(string, string)=} onComplete\r\n\t */\r\n\t ServerActions.prototype.onDisconnectMerge = function (pathString, data, onComplete) { };\r\n\t /**\r\n\t * @param {string} pathString\r\n\t * @param {function(string, string)=} onComplete\r\n\t */\r\n\t ServerActions.prototype.onDisconnectCancel = function (pathString, onComplete) { };\r\n\t /**\r\n\t * @param {Object.} stats\r\n\t */\r\n\t ServerActions.prototype.reportStats = function (stats) { };\r\n\t return ServerActions;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar RECONNECT_MIN_DELAY = 1000;\r\n\tvar RECONNECT_MAX_DELAY_DEFAULT = 60 * 5 * 1000; // 5 minutes in milliseconds (Case: 1858)\r\n\tvar RECONNECT_MAX_DELAY_FOR_ADMINS = 30 * 1000; // 30 seconds for admin clients (likely to be a backend server)\r\n\tvar RECONNECT_DELAY_MULTIPLIER = 1.3;\r\n\tvar RECONNECT_DELAY_RESET_TIMEOUT = 30000; // Reset delay back to MIN_DELAY after being connected for 30sec.\r\n\tvar SERVER_KILL_INTERRUPT_REASON = 'server_kill';\r\n\t// If auth fails repeatedly, we'll assume something is wrong and log a warning / back off.\r\n\tvar INVALID_AUTH_TOKEN_THRESHOLD = 3;\r\n\t/**\r\n\t * Firebase connection. Abstracts wire protocol and handles reconnecting.\r\n\t *\r\n\t * NOTE: All JSON objects sent to the realtime connection must have property names enclosed\r\n\t * in quotes to make sure the closure compiler does not minify them.\r\n\t */\r\n\tvar PersistentConnection = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(PersistentConnection, _super);\r\n\t /**\r\n\t * @implements {ServerActions}\r\n\t * @param {!RepoInfo} repoInfo_ Data about the namespace we are connecting to\r\n\t * @param {function(string, *, boolean, ?number)} onDataUpdate_ A callback for new data from the server\r\n\t * @param onConnectStatus_\r\n\t * @param onServerInfoUpdate_\r\n\t * @param authTokenProvider_\r\n\t * @param authOverride_\r\n\t */\r\n\t function PersistentConnection(repoInfo_, onDataUpdate_, onConnectStatus_, onServerInfoUpdate_, authTokenProvider_, authOverride_) {\r\n\t var _this = _super.call(this) || this;\r\n\t _this.repoInfo_ = repoInfo_;\r\n\t _this.onDataUpdate_ = onDataUpdate_;\r\n\t _this.onConnectStatus_ = onConnectStatus_;\r\n\t _this.onServerInfoUpdate_ = onServerInfoUpdate_;\r\n\t _this.authTokenProvider_ = authTokenProvider_;\r\n\t _this.authOverride_ = authOverride_;\r\n\t // Used for diagnostic logging.\r\n\t _this.id = PersistentConnection.nextPersistentConnectionId_++;\r\n\t _this.log_ = logWrapper('p:' + _this.id + ':');\r\n\t /** @private {Object} */\r\n\t _this.interruptReasons_ = {};\r\n\t _this.listens_ = {};\r\n\t _this.outstandingPuts_ = [];\r\n\t _this.outstandingPutCount_ = 0;\r\n\t _this.onDisconnectRequestQueue_ = [];\r\n\t _this.connected_ = false;\r\n\t _this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n\t _this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_DEFAULT;\r\n\t _this.securityDebugCallback_ = null;\r\n\t _this.lastSessionId = null;\r\n\t /** @private {number|null} */\r\n\t _this.establishConnectionTimer_ = null;\r\n\t /** @private {boolean} */\r\n\t _this.visible_ = false;\r\n\t // Before we get connected, we keep a queue of pending messages to send.\r\n\t _this.requestCBHash_ = {};\r\n\t _this.requestNumber_ = 0;\r\n\t /** @private {?{\r\n\t * sendRequest(Object),\r\n\t * close()\r\n\t * }} */\r\n\t _this.realtime_ = null;\r\n\t /** @private {string|null} */\r\n\t _this.authToken_ = null;\r\n\t _this.forceTokenRefresh_ = false;\r\n\t _this.invalidAuthTokenCount_ = 0;\r\n\t _this.firstConnection_ = true;\r\n\t _this.lastConnectionAttemptTime_ = null;\r\n\t _this.lastConnectionEstablishedTime_ = null;\r\n\t if (authOverride_ && !util.isNodeSdk()) {\r\n\t throw new Error('Auth override specified in options, but not supported on non Node.js platforms');\r\n\t }\r\n\t _this.scheduleConnect_(0);\r\n\t VisibilityMonitor.getInstance().on('visible', _this.onVisible_, _this);\r\n\t if (repoInfo_.host.indexOf('fblocal') === -1) {\r\n\t OnlineMonitor.getInstance().on('online', _this.onOnline_, _this);\r\n\t }\r\n\t return _this;\r\n\t }\r\n\t /**\r\n\t * @param {!string} action\r\n\t * @param {*} body\r\n\t * @param {function(*)=} onResponse\r\n\t * @protected\r\n\t */\r\n\t PersistentConnection.prototype.sendRequest = function (action, body, onResponse) {\r\n\t var curReqNum = ++this.requestNumber_;\r\n\t var msg = { r: curReqNum, a: action, b: body };\r\n\t this.log_(util.stringify(msg));\r\n\t util.assert(this.connected_, \"sendRequest call when we're not connected not allowed.\");\r\n\t this.realtime_.sendRequest(msg);\r\n\t if (onResponse) {\r\n\t this.requestCBHash_[curReqNum] = onResponse;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PersistentConnection.prototype.listen = function (query, currentHashFn, tag, onComplete) {\r\n\t var queryId = query.queryIdentifier();\r\n\t var pathString = query.path.toString();\r\n\t this.log_('Listen called for ' + pathString + ' ' + queryId);\r\n\t this.listens_[pathString] = this.listens_[pathString] || {};\r\n\t util.assert(query.getQueryParams().isDefault() ||\r\n\t !query.getQueryParams().loadsAllData(), 'listen() called for non-default but complete query');\r\n\t util.assert(!this.listens_[pathString][queryId], 'listen() called twice for same path/queryId.');\r\n\t var listenSpec = {\r\n\t onComplete: onComplete,\r\n\t hashFn: currentHashFn,\r\n\t query: query,\r\n\t tag: tag\r\n\t };\r\n\t this.listens_[pathString][queryId] = listenSpec;\r\n\t if (this.connected_) {\r\n\t this.sendListen_(listenSpec);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!{onComplete(),\r\n\t * hashFn():!string,\r\n\t * query: !Query,\r\n\t * tag: ?number}} listenSpec\r\n\t * @private\r\n\t */\r\n\t PersistentConnection.prototype.sendListen_ = function (listenSpec) {\r\n\t var _this = this;\r\n\t var query = listenSpec.query;\r\n\t var pathString = query.path.toString();\r\n\t var queryId = query.queryIdentifier();\r\n\t this.log_('Listen on ' + pathString + ' for ' + queryId);\r\n\t var req = { /*path*/ p: pathString };\r\n\t var action = 'q';\r\n\t // Only bother to send query if it's non-default.\r\n\t if (listenSpec.tag) {\r\n\t req['q'] = query.queryObject();\r\n\t req['t'] = listenSpec.tag;\r\n\t }\r\n\t req[ /*hash*/'h'] = listenSpec.hashFn();\r\n\t this.sendRequest(action, req, function (message) {\r\n\t var payload = message[ /*data*/'d'];\r\n\t var status = message[ /*status*/'s'];\r\n\t // print warnings in any case...\r\n\t PersistentConnection.warnOnListenWarnings_(payload, query);\r\n\t var currentListenSpec = _this.listens_[pathString] && _this.listens_[pathString][queryId];\r\n\t // only trigger actions if the listen hasn't been removed and readded\r\n\t if (currentListenSpec === listenSpec) {\r\n\t _this.log_('listen response', message);\r\n\t if (status !== 'ok') {\r\n\t _this.removeListen_(pathString, queryId);\r\n\t }\r\n\t if (listenSpec.onComplete) {\r\n\t listenSpec.onComplete(status, payload);\r\n\t }\r\n\t }\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @param {*} payload\r\n\t * @param {!Query} query\r\n\t * @private\r\n\t */\r\n\t PersistentConnection.warnOnListenWarnings_ = function (payload, query) {\r\n\t if (payload && typeof payload === 'object' && util.contains(payload, 'w')) {\r\n\t var warnings = util.safeGet(payload, 'w');\r\n\t if (Array.isArray(warnings) && ~warnings.indexOf('no_index')) {\r\n\t var indexSpec = '\".indexOn\": \"' +\r\n\t query\r\n\t .getQueryParams()\r\n\t .getIndex()\r\n\t .toString() +\r\n\t '\"';\r\n\t var indexPath = query.path.toString();\r\n\t warn(\"Using an unspecified index. Your data will be downloaded and \" +\r\n\t (\"filtered on the client. Consider adding \" + indexSpec + \" at \") +\r\n\t (indexPath + \" to your security rules for better performance.\"));\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PersistentConnection.prototype.refreshAuthToken = function (token) {\r\n\t this.authToken_ = token;\r\n\t this.log_('Auth token refreshed');\r\n\t if (this.authToken_) {\r\n\t this.tryAuth();\r\n\t }\r\n\t else {\r\n\t //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete\r\n\t //the credential so we dont become authenticated next time we connect.\r\n\t if (this.connected_) {\r\n\t this.sendRequest('unauth', {}, function () { });\r\n\t }\r\n\t }\r\n\t this.reduceReconnectDelayIfAdminCredential_(token);\r\n\t };\r\n\t /**\r\n\t * @param {!string} credential\r\n\t * @private\r\n\t */\r\n\t PersistentConnection.prototype.reduceReconnectDelayIfAdminCredential_ = function (credential) {\r\n\t // NOTE: This isn't intended to be bulletproof (a malicious developer can always just modify the client).\r\n\t // Additionally, we don't bother resetting the max delay back to the default if auth fails / expires.\r\n\t var isFirebaseSecret = credential && credential.length === 40;\r\n\t if (isFirebaseSecret || util.isAdmin(credential)) {\r\n\t this.log_('Admin auth credential detected. Reducing max reconnect time.');\r\n\t this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Attempts to authenticate with the given credentials. If the authentication attempt fails, it's triggered like\r\n\t * a auth revoked (the connection is closed).\r\n\t */\r\n\t PersistentConnection.prototype.tryAuth = function () {\r\n\t var _this = this;\r\n\t if (this.connected_ && this.authToken_) {\r\n\t var token_1 = this.authToken_;\r\n\t var authMethod = util.isValidFormat(token_1) ? 'auth' : 'gauth';\r\n\t var requestData = { cred: token_1 };\r\n\t if (this.authOverride_ === null) {\r\n\t requestData['noauth'] = true;\r\n\t }\r\n\t else if (typeof this.authOverride_ === 'object') {\r\n\t requestData['authvar'] = this.authOverride_;\r\n\t }\r\n\t this.sendRequest(authMethod, requestData, function (res) {\r\n\t var status = res[ /*status*/'s'];\r\n\t var data = res[ /*data*/'d'] || 'error';\r\n\t if (_this.authToken_ === token_1) {\r\n\t if (status === 'ok') {\r\n\t _this.invalidAuthTokenCount_ = 0;\r\n\t }\r\n\t else {\r\n\t // Triggers reconnect and force refresh for auth token\r\n\t _this.onAuthRevoked_(status, data);\r\n\t }\r\n\t }\r\n\t });\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PersistentConnection.prototype.unlisten = function (query, tag) {\r\n\t var pathString = query.path.toString();\r\n\t var queryId = query.queryIdentifier();\r\n\t this.log_('Unlisten called for ' + pathString + ' ' + queryId);\r\n\t util.assert(query.getQueryParams().isDefault() ||\r\n\t !query.getQueryParams().loadsAllData(), 'unlisten() called for non-default but complete query');\r\n\t var listen = this.removeListen_(pathString, queryId);\r\n\t if (listen && this.connected_) {\r\n\t this.sendUnlisten_(pathString, queryId, query.queryObject(), tag);\r\n\t }\r\n\t };\r\n\t PersistentConnection.prototype.sendUnlisten_ = function (pathString, queryId, queryObj, tag) {\r\n\t this.log_('Unlisten on ' + pathString + ' for ' + queryId);\r\n\t var req = { /*path*/ p: pathString };\r\n\t var action = 'n';\r\n\t // Only bother sending queryId if it's non-default.\r\n\t if (tag) {\r\n\t req['q'] = queryObj;\r\n\t req['t'] = tag;\r\n\t }\r\n\t this.sendRequest(action, req);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PersistentConnection.prototype.onDisconnectPut = function (pathString, data, onComplete) {\r\n\t if (this.connected_) {\r\n\t this.sendOnDisconnect_('o', pathString, data, onComplete);\r\n\t }\r\n\t else {\r\n\t this.onDisconnectRequestQueue_.push({\r\n\t pathString: pathString,\r\n\t action: 'o',\r\n\t data: data,\r\n\t onComplete: onComplete\r\n\t });\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PersistentConnection.prototype.onDisconnectMerge = function (pathString, data, onComplete) {\r\n\t if (this.connected_) {\r\n\t this.sendOnDisconnect_('om', pathString, data, onComplete);\r\n\t }\r\n\t else {\r\n\t this.onDisconnectRequestQueue_.push({\r\n\t pathString: pathString,\r\n\t action: 'om',\r\n\t data: data,\r\n\t onComplete: onComplete\r\n\t });\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PersistentConnection.prototype.onDisconnectCancel = function (pathString, onComplete) {\r\n\t if (this.connected_) {\r\n\t this.sendOnDisconnect_('oc', pathString, null, onComplete);\r\n\t }\r\n\t else {\r\n\t this.onDisconnectRequestQueue_.push({\r\n\t pathString: pathString,\r\n\t action: 'oc',\r\n\t data: null,\r\n\t onComplete: onComplete\r\n\t });\r\n\t }\r\n\t };\r\n\t PersistentConnection.prototype.sendOnDisconnect_ = function (action, pathString, data, onComplete) {\r\n\t var request = { /*path*/ p: pathString, /*data*/ d: data };\r\n\t this.log_('onDisconnect ' + action, request);\r\n\t this.sendRequest(action, request, function (response) {\r\n\t if (onComplete) {\r\n\t setTimeout(function () {\r\n\t onComplete(response[ /*status*/'s'], response[ /* data */'d']);\r\n\t }, Math.floor(0));\r\n\t }\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PersistentConnection.prototype.put = function (pathString, data, onComplete, hash) {\r\n\t this.putInternal('p', pathString, data, onComplete, hash);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PersistentConnection.prototype.merge = function (pathString, data, onComplete, hash) {\r\n\t this.putInternal('m', pathString, data, onComplete, hash);\r\n\t };\r\n\t PersistentConnection.prototype.putInternal = function (action, pathString, data, onComplete, hash) {\r\n\t var request = {\r\n\t /*path*/ p: pathString,\r\n\t /*data*/ d: data\r\n\t };\r\n\t if (hash !== undefined)\r\n\t request[ /*hash*/'h'] = hash;\r\n\t // TODO: Only keep track of the most recent put for a given path?\r\n\t this.outstandingPuts_.push({\r\n\t action: action,\r\n\t request: request,\r\n\t onComplete: onComplete\r\n\t });\r\n\t this.outstandingPutCount_++;\r\n\t var index = this.outstandingPuts_.length - 1;\r\n\t if (this.connected_) {\r\n\t this.sendPut_(index);\r\n\t }\r\n\t else {\r\n\t this.log_('Buffering put: ' + pathString);\r\n\t }\r\n\t };\r\n\t PersistentConnection.prototype.sendPut_ = function (index) {\r\n\t var _this = this;\r\n\t var action = this.outstandingPuts_[index].action;\r\n\t var request = this.outstandingPuts_[index].request;\r\n\t var onComplete = this.outstandingPuts_[index].onComplete;\r\n\t this.outstandingPuts_[index].queued = this.connected_;\r\n\t this.sendRequest(action, request, function (message) {\r\n\t _this.log_(action + ' response', message);\r\n\t delete _this.outstandingPuts_[index];\r\n\t _this.outstandingPutCount_--;\r\n\t // Clean up array occasionally.\r\n\t if (_this.outstandingPutCount_ === 0) {\r\n\t _this.outstandingPuts_ = [];\r\n\t }\r\n\t if (onComplete)\r\n\t onComplete(message[ /*status*/'s'], message[ /* data */'d']);\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t PersistentConnection.prototype.reportStats = function (stats) {\r\n\t var _this = this;\r\n\t // If we're not connected, we just drop the stats.\r\n\t if (this.connected_) {\r\n\t var request = { /*counters*/ c: stats };\r\n\t this.log_('reportStats', request);\r\n\t this.sendRequest(/*stats*/ 's', request, function (result) {\r\n\t var status = result[ /*status*/'s'];\r\n\t if (status !== 'ok') {\r\n\t var errorReason = result[ /* data */'d'];\r\n\t _this.log_('reportStats', 'Error sending stats: ' + errorReason);\r\n\t }\r\n\t });\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {*} message\r\n\t * @private\r\n\t */\r\n\t PersistentConnection.prototype.onDataMessage_ = function (message) {\r\n\t if ('r' in message) {\r\n\t // this is a response\r\n\t this.log_('from server: ' + util.stringify(message));\r\n\t var reqNum = message['r'];\r\n\t var onResponse = this.requestCBHash_[reqNum];\r\n\t if (onResponse) {\r\n\t delete this.requestCBHash_[reqNum];\r\n\t onResponse(message[ /*body*/'b']);\r\n\t }\r\n\t }\r\n\t else if ('error' in message) {\r\n\t throw 'A server-side error has occurred: ' + message['error'];\r\n\t }\r\n\t else if ('a' in message) {\r\n\t // a and b are action and body, respectively\r\n\t this.onDataPush_(message['a'], message['b']);\r\n\t }\r\n\t };\r\n\t PersistentConnection.prototype.onDataPush_ = function (action, body) {\r\n\t this.log_('handleServerMessage', action, body);\r\n\t if (action === 'd')\r\n\t this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n\t /*isMerge*/ false, body['t']);\r\n\t else if (action === 'm')\r\n\t this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n\t /*isMerge=*/ true, body['t']);\r\n\t else if (action === 'c')\r\n\t this.onListenRevoked_(body[ /*path*/'p'], body[ /*query*/'q']);\r\n\t else if (action === 'ac')\r\n\t this.onAuthRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\r\n\t else if (action === 'sd')\r\n\t this.onSecurityDebugPacket_(body);\r\n\t else\r\n\t error('Unrecognized action received from server: ' +\r\n\t util.stringify(action) +\r\n\t '\\nAre you using the latest client?');\r\n\t };\r\n\t PersistentConnection.prototype.onReady_ = function (timestamp, sessionId) {\r\n\t this.log_('connection ready');\r\n\t this.connected_ = true;\r\n\t this.lastConnectionEstablishedTime_ = new Date().getTime();\r\n\t this.handleTimestamp_(timestamp);\r\n\t this.lastSessionId = sessionId;\r\n\t if (this.firstConnection_) {\r\n\t this.sendConnectStats_();\r\n\t }\r\n\t this.restoreState_();\r\n\t this.firstConnection_ = false;\r\n\t this.onConnectStatus_(true);\r\n\t };\r\n\t PersistentConnection.prototype.scheduleConnect_ = function (timeout) {\r\n\t var _this = this;\r\n\t util.assert(!this.realtime_, \"Scheduling a connect when we're already connected/ing?\");\r\n\t if (this.establishConnectionTimer_) {\r\n\t clearTimeout(this.establishConnectionTimer_);\r\n\t }\r\n\t // NOTE: Even when timeout is 0, it's important to do a setTimeout to work around an infuriating \"Security Error\" in\r\n\t // Firefox when trying to write to our long-polling iframe in some scenarios (e.g. Forge or our unit tests).\r\n\t this.establishConnectionTimer_ = setTimeout(function () {\r\n\t _this.establishConnectionTimer_ = null;\r\n\t _this.establishConnection_();\r\n\t }, Math.floor(timeout));\r\n\t };\r\n\t /**\r\n\t * @param {boolean} visible\r\n\t * @private\r\n\t */\r\n\t PersistentConnection.prototype.onVisible_ = function (visible) {\r\n\t // NOTE: Tabbing away and back to a window will defeat our reconnect backoff, but I think that's fine.\r\n\t if (visible &&\r\n\t !this.visible_ &&\r\n\t this.reconnectDelay_ === this.maxReconnectDelay_) {\r\n\t this.log_('Window became visible. Reducing delay.');\r\n\t this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n\t if (!this.realtime_) {\r\n\t this.scheduleConnect_(0);\r\n\t }\r\n\t }\r\n\t this.visible_ = visible;\r\n\t };\r\n\t PersistentConnection.prototype.onOnline_ = function (online) {\r\n\t if (online) {\r\n\t this.log_('Browser went online.');\r\n\t this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n\t if (!this.realtime_) {\r\n\t this.scheduleConnect_(0);\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.log_('Browser went offline. Killing connection.');\r\n\t if (this.realtime_) {\r\n\t this.realtime_.close();\r\n\t }\r\n\t }\r\n\t };\r\n\t PersistentConnection.prototype.onRealtimeDisconnect_ = function () {\r\n\t this.log_('data client disconnected');\r\n\t this.connected_ = false;\r\n\t this.realtime_ = null;\r\n\t // Since we don't know if our sent transactions succeeded or not, we need to cancel them.\r\n\t this.cancelSentTransactions_();\r\n\t // Clear out the pending requests.\r\n\t this.requestCBHash_ = {};\r\n\t if (this.shouldReconnect_()) {\r\n\t if (!this.visible_) {\r\n\t this.log_(\"Window isn't visible. Delaying reconnect.\");\r\n\t this.reconnectDelay_ = this.maxReconnectDelay_;\r\n\t this.lastConnectionAttemptTime_ = new Date().getTime();\r\n\t }\r\n\t else if (this.lastConnectionEstablishedTime_) {\r\n\t // If we've been connected long enough, reset reconnect delay to minimum.\r\n\t var timeSinceLastConnectSucceeded = new Date().getTime() - this.lastConnectionEstablishedTime_;\r\n\t if (timeSinceLastConnectSucceeded > RECONNECT_DELAY_RESET_TIMEOUT)\r\n\t this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n\t this.lastConnectionEstablishedTime_ = null;\r\n\t }\r\n\t var timeSinceLastConnectAttempt = new Date().getTime() - this.lastConnectionAttemptTime_;\r\n\t var reconnectDelay = Math.max(0, this.reconnectDelay_ - timeSinceLastConnectAttempt);\r\n\t reconnectDelay = Math.random() * reconnectDelay;\r\n\t this.log_('Trying to reconnect in ' + reconnectDelay + 'ms');\r\n\t this.scheduleConnect_(reconnectDelay);\r\n\t // Adjust reconnect delay for next time.\r\n\t this.reconnectDelay_ = Math.min(this.maxReconnectDelay_, this.reconnectDelay_ * RECONNECT_DELAY_MULTIPLIER);\r\n\t }\r\n\t this.onConnectStatus_(false);\r\n\t };\r\n\t PersistentConnection.prototype.establishConnection_ = function () {\r\n\t if (this.shouldReconnect_()) {\r\n\t this.log_('Making a connection attempt');\r\n\t this.lastConnectionAttemptTime_ = new Date().getTime();\r\n\t this.lastConnectionEstablishedTime_ = null;\r\n\t var onDataMessage_1 = this.onDataMessage_.bind(this);\r\n\t var onReady_1 = this.onReady_.bind(this);\r\n\t var onDisconnect_1 = this.onRealtimeDisconnect_.bind(this);\r\n\t var connId_1 = this.id + ':' + PersistentConnection.nextConnectionId_++;\r\n\t var self_1 = this;\r\n\t var lastSessionId_1 = this.lastSessionId;\r\n\t var canceled_1 = false;\r\n\t var connection_1 = null;\r\n\t var closeFn_1 = function () {\r\n\t if (connection_1) {\r\n\t connection_1.close();\r\n\t }\r\n\t else {\r\n\t canceled_1 = true;\r\n\t onDisconnect_1();\r\n\t }\r\n\t };\r\n\t var sendRequestFn = function (msg) {\r\n\t util.assert(connection_1, \"sendRequest call when we're not connected not allowed.\");\r\n\t connection_1.sendRequest(msg);\r\n\t };\r\n\t this.realtime_ = {\r\n\t close: closeFn_1,\r\n\t sendRequest: sendRequestFn\r\n\t };\r\n\t var forceRefresh = this.forceTokenRefresh_;\r\n\t this.forceTokenRefresh_ = false;\r\n\t // First fetch auth token, and establish connection after fetching the token was successful\r\n\t this.authTokenProvider_\r\n\t .getToken(forceRefresh)\r\n\t .then(function (result) {\r\n\t if (!canceled_1) {\r\n\t log('getToken() completed. Creating connection.');\r\n\t self_1.authToken_ = result && result.accessToken;\r\n\t connection_1 = new Connection(connId_1, self_1.repoInfo_, onDataMessage_1, onReady_1, onDisconnect_1, \r\n\t /* onKill= */ function (reason) {\r\n\t warn(reason + ' (' + self_1.repoInfo_.toString() + ')');\r\n\t self_1.interrupt(SERVER_KILL_INTERRUPT_REASON);\r\n\t }, lastSessionId_1);\r\n\t }\r\n\t else {\r\n\t log('getToken() completed but was canceled');\r\n\t }\r\n\t })\r\n\t .then(null, function (error$$1) {\r\n\t self_1.log_('Failed to get token: ' + error$$1);\r\n\t if (!canceled_1) {\r\n\t if (util.CONSTANTS.NODE_ADMIN) {\r\n\t // This may be a critical error for the Admin Node.js SDK, so log a warning.\r\n\t // But getToken() may also just have temporarily failed, so we still want to\r\n\t // continue retrying.\r\n\t warn(error$$1);\r\n\t }\r\n\t closeFn_1();\r\n\t }\r\n\t });\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {string} reason\r\n\t */\r\n\t PersistentConnection.prototype.interrupt = function (reason) {\r\n\t log('Interrupting connection for reason: ' + reason);\r\n\t this.interruptReasons_[reason] = true;\r\n\t if (this.realtime_) {\r\n\t this.realtime_.close();\r\n\t }\r\n\t else {\r\n\t if (this.establishConnectionTimer_) {\r\n\t clearTimeout(this.establishConnectionTimer_);\r\n\t this.establishConnectionTimer_ = null;\r\n\t }\r\n\t if (this.connected_) {\r\n\t this.onRealtimeDisconnect_();\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {string} reason\r\n\t */\r\n\t PersistentConnection.prototype.resume = function (reason) {\r\n\t log('Resuming connection for reason: ' + reason);\r\n\t delete this.interruptReasons_[reason];\r\n\t if (util.isEmpty(this.interruptReasons_)) {\r\n\t this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n\t if (!this.realtime_) {\r\n\t this.scheduleConnect_(0);\r\n\t }\r\n\t }\r\n\t };\r\n\t PersistentConnection.prototype.handleTimestamp_ = function (timestamp) {\r\n\t var delta = timestamp - new Date().getTime();\r\n\t this.onServerInfoUpdate_({ serverTimeOffset: delta });\r\n\t };\r\n\t PersistentConnection.prototype.cancelSentTransactions_ = function () {\r\n\t for (var i = 0; i < this.outstandingPuts_.length; i++) {\r\n\t var put = this.outstandingPuts_[i];\r\n\t if (put && /*hash*/ 'h' in put.request && put.queued) {\r\n\t if (put.onComplete)\r\n\t put.onComplete('disconnect');\r\n\t delete this.outstandingPuts_[i];\r\n\t this.outstandingPutCount_--;\r\n\t }\r\n\t }\r\n\t // Clean up array occasionally.\r\n\t if (this.outstandingPutCount_ === 0)\r\n\t this.outstandingPuts_ = [];\r\n\t };\r\n\t /**\r\n\t * @param {!string} pathString\r\n\t * @param {Array.<*>=} query\r\n\t * @private\r\n\t */\r\n\t PersistentConnection.prototype.onListenRevoked_ = function (pathString, query) {\r\n\t // Remove the listen and manufacture a \"permission_denied\" error for the failed listen.\r\n\t var queryId;\r\n\t if (!query) {\r\n\t queryId = 'default';\r\n\t }\r\n\t else {\r\n\t queryId = query.map(function (q) { return ObjectToUniqueKey(q); }).join('$');\r\n\t }\r\n\t var listen = this.removeListen_(pathString, queryId);\r\n\t if (listen && listen.onComplete)\r\n\t listen.onComplete('permission_denied');\r\n\t };\r\n\t /**\r\n\t * @param {!string} pathString\r\n\t * @param {!string} queryId\r\n\t * @return {{queries:Array., onComplete:function(string)}}\r\n\t * @private\r\n\t */\r\n\t PersistentConnection.prototype.removeListen_ = function (pathString, queryId) {\r\n\t var normalizedPathString = new Path(pathString).toString(); // normalize path.\r\n\t var listen;\r\n\t if (this.listens_[normalizedPathString] !== undefined) {\r\n\t listen = this.listens_[normalizedPathString][queryId];\r\n\t delete this.listens_[normalizedPathString][queryId];\r\n\t if (util.getCount(this.listens_[normalizedPathString]) === 0) {\r\n\t delete this.listens_[normalizedPathString];\r\n\t }\r\n\t }\r\n\t else {\r\n\t // all listens for this path has already been removed\r\n\t listen = undefined;\r\n\t }\r\n\t return listen;\r\n\t };\r\n\t PersistentConnection.prototype.onAuthRevoked_ = function (statusCode, explanation) {\r\n\t log('Auth token revoked: ' + statusCode + '/' + explanation);\r\n\t this.authToken_ = null;\r\n\t this.forceTokenRefresh_ = true;\r\n\t this.realtime_.close();\r\n\t if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\r\n\t // We'll wait a couple times before logging the warning / increasing the\r\n\t // retry period since oauth tokens will report as \"invalid\" if they're\r\n\t // just expired. Plus there may be transient issues that resolve themselves.\r\n\t this.invalidAuthTokenCount_++;\r\n\t if (this.invalidAuthTokenCount_ >= INVALID_AUTH_TOKEN_THRESHOLD) {\r\n\t // Set a long reconnect delay because recovery is unlikely\r\n\t this.reconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n\t // Notify the auth token provider that the token is invalid, which will log\r\n\t // a warning\r\n\t this.authTokenProvider_.notifyForInvalidToken();\r\n\t }\r\n\t }\r\n\t };\r\n\t PersistentConnection.prototype.onSecurityDebugPacket_ = function (body) {\r\n\t if (this.securityDebugCallback_) {\r\n\t this.securityDebugCallback_(body);\r\n\t }\r\n\t else {\r\n\t if ('msg' in body) {\r\n\t console.log('FIREBASE: ' + body['msg'].replace('\\n', '\\nFIREBASE: '));\r\n\t }\r\n\t }\r\n\t };\r\n\t PersistentConnection.prototype.restoreState_ = function () {\r\n\t var _this = this;\r\n\t //Re-authenticate ourselves if we have a credential stored.\r\n\t this.tryAuth();\r\n\t // Puts depend on having received the corresponding data update from the server before they complete, so we must\r\n\t // make sure to send listens before puts.\r\n\t util.forEach(this.listens_, function (pathString, queries) {\r\n\t util.forEach(queries, function (key, listenSpec) {\r\n\t _this.sendListen_(listenSpec);\r\n\t });\r\n\t });\r\n\t for (var i = 0; i < this.outstandingPuts_.length; i++) {\r\n\t if (this.outstandingPuts_[i])\r\n\t this.sendPut_(i);\r\n\t }\r\n\t while (this.onDisconnectRequestQueue_.length) {\r\n\t var request = this.onDisconnectRequestQueue_.shift();\r\n\t this.sendOnDisconnect_(request.action, request.pathString, request.data, request.onComplete);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Sends client stats for first connection\r\n\t * @private\r\n\t */\r\n\t PersistentConnection.prototype.sendConnectStats_ = function () {\r\n\t var stats = {};\r\n\t var clientName = 'js';\r\n\t if (util.CONSTANTS.NODE_ADMIN) {\r\n\t clientName = 'admin_node';\r\n\t }\r\n\t else if (util.CONSTANTS.NODE_CLIENT) {\r\n\t clientName = 'node';\r\n\t }\r\n\t stats['sdk.' + clientName + '.' + firebase.SDK_VERSION.replace(/\\./g, '-')] = 1;\r\n\t if (util.isMobileCordova()) {\r\n\t stats['framework.cordova'] = 1;\r\n\t }\r\n\t else if (util.isReactNative()) {\r\n\t stats['framework.reactnative'] = 1;\r\n\t }\r\n\t this.reportStats(stats);\r\n\t };\r\n\t /**\r\n\t * @return {boolean}\r\n\t * @private\r\n\t */\r\n\t PersistentConnection.prototype.shouldReconnect_ = function () {\r\n\t var online = OnlineMonitor.getInstance().currentlyOnline();\r\n\t return util.isEmpty(this.interruptReasons_) && online;\r\n\t };\r\n\t /**\r\n\t * @private\r\n\t */\r\n\t PersistentConnection.nextPersistentConnectionId_ = 0;\r\n\t /**\r\n\t * Counter for number of connections created. Mainly used for tagging in the logs\r\n\t * @type {number}\r\n\t * @private\r\n\t */\r\n\t PersistentConnection.nextConnectionId_ = 0;\r\n\t return PersistentConnection;\r\n\t}(ServerActions));\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * An implementation of ServerActions that communicates with the server via REST requests.\r\n\t * This is mostly useful for compatibility with crawlers, where we don't want to spin up a full\r\n\t * persistent connection (using WebSockets or long-polling)\r\n\t */\r\n\tvar ReadonlyRestClient = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(ReadonlyRestClient, _super);\r\n\t /**\r\n\t * @param {!RepoInfo} repoInfo_ Data about the namespace we are connecting to\r\n\t * @param {function(string, *, boolean, ?number)} onDataUpdate_ A callback for new data from the server\r\n\t * @param {AuthTokenProvider} authTokenProvider_\r\n\t * @implements {ServerActions}\r\n\t */\r\n\t function ReadonlyRestClient(repoInfo_, onDataUpdate_, authTokenProvider_) {\r\n\t var _this = _super.call(this) || this;\r\n\t _this.repoInfo_ = repoInfo_;\r\n\t _this.onDataUpdate_ = onDataUpdate_;\r\n\t _this.authTokenProvider_ = authTokenProvider_;\r\n\t /** @private {function(...[*])} */\r\n\t _this.log_ = logWrapper('p:rest:');\r\n\t /**\r\n\t * We don't actually need to track listens, except to prevent us calling an onComplete for a listen\r\n\t * that's been removed. :-/\r\n\t *\r\n\t * @private {!Object.}\r\n\t */\r\n\t _this.listens_ = {};\r\n\t return _this;\r\n\t }\r\n\t ReadonlyRestClient.prototype.reportStats = function (stats) {\r\n\t throw new Error('Method not implemented.');\r\n\t };\r\n\t /**\r\n\t * @param {!Query} query\r\n\t * @param {?number=} tag\r\n\t * @return {string}\r\n\t * @private\r\n\t */\r\n\t ReadonlyRestClient.getListenId_ = function (query, tag) {\r\n\t if (tag !== undefined) {\r\n\t return 'tag$' + tag;\r\n\t }\r\n\t else {\r\n\t util.assert(query.getQueryParams().isDefault(), \"should have a tag if it's not a default query.\");\r\n\t return query.path.toString();\r\n\t }\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ReadonlyRestClient.prototype.listen = function (query, currentHashFn, tag, onComplete) {\r\n\t var _this = this;\r\n\t var pathString = query.path.toString();\r\n\t this.log_('Listen called for ' + pathString + ' ' + query.queryIdentifier());\r\n\t // Mark this listener so we can tell if it's removed.\r\n\t var listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n\t var thisListen = {};\r\n\t this.listens_[listenId] = thisListen;\r\n\t var queryStringParamaters = query\r\n\t .getQueryParams()\r\n\t .toRestQueryStringParameters();\r\n\t this.restRequest_(pathString + '.json', queryStringParamaters, function (error$$1, result) {\r\n\t var data = result;\r\n\t if (error$$1 === 404) {\r\n\t data = null;\r\n\t error$$1 = null;\r\n\t }\r\n\t if (error$$1 === null) {\r\n\t _this.onDataUpdate_(pathString, data, /*isMerge=*/ false, tag);\r\n\t }\r\n\t if (util.safeGet(_this.listens_, listenId) === thisListen) {\r\n\t var status_1;\r\n\t if (!error$$1) {\r\n\t status_1 = 'ok';\r\n\t }\r\n\t else if (error$$1 == 401) {\r\n\t status_1 = 'permission_denied';\r\n\t }\r\n\t else {\r\n\t status_1 = 'rest_error:' + error$$1;\r\n\t }\r\n\t onComplete(status_1, null);\r\n\t }\r\n\t });\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ReadonlyRestClient.prototype.unlisten = function (query, tag) {\r\n\t var listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n\t delete this.listens_[listenId];\r\n\t };\r\n\t /** @inheritDoc */\r\n\t ReadonlyRestClient.prototype.refreshAuthToken = function (token) {\r\n\t // no-op since we just always call getToken.\r\n\t };\r\n\t /**\r\n\t * Performs a REST request to the given path, with the provided query string parameters,\r\n\t * and any auth credentials we have.\r\n\t *\r\n\t * @param {!string} pathString\r\n\t * @param {!Object.} queryStringParameters\r\n\t * @param {?function(?number, *=)} callback\r\n\t * @private\r\n\t */\r\n\t ReadonlyRestClient.prototype.restRequest_ = function (pathString, queryStringParameters, callback) {\r\n\t var _this = this;\r\n\t if (queryStringParameters === void 0) { queryStringParameters = {}; }\r\n\t queryStringParameters['format'] = 'export';\r\n\t this.authTokenProvider_\r\n\t .getToken(/*forceRefresh=*/ false)\r\n\t .then(function (authTokenData) {\r\n\t var authToken = authTokenData && authTokenData.accessToken;\r\n\t if (authToken) {\r\n\t queryStringParameters['auth'] = authToken;\r\n\t }\r\n\t var url = (_this.repoInfo_.secure ? 'https://' : 'http://') +\r\n\t _this.repoInfo_.host +\r\n\t pathString +\r\n\t '?' +\r\n\t util.querystring(queryStringParameters);\r\n\t _this.log_('Sending REST request for ' + url);\r\n\t var xhr = new XMLHttpRequest();\r\n\t xhr.onreadystatechange = function () {\r\n\t if (callback && xhr.readyState === 4) {\r\n\t _this.log_('REST Response for ' + url + ' received. status:', xhr.status, 'response:', xhr.responseText);\r\n\t var res = null;\r\n\t if (xhr.status >= 200 && xhr.status < 300) {\r\n\t try {\r\n\t res = util.jsonEval(xhr.responseText);\r\n\t }\r\n\t catch (e) {\r\n\t warn('Failed to parse JSON response for ' +\r\n\t url +\r\n\t ': ' +\r\n\t xhr.responseText);\r\n\t }\r\n\t callback(null, res);\r\n\t }\r\n\t else {\r\n\t // 401 and 404 are expected.\r\n\t if (xhr.status !== 401 && xhr.status !== 404) {\r\n\t warn('Got unsuccessful REST response for ' +\r\n\t url +\r\n\t ' Status: ' +\r\n\t xhr.status);\r\n\t }\r\n\t callback(xhr.status);\r\n\t }\r\n\t callback = null;\r\n\t }\r\n\t };\r\n\t xhr.open('GET', url, /*asynchronous=*/ true);\r\n\t xhr.send();\r\n\t });\r\n\t };\r\n\t return ReadonlyRestClient;\r\n\t}(ServerActions));\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar INTERRUPT_REASON = 'repo_interrupt';\r\n\t/**\r\n\t * A connection to a single data repository.\r\n\t */\r\n\tvar Repo = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!RepoInfo} repoInfo_\r\n\t * @param {boolean} forceRestClient\r\n\t * @param {!FirebaseApp} app\r\n\t */\r\n\t function Repo(repoInfo_, forceRestClient, app) {\r\n\t var _this = this;\r\n\t this.repoInfo_ = repoInfo_;\r\n\t this.app = app;\r\n\t this.dataUpdateCount = 0;\r\n\t this.statsListener_ = null;\r\n\t this.eventQueue_ = new EventQueue();\r\n\t this.nextWriteId_ = 1;\r\n\t this.interceptServerDataCallback_ = null;\r\n\t // A list of data pieces and paths to be set when this client disconnects.\r\n\t this.onDisconnect_ = new SparseSnapshotTree();\r\n\t /**\r\n\t * TODO: This should be @private but it's used by test_access.js and internal.js\r\n\t * @type {?PersistentConnection}\r\n\t */\r\n\t this.persistentConnection_ = null;\r\n\t /** @type {!AuthTokenProvider} */\r\n\t var authTokenProvider = new AuthTokenProvider(app);\r\n\t this.stats_ = StatsManager.getCollection(repoInfo_);\r\n\t if (forceRestClient || beingCrawled()) {\r\n\t this.server_ = new ReadonlyRestClient(this.repoInfo_, this.onDataUpdate_.bind(this), authTokenProvider);\r\n\t // Minor hack: Fire onConnect immediately, since there's no actual connection.\r\n\t setTimeout(this.onConnectStatus_.bind(this, true), 0);\r\n\t }\r\n\t else {\r\n\t var authOverride = app.options['databaseAuthVariableOverride'];\r\n\t // Validate authOverride\r\n\t if (typeof authOverride !== 'undefined' && authOverride !== null) {\r\n\t if (typeof authOverride !== 'object') {\r\n\t throw new Error('Only objects are supported for option databaseAuthVariableOverride');\r\n\t }\r\n\t try {\r\n\t util.stringify(authOverride);\r\n\t }\r\n\t catch (e) {\r\n\t throw new Error('Invalid authOverride provided: ' + e);\r\n\t }\r\n\t }\r\n\t this.persistentConnection_ = new PersistentConnection(this.repoInfo_, this.onDataUpdate_.bind(this), this.onConnectStatus_.bind(this), this.onServerInfoUpdate_.bind(this), authTokenProvider, authOverride);\r\n\t this.server_ = this.persistentConnection_;\r\n\t }\r\n\t authTokenProvider.addTokenChangeListener(function (token) {\r\n\t _this.server_.refreshAuthToken(token);\r\n\t });\r\n\t // In the case of multiple Repos for the same repoInfo (i.e. there are multiple Firebase.Contexts being used),\r\n\t // we only want to create one StatsReporter. As such, we'll report stats over the first Repo created.\r\n\t this.statsReporter_ = StatsManager.getOrCreateReporter(repoInfo_, function () { return new StatsReporter(_this.stats_, _this.server_); });\r\n\t this.transactions_init_();\r\n\t // Used for .info.\r\n\t this.infoData_ = new SnapshotHolder();\r\n\t this.infoSyncTree_ = new SyncTree({\r\n\t startListening: function (query, tag, currentHashFn, onComplete) {\r\n\t var infoEvents = [];\r\n\t var node = _this.infoData_.getNode(query.path);\r\n\t // This is possibly a hack, but we have different semantics for .info endpoints. We don't raise null events\r\n\t // on initial data...\r\n\t if (!node.isEmpty()) {\r\n\t infoEvents = _this.infoSyncTree_.applyServerOverwrite(query.path, node);\r\n\t setTimeout(function () {\r\n\t onComplete('ok');\r\n\t }, 0);\r\n\t }\r\n\t return infoEvents;\r\n\t },\r\n\t stopListening: function () { }\r\n\t });\r\n\t this.updateInfo_('connected', false);\r\n\t this.serverSyncTree_ = new SyncTree({\r\n\t startListening: function (query, tag, currentHashFn, onComplete) {\r\n\t _this.server_.listen(query, currentHashFn, tag, function (status, data) {\r\n\t var events = onComplete(status, data);\r\n\t _this.eventQueue_.raiseEventsForChangedPath(query.path, events);\r\n\t });\r\n\t // No synchronous events for network-backed sync trees\r\n\t return [];\r\n\t },\r\n\t stopListening: function (query, tag) {\r\n\t _this.server_.unlisten(query, tag);\r\n\t }\r\n\t });\r\n\t }\r\n\t /**\r\n\t * @return {string} The URL corresponding to the root of this Firebase.\r\n\t */\r\n\t Repo.prototype.toString = function () {\r\n\t return ((this.repoInfo_.secure ? 'https://' : 'http://') + this.repoInfo_.host);\r\n\t };\r\n\t /**\r\n\t * @return {!string} The namespace represented by the repo.\r\n\t */\r\n\t Repo.prototype.name = function () {\r\n\t return this.repoInfo_.namespace;\r\n\t };\r\n\t /**\r\n\t * @return {!number} The time in milliseconds, taking the server offset into account if we have one.\r\n\t */\r\n\t Repo.prototype.serverTime = function () {\r\n\t var offsetNode = this.infoData_.getNode(new Path('.info/serverTimeOffset'));\r\n\t var offset = offsetNode.val() || 0;\r\n\t return new Date().getTime() + offset;\r\n\t };\r\n\t /**\r\n\t * Generate ServerValues using some variables from the repo object.\r\n\t * @return {!Object}\r\n\t */\r\n\t Repo.prototype.generateServerValues = function () {\r\n\t return generateWithValues({\r\n\t timestamp: this.serverTime()\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Called by realtime when we get new messages from the server.\r\n\t *\r\n\t * @private\r\n\t * @param {string} pathString\r\n\t * @param {*} data\r\n\t * @param {boolean} isMerge\r\n\t * @param {?number} tag\r\n\t */\r\n\t Repo.prototype.onDataUpdate_ = function (pathString, data, isMerge, tag) {\r\n\t // For testing.\r\n\t this.dataUpdateCount++;\r\n\t var path = new Path(pathString);\r\n\t data = this.interceptServerDataCallback_\r\n\t ? this.interceptServerDataCallback_(pathString, data)\r\n\t : data;\r\n\t var events = [];\r\n\t if (tag) {\r\n\t if (isMerge) {\r\n\t var taggedChildren = util.map(data, function (raw) {\r\n\t return nodeFromJSON$1(raw);\r\n\t });\r\n\t events = this.serverSyncTree_.applyTaggedQueryMerge(path, taggedChildren, tag);\r\n\t }\r\n\t else {\r\n\t var taggedSnap = nodeFromJSON$1(data);\r\n\t events = this.serverSyncTree_.applyTaggedQueryOverwrite(path, taggedSnap, tag);\r\n\t }\r\n\t }\r\n\t else if (isMerge) {\r\n\t var changedChildren = util.map(data, function (raw) {\r\n\t return nodeFromJSON$1(raw);\r\n\t });\r\n\t events = this.serverSyncTree_.applyServerMerge(path, changedChildren);\r\n\t }\r\n\t else {\r\n\t var snap = nodeFromJSON$1(data);\r\n\t events = this.serverSyncTree_.applyServerOverwrite(path, snap);\r\n\t }\r\n\t var affectedPath = path;\r\n\t if (events.length > 0) {\r\n\t // Since we have a listener outstanding for each transaction, receiving any events\r\n\t // is a proxy for some change having occurred.\r\n\t affectedPath = this.rerunTransactions_(path);\r\n\t }\r\n\t this.eventQueue_.raiseEventsForChangedPath(affectedPath, events);\r\n\t };\r\n\t /**\r\n\t * TODO: This should be @private but it's used by test_access.js and internal.js\r\n\t * @param {?function(!string, *):*} callback\r\n\t * @private\r\n\t */\r\n\t Repo.prototype.interceptServerData_ = function (callback) {\r\n\t this.interceptServerDataCallback_ = callback;\r\n\t };\r\n\t /**\r\n\t * @param {!boolean} connectStatus\r\n\t * @private\r\n\t */\r\n\t Repo.prototype.onConnectStatus_ = function (connectStatus) {\r\n\t this.updateInfo_('connected', connectStatus);\r\n\t if (connectStatus === false) {\r\n\t this.runOnDisconnectEvents_();\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!Object} updates\r\n\t * @private\r\n\t */\r\n\t Repo.prototype.onServerInfoUpdate_ = function (updates) {\r\n\t var _this = this;\r\n\t each(updates, function (value, key) {\r\n\t _this.updateInfo_(key, value);\r\n\t });\r\n\t };\r\n\t /**\r\n\t *\r\n\t * @param {!string} pathString\r\n\t * @param {*} value\r\n\t * @private\r\n\t */\r\n\t Repo.prototype.updateInfo_ = function (pathString, value) {\r\n\t var path = new Path('/.info/' + pathString);\r\n\t var newNode = nodeFromJSON$1(value);\r\n\t this.infoData_.updateSnapshot(path, newNode);\r\n\t var events = this.infoSyncTree_.applyServerOverwrite(path, newNode);\r\n\t this.eventQueue_.raiseEventsForChangedPath(path, events);\r\n\t };\r\n\t /**\r\n\t * @return {!number}\r\n\t * @private\r\n\t */\r\n\t Repo.prototype.getNextWriteId_ = function () {\r\n\t return this.nextWriteId_++;\r\n\t };\r\n\t /**\r\n\t * @param {!Path} path\r\n\t * @param {*} newVal\r\n\t * @param {number|string|null} newPriority\r\n\t * @param {?function(?Error, *=)} onComplete\r\n\t */\r\n\t Repo.prototype.setWithPriority = function (path, newVal, newPriority, onComplete) {\r\n\t var _this = this;\r\n\t this.log_('set', {\r\n\t path: path.toString(),\r\n\t value: newVal,\r\n\t priority: newPriority\r\n\t });\r\n\t // TODO: Optimize this behavior to either (a) store flag to skip resolving where possible and / or\r\n\t // (b) store unresolved paths on JSON parse\r\n\t var serverValues = this.generateServerValues();\r\n\t var newNodeUnresolved = nodeFromJSON$1(newVal, newPriority);\r\n\t var newNode = resolveDeferredValueSnapshot(newNodeUnresolved, serverValues);\r\n\t var writeId = this.getNextWriteId_();\r\n\t var events = this.serverSyncTree_.applyUserOverwrite(path, newNode, writeId, true);\r\n\t this.eventQueue_.queueEvents(events);\r\n\t this.server_.put(path.toString(), newNodeUnresolved.val(/*export=*/ true), function (status, errorReason) {\r\n\t var success = status === 'ok';\r\n\t if (!success) {\r\n\t warn('set at ' + path + ' failed: ' + status);\r\n\t }\r\n\t var clearEvents = _this.serverSyncTree_.ackUserWrite(writeId, !success);\r\n\t _this.eventQueue_.raiseEventsForChangedPath(path, clearEvents);\r\n\t _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n\t });\r\n\t var affectedPath = this.abortTransactions_(path);\r\n\t this.rerunTransactions_(affectedPath);\r\n\t // We queued the events above, so just flush the queue here\r\n\t this.eventQueue_.raiseEventsForChangedPath(affectedPath, []);\r\n\t };\r\n\t /**\r\n\t * @param {!Path} path\r\n\t * @param {!Object} childrenToMerge\r\n\t * @param {?function(?Error, *=)} onComplete\r\n\t */\r\n\t Repo.prototype.update = function (path, childrenToMerge, onComplete) {\r\n\t var _this = this;\r\n\t this.log_('update', { path: path.toString(), value: childrenToMerge });\r\n\t // Start with our existing data and merge each child into it.\r\n\t var empty = true;\r\n\t var serverValues = this.generateServerValues();\r\n\t var changedChildren = {};\r\n\t util.forEach(childrenToMerge, function (changedKey, changedValue) {\r\n\t empty = false;\r\n\t var newNodeUnresolved = nodeFromJSON$1(changedValue);\r\n\t changedChildren[changedKey] = resolveDeferredValueSnapshot(newNodeUnresolved, serverValues);\r\n\t });\r\n\t if (!empty) {\r\n\t var writeId_1 = this.getNextWriteId_();\r\n\t var events = this.serverSyncTree_.applyUserMerge(path, changedChildren, writeId_1);\r\n\t this.eventQueue_.queueEvents(events);\r\n\t this.server_.merge(path.toString(), childrenToMerge, function (status, errorReason) {\r\n\t var success = status === 'ok';\r\n\t if (!success) {\r\n\t warn('update at ' + path + ' failed: ' + status);\r\n\t }\r\n\t var clearEvents = _this.serverSyncTree_.ackUserWrite(writeId_1, !success);\r\n\t var affectedPath = clearEvents.length > 0 ? _this.rerunTransactions_(path) : path;\r\n\t _this.eventQueue_.raiseEventsForChangedPath(affectedPath, clearEvents);\r\n\t _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n\t });\r\n\t util.forEach(childrenToMerge, function (changedPath) {\r\n\t var affectedPath = _this.abortTransactions_(path.child(changedPath));\r\n\t _this.rerunTransactions_(affectedPath);\r\n\t });\r\n\t // We queued the events above, so just flush the queue here\r\n\t this.eventQueue_.raiseEventsForChangedPath(path, []);\r\n\t }\r\n\t else {\r\n\t log(\"update() called with empty data. Don't do anything.\");\r\n\t this.callOnCompleteCallback(onComplete, 'ok');\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Applies all of the changes stored up in the onDisconnect_ tree.\r\n\t * @private\r\n\t */\r\n\t Repo.prototype.runOnDisconnectEvents_ = function () {\r\n\t var _this = this;\r\n\t this.log_('onDisconnectEvents');\r\n\t var serverValues = this.generateServerValues();\r\n\t var resolvedOnDisconnectTree = resolveDeferredValueTree(this.onDisconnect_, serverValues);\r\n\t var events = [];\r\n\t resolvedOnDisconnectTree.forEachTree(Path.Empty, function (path, snap) {\r\n\t events = events.concat(_this.serverSyncTree_.applyServerOverwrite(path, snap));\r\n\t var affectedPath = _this.abortTransactions_(path);\r\n\t _this.rerunTransactions_(affectedPath);\r\n\t });\r\n\t this.onDisconnect_ = new SparseSnapshotTree();\r\n\t this.eventQueue_.raiseEventsForChangedPath(Path.Empty, events);\r\n\t };\r\n\t /**\r\n\t * @param {!Path} path\r\n\t * @param {?function(?Error, *=)} onComplete\r\n\t */\r\n\t Repo.prototype.onDisconnectCancel = function (path, onComplete) {\r\n\t var _this = this;\r\n\t this.server_.onDisconnectCancel(path.toString(), function (status, errorReason) {\r\n\t if (status === 'ok') {\r\n\t _this.onDisconnect_.forget(path);\r\n\t }\r\n\t _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @param {!Path} path\r\n\t * @param {*} value\r\n\t * @param {?function(?Error, *=)} onComplete\r\n\t */\r\n\t Repo.prototype.onDisconnectSet = function (path, value, onComplete) {\r\n\t var _this = this;\r\n\t var newNode = nodeFromJSON$1(value);\r\n\t this.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), function (status, errorReason) {\r\n\t if (status === 'ok') {\r\n\t _this.onDisconnect_.remember(path, newNode);\r\n\t }\r\n\t _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @param {!Path} path\r\n\t * @param {*} value\r\n\t * @param {*} priority\r\n\t * @param {?function(?Error, *=)} onComplete\r\n\t */\r\n\t Repo.prototype.onDisconnectSetWithPriority = function (path, value, priority, onComplete) {\r\n\t var _this = this;\r\n\t var newNode = nodeFromJSON$1(value, priority);\r\n\t this.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), function (status, errorReason) {\r\n\t if (status === 'ok') {\r\n\t _this.onDisconnect_.remember(path, newNode);\r\n\t }\r\n\t _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @param {!Path} path\r\n\t * @param {*} childrenToMerge\r\n\t * @param {?function(?Error, *=)} onComplete\r\n\t */\r\n\t Repo.prototype.onDisconnectUpdate = function (path, childrenToMerge, onComplete) {\r\n\t var _this = this;\r\n\t if (util.isEmpty(childrenToMerge)) {\r\n\t log(\"onDisconnect().update() called with empty data. Don't do anything.\");\r\n\t this.callOnCompleteCallback(onComplete, 'ok');\r\n\t return;\r\n\t }\r\n\t this.server_.onDisconnectMerge(path.toString(), childrenToMerge, function (status, errorReason) {\r\n\t if (status === 'ok') {\r\n\t util.forEach(childrenToMerge, function (childName, childNode) {\r\n\t var newChildNode = nodeFromJSON$1(childNode);\r\n\t _this.onDisconnect_.remember(path.child(childName), newChildNode);\r\n\t });\r\n\t }\r\n\t _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @param {!Query} query\r\n\t * @param {!EventRegistration} eventRegistration\r\n\t */\r\n\t Repo.prototype.addEventCallbackForQuery = function (query, eventRegistration) {\r\n\t var events;\r\n\t if (query.path.getFront() === '.info') {\r\n\t events = this.infoSyncTree_.addEventRegistration(query, eventRegistration);\r\n\t }\r\n\t else {\r\n\t events = this.serverSyncTree_.addEventRegistration(query, eventRegistration);\r\n\t }\r\n\t this.eventQueue_.raiseEventsAtPath(query.path, events);\r\n\t };\r\n\t /**\r\n\t * @param {!Query} query\r\n\t * @param {?EventRegistration} eventRegistration\r\n\t */\r\n\t Repo.prototype.removeEventCallbackForQuery = function (query, eventRegistration) {\r\n\t // These are guaranteed not to raise events, since we're not passing in a cancelError. However, we can future-proof\r\n\t // a little bit by handling the return values anyways.\r\n\t var events;\r\n\t if (query.path.getFront() === '.info') {\r\n\t events = this.infoSyncTree_.removeEventRegistration(query, eventRegistration);\r\n\t }\r\n\t else {\r\n\t events = this.serverSyncTree_.removeEventRegistration(query, eventRegistration);\r\n\t }\r\n\t this.eventQueue_.raiseEventsAtPath(query.path, events);\r\n\t };\r\n\t Repo.prototype.interrupt = function () {\r\n\t if (this.persistentConnection_) {\r\n\t this.persistentConnection_.interrupt(INTERRUPT_REASON);\r\n\t }\r\n\t };\r\n\t Repo.prototype.resume = function () {\r\n\t if (this.persistentConnection_) {\r\n\t this.persistentConnection_.resume(INTERRUPT_REASON);\r\n\t }\r\n\t };\r\n\t Repo.prototype.stats = function (showDelta) {\r\n\t if (showDelta === void 0) { showDelta = false; }\r\n\t if (typeof console === 'undefined')\r\n\t return;\r\n\t var stats;\r\n\t if (showDelta) {\r\n\t if (!this.statsListener_)\r\n\t this.statsListener_ = new StatsListener(this.stats_);\r\n\t stats = this.statsListener_.get();\r\n\t }\r\n\t else {\r\n\t stats = this.stats_.get();\r\n\t }\r\n\t var longestName = Object.keys(stats).reduce(function (previousValue, currentValue) {\r\n\t return Math.max(currentValue.length, previousValue);\r\n\t }, 0);\r\n\t util.forEach(stats, function (stat, value) {\r\n\t // pad stat names to be the same length (plus 2 extra spaces).\r\n\t for (var i = stat.length; i < longestName + 2; i++)\r\n\t stat += ' ';\r\n\t console.log(stat + value);\r\n\t });\r\n\t };\r\n\t Repo.prototype.statsIncrementCounter = function (metric) {\r\n\t this.stats_.incrementCounter(metric);\r\n\t this.statsReporter_.includeStat(metric);\r\n\t };\r\n\t /**\r\n\t * @param {...*} var_args\r\n\t * @private\r\n\t */\r\n\t Repo.prototype.log_ = function () {\r\n\t var var_args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t var_args[_i] = arguments[_i];\r\n\t }\r\n\t var prefix = '';\r\n\t if (this.persistentConnection_) {\r\n\t prefix = this.persistentConnection_.id + ':';\r\n\t }\r\n\t log.apply(void 0, [prefix].concat(var_args));\r\n\t };\r\n\t /**\r\n\t * @param {?function(?Error, *=)} callback\r\n\t * @param {!string} status\r\n\t * @param {?string=} errorReason\r\n\t */\r\n\t Repo.prototype.callOnCompleteCallback = function (callback, status, errorReason) {\r\n\t if (callback) {\r\n\t exceptionGuard(function () {\r\n\t if (status == 'ok') {\r\n\t callback(null);\r\n\t }\r\n\t else {\r\n\t var code = (status || 'error').toUpperCase();\r\n\t var message = code;\r\n\t if (errorReason)\r\n\t message += ': ' + errorReason;\r\n\t var error$$1 = new Error(message);\r\n\t error$$1.code = code;\r\n\t callback(error$$1);\r\n\t }\r\n\t });\r\n\t }\r\n\t };\r\n\t Object.defineProperty(Repo.prototype, \"database\", {\r\n\t get: function () {\r\n\t return this.__database || (this.__database = new Database(this));\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t return Repo;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Filters nodes by range and uses an IndexFilter to track any changes after filtering the node\r\n\t *\r\n\t * @constructor\r\n\t * @implements {NodeFilter}\r\n\t */\r\n\tvar RangedFilter = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!QueryParams} params\r\n\t */\r\n\t function RangedFilter(params) {\r\n\t this.indexedFilter_ = new IndexedFilter(params.getIndex());\r\n\t this.index_ = params.getIndex();\r\n\t this.startPost_ = RangedFilter.getStartPost_(params);\r\n\t this.endPost_ = RangedFilter.getEndPost_(params);\r\n\t }\r\n\t /**\r\n\t * @return {!NamedNode}\r\n\t */\r\n\t RangedFilter.prototype.getStartPost = function () {\r\n\t return this.startPost_;\r\n\t };\r\n\t /**\r\n\t * @return {!NamedNode}\r\n\t */\r\n\t RangedFilter.prototype.getEndPost = function () {\r\n\t return this.endPost_;\r\n\t };\r\n\t /**\r\n\t * @param {!NamedNode} node\r\n\t * @return {boolean}\r\n\t */\r\n\t RangedFilter.prototype.matches = function (node) {\r\n\t return (this.index_.compare(this.getStartPost(), node) <= 0 &&\r\n\t this.index_.compare(node, this.getEndPost()) <= 0);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t RangedFilter.prototype.updateChild = function (snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n\t if (!this.matches(new NamedNode(key, newChild))) {\r\n\t newChild = ChildrenNode.EMPTY_NODE;\r\n\t }\r\n\t return this.indexedFilter_.updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t RangedFilter.prototype.updateFullNode = function (oldSnap, newSnap, optChangeAccumulator) {\r\n\t if (newSnap.isLeafNode()) {\r\n\t // Make sure we have a children node with the correct index, not a leaf node;\r\n\t newSnap = ChildrenNode.EMPTY_NODE;\r\n\t }\r\n\t var filtered = newSnap.withIndex(this.index_);\r\n\t // Don't support priorities on queries\r\n\t filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n\t var self = this;\r\n\t newSnap.forEachChild(PRIORITY_INDEX, function (key, childNode) {\r\n\t if (!self.matches(new NamedNode(key, childNode))) {\r\n\t filtered = filtered.updateImmediateChild(key, ChildrenNode.EMPTY_NODE);\r\n\t }\r\n\t });\r\n\t return this.indexedFilter_.updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t RangedFilter.prototype.updatePriority = function (oldSnap, newPriority) {\r\n\t // Don't support priorities on queries\r\n\t return oldSnap;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t RangedFilter.prototype.filtersNodes = function () {\r\n\t return true;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t RangedFilter.prototype.getIndexedFilter = function () {\r\n\t return this.indexedFilter_;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t RangedFilter.prototype.getIndex = function () {\r\n\t return this.index_;\r\n\t };\r\n\t /**\r\n\t * @param {!QueryParams} params\r\n\t * @return {!NamedNode}\r\n\t * @private\r\n\t */\r\n\t RangedFilter.getStartPost_ = function (params) {\r\n\t if (params.hasStart()) {\r\n\t var startName = params.getIndexStartName();\r\n\t return params.getIndex().makePost(params.getIndexStartValue(), startName);\r\n\t }\r\n\t else {\r\n\t return params.getIndex().minPost();\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param {!QueryParams} params\r\n\t * @return {!NamedNode}\r\n\t * @private\r\n\t */\r\n\t RangedFilter.getEndPost_ = function (params) {\r\n\t if (params.hasEnd()) {\r\n\t var endName = params.getIndexEndName();\r\n\t return params.getIndex().makePost(params.getIndexEndValue(), endName);\r\n\t }\r\n\t else {\r\n\t return params.getIndex().maxPost();\r\n\t }\r\n\t };\r\n\t return RangedFilter;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Applies a limit and a range to a node and uses RangedFilter to do the heavy lifting where possible\r\n\t *\r\n\t * @constructor\r\n\t * @implements {NodeFilter}\r\n\t */\r\n\tvar LimitedFilter = /** @class */ (function () {\r\n\t /**\r\n\t * @param {!QueryParams} params\r\n\t */\r\n\t function LimitedFilter(params) {\r\n\t this.rangedFilter_ = new RangedFilter(params);\r\n\t this.index_ = params.getIndex();\r\n\t this.limit_ = params.getLimit();\r\n\t this.reverse_ = !params.isViewFromLeft();\r\n\t }\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t LimitedFilter.prototype.updateChild = function (snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n\t if (!this.rangedFilter_.matches(new NamedNode(key, newChild))) {\r\n\t newChild = ChildrenNode.EMPTY_NODE;\r\n\t }\r\n\t if (snap.getImmediateChild(key).equals(newChild)) {\r\n\t // No change\r\n\t return snap;\r\n\t }\r\n\t else if (snap.numChildren() < this.limit_) {\r\n\t return this.rangedFilter_\r\n\t .getIndexedFilter()\r\n\t .updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n\t }\r\n\t else {\r\n\t return this.fullLimitUpdateChild_(snap, key, newChild, source, optChangeAccumulator);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t LimitedFilter.prototype.updateFullNode = function (oldSnap, newSnap, optChangeAccumulator) {\r\n\t var filtered;\r\n\t if (newSnap.isLeafNode() || newSnap.isEmpty()) {\r\n\t // Make sure we have a children node with the correct index, not a leaf node;\r\n\t filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n\t }\r\n\t else {\r\n\t if (this.limit_ * 2 < newSnap.numChildren() &&\r\n\t newSnap.isIndexed(this.index_)) {\r\n\t // Easier to build up a snapshot, since what we're given has more than twice the elements we want\r\n\t filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n\t // anchor to the startPost, endPost, or last element as appropriate\r\n\t var iterator = void 0;\r\n\t if (this.reverse_) {\r\n\t iterator = newSnap.getReverseIteratorFrom(this.rangedFilter_.getEndPost(), this.index_);\r\n\t }\r\n\t else {\r\n\t iterator = newSnap.getIteratorFrom(this.rangedFilter_.getStartPost(), this.index_);\r\n\t }\r\n\t var count = 0;\r\n\t while (iterator.hasNext() && count < this.limit_) {\r\n\t var next = iterator.getNext();\r\n\t var inRange = void 0;\r\n\t if (this.reverse_) {\r\n\t inRange =\r\n\t this.index_.compare(this.rangedFilter_.getStartPost(), next) <= 0;\r\n\t }\r\n\t else {\r\n\t inRange =\r\n\t this.index_.compare(next, this.rangedFilter_.getEndPost()) <= 0;\r\n\t }\r\n\t if (inRange) {\r\n\t filtered = filtered.updateImmediateChild(next.name, next.node);\r\n\t count++;\r\n\t }\r\n\t else {\r\n\t // if we have reached the end post, we cannot keep adding elemments\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t // The snap contains less than twice the limit. Faster to delete from the snap than build up a new one\r\n\t filtered = newSnap.withIndex(this.index_);\r\n\t // Don't support priorities on queries\r\n\t filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n\t var startPost = void 0;\r\n\t var endPost = void 0;\r\n\t var cmp = void 0;\r\n\t var iterator = void 0;\r\n\t if (this.reverse_) {\r\n\t iterator = filtered.getReverseIterator(this.index_);\r\n\t startPost = this.rangedFilter_.getEndPost();\r\n\t endPost = this.rangedFilter_.getStartPost();\r\n\t var indexCompare_1 = this.index_.getCompare();\r\n\t cmp = function (a, b) { return indexCompare_1(b, a); };\r\n\t }\r\n\t else {\r\n\t iterator = filtered.getIterator(this.index_);\r\n\t startPost = this.rangedFilter_.getStartPost();\r\n\t endPost = this.rangedFilter_.getEndPost();\r\n\t cmp = this.index_.getCompare();\r\n\t }\r\n\t var count = 0;\r\n\t var foundStartPost = false;\r\n\t while (iterator.hasNext()) {\r\n\t var next = iterator.getNext();\r\n\t if (!foundStartPost && cmp(startPost, next) <= 0) {\r\n\t // start adding\r\n\t foundStartPost = true;\r\n\t }\r\n\t var inRange = foundStartPost && count < this.limit_ && cmp(next, endPost) <= 0;\r\n\t if (inRange) {\r\n\t count++;\r\n\t }\r\n\t else {\r\n\t filtered = filtered.updateImmediateChild(next.name, ChildrenNode.EMPTY_NODE);\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t return this.rangedFilter_\r\n\t .getIndexedFilter()\r\n\t .updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t LimitedFilter.prototype.updatePriority = function (oldSnap, newPriority) {\r\n\t // Don't support priorities on queries\r\n\t return oldSnap;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t LimitedFilter.prototype.filtersNodes = function () {\r\n\t return true;\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t LimitedFilter.prototype.getIndexedFilter = function () {\r\n\t return this.rangedFilter_.getIndexedFilter();\r\n\t };\r\n\t /**\r\n\t * @inheritDoc\r\n\t */\r\n\t LimitedFilter.prototype.getIndex = function () {\r\n\t return this.index_;\r\n\t };\r\n\t /**\r\n\t * @param {!Node} snap\r\n\t * @param {string} childKey\r\n\t * @param {!Node} childSnap\r\n\t * @param {!CompleteChildSource} source\r\n\t * @param {?ChildChangeAccumulator} changeAccumulator\r\n\t * @return {!Node}\r\n\t * @private\r\n\t */\r\n\t LimitedFilter.prototype.fullLimitUpdateChild_ = function (snap, childKey, childSnap, source, changeAccumulator) {\r\n\t // TODO: rename all cache stuff etc to general snap terminology\r\n\t var cmp;\r\n\t if (this.reverse_) {\r\n\t var indexCmp_1 = this.index_.getCompare();\r\n\t cmp = function (a, b) { return indexCmp_1(b, a); };\r\n\t }\r\n\t else {\r\n\t cmp = this.index_.getCompare();\r\n\t }\r\n\t var oldEventCache = snap;\r\n\t util.assert(oldEventCache.numChildren() == this.limit_, '');\r\n\t var newChildNamedNode = new NamedNode(childKey, childSnap);\r\n\t var windowBoundary = this.reverse_\r\n\t ? oldEventCache.getFirstChild(this.index_)\r\n\t : oldEventCache.getLastChild(this.index_);\r\n\t var inRange = this.rangedFilter_.matches(newChildNamedNode);\r\n\t if (oldEventCache.hasChild(childKey)) {\r\n\t var oldChildSnap = oldEventCache.getImmediateChild(childKey);\r\n\t var nextChild = source.getChildAfterChild(this.index_, windowBoundary, this.reverse_);\r\n\t while (nextChild != null &&\r\n\t (nextChild.name == childKey || oldEventCache.hasChild(nextChild.name))) {\r\n\t // There is a weird edge case where a node is updated as part of a merge in the write tree, but hasn't\r\n\t // been applied to the limited filter yet. Ignore this next child which will be updated later in\r\n\t // the limited filter...\r\n\t nextChild = source.getChildAfterChild(this.index_, nextChild, this.reverse_);\r\n\t }\r\n\t var compareNext = nextChild == null ? 1 : cmp(nextChild, newChildNamedNode);\r\n\t var remainsInWindow = inRange && !childSnap.isEmpty() && compareNext >= 0;\r\n\t if (remainsInWindow) {\r\n\t if (changeAccumulator != null) {\r\n\t changeAccumulator.trackChildChange(Change.childChangedChange(childKey, childSnap, oldChildSnap));\r\n\t }\r\n\t return oldEventCache.updateImmediateChild(childKey, childSnap);\r\n\t }\r\n\t else {\r\n\t if (changeAccumulator != null) {\r\n\t changeAccumulator.trackChildChange(Change.childRemovedChange(childKey, oldChildSnap));\r\n\t }\r\n\t var newEventCache = oldEventCache.updateImmediateChild(childKey, ChildrenNode.EMPTY_NODE);\r\n\t var nextChildInRange = nextChild != null && this.rangedFilter_.matches(nextChild);\r\n\t if (nextChildInRange) {\r\n\t if (changeAccumulator != null) {\r\n\t changeAccumulator.trackChildChange(Change.childAddedChange(nextChild.name, nextChild.node));\r\n\t }\r\n\t return newEventCache.updateImmediateChild(nextChild.name, nextChild.node);\r\n\t }\r\n\t else {\r\n\t return newEventCache;\r\n\t }\r\n\t }\r\n\t }\r\n\t else if (childSnap.isEmpty()) {\r\n\t // we're deleting a node, but it was not in the window, so ignore it\r\n\t return snap;\r\n\t }\r\n\t else if (inRange) {\r\n\t if (cmp(windowBoundary, newChildNamedNode) >= 0) {\r\n\t if (changeAccumulator != null) {\r\n\t changeAccumulator.trackChildChange(Change.childRemovedChange(windowBoundary.name, windowBoundary.node));\r\n\t changeAccumulator.trackChildChange(Change.childAddedChange(childKey, childSnap));\r\n\t }\r\n\t return oldEventCache\r\n\t .updateImmediateChild(childKey, childSnap)\r\n\t .updateImmediateChild(windowBoundary.name, ChildrenNode.EMPTY_NODE);\r\n\t }\r\n\t else {\r\n\t return snap;\r\n\t }\r\n\t }\r\n\t else {\r\n\t return snap;\r\n\t }\r\n\t };\r\n\t return LimitedFilter;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * This class is an immutable-from-the-public-api struct containing a set of query parameters defining a\r\n\t * range to be returned for a particular location. It is assumed that validation of parameters is done at the\r\n\t * user-facing API level, so it is not done here.\r\n\t * @constructor\r\n\t */\r\n\tvar QueryParams = /** @class */ (function () {\r\n\t function QueryParams() {\r\n\t this.limitSet_ = false;\r\n\t this.startSet_ = false;\r\n\t this.startNameSet_ = false;\r\n\t this.endSet_ = false;\r\n\t this.endNameSet_ = false;\r\n\t this.limit_ = 0;\r\n\t this.viewFrom_ = '';\r\n\t this.indexStartValue_ = null;\r\n\t this.indexStartName_ = '';\r\n\t this.indexEndValue_ = null;\r\n\t this.indexEndName_ = '';\r\n\t this.index_ = PRIORITY_INDEX;\r\n\t }\r\n\t /**\r\n\t * @return {boolean}\r\n\t */\r\n\t QueryParams.prototype.hasStart = function () {\r\n\t return this.startSet_;\r\n\t };\r\n\t /**\r\n\t * @return {boolean} True if it would return from left.\r\n\t */\r\n\t QueryParams.prototype.isViewFromLeft = function () {\r\n\t if (this.viewFrom_ === '') {\r\n\t // limit(), rather than limitToFirst or limitToLast was called.\r\n\t // This means that only one of startSet_ and endSet_ is true. Use them\r\n\t // to calculate which side of the view to anchor to. If neither is set,\r\n\t // anchor to the end.\r\n\t return this.startSet_;\r\n\t }\r\n\t else {\r\n\t return (this.viewFrom_ === QueryParams.WIRE_PROTOCOL_CONSTANTS_.VIEW_FROM_LEFT);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Only valid to call if hasStart() returns true\r\n\t * @return {*}\r\n\t */\r\n\t QueryParams.prototype.getIndexStartValue = function () {\r\n\t util.assert(this.startSet_, 'Only valid if start has been set');\r\n\t return this.indexStartValue_;\r\n\t };\r\n\t /**\r\n\t * Only valid to call if hasStart() returns true.\r\n\t * Returns the starting key name for the range defined by these query parameters\r\n\t * @return {!string}\r\n\t */\r\n\t QueryParams.prototype.getIndexStartName = function () {\r\n\t util.assert(this.startSet_, 'Only valid if start has been set');\r\n\t if (this.startNameSet_) {\r\n\t return this.indexStartName_;\r\n\t }\r\n\t else {\r\n\t return MIN_NAME;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @return {boolean}\r\n\t */\r\n\t QueryParams.prototype.hasEnd = function () {\r\n\t return this.endSet_;\r\n\t };\r\n\t /**\r\n\t * Only valid to call if hasEnd() returns true.\r\n\t * @return {*}\r\n\t */\r\n\t QueryParams.prototype.getIndexEndValue = function () {\r\n\t util.assert(this.endSet_, 'Only valid if end has been set');\r\n\t return this.indexEndValue_;\r\n\t };\r\n\t /**\r\n\t * Only valid to call if hasEnd() returns true.\r\n\t * Returns the end key name for the range defined by these query parameters\r\n\t * @return {!string}\r\n\t */\r\n\t QueryParams.prototype.getIndexEndName = function () {\r\n\t util.assert(this.endSet_, 'Only valid if end has been set');\r\n\t if (this.endNameSet_) {\r\n\t return this.indexEndName_;\r\n\t }\r\n\t else {\r\n\t return MAX_NAME;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @return {boolean}\r\n\t */\r\n\t QueryParams.prototype.hasLimit = function () {\r\n\t return this.limitSet_;\r\n\t };\r\n\t /**\r\n\t * @return {boolean} True if a limit has been set and it has been explicitly anchored\r\n\t */\r\n\t QueryParams.prototype.hasAnchoredLimit = function () {\r\n\t return this.limitSet_ && this.viewFrom_ !== '';\r\n\t };\r\n\t /**\r\n\t * Only valid to call if hasLimit() returns true\r\n\t * @return {!number}\r\n\t */\r\n\t QueryParams.prototype.getLimit = function () {\r\n\t util.assert(this.limitSet_, 'Only valid if limit has been set');\r\n\t return this.limit_;\r\n\t };\r\n\t /**\r\n\t * @return {!Index}\r\n\t */\r\n\t QueryParams.prototype.getIndex = function () {\r\n\t return this.index_;\r\n\t };\r\n\t /**\r\n\t * @return {!QueryParams}\r\n\t * @private\r\n\t */\r\n\t QueryParams.prototype.copy_ = function () {\r\n\t var copy = new QueryParams();\r\n\t copy.limitSet_ = this.limitSet_;\r\n\t copy.limit_ = this.limit_;\r\n\t copy.startSet_ = this.startSet_;\r\n\t copy.indexStartValue_ = this.indexStartValue_;\r\n\t copy.startNameSet_ = this.startNameSet_;\r\n\t copy.indexStartName_ = this.indexStartName_;\r\n\t copy.endSet_ = this.endSet_;\r\n\t copy.indexEndValue_ = this.indexEndValue_;\r\n\t copy.endNameSet_ = this.endNameSet_;\r\n\t copy.indexEndName_ = this.indexEndName_;\r\n\t copy.index_ = this.index_;\r\n\t copy.viewFrom_ = this.viewFrom_;\r\n\t return copy;\r\n\t };\r\n\t /**\r\n\t * @param {!number} newLimit\r\n\t * @return {!QueryParams}\r\n\t */\r\n\t QueryParams.prototype.limit = function (newLimit) {\r\n\t var newParams = this.copy_();\r\n\t newParams.limitSet_ = true;\r\n\t newParams.limit_ = newLimit;\r\n\t newParams.viewFrom_ = '';\r\n\t return newParams;\r\n\t };\r\n\t /**\r\n\t * @param {!number} newLimit\r\n\t * @return {!QueryParams}\r\n\t */\r\n\t QueryParams.prototype.limitToFirst = function (newLimit) {\r\n\t var newParams = this.copy_();\r\n\t newParams.limitSet_ = true;\r\n\t newParams.limit_ = newLimit;\r\n\t newParams.viewFrom_ = QueryParams.WIRE_PROTOCOL_CONSTANTS_.VIEW_FROM_LEFT;\r\n\t return newParams;\r\n\t };\r\n\t /**\r\n\t * @param {!number} newLimit\r\n\t * @return {!QueryParams}\r\n\t */\r\n\t QueryParams.prototype.limitToLast = function (newLimit) {\r\n\t var newParams = this.copy_();\r\n\t newParams.limitSet_ = true;\r\n\t newParams.limit_ = newLimit;\r\n\t newParams.viewFrom_ = QueryParams.WIRE_PROTOCOL_CONSTANTS_.VIEW_FROM_RIGHT;\r\n\t return newParams;\r\n\t };\r\n\t /**\r\n\t * @param {*} indexValue\r\n\t * @param {?string=} key\r\n\t * @return {!QueryParams}\r\n\t */\r\n\t QueryParams.prototype.startAt = function (indexValue, key) {\r\n\t var newParams = this.copy_();\r\n\t newParams.startSet_ = true;\r\n\t if (!(indexValue !== undefined)) {\r\n\t indexValue = null;\r\n\t }\r\n\t newParams.indexStartValue_ = indexValue;\r\n\t if (key != null) {\r\n\t newParams.startNameSet_ = true;\r\n\t newParams.indexStartName_ = key;\r\n\t }\r\n\t else {\r\n\t newParams.startNameSet_ = false;\r\n\t newParams.indexStartName_ = '';\r\n\t }\r\n\t return newParams;\r\n\t };\r\n\t /**\r\n\t * @param {*} indexValue\r\n\t * @param {?string=} key\r\n\t * @return {!QueryParams}\r\n\t */\r\n\t QueryParams.prototype.endAt = function (indexValue, key) {\r\n\t var newParams = this.copy_();\r\n\t newParams.endSet_ = true;\r\n\t if (!(indexValue !== undefined)) {\r\n\t indexValue = null;\r\n\t }\r\n\t newParams.indexEndValue_ = indexValue;\r\n\t if (key !== undefined) {\r\n\t newParams.endNameSet_ = true;\r\n\t newParams.indexEndName_ = key;\r\n\t }\r\n\t else {\r\n\t newParams.endNameSet_ = false;\r\n\t newParams.indexEndName_ = '';\r\n\t }\r\n\t return newParams;\r\n\t };\r\n\t /**\r\n\t * @param {!Index} index\r\n\t * @return {!QueryParams}\r\n\t */\r\n\t QueryParams.prototype.orderBy = function (index) {\r\n\t var newParams = this.copy_();\r\n\t newParams.index_ = index;\r\n\t return newParams;\r\n\t };\r\n\t /**\r\n\t * @return {!Object}\r\n\t */\r\n\t QueryParams.prototype.getQueryObject = function () {\r\n\t var WIRE_PROTOCOL_CONSTANTS = QueryParams.WIRE_PROTOCOL_CONSTANTS_;\r\n\t var obj = {};\r\n\t if (this.startSet_) {\r\n\t obj[WIRE_PROTOCOL_CONSTANTS.INDEX_START_VALUE] = this.indexStartValue_;\r\n\t if (this.startNameSet_) {\r\n\t obj[WIRE_PROTOCOL_CONSTANTS.INDEX_START_NAME] = this.indexStartName_;\r\n\t }\r\n\t }\r\n\t if (this.endSet_) {\r\n\t obj[WIRE_PROTOCOL_CONSTANTS.INDEX_END_VALUE] = this.indexEndValue_;\r\n\t if (this.endNameSet_) {\r\n\t obj[WIRE_PROTOCOL_CONSTANTS.INDEX_END_NAME] = this.indexEndName_;\r\n\t }\r\n\t }\r\n\t if (this.limitSet_) {\r\n\t obj[WIRE_PROTOCOL_CONSTANTS.LIMIT] = this.limit_;\r\n\t var viewFrom = this.viewFrom_;\r\n\t if (viewFrom === '') {\r\n\t if (this.isViewFromLeft()) {\r\n\t viewFrom = WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT;\r\n\t }\r\n\t else {\r\n\t viewFrom = WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT;\r\n\t }\r\n\t }\r\n\t obj[WIRE_PROTOCOL_CONSTANTS.VIEW_FROM] = viewFrom;\r\n\t }\r\n\t // For now, priority index is the default, so we only specify if it's some other index\r\n\t if (this.index_ !== PRIORITY_INDEX) {\r\n\t obj[WIRE_PROTOCOL_CONSTANTS.INDEX] = this.index_.toString();\r\n\t }\r\n\t return obj;\r\n\t };\r\n\t /**\r\n\t * @return {boolean}\r\n\t */\r\n\t QueryParams.prototype.loadsAllData = function () {\r\n\t return !(this.startSet_ || this.endSet_ || this.limitSet_);\r\n\t };\r\n\t /**\r\n\t * @return {boolean}\r\n\t */\r\n\t QueryParams.prototype.isDefault = function () {\r\n\t return this.loadsAllData() && this.index_ == PRIORITY_INDEX;\r\n\t };\r\n\t /**\r\n\t * @return {!NodeFilter}\r\n\t */\r\n\t QueryParams.prototype.getNodeFilter = function () {\r\n\t if (this.loadsAllData()) {\r\n\t return new IndexedFilter(this.getIndex());\r\n\t }\r\n\t else if (this.hasLimit()) {\r\n\t return new LimitedFilter(this);\r\n\t }\r\n\t else {\r\n\t return new RangedFilter(this);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Returns a set of REST query string parameters representing this query.\r\n\t *\r\n\t * @return {!Object.} query string parameters\r\n\t */\r\n\t QueryParams.prototype.toRestQueryStringParameters = function () {\r\n\t var REST_CONSTANTS = QueryParams.REST_QUERY_CONSTANTS_;\r\n\t var qs = {};\r\n\t if (this.isDefault()) {\r\n\t return qs;\r\n\t }\r\n\t var orderBy;\r\n\t if (this.index_ === PRIORITY_INDEX) {\r\n\t orderBy = REST_CONSTANTS.PRIORITY_INDEX;\r\n\t }\r\n\t else if (this.index_ === VALUE_INDEX) {\r\n\t orderBy = REST_CONSTANTS.VALUE_INDEX;\r\n\t }\r\n\t else if (this.index_ === KEY_INDEX) {\r\n\t orderBy = REST_CONSTANTS.KEY_INDEX;\r\n\t }\r\n\t else {\r\n\t util.assert(this.index_ instanceof PathIndex, 'Unrecognized index type!');\r\n\t orderBy = this.index_.toString();\r\n\t }\r\n\t qs[REST_CONSTANTS.ORDER_BY] = util.stringify(orderBy);\r\n\t if (this.startSet_) {\r\n\t qs[REST_CONSTANTS.START_AT] = util.stringify(this.indexStartValue_);\r\n\t if (this.startNameSet_) {\r\n\t qs[REST_CONSTANTS.START_AT] += ',' + util.stringify(this.indexStartName_);\r\n\t }\r\n\t }\r\n\t if (this.endSet_) {\r\n\t qs[REST_CONSTANTS.END_AT] = util.stringify(this.indexEndValue_);\r\n\t if (this.endNameSet_) {\r\n\t qs[REST_CONSTANTS.END_AT] += ',' + util.stringify(this.indexEndName_);\r\n\t }\r\n\t }\r\n\t if (this.limitSet_) {\r\n\t if (this.isViewFromLeft()) {\r\n\t qs[REST_CONSTANTS.LIMIT_TO_FIRST] = this.limit_;\r\n\t }\r\n\t else {\r\n\t qs[REST_CONSTANTS.LIMIT_TO_LAST] = this.limit_;\r\n\t }\r\n\t }\r\n\t return qs;\r\n\t };\r\n\t /**\r\n\t * Wire Protocol Constants\r\n\t * @const\r\n\t * @enum {string}\r\n\t * @private\r\n\t */\r\n\t QueryParams.WIRE_PROTOCOL_CONSTANTS_ = {\r\n\t INDEX_START_VALUE: 'sp',\r\n\t INDEX_START_NAME: 'sn',\r\n\t INDEX_END_VALUE: 'ep',\r\n\t INDEX_END_NAME: 'en',\r\n\t LIMIT: 'l',\r\n\t VIEW_FROM: 'vf',\r\n\t VIEW_FROM_LEFT: 'l',\r\n\t VIEW_FROM_RIGHT: 'r',\r\n\t INDEX: 'i'\r\n\t };\r\n\t /**\r\n\t * REST Query Constants\r\n\t * @const\r\n\t * @enum {string}\r\n\t * @private\r\n\t */\r\n\t QueryParams.REST_QUERY_CONSTANTS_ = {\r\n\t ORDER_BY: 'orderBy',\r\n\t PRIORITY_INDEX: '$priority',\r\n\t VALUE_INDEX: '$value',\r\n\t KEY_INDEX: '$key',\r\n\t START_AT: 'startAt',\r\n\t END_AT: 'endAt',\r\n\t LIMIT_TO_FIRST: 'limitToFirst',\r\n\t LIMIT_TO_LAST: 'limitToLast'\r\n\t };\r\n\t /**\r\n\t * Default, empty query parameters\r\n\t * @type {!QueryParams}\r\n\t * @const\r\n\t */\r\n\t QueryParams.DEFAULT = new QueryParams();\r\n\t return QueryParams;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar Reference = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(Reference, _super);\r\n\t /**\r\n\t * Call options:\r\n\t * new Reference(Repo, Path) or\r\n\t * new Reference(url: string, string|RepoManager)\r\n\t *\r\n\t * Externally - this is the firebase.database.Reference type.\r\n\t *\r\n\t * @param {!Repo} repo\r\n\t * @param {(!Path)} path\r\n\t * @extends {Query}\r\n\t */\r\n\t function Reference(repo, path) {\r\n\t var _this = this;\r\n\t if (!(repo instanceof Repo)) {\r\n\t throw new Error('new Reference() no longer supported - use app.database().');\r\n\t }\r\n\t // call Query's constructor, passing in the repo and path.\r\n\t _this = _super.call(this, repo, path, QueryParams.DEFAULT, false) || this;\r\n\t return _this;\r\n\t }\r\n\t /** @return {?string} */\r\n\t Reference.prototype.getKey = function () {\r\n\t util.validateArgCount('Reference.key', 0, 0, arguments.length);\r\n\t if (this.path.isEmpty())\r\n\t return null;\r\n\t else\r\n\t return this.path.getBack();\r\n\t };\r\n\t /**\r\n\t * @param {!(string|Path)} pathString\r\n\t * @return {!Reference}\r\n\t */\r\n\t Reference.prototype.child = function (pathString) {\r\n\t util.validateArgCount('Reference.child', 1, 1, arguments.length);\r\n\t if (typeof pathString === 'number') {\r\n\t pathString = String(pathString);\r\n\t }\r\n\t else if (!(pathString instanceof Path)) {\r\n\t if (this.path.getFront() === null)\r\n\t validateRootPathString('Reference.child', 1, pathString, false);\r\n\t else\r\n\t validatePathString('Reference.child', 1, pathString, false);\r\n\t }\r\n\t return new Reference(this.repo, this.path.child(pathString));\r\n\t };\r\n\t /** @return {?Reference} */\r\n\t Reference.prototype.getParent = function () {\r\n\t util.validateArgCount('Reference.parent', 0, 0, arguments.length);\r\n\t var parentPath = this.path.parent();\r\n\t return parentPath === null ? null : new Reference(this.repo, parentPath);\r\n\t };\r\n\t /** @return {!Reference} */\r\n\t Reference.prototype.getRoot = function () {\r\n\t util.validateArgCount('Reference.root', 0, 0, arguments.length);\r\n\t var ref = this;\r\n\t while (ref.getParent() !== null) {\r\n\t ref = ref.getParent();\r\n\t }\r\n\t return ref;\r\n\t };\r\n\t /** @return {!Database} */\r\n\t Reference.prototype.databaseProp = function () {\r\n\t return this.repo.database;\r\n\t };\r\n\t /**\r\n\t * @param {*} newVal\r\n\t * @param {function(?Error)=} onComplete\r\n\t * @return {!Promise}\r\n\t */\r\n\t Reference.prototype.set = function (newVal, onComplete) {\r\n\t util.validateArgCount('Reference.set', 1, 2, arguments.length);\r\n\t validateWritablePath('Reference.set', this.path);\r\n\t validateFirebaseDataArg('Reference.set', 1, newVal, this.path, false);\r\n\t util.validateCallback('Reference.set', 2, onComplete, true);\r\n\t var deferred = new util.Deferred();\r\n\t this.repo.setWithPriority(this.path, newVal, \r\n\t /*priority=*/ null, deferred.wrapCallback(onComplete));\r\n\t return deferred.promise;\r\n\t };\r\n\t /**\r\n\t * @param {!Object} objectToMerge\r\n\t * @param {function(?Error)=} onComplete\r\n\t * @return {!Promise}\r\n\t */\r\n\t Reference.prototype.update = function (objectToMerge, onComplete) {\r\n\t util.validateArgCount('Reference.update', 1, 2, arguments.length);\r\n\t validateWritablePath('Reference.update', this.path);\r\n\t if (Array.isArray(objectToMerge)) {\r\n\t var newObjectToMerge = {};\r\n\t for (var i = 0; i < objectToMerge.length; ++i) {\r\n\t newObjectToMerge['' + i] = objectToMerge[i];\r\n\t }\r\n\t objectToMerge = newObjectToMerge;\r\n\t warn('Passing an Array to Firebase.update() is deprecated. ' +\r\n\t 'Use set() if you want to overwrite the existing data, or ' +\r\n\t 'an Object with integer keys if you really do want to ' +\r\n\t 'only update some of the children.');\r\n\t }\r\n\t validateFirebaseMergeDataArg('Reference.update', 1, objectToMerge, this.path, false);\r\n\t util.validateCallback('Reference.update', 2, onComplete, true);\r\n\t var deferred = new util.Deferred();\r\n\t this.repo.update(this.path, objectToMerge, deferred.wrapCallback(onComplete));\r\n\t return deferred.promise;\r\n\t };\r\n\t /**\r\n\t * @param {*} newVal\r\n\t * @param {string|number|null} newPriority\r\n\t * @param {function(?Error)=} onComplete\r\n\t * @return {!Promise}\r\n\t */\r\n\t Reference.prototype.setWithPriority = function (newVal, newPriority, onComplete) {\r\n\t util.validateArgCount('Reference.setWithPriority', 2, 3, arguments.length);\r\n\t validateWritablePath('Reference.setWithPriority', this.path);\r\n\t validateFirebaseDataArg('Reference.setWithPriority', 1, newVal, this.path, false);\r\n\t validatePriority('Reference.setWithPriority', 2, newPriority, false);\r\n\t util.validateCallback('Reference.setWithPriority', 3, onComplete, true);\r\n\t if (this.getKey() === '.length' || this.getKey() === '.keys')\r\n\t throw 'Reference.setWithPriority failed: ' +\r\n\t this.getKey() +\r\n\t ' is a read-only object.';\r\n\t var deferred = new util.Deferred();\r\n\t this.repo.setWithPriority(this.path, newVal, newPriority, deferred.wrapCallback(onComplete));\r\n\t return deferred.promise;\r\n\t };\r\n\t /**\r\n\t * @param {function(?Error)=} onComplete\r\n\t * @return {!Promise}\r\n\t */\r\n\t Reference.prototype.remove = function (onComplete) {\r\n\t util.validateArgCount('Reference.remove', 0, 1, arguments.length);\r\n\t validateWritablePath('Reference.remove', this.path);\r\n\t util.validateCallback('Reference.remove', 1, onComplete, true);\r\n\t return this.set(null, onComplete);\r\n\t };\r\n\t /**\r\n\t * @param {function(*):*} transactionUpdate\r\n\t * @param {(function(?Error, boolean, ?DataSnapshot))=} onComplete\r\n\t * @param {boolean=} applyLocally\r\n\t * @return {!Promise}\r\n\t */\r\n\t Reference.prototype.transaction = function (transactionUpdate, onComplete, applyLocally) {\r\n\t util.validateArgCount('Reference.transaction', 1, 3, arguments.length);\r\n\t validateWritablePath('Reference.transaction', this.path);\r\n\t util.validateCallback('Reference.transaction', 1, transactionUpdate, false);\r\n\t util.validateCallback('Reference.transaction', 2, onComplete, true);\r\n\t // NOTE: applyLocally is an internal-only option for now. We need to decide if we want to keep it and how\r\n\t // to expose it.\r\n\t validateBoolean('Reference.transaction', 3, applyLocally, true);\r\n\t if (this.getKey() === '.length' || this.getKey() === '.keys')\r\n\t throw 'Reference.transaction failed: ' +\r\n\t this.getKey() +\r\n\t ' is a read-only object.';\r\n\t if (applyLocally === undefined)\r\n\t applyLocally = true;\r\n\t var deferred = new util.Deferred();\r\n\t if (typeof onComplete === 'function') {\r\n\t deferred.promise.catch(function () { });\r\n\t }\r\n\t var promiseComplete = function (error$$1, committed, snapshot) {\r\n\t if (error$$1) {\r\n\t deferred.reject(error$$1);\r\n\t }\r\n\t else {\r\n\t deferred.resolve(new TransactionResult(committed, snapshot));\r\n\t }\r\n\t if (typeof onComplete === 'function') {\r\n\t onComplete(error$$1, committed, snapshot);\r\n\t }\r\n\t };\r\n\t this.repo.startTransaction(this.path, transactionUpdate, promiseComplete, applyLocally);\r\n\t return deferred.promise;\r\n\t };\r\n\t /**\r\n\t * @param {string|number|null} priority\r\n\t * @param {function(?Error)=} onComplete\r\n\t * @return {!Promise}\r\n\t */\r\n\t Reference.prototype.setPriority = function (priority, onComplete) {\r\n\t util.validateArgCount('Reference.setPriority', 1, 2, arguments.length);\r\n\t validateWritablePath('Reference.setPriority', this.path);\r\n\t validatePriority('Reference.setPriority', 1, priority, false);\r\n\t util.validateCallback('Reference.setPriority', 2, onComplete, true);\r\n\t var deferred = new util.Deferred();\r\n\t this.repo.setWithPriority(this.path.child('.priority'), priority, null, deferred.wrapCallback(onComplete));\r\n\t return deferred.promise;\r\n\t };\r\n\t /**\r\n\t * @param {*=} value\r\n\t * @param {function(?Error)=} onComplete\r\n\t * @return {!Reference}\r\n\t */\r\n\t Reference.prototype.push = function (value, onComplete) {\r\n\t util.validateArgCount('Reference.push', 0, 2, arguments.length);\r\n\t validateWritablePath('Reference.push', this.path);\r\n\t validateFirebaseDataArg('Reference.push', 1, value, this.path, true);\r\n\t util.validateCallback('Reference.push', 2, onComplete, true);\r\n\t var now = this.repo.serverTime();\r\n\t var name = nextPushId(now);\r\n\t // push() returns a ThennableReference whose promise is fulfilled with a regular Reference.\r\n\t // We use child() to create handles to two different references. The first is turned into a\r\n\t // ThennableReference below by adding then() and catch() methods and is used as the\r\n\t // return value of push(). The second remains a regular Reference and is used as the fulfilled\r\n\t // value of the first ThennableReference.\r\n\t var thennablePushRef = this.child(name);\r\n\t var pushRef = this.child(name);\r\n\t var promise;\r\n\t if (value != null) {\r\n\t promise = thennablePushRef.set(value, onComplete).then(function () { return pushRef; });\r\n\t }\r\n\t else {\r\n\t promise = Promise.resolve(pushRef);\r\n\t }\r\n\t thennablePushRef.then = promise.then.bind(promise);\r\n\t thennablePushRef.catch = promise.then.bind(promise, undefined);\r\n\t if (typeof onComplete === 'function') {\r\n\t promise.catch(function () { });\r\n\t }\r\n\t return thennablePushRef;\r\n\t };\r\n\t /**\r\n\t * @return {!OnDisconnect}\r\n\t */\r\n\t Reference.prototype.onDisconnect = function () {\r\n\t validateWritablePath('Reference.onDisconnect', this.path);\r\n\t return new OnDisconnect(this.repo, this.path);\r\n\t };\r\n\t Object.defineProperty(Reference.prototype, \"database\", {\r\n\t get: function () {\r\n\t return this.databaseProp();\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(Reference.prototype, \"key\", {\r\n\t get: function () {\r\n\t return this.getKey();\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(Reference.prototype, \"parent\", {\r\n\t get: function () {\r\n\t return this.getParent();\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(Reference.prototype, \"root\", {\r\n\t get: function () {\r\n\t return this.getRoot();\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t return Reference;\r\n\t}(Query));\r\n\t/**\r\n\t * Define reference constructor in various modules\r\n\t *\r\n\t * We are doing this here to avoid several circular\r\n\t * dependency issues\r\n\t */\r\n\tQuery.__referenceConstructor = Reference;\r\n\tSyncPoint.__referenceConstructor = Reference;\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Node in a Tree.\r\n\t */\r\n\tvar TreeNode = /** @class */ (function () {\r\n\t function TreeNode() {\r\n\t // TODO: Consider making accessors that create children and value lazily or\r\n\t // separate Internal / Leaf 'types'.\r\n\t this.children = {};\r\n\t this.childCount = 0;\r\n\t this.value = null;\r\n\t }\r\n\t return TreeNode;\r\n\t}());\r\n\t/**\r\n\t * A light-weight tree, traversable by path. Nodes can have both values and children.\r\n\t * Nodes are not enumerated (by forEachChild) unless they have a value or non-empty\r\n\t * children.\r\n\t */\r\n\tvar Tree = /** @class */ (function () {\r\n\t /**\r\n\t * @template T\r\n\t * @param {string=} name_ Optional name of the node.\r\n\t * @param {Tree=} parent_ Optional parent node.\r\n\t * @param {TreeNode=} node_ Optional node to wrap.\r\n\t */\r\n\t function Tree(name_, parent_, node_) {\r\n\t if (name_ === void 0) { name_ = ''; }\r\n\t if (parent_ === void 0) { parent_ = null; }\r\n\t if (node_ === void 0) { node_ = new TreeNode(); }\r\n\t this.name_ = name_;\r\n\t this.parent_ = parent_;\r\n\t this.node_ = node_;\r\n\t }\r\n\t /**\r\n\t * Returns a sub-Tree for the given path.\r\n\t *\r\n\t * @param {!(string|Path)} pathObj Path to look up.\r\n\t * @return {!Tree.} Tree for path.\r\n\t */\r\n\t Tree.prototype.subTree = function (pathObj) {\r\n\t // TODO: Require pathObj to be Path?\r\n\t var path = pathObj instanceof Path ? pathObj : new Path(pathObj);\r\n\t var child = this, next;\r\n\t while ((next = path.getFront()) !== null) {\r\n\t var childNode = util.safeGet(child.node_.children, next) || new TreeNode();\r\n\t child = new Tree(next, child, childNode);\r\n\t path = path.popFront();\r\n\t }\r\n\t return child;\r\n\t };\r\n\t /**\r\n\t * Returns the data associated with this tree node.\r\n\t *\r\n\t * @return {?T} The data or null if no data exists.\r\n\t */\r\n\t Tree.prototype.getValue = function () {\r\n\t return this.node_.value;\r\n\t };\r\n\t /**\r\n\t * Sets data to this tree node.\r\n\t *\r\n\t * @param {!T} value Value to set.\r\n\t */\r\n\t Tree.prototype.setValue = function (value) {\r\n\t util.assert(typeof value !== 'undefined', 'Cannot set value to undefined');\r\n\t this.node_.value = value;\r\n\t this.updateParents_();\r\n\t };\r\n\t /**\r\n\t * Clears the contents of the tree node (its value and all children).\r\n\t */\r\n\t Tree.prototype.clear = function () {\r\n\t this.node_.value = null;\r\n\t this.node_.children = {};\r\n\t this.node_.childCount = 0;\r\n\t this.updateParents_();\r\n\t };\r\n\t /**\r\n\t * @return {boolean} Whether the tree has any children.\r\n\t */\r\n\t Tree.prototype.hasChildren = function () {\r\n\t return this.node_.childCount > 0;\r\n\t };\r\n\t /**\r\n\t * @return {boolean} Whether the tree is empty (no value or children).\r\n\t */\r\n\t Tree.prototype.isEmpty = function () {\r\n\t return this.getValue() === null && !this.hasChildren();\r\n\t };\r\n\t /**\r\n\t * Calls action for each child of this tree node.\r\n\t *\r\n\t * @param {function(!Tree.)} action Action to be called for each child.\r\n\t */\r\n\t Tree.prototype.forEachChild = function (action) {\r\n\t var _this = this;\r\n\t util.forEach(this.node_.children, function (child, childTree) {\r\n\t action(new Tree(child, _this, childTree));\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Does a depth-first traversal of this node's descendants, calling action for each one.\r\n\t *\r\n\t * @param {function(!Tree.)} action Action to be called for each child.\r\n\t * @param {boolean=} includeSelf Whether to call action on this node as well. Defaults to\r\n\t * false.\r\n\t * @param {boolean=} childrenFirst Whether to call action on children before calling it on\r\n\t * parent.\r\n\t */\r\n\t Tree.prototype.forEachDescendant = function (action, includeSelf, childrenFirst) {\r\n\t if (includeSelf && !childrenFirst)\r\n\t action(this);\r\n\t this.forEachChild(function (child) {\r\n\t child.forEachDescendant(action, /*includeSelf=*/ true, childrenFirst);\r\n\t });\r\n\t if (includeSelf && childrenFirst)\r\n\t action(this);\r\n\t };\r\n\t /**\r\n\t * Calls action on each ancestor node.\r\n\t *\r\n\t * @param {function(!Tree.)} action Action to be called on each parent; return\r\n\t * true to abort.\r\n\t * @param {boolean=} includeSelf Whether to call action on this node as well.\r\n\t * @return {boolean} true if the action callback returned true.\r\n\t */\r\n\t Tree.prototype.forEachAncestor = function (action, includeSelf) {\r\n\t var node = includeSelf ? this : this.parent();\r\n\t while (node !== null) {\r\n\t if (action(node)) {\r\n\t return true;\r\n\t }\r\n\t node = node.parent();\r\n\t }\r\n\t return false;\r\n\t };\r\n\t /**\r\n\t * Does a depth-first traversal of this node's descendants. When a descendant with a value\r\n\t * is found, action is called on it and traversal does not continue inside the node.\r\n\t * Action is *not* called on this node.\r\n\t *\r\n\t * @param {function(!Tree.)} action Action to be called for each child.\r\n\t */\r\n\t Tree.prototype.forEachImmediateDescendantWithValue = function (action) {\r\n\t this.forEachChild(function (child) {\r\n\t if (child.getValue() !== null)\r\n\t action(child);\r\n\t else\r\n\t child.forEachImmediateDescendantWithValue(action);\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @return {!Path} The path of this tree node, as a Path.\r\n\t */\r\n\t Tree.prototype.path = function () {\r\n\t return new Path(this.parent_ === null\r\n\t ? this.name_\r\n\t : this.parent_.path() + '/' + this.name_);\r\n\t };\r\n\t /**\r\n\t * @return {string} The name of the tree node.\r\n\t */\r\n\t Tree.prototype.name = function () {\r\n\t return this.name_;\r\n\t };\r\n\t /**\r\n\t * @return {?Tree} The parent tree node, or null if this is the root of the tree.\r\n\t */\r\n\t Tree.prototype.parent = function () {\r\n\t return this.parent_;\r\n\t };\r\n\t /**\r\n\t * Adds or removes this child from its parent based on whether it's empty or not.\r\n\t *\r\n\t * @private\r\n\t */\r\n\t Tree.prototype.updateParents_ = function () {\r\n\t if (this.parent_ !== null)\r\n\t this.parent_.updateChild_(this.name_, this);\r\n\t };\r\n\t /**\r\n\t * Adds or removes the passed child to this tree node, depending on whether it's empty.\r\n\t *\r\n\t * @param {string} childName The name of the child to update.\r\n\t * @param {!Tree.} child The child to update.\r\n\t * @private\r\n\t */\r\n\t Tree.prototype.updateChild_ = function (childName, child) {\r\n\t var childEmpty = child.isEmpty();\r\n\t var childExists = util.contains(this.node_.children, childName);\r\n\t if (childEmpty && childExists) {\r\n\t delete this.node_.children[childName];\r\n\t this.node_.childCount--;\r\n\t this.updateParents_();\r\n\t }\r\n\t else if (!childEmpty && !childExists) {\r\n\t this.node_.children[childName] = child.node_;\r\n\t this.node_.childCount++;\r\n\t this.updateParents_();\r\n\t }\r\n\t };\r\n\t return Tree;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t// TODO: This is pretty messy. Ideally, a lot of this would move into FirebaseData, or a transaction-specific\r\n\t// component used by FirebaseData, but it has ties to user callbacks (transaction update and onComplete) as well\r\n\t// as the realtime connection (to send transactions to the server). So that all needs to be decoupled first.\r\n\t// For now it's part of Repo, but in its own file.\r\n\t/**\r\n\t * @enum {number}\r\n\t */\r\n\tvar TransactionStatus;\r\n\t(function (TransactionStatus) {\r\n\t // We've run the transaction and updated transactionResultData_ with the result, but it isn't currently sent to the\r\n\t // server. A transaction will go from RUN -> SENT -> RUN if it comes back from the server as rejected due to\r\n\t // mismatched hash.\r\n\t TransactionStatus[TransactionStatus[\"RUN\"] = 0] = \"RUN\";\r\n\t // We've run the transaction and sent it to the server and it's currently outstanding (hasn't come back as accepted\r\n\t // or rejected yet).\r\n\t TransactionStatus[TransactionStatus[\"SENT\"] = 1] = \"SENT\";\r\n\t // Temporary state used to mark completed transactions (whether successful or aborted). The transaction will be\r\n\t // removed when we get a chance to prune completed ones.\r\n\t TransactionStatus[TransactionStatus[\"COMPLETED\"] = 2] = \"COMPLETED\";\r\n\t // Used when an already-sent transaction needs to be aborted (e.g. due to a conflicting set() call that was made).\r\n\t // If it comes back as unsuccessful, we'll abort it.\r\n\t TransactionStatus[TransactionStatus[\"SENT_NEEDS_ABORT\"] = 3] = \"SENT_NEEDS_ABORT\";\r\n\t // Temporary state used to mark transactions that need to be aborted.\r\n\t TransactionStatus[TransactionStatus[\"NEEDS_ABORT\"] = 4] = \"NEEDS_ABORT\";\r\n\t})(TransactionStatus || (TransactionStatus = {}));\r\n\t/**\r\n\t * If a transaction does not succeed after 25 retries, we abort it. Among other things this ensure that if there's\r\n\t * ever a bug causing a mismatch between client / server hashes for some data, we won't retry indefinitely.\r\n\t * @type {number}\r\n\t * @const\r\n\t * @private\r\n\t */\r\n\tRepo.MAX_TRANSACTION_RETRIES_ = 25;\r\n\t/**\r\n\t * Setup the transaction data structures\r\n\t * @private\r\n\t */\r\n\tRepo.prototype.transactions_init_ = function () {\r\n\t /**\r\n\t * Stores queues of outstanding transactions for Firebase locations.\r\n\t *\r\n\t * @type {!Tree.>}\r\n\t * @private\r\n\t */\r\n\t this.transactionQueueTree_ = new Tree();\r\n\t};\r\n\t/**\r\n\t * Creates a new transaction, adds it to the transactions we're tracking, and sends it to the server if possible.\r\n\t *\r\n\t * @param {!Path} path Path at which to do transaction.\r\n\t * @param {function(*):*} transactionUpdate Update callback.\r\n\t * @param {?function(?Error, boolean, ?DataSnapshot)} onComplete Completion callback.\r\n\t * @param {boolean} applyLocally Whether or not to make intermediate results visible\r\n\t */\r\n\tRepo.prototype.startTransaction = function (path, transactionUpdate, onComplete, applyLocally) {\r\n\t this.log_('transaction on ' + path);\r\n\t // Add a watch to make sure we get server updates.\r\n\t var valueCallback = function () { };\r\n\t var watchRef = new Reference(this, path);\r\n\t watchRef.on('value', valueCallback);\r\n\t var unwatcher = function () {\r\n\t watchRef.off('value', valueCallback);\r\n\t };\r\n\t // Initialize transaction.\r\n\t var transaction = {\r\n\t path: path,\r\n\t update: transactionUpdate,\r\n\t onComplete: onComplete,\r\n\t // One of TransactionStatus enums.\r\n\t status: null,\r\n\t // Used when combining transactions at different locations to figure out which one goes first.\r\n\t order: LUIDGenerator(),\r\n\t // Whether to raise local events for this transaction.\r\n\t applyLocally: applyLocally,\r\n\t // Count of how many times we've retried the transaction.\r\n\t retryCount: 0,\r\n\t // Function to call to clean up our .on() listener.\r\n\t unwatcher: unwatcher,\r\n\t // Stores why a transaction was aborted.\r\n\t abortReason: null,\r\n\t currentWriteId: null,\r\n\t currentInputSnapshot: null,\r\n\t currentOutputSnapshotRaw: null,\r\n\t currentOutputSnapshotResolved: null\r\n\t };\r\n\t // Run transaction initially.\r\n\t var currentState = this.getLatestState_(path);\r\n\t transaction.currentInputSnapshot = currentState;\r\n\t var newVal = transaction.update(currentState.val());\r\n\t if (newVal === undefined) {\r\n\t // Abort transaction.\r\n\t transaction.unwatcher();\r\n\t transaction.currentOutputSnapshotRaw = null;\r\n\t transaction.currentOutputSnapshotResolved = null;\r\n\t if (transaction.onComplete) {\r\n\t // We just set the input snapshot, so this cast should be safe\r\n\t var snapshot = new DataSnapshot(transaction.currentInputSnapshot, new Reference(this, transaction.path), PRIORITY_INDEX);\r\n\t transaction.onComplete(null, false, snapshot);\r\n\t }\r\n\t }\r\n\t else {\r\n\t validateFirebaseData('transaction failed: Data returned ', newVal, transaction.path);\r\n\t // Mark as run and add to our queue.\r\n\t transaction.status = TransactionStatus.RUN;\r\n\t var queueNode = this.transactionQueueTree_.subTree(path);\r\n\t var nodeQueue = queueNode.getValue() || [];\r\n\t nodeQueue.push(transaction);\r\n\t queueNode.setValue(nodeQueue);\r\n\t // Update visibleData and raise events\r\n\t // Note: We intentionally raise events after updating all of our transaction state, since the user could\r\n\t // start new transactions from the event callbacks.\r\n\t var priorityForNode = void 0;\r\n\t if (typeof newVal === 'object' &&\r\n\t newVal !== null &&\r\n\t util.contains(newVal, '.priority')) {\r\n\t priorityForNode = util.safeGet(newVal, '.priority');\r\n\t util.assert(isValidPriority(priorityForNode), 'Invalid priority returned by transaction. ' +\r\n\t 'Priority must be a valid string, finite number, server value, or null.');\r\n\t }\r\n\t else {\r\n\t var currentNode = this.serverSyncTree_.calcCompleteEventCache(path) ||\r\n\t ChildrenNode.EMPTY_NODE;\r\n\t priorityForNode = currentNode.getPriority().val();\r\n\t }\r\n\t priorityForNode /** @type {null|number|string} */ = priorityForNode;\r\n\t var serverValues = this.generateServerValues();\r\n\t var newNodeUnresolved = nodeFromJSON$1(newVal, priorityForNode);\r\n\t var newNode = resolveDeferredValueSnapshot(newNodeUnresolved, serverValues);\r\n\t transaction.currentOutputSnapshotRaw = newNodeUnresolved;\r\n\t transaction.currentOutputSnapshotResolved = newNode;\r\n\t transaction.currentWriteId = this.getNextWriteId_();\r\n\t var events = this.serverSyncTree_.applyUserOverwrite(path, newNode, transaction.currentWriteId, transaction.applyLocally);\r\n\t this.eventQueue_.raiseEventsForChangedPath(path, events);\r\n\t this.sendReadyTransactions_();\r\n\t }\r\n\t};\r\n\t/**\r\n\t * @param {!Path} path\r\n\t * @param {Array.=} excludeSets A specific set to exclude\r\n\t * @return {Node}\r\n\t * @private\r\n\t */\r\n\tRepo.prototype.getLatestState_ = function (path, excludeSets) {\r\n\t return (this.serverSyncTree_.calcCompleteEventCache(path, excludeSets) ||\r\n\t ChildrenNode.EMPTY_NODE);\r\n\t};\r\n\t/**\r\n\t * Sends any already-run transactions that aren't waiting for outstanding transactions to\r\n\t * complete.\r\n\t *\r\n\t * Externally it's called with no arguments, but it calls itself recursively with a particular\r\n\t * transactionQueueTree node to recurse through the tree.\r\n\t *\r\n\t * @param {Tree.>=} node transactionQueueTree node to start at.\r\n\t * @private\r\n\t */\r\n\tRepo.prototype.sendReadyTransactions_ = function (node) {\r\n\t var _this = this;\r\n\t if (node === void 0) { node = this.transactionQueueTree_; }\r\n\t // Before recursing, make sure any completed transactions are removed.\r\n\t if (!node) {\r\n\t this.pruneCompletedTransactionsBelowNode_(node);\r\n\t }\r\n\t if (node.getValue() !== null) {\r\n\t var queue = this.buildTransactionQueue_(node);\r\n\t util.assert(queue.length > 0, 'Sending zero length transaction queue');\r\n\t var allRun = queue.every(function (transaction) { return transaction.status === TransactionStatus.RUN; });\r\n\t // If they're all run (and not sent), we can send them. Else, we must wait.\r\n\t if (allRun) {\r\n\t this.sendTransactionQueue_(node.path(), queue);\r\n\t }\r\n\t }\r\n\t else if (node.hasChildren()) {\r\n\t node.forEachChild(function (childNode) {\r\n\t _this.sendReadyTransactions_(childNode);\r\n\t });\r\n\t }\r\n\t};\r\n\t/**\r\n\t * Given a list of run transactions, send them to the server and then handle the result (success or failure).\r\n\t *\r\n\t * @param {!Path} path The location of the queue.\r\n\t * @param {!Array.} queue Queue of transactions under the specified location.\r\n\t * @private\r\n\t */\r\n\tRepo.prototype.sendTransactionQueue_ = function (path, queue) {\r\n\t var _this = this;\r\n\t // Mark transactions as sent and increment retry count!\r\n\t var setsToIgnore = queue.map(function (txn) {\r\n\t return txn.currentWriteId;\r\n\t });\r\n\t var latestState = this.getLatestState_(path, setsToIgnore);\r\n\t var snapToSend = latestState;\r\n\t var latestHash = latestState.hash();\r\n\t for (var i = 0; i < queue.length; i++) {\r\n\t var txn = queue[i];\r\n\t util.assert(txn.status === TransactionStatus.RUN, 'tryToSendTransactionQueue_: items in queue should all be run.');\r\n\t txn.status = TransactionStatus.SENT;\r\n\t txn.retryCount++;\r\n\t var relativePath = Path.relativePath(path, txn.path);\r\n\t // If we've gotten to this point, the output snapshot must be defined.\r\n\t snapToSend = snapToSend.updateChild(relativePath /**@type {!Node} */, txn.currentOutputSnapshotRaw);\r\n\t }\r\n\t var dataToSend = snapToSend.val(true);\r\n\t var pathToSend = path;\r\n\t // Send the put.\r\n\t this.server_.put(pathToSend.toString(), dataToSend, function (status) {\r\n\t _this.log_('transaction put response', {\r\n\t path: pathToSend.toString(),\r\n\t status: status\r\n\t });\r\n\t var events = [];\r\n\t if (status === 'ok') {\r\n\t // Queue up the callbacks and fire them after cleaning up all of our transaction state, since\r\n\t // the callback could trigger more transactions or sets.\r\n\t var callbacks = [];\r\n\t for (var i = 0; i < queue.length; i++) {\r\n\t queue[i].status = TransactionStatus.COMPLETED;\r\n\t events = events.concat(_this.serverSyncTree_.ackUserWrite(queue[i].currentWriteId));\r\n\t if (queue[i].onComplete) {\r\n\t // We never unset the output snapshot, and given that this transaction is complete, it should be set\r\n\t var node = queue[i].currentOutputSnapshotResolved;\r\n\t var ref = new Reference(_this, queue[i].path);\r\n\t var snapshot = new DataSnapshot(node, ref, PRIORITY_INDEX);\r\n\t callbacks.push(queue[i].onComplete.bind(null, null, true, snapshot));\r\n\t }\r\n\t queue[i].unwatcher();\r\n\t }\r\n\t // Now remove the completed transactions.\r\n\t _this.pruneCompletedTransactionsBelowNode_(_this.transactionQueueTree_.subTree(path));\r\n\t // There may be pending transactions that we can now send.\r\n\t _this.sendReadyTransactions_();\r\n\t _this.eventQueue_.raiseEventsForChangedPath(path, events);\r\n\t // Finally, trigger onComplete callbacks.\r\n\t for (var i = 0; i < callbacks.length; i++) {\r\n\t exceptionGuard(callbacks[i]);\r\n\t }\r\n\t }\r\n\t else {\r\n\t // transactions are no longer sent. Update their status appropriately.\r\n\t if (status === 'datastale') {\r\n\t for (var i = 0; i < queue.length; i++) {\r\n\t if (queue[i].status === TransactionStatus.SENT_NEEDS_ABORT)\r\n\t queue[i].status = TransactionStatus.NEEDS_ABORT;\r\n\t else\r\n\t queue[i].status = TransactionStatus.RUN;\r\n\t }\r\n\t }\r\n\t else {\r\n\t warn('transaction at ' + pathToSend.toString() + ' failed: ' + status);\r\n\t for (var i = 0; i < queue.length; i++) {\r\n\t queue[i].status = TransactionStatus.NEEDS_ABORT;\r\n\t queue[i].abortReason = status;\r\n\t }\r\n\t }\r\n\t _this.rerunTransactions_(path);\r\n\t }\r\n\t }, latestHash);\r\n\t};\r\n\t/**\r\n\t * Finds all transactions dependent on the data at changedPath and reruns them.\r\n\t *\r\n\t * Should be called any time cached data changes.\r\n\t *\r\n\t * Return the highest path that was affected by rerunning transactions. This is the path at which events need to\r\n\t * be raised for.\r\n\t *\r\n\t * @param {!Path} changedPath The path in mergedData that changed.\r\n\t * @return {!Path} The rootmost path that was affected by rerunning transactions.\r\n\t * @private\r\n\t */\r\n\tRepo.prototype.rerunTransactions_ = function (changedPath) {\r\n\t var rootMostTransactionNode = this.getAncestorTransactionNode_(changedPath);\r\n\t var path = rootMostTransactionNode.path();\r\n\t var queue = this.buildTransactionQueue_(rootMostTransactionNode);\r\n\t this.rerunTransactionQueue_(queue, path);\r\n\t return path;\r\n\t};\r\n\t/**\r\n\t * Does all the work of rerunning transactions (as well as cleans up aborted transactions and whatnot).\r\n\t *\r\n\t * @param {Array.} queue The queue of transactions to run.\r\n\t * @param {!Path} path The path the queue is for.\r\n\t * @private\r\n\t */\r\n\tRepo.prototype.rerunTransactionQueue_ = function (queue, path) {\r\n\t if (queue.length === 0) {\r\n\t return; // Nothing to do!\r\n\t }\r\n\t // Queue up the callbacks and fire them after cleaning up all of our transaction state, since\r\n\t // the callback could trigger more transactions or sets.\r\n\t var callbacks = [];\r\n\t var events = [];\r\n\t // Ignore all of the sets we're going to re-run.\r\n\t var txnsToRerun = queue.filter(function (q) {\r\n\t return q.status === TransactionStatus.RUN;\r\n\t });\r\n\t var setsToIgnore = txnsToRerun.map(function (q) {\r\n\t return q.currentWriteId;\r\n\t });\r\n\t for (var i = 0; i < queue.length; i++) {\r\n\t var transaction = queue[i];\r\n\t var relativePath = Path.relativePath(path, transaction.path);\r\n\t var abortTransaction = false, abortReason = void 0;\r\n\t util.assert(relativePath !== null, 'rerunTransactionsUnderNode_: relativePath should not be null.');\r\n\t if (transaction.status === TransactionStatus.NEEDS_ABORT) {\r\n\t abortTransaction = true;\r\n\t abortReason = transaction.abortReason;\r\n\t events = events.concat(this.serverSyncTree_.ackUserWrite(transaction.currentWriteId, true));\r\n\t }\r\n\t else if (transaction.status === TransactionStatus.RUN) {\r\n\t if (transaction.retryCount >= Repo.MAX_TRANSACTION_RETRIES_) {\r\n\t abortTransaction = true;\r\n\t abortReason = 'maxretry';\r\n\t events = events.concat(this.serverSyncTree_.ackUserWrite(transaction.currentWriteId, true));\r\n\t }\r\n\t else {\r\n\t // This code reruns a transaction\r\n\t var currentNode = this.getLatestState_(transaction.path, setsToIgnore);\r\n\t transaction.currentInputSnapshot = currentNode;\r\n\t var newData = queue[i].update(currentNode.val());\r\n\t if (newData !== undefined) {\r\n\t validateFirebaseData('transaction failed: Data returned ', newData, transaction.path);\r\n\t var newDataNode = nodeFromJSON$1(newData);\r\n\t var hasExplicitPriority = typeof newData === 'object' &&\r\n\t newData != null &&\r\n\t util.contains(newData, '.priority');\r\n\t if (!hasExplicitPriority) {\r\n\t // Keep the old priority if there wasn't a priority explicitly specified.\r\n\t newDataNode = newDataNode.updatePriority(currentNode.getPriority());\r\n\t }\r\n\t var oldWriteId = transaction.currentWriteId;\r\n\t var serverValues = this.generateServerValues();\r\n\t var newNodeResolved = resolveDeferredValueSnapshot(newDataNode, serverValues);\r\n\t transaction.currentOutputSnapshotRaw = newDataNode;\r\n\t transaction.currentOutputSnapshotResolved = newNodeResolved;\r\n\t transaction.currentWriteId = this.getNextWriteId_();\r\n\t // Mutates setsToIgnore in place\r\n\t setsToIgnore.splice(setsToIgnore.indexOf(oldWriteId), 1);\r\n\t events = events.concat(this.serverSyncTree_.applyUserOverwrite(transaction.path, newNodeResolved, transaction.currentWriteId, transaction.applyLocally));\r\n\t events = events.concat(this.serverSyncTree_.ackUserWrite(oldWriteId, true));\r\n\t }\r\n\t else {\r\n\t abortTransaction = true;\r\n\t abortReason = 'nodata';\r\n\t events = events.concat(this.serverSyncTree_.ackUserWrite(transaction.currentWriteId, true));\r\n\t }\r\n\t }\r\n\t }\r\n\t this.eventQueue_.raiseEventsForChangedPath(path, events);\r\n\t events = [];\r\n\t if (abortTransaction) {\r\n\t // Abort.\r\n\t queue[i].status = TransactionStatus.COMPLETED;\r\n\t // Removing a listener can trigger pruning which can muck with mergedData/visibleData (as it prunes data).\r\n\t // So defer the unwatcher until we're done.\r\n\t (function (unwatcher) {\r\n\t setTimeout(unwatcher, Math.floor(0));\r\n\t })(queue[i].unwatcher);\r\n\t if (queue[i].onComplete) {\r\n\t if (abortReason === 'nodata') {\r\n\t var ref = new Reference(this, queue[i].path);\r\n\t // We set this field immediately, so it's safe to cast to an actual snapshot\r\n\t var lastInput /** @type {!Node} */ = queue[i].currentInputSnapshot;\r\n\t var snapshot = new DataSnapshot(lastInput, ref, PRIORITY_INDEX);\r\n\t callbacks.push(queue[i].onComplete.bind(null, null, false, snapshot));\r\n\t }\r\n\t else {\r\n\t callbacks.push(queue[i].onComplete.bind(null, new Error(abortReason), false, null));\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t // Clean up completed transactions.\r\n\t this.pruneCompletedTransactionsBelowNode_(this.transactionQueueTree_);\r\n\t // Now fire callbacks, now that we're in a good, known state.\r\n\t for (var i = 0; i < callbacks.length; i++) {\r\n\t exceptionGuard(callbacks[i]);\r\n\t }\r\n\t // Try to send the transaction result to the server.\r\n\t this.sendReadyTransactions_();\r\n\t};\r\n\t/**\r\n\t * Returns the rootmost ancestor node of the specified path that has a pending transaction on it, or just returns\r\n\t * the node for the given path if there are no pending transactions on any ancestor.\r\n\t *\r\n\t * @param {!Path} path The location to start at.\r\n\t * @return {!Tree.>} The rootmost node with a transaction.\r\n\t * @private\r\n\t */\r\n\tRepo.prototype.getAncestorTransactionNode_ = function (path) {\r\n\t var front;\r\n\t // Start at the root and walk deeper into the tree towards path until we find a node with pending transactions.\r\n\t var transactionNode = this.transactionQueueTree_;\r\n\t while ((front = path.getFront()) !== null &&\r\n\t transactionNode.getValue() === null) {\r\n\t transactionNode = transactionNode.subTree(front);\r\n\t path = path.popFront();\r\n\t }\r\n\t return transactionNode;\r\n\t};\r\n\t/**\r\n\t * Builds the queue of all transactions at or below the specified transactionNode.\r\n\t *\r\n\t * @param {!Tree.>} transactionNode\r\n\t * @return {Array.} The generated queue.\r\n\t * @private\r\n\t */\r\n\tRepo.prototype.buildTransactionQueue_ = function (transactionNode) {\r\n\t // Walk any child transaction queues and aggregate them into a single queue.\r\n\t var transactionQueue = [];\r\n\t this.aggregateTransactionQueuesForNode_(transactionNode, transactionQueue);\r\n\t // Sort them by the order the transactions were created.\r\n\t transactionQueue.sort(function (a, b) {\r\n\t return a.order - b.order;\r\n\t });\r\n\t return transactionQueue;\r\n\t};\r\n\t/**\r\n\t * @param {!Tree.>} node\r\n\t * @param {Array.} queue\r\n\t * @private\r\n\t */\r\n\tRepo.prototype.aggregateTransactionQueuesForNode_ = function (node, queue) {\r\n\t var _this = this;\r\n\t var nodeQueue = node.getValue();\r\n\t if (nodeQueue !== null) {\r\n\t for (var i = 0; i < nodeQueue.length; i++) {\r\n\t queue.push(nodeQueue[i]);\r\n\t }\r\n\t }\r\n\t node.forEachChild(function (child) {\r\n\t _this.aggregateTransactionQueuesForNode_(child, queue);\r\n\t });\r\n\t};\r\n\t/**\r\n\t * Remove COMPLETED transactions at or below this node in the transactionQueueTree_.\r\n\t *\r\n\t * @param {!Tree.>} node\r\n\t * @private\r\n\t */\r\n\tRepo.prototype.pruneCompletedTransactionsBelowNode_ = function (node) {\r\n\t var _this = this;\r\n\t var queue = node.getValue();\r\n\t if (queue) {\r\n\t var to = 0;\r\n\t for (var from = 0; from < queue.length; from++) {\r\n\t if (queue[from].status !== TransactionStatus.COMPLETED) {\r\n\t queue[to] = queue[from];\r\n\t to++;\r\n\t }\r\n\t }\r\n\t queue.length = to;\r\n\t node.setValue(queue.length > 0 ? queue : null);\r\n\t }\r\n\t node.forEachChild(function (childNode) {\r\n\t _this.pruneCompletedTransactionsBelowNode_(childNode);\r\n\t });\r\n\t};\r\n\t/**\r\n\t * Aborts all transactions on ancestors or descendants of the specified path. Called when doing a set() or update()\r\n\t * since we consider them incompatible with transactions.\r\n\t *\r\n\t * @param {!Path} path Path for which we want to abort related transactions.\r\n\t * @return {!Path}\r\n\t * @private\r\n\t */\r\n\tRepo.prototype.abortTransactions_ = function (path) {\r\n\t var _this = this;\r\n\t var affectedPath = this.getAncestorTransactionNode_(path).path();\r\n\t var transactionNode = this.transactionQueueTree_.subTree(path);\r\n\t transactionNode.forEachAncestor(function (node) {\r\n\t _this.abortTransactionsOnNode_(node);\r\n\t });\r\n\t this.abortTransactionsOnNode_(transactionNode);\r\n\t transactionNode.forEachDescendant(function (node) {\r\n\t _this.abortTransactionsOnNode_(node);\r\n\t });\r\n\t return affectedPath;\r\n\t};\r\n\t/**\r\n\t * Abort transactions stored in this transaction queue node.\r\n\t *\r\n\t * @param {!Tree.>} node Node to abort transactions for.\r\n\t * @private\r\n\t */\r\n\tRepo.prototype.abortTransactionsOnNode_ = function (node) {\r\n\t var queue = node.getValue();\r\n\t if (queue !== null) {\r\n\t // Queue up the callbacks and fire them after cleaning up all of our transaction state, since\r\n\t // the callback could trigger more transactions or sets.\r\n\t var callbacks = [];\r\n\t // Go through queue. Any already-sent transactions must be marked for abort, while the unsent ones\r\n\t // can be immediately aborted and removed.\r\n\t var events = [];\r\n\t var lastSent = -1;\r\n\t for (var i = 0; i < queue.length; i++) {\r\n\t if (queue[i].status === TransactionStatus.SENT_NEEDS_ABORT) {\r\n\t // Already marked. No action needed.\r\n\t }\r\n\t else if (queue[i].status === TransactionStatus.SENT) {\r\n\t util.assert(lastSent === i - 1, 'All SENT items should be at beginning of queue.');\r\n\t lastSent = i;\r\n\t // Mark transaction for abort when it comes back.\r\n\t queue[i].status = TransactionStatus.SENT_NEEDS_ABORT;\r\n\t queue[i].abortReason = 'set';\r\n\t }\r\n\t else {\r\n\t util.assert(queue[i].status === TransactionStatus.RUN, 'Unexpected transaction status in abort');\r\n\t // We can abort it immediately.\r\n\t queue[i].unwatcher();\r\n\t events = events.concat(this.serverSyncTree_.ackUserWrite(queue[i].currentWriteId, true));\r\n\t if (queue[i].onComplete) {\r\n\t var snapshot = null;\r\n\t callbacks.push(queue[i].onComplete.bind(null, new Error('set'), false, snapshot));\r\n\t }\r\n\t }\r\n\t }\r\n\t if (lastSent === -1) {\r\n\t // We're not waiting for any sent transactions. We can clear the queue.\r\n\t node.setValue(null);\r\n\t }\r\n\t else {\r\n\t // Remove the transactions we aborted.\r\n\t queue.length = lastSent + 1;\r\n\t }\r\n\t // Now fire the callbacks.\r\n\t this.eventQueue_.raiseEventsForChangedPath(node.path(), events);\r\n\t for (var i = 0; i < callbacks.length; i++) {\r\n\t exceptionGuard(callbacks[i]);\r\n\t }\r\n\t }\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/** @const {string} */\r\n\tvar DATABASE_URL_OPTION = 'databaseURL';\r\n\tvar _staticInstance;\r\n\t/**\r\n\t * Creates and caches Repo instances.\r\n\t */\r\n\tvar RepoManager = /** @class */ (function () {\r\n\t function RepoManager() {\r\n\t /**\r\n\t * @private {!Object.>}\r\n\t */\r\n\t this.repos_ = {};\r\n\t /**\r\n\t * If true, new Repos will be created to use ReadonlyRestClient (for testing purposes).\r\n\t * @private {boolean}\r\n\t */\r\n\t this.useRestClient_ = false;\r\n\t }\r\n\t RepoManager.getInstance = function () {\r\n\t if (!_staticInstance) {\r\n\t _staticInstance = new RepoManager();\r\n\t }\r\n\t return _staticInstance;\r\n\t };\r\n\t // TODO(koss): Remove these functions unless used in tests?\r\n\t RepoManager.prototype.interrupt = function () {\r\n\t for (var appName in this.repos_) {\r\n\t for (var dbUrl in this.repos_[appName]) {\r\n\t this.repos_[appName][dbUrl].interrupt();\r\n\t }\r\n\t }\r\n\t };\r\n\t RepoManager.prototype.resume = function () {\r\n\t for (var appName in this.repos_) {\r\n\t for (var dbUrl in this.repos_[appName]) {\r\n\t this.repos_[appName][dbUrl].resume();\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * This function should only ever be called to CREATE a new database instance.\r\n\t *\r\n\t * @param {!FirebaseApp} app\r\n\t * @return {!Database}\r\n\t */\r\n\t RepoManager.prototype.databaseFromApp = function (app, url) {\r\n\t var dbUrl = url || app.options[DATABASE_URL_OPTION];\r\n\t if (dbUrl === undefined) {\r\n\t fatal(\"Can't determine Firebase Database URL. Be sure to include \" +\r\n\t DATABASE_URL_OPTION +\r\n\t ' option when calling firebase.initializeApp().');\r\n\t }\r\n\t var parsedUrl = parseRepoInfo(dbUrl);\r\n\t var repoInfo = parsedUrl.repoInfo;\r\n\t validateUrl('Invalid Firebase Database URL', 1, parsedUrl);\r\n\t if (!parsedUrl.path.isEmpty()) {\r\n\t fatal('Database URL must point to the root of a Firebase Database ' +\r\n\t '(not including a child path).');\r\n\t }\r\n\t var repo = this.createRepo(repoInfo, app);\r\n\t return repo.database;\r\n\t };\r\n\t /**\r\n\t * Remove the repo and make sure it is disconnected.\r\n\t *\r\n\t * @param {!Repo} repo\r\n\t */\r\n\t RepoManager.prototype.deleteRepo = function (repo) {\r\n\t var appRepos = util.safeGet(this.repos_, repo.app.name);\r\n\t // This should never happen...\r\n\t if (!appRepos || util.safeGet(appRepos, repo.repoInfo_.toURLString()) !== repo) {\r\n\t fatal(\"Database \" + repo.app.name + \"(\" + repo.repoInfo_ + \") has already been deleted.\");\r\n\t }\r\n\t repo.interrupt();\r\n\t delete appRepos[repo.repoInfo_.toURLString()];\r\n\t };\r\n\t /**\r\n\t * Ensures a repo doesn't already exist and then creates one using the\r\n\t * provided app.\r\n\t *\r\n\t * @param {!RepoInfo} repoInfo The metadata about the Repo\r\n\t * @param {!FirebaseApp} app\r\n\t * @return {!Repo} The Repo object for the specified server / repoName.\r\n\t */\r\n\t RepoManager.prototype.createRepo = function (repoInfo, app) {\r\n\t var appRepos = util.safeGet(this.repos_, app.name);\r\n\t if (!appRepos) {\r\n\t appRepos = {};\r\n\t this.repos_[app.name] = appRepos;\r\n\t }\r\n\t var repo = util.safeGet(appRepos, repoInfo.toURLString());\r\n\t if (repo) {\r\n\t fatal('Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.');\r\n\t }\r\n\t repo = new Repo(repoInfo, this.useRestClient_, app);\r\n\t appRepos[repoInfo.toURLString()] = repo;\r\n\t return repo;\r\n\t };\r\n\t /**\r\n\t * Forces us to use ReadonlyRestClient instead of PersistentConnection for new Repos.\r\n\t * @param {boolean} forceRestClient\r\n\t */\r\n\t RepoManager.prototype.forceRestClient = function (forceRestClient) {\r\n\t this.useRestClient_ = forceRestClient;\r\n\t };\r\n\t return RepoManager;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Class representing a firebase database.\r\n\t * @implements {FirebaseService}\r\n\t */\r\n\tvar Database = /** @class */ (function () {\r\n\t /**\r\n\t * The constructor should not be called by users of our public API.\r\n\t * @param {!Repo} repo_\r\n\t */\r\n\t function Database(repo_) {\r\n\t this.repo_ = repo_;\r\n\t if (!(repo_ instanceof Repo)) {\r\n\t fatal(\"Don't call new Database() directly - please use firebase.database().\");\r\n\t }\r\n\t /** @type {Reference} */\r\n\t this.root_ = new Reference(repo_, Path.Empty);\r\n\t this.INTERNAL = new DatabaseInternals(this);\r\n\t }\r\n\t Object.defineProperty(Database.prototype, \"app\", {\r\n\t get: function () {\r\n\t return this.repo_.app;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Database.prototype.ref = function (path) {\r\n\t this.checkDeleted_('ref');\r\n\t util.validateArgCount('database.ref', 0, 1, arguments.length);\r\n\t if (path instanceof Reference) {\r\n\t return this.refFromURL(path.toString());\r\n\t }\r\n\t return path !== undefined ? this.root_.child(path) : this.root_;\r\n\t };\r\n\t /**\r\n\t * Returns a reference to the root or the path specified in url.\r\n\t * We throw a exception if the url is not in the same domain as the\r\n\t * current repo.\r\n\t * @param {string} url\r\n\t * @return {!Reference} Firebase reference.\r\n\t */\r\n\t Database.prototype.refFromURL = function (url) {\r\n\t /** @const {string} */\r\n\t var apiName = 'database.refFromURL';\r\n\t this.checkDeleted_(apiName);\r\n\t util.validateArgCount(apiName, 1, 1, arguments.length);\r\n\t var parsedURL = parseRepoInfo(url);\r\n\t validateUrl(apiName, 1, parsedURL);\r\n\t var repoInfo = parsedURL.repoInfo;\r\n\t if (repoInfo.host !== this.repo_.repoInfo_.host) {\r\n\t fatal(apiName +\r\n\t ': Host name does not match the current database: ' +\r\n\t '(found ' +\r\n\t repoInfo.host +\r\n\t ' but expected ' +\r\n\t this.repo_.repoInfo_.host +\r\n\t ')');\r\n\t }\r\n\t return this.ref(parsedURL.path.toString());\r\n\t };\r\n\t /**\r\n\t * @param {string} apiName\r\n\t */\r\n\t Database.prototype.checkDeleted_ = function (apiName) {\r\n\t if (this.repo_ === null) {\r\n\t fatal('Cannot call ' + apiName + ' on a deleted database.');\r\n\t }\r\n\t };\r\n\t // Make individual repo go offline.\r\n\t Database.prototype.goOffline = function () {\r\n\t util.validateArgCount('database.goOffline', 0, 0, arguments.length);\r\n\t this.checkDeleted_('goOffline');\r\n\t this.repo_.interrupt();\r\n\t };\r\n\t Database.prototype.goOnline = function () {\r\n\t util.validateArgCount('database.goOnline', 0, 0, arguments.length);\r\n\t this.checkDeleted_('goOnline');\r\n\t this.repo_.resume();\r\n\t };\r\n\t Database.ServerValue = {\r\n\t TIMESTAMP: {\r\n\t '.sv': 'timestamp'\r\n\t }\r\n\t };\r\n\t return Database;\r\n\t}());\r\n\tvar DatabaseInternals = /** @class */ (function () {\r\n\t /** @param {!Database} database */\r\n\t function DatabaseInternals(database) {\r\n\t this.database = database;\r\n\t }\r\n\t /** @return {Promise} */\r\n\t DatabaseInternals.prototype.delete = function () {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t this.database.checkDeleted_('delete');\r\n\t RepoManager.getInstance().deleteRepo(this.database.repo_);\r\n\t this.database.repo_ = null;\r\n\t this.database.root_ = null;\r\n\t this.database.INTERNAL = null;\r\n\t this.database = null;\r\n\t return [2 /*return*/];\r\n\t });\r\n\t });\r\n\t };\r\n\t return DatabaseInternals;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * INTERNAL methods for internal-use only (tests, etc.).\r\n\t *\r\n\t * Customers shouldn't use these or else should be aware that they could break at any time.\r\n\t *\r\n\t * @const\r\n\t */\r\n\tvar forceLongPolling = function () {\r\n\t WebSocketConnection.forceDisallow();\r\n\t BrowserPollConnection.forceAllow();\r\n\t};\r\n\tvar forceWebSockets = function () {\r\n\t BrowserPollConnection.forceDisallow();\r\n\t};\r\n\t/* Used by App Manager */\r\n\tvar isWebSocketsAvailable = function () {\r\n\t return WebSocketConnection['isAvailable']();\r\n\t};\r\n\tvar setSecurityDebugCallback = function (ref, callback) {\r\n\t ref.repo.persistentConnection_.securityDebugCallback_ = callback;\r\n\t};\r\n\tvar stats = function (ref, showDelta) {\r\n\t ref.repo.stats(showDelta);\r\n\t};\r\n\tvar statsIncrementCounter = function (ref, metric) {\r\n\t ref.repo.statsIncrementCounter(metric);\r\n\t};\r\n\tvar dataUpdateCount = function (ref) {\r\n\t return ref.repo.dataUpdateCount;\r\n\t};\r\n\tvar interceptServerData = function (ref, callback) {\r\n\t return ref.repo.interceptServerData_(callback);\r\n\t};\n\t\n\tvar INTERNAL = /*#__PURE__*/Object.freeze({\n\t forceLongPolling: forceLongPolling,\n\t forceWebSockets: forceWebSockets,\n\t isWebSocketsAvailable: isWebSocketsAvailable,\n\t setSecurityDebugCallback: setSecurityDebugCallback,\n\t stats: stats,\n\t statsIncrementCounter: statsIncrementCounter,\n\t dataUpdateCount: dataUpdateCount,\n\t interceptServerData: interceptServerData\n\t});\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar DataConnection = PersistentConnection;\r\n\t/**\r\n\t * @param {!string} pathString\r\n\t * @param {function(*)} onComplete\r\n\t */\r\n\tPersistentConnection.prototype.simpleListen = function (pathString, onComplete) {\r\n\t this.sendRequest('q', { p: pathString }, onComplete);\r\n\t};\r\n\t/**\r\n\t * @param {*} data\r\n\t * @param {function(*)} onEcho\r\n\t */\r\n\tPersistentConnection.prototype.echo = function (data, onEcho) {\r\n\t this.sendRequest('echo', { d: data }, onEcho);\r\n\t};\r\n\t// RealTimeConnection properties that we use in tests.\r\n\tvar RealTimeConnection = Connection;\r\n\t/**\r\n\t * @param {function(): string} newHash\r\n\t * @return {function()}\r\n\t */\r\n\tvar hijackHash = function (newHash) {\r\n\t var oldPut = PersistentConnection.prototype.put;\r\n\t PersistentConnection.prototype.put = function (pathString, data, opt_onComplete, opt_hash) {\r\n\t if (opt_hash !== undefined) {\r\n\t opt_hash = newHash();\r\n\t }\r\n\t oldPut.call(this, pathString, data, opt_onComplete, opt_hash);\r\n\t };\r\n\t return function () {\r\n\t PersistentConnection.prototype.put = oldPut;\r\n\t };\r\n\t};\r\n\t/**\r\n\t * @type {function(new:RepoInfo, !string, boolean, !string, boolean): undefined}\r\n\t */\r\n\tvar ConnectionTarget = RepoInfo;\r\n\t/**\r\n\t * @param {!Query} query\r\n\t * @return {!string}\r\n\t */\r\n\tvar queryIdentifier = function (query) {\r\n\t return query.queryIdentifier();\r\n\t};\r\n\t/**\r\n\t * @param {!Query} firebaseRef\r\n\t * @return {!Object}\r\n\t */\r\n\tvar listens = function (firebaseRef) {\r\n\t return firebaseRef.repo.persistentConnection_.listens_;\r\n\t};\r\n\t/**\r\n\t * Forces the RepoManager to create Repos that use ReadonlyRestClient instead of PersistentConnection.\r\n\t *\r\n\t * @param {boolean} forceRestClient\r\n\t */\r\n\tvar forceRestClient = function (forceRestClient) {\r\n\t RepoManager.getInstance().forceRestClient(forceRestClient);\r\n\t};\n\t\n\tvar TEST_ACCESS = /*#__PURE__*/Object.freeze({\n\t DataConnection: DataConnection,\n\t RealTimeConnection: RealTimeConnection,\n\t hijackHash: hijackHash,\n\t ConnectionTarget: ConnectionTarget,\n\t queryIdentifier: queryIdentifier,\n\t listens: listens,\n\t forceRestClient: forceRestClient\n\t});\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar ServerValue = Database.ServerValue;\r\n\tfunction registerDatabase(instance) {\r\n\t // Register the Database Service with the 'firebase' namespace.\r\n\t var namespace = instance.INTERNAL.registerService('database', function (app, unused, url) { return RepoManager.getInstance().databaseFromApp(app, url); }, \r\n\t // firebase.database namespace properties\r\n\t {\r\n\t Reference: Reference,\r\n\t Query: Query,\r\n\t Database: Database,\r\n\t enableLogging: enableLogging,\r\n\t INTERNAL: INTERNAL,\r\n\t ServerValue: ServerValue,\r\n\t TEST_ACCESS: TEST_ACCESS\r\n\t }, null, true);\r\n\t if (util.isNodeSdk()) {\r\n\t module.exports = namespace;\r\n\t }\r\n\t}\r\n\tregisterDatabase(firebase);\n\t\n\texports.registerDatabase = registerDatabase;\n\texports.Database = Database;\n\texports.Query = Query;\n\texports.Reference = Reference;\n\texports.enableLogging = enableLogging;\n\texports.ServerValue = ServerValue;\n\texports.DataSnapshot = DataSnapshot;\n\texports.OnDisconnect = OnDisconnect;\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(64)))\n\n/***/ }),\n\n/***/ 440:\n/***/ (function(module, exports) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * A container for all of the Logger instances\r\n\t */\r\n\tvar instances = [];\r\n\t(function (LogLevel) {\r\n\t LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\r\n\t LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\r\n\t LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\r\n\t LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\r\n\t LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\r\n\t LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\r\n\t})(exports.LogLevel || (exports.LogLevel = {}));\r\n\t/**\r\n\t * The default log level\r\n\t */\r\n\tvar defaultLogLevel = exports.LogLevel.INFO;\r\n\t/**\r\n\t * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\r\n\t * messages on to their corresponding console counterparts (if the log method\r\n\t * is supported by the current log level)\r\n\t */\r\n\tvar defaultLogHandler = function (instance, logType) {\r\n\t var args = [];\r\n\t for (var _i = 2; _i < arguments.length; _i++) {\r\n\t args[_i - 2] = arguments[_i];\r\n\t }\r\n\t if (logType < instance.logLevel)\r\n\t return;\r\n\t var now = new Date().toISOString();\r\n\t switch (logType) {\r\n\t /**\r\n\t * By default, `console.debug` is not displayed in the developer console (in\r\n\t * chrome). To avoid forcing users to have to opt-in to these logs twice\r\n\t * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\r\n\t * logs to the `console.log` function.\r\n\t */\r\n\t case exports.LogLevel.DEBUG:\r\n\t console.log.apply(console, [\"[\" + now + \"] \" + instance.name + \":\"].concat(args));\r\n\t break;\r\n\t case exports.LogLevel.VERBOSE:\r\n\t console.log.apply(console, [\"[\" + now + \"] \" + instance.name + \":\"].concat(args));\r\n\t break;\r\n\t case exports.LogLevel.INFO:\r\n\t console.info.apply(console, [\"[\" + now + \"] \" + instance.name + \":\"].concat(args));\r\n\t break;\r\n\t case exports.LogLevel.WARN:\r\n\t console.warn.apply(console, [\"[\" + now + \"] \" + instance.name + \":\"].concat(args));\r\n\t break;\r\n\t case exports.LogLevel.ERROR:\r\n\t console.error.apply(console, [\"[\" + now + \"] \" + instance.name + \":\"].concat(args));\r\n\t break;\r\n\t default:\r\n\t throw new Error(\"Attempted to log a message with an invalid logType (value: \" + logType + \")\");\r\n\t }\r\n\t};\r\n\tvar Logger = /** @class */ (function () {\r\n\t /**\r\n\t * Gives you an instance of a Logger to capture messages according to\r\n\t * Firebase's logging scheme.\r\n\t *\r\n\t * @param name The name that the logs will be associated with\r\n\t */\r\n\t function Logger(name) {\r\n\t this.name = name;\r\n\t /**\r\n\t * The log level of the given Logger instance.\r\n\t */\r\n\t this._logLevel = defaultLogLevel;\r\n\t /**\r\n\t * The log handler for the Logger instance.\r\n\t */\r\n\t this._logHandler = defaultLogHandler;\r\n\t /**\r\n\t * Capture the current instance for later use\r\n\t */\r\n\t instances.push(this);\r\n\t }\r\n\t Object.defineProperty(Logger.prototype, \"logLevel\", {\r\n\t get: function () {\r\n\t return this._logLevel;\r\n\t },\r\n\t set: function (val) {\r\n\t if (!(val in exports.LogLevel)) {\r\n\t throw new TypeError('Invalid value assigned to `logLevel`');\r\n\t }\r\n\t this._logLevel = val;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(Logger.prototype, \"logHandler\", {\r\n\t get: function () {\r\n\t return this._logHandler;\r\n\t },\r\n\t set: function (val) {\r\n\t if (typeof val !== 'function') {\r\n\t throw new TypeError('Value assigned to `logHandler` must be a function');\r\n\t }\r\n\t this._logHandler = val;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t /**\r\n\t * The functions below are all based on the `console` interface\r\n\t */\r\n\t Logger.prototype.debug = function () {\r\n\t var args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t args[_i] = arguments[_i];\r\n\t }\r\n\t this._logHandler.apply(this, [this, exports.LogLevel.DEBUG].concat(args));\r\n\t };\r\n\t Logger.prototype.log = function () {\r\n\t var args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t args[_i] = arguments[_i];\r\n\t }\r\n\t this._logHandler.apply(this, [this, exports.LogLevel.VERBOSE].concat(args));\r\n\t };\r\n\t Logger.prototype.info = function () {\r\n\t var args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t args[_i] = arguments[_i];\r\n\t }\r\n\t this._logHandler.apply(this, [this, exports.LogLevel.INFO].concat(args));\r\n\t };\r\n\t Logger.prototype.warn = function () {\r\n\t var args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t args[_i] = arguments[_i];\r\n\t }\r\n\t this._logHandler.apply(this, [this, exports.LogLevel.WARN].concat(args));\r\n\t };\r\n\t Logger.prototype.error = function () {\r\n\t var args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t args[_i] = arguments[_i];\r\n\t }\r\n\t this._logHandler.apply(this, [this, exports.LogLevel.ERROR].concat(args));\r\n\t };\r\n\t return Logger;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tfunction setLogLevel(level) {\r\n\t instances.forEach(function (inst) {\r\n\t inst.logLevel = level;\r\n\t });\r\n\t}\n\t\n\texports.setLogLevel = setLogLevel;\n\texports.Logger = Logger;\n\n\n/***/ }),\n\n/***/ 441:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\t\n\tfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\t\n\tvar util = __webpack_require__(132);\n\tvar tslib_1 = __webpack_require__(286);\n\tvar firebase = _interopDefault(__webpack_require__(73));\n\t\n\t/**\r\n\t * Copyright 2018 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar ERROR_CODES = {\r\n\t AVAILABLE_IN_WINDOW: 'only-available-in-window',\r\n\t AVAILABLE_IN_SW: 'only-available-in-sw',\r\n\t SHOULD_BE_INHERITED: 'should-be-overriden',\r\n\t BAD_SENDER_ID: 'bad-sender-id',\r\n\t INCORRECT_GCM_SENDER_ID: 'incorrect-gcm-sender-id',\r\n\t PERMISSION_DEFAULT: 'permission-default',\r\n\t PERMISSION_BLOCKED: 'permission-blocked',\r\n\t UNSUPPORTED_BROWSER: 'unsupported-browser',\r\n\t NOTIFICATIONS_BLOCKED: 'notifications-blocked',\r\n\t FAILED_DEFAULT_REGISTRATION: 'failed-serviceworker-registration',\r\n\t SW_REGISTRATION_EXPECTED: 'sw-registration-expected',\r\n\t GET_SUBSCRIPTION_FAILED: 'get-subscription-failed',\r\n\t INVALID_SAVED_TOKEN: 'invalid-saved-token',\r\n\t SW_REG_REDUNDANT: 'sw-reg-redundant',\r\n\t TOKEN_SUBSCRIBE_FAILED: 'token-subscribe-failed',\r\n\t TOKEN_SUBSCRIBE_NO_TOKEN: 'token-subscribe-no-token',\r\n\t TOKEN_SUBSCRIBE_NO_PUSH_SET: 'token-subscribe-no-push-set',\r\n\t TOKEN_UNSUBSCRIBE_FAILED: 'token-unsubscribe-failed',\r\n\t TOKEN_UPDATE_FAILED: 'token-update-failed',\r\n\t TOKEN_UPDATE_NO_TOKEN: 'token-update-no-token',\r\n\t USE_SW_BEFORE_GET_TOKEN: 'use-sw-before-get-token',\r\n\t INVALID_DELETE_TOKEN: 'invalid-delete-token',\r\n\t DELETE_TOKEN_NOT_FOUND: 'delete-token-not-found',\r\n\t DELETE_SCOPE_NOT_FOUND: 'delete-scope-not-found',\r\n\t BG_HANDLER_FUNCTION_EXPECTED: 'bg-handler-function-expected',\r\n\t NO_WINDOW_CLIENT_TO_MSG: 'no-window-client-to-msg',\r\n\t UNABLE_TO_RESUBSCRIBE: 'unable-to-resubscribe',\r\n\t NO_FCM_TOKEN_FOR_RESUBSCRIBE: 'no-fcm-token-for-resubscribe',\r\n\t FAILED_TO_DELETE_TOKEN: 'failed-to-delete-token',\r\n\t NO_SW_IN_REG: 'no-sw-in-reg',\r\n\t BAD_SCOPE: 'bad-scope',\r\n\t BAD_VAPID_KEY: 'bad-vapid-key',\r\n\t BAD_SUBSCRIPTION: 'bad-subscription',\r\n\t BAD_TOKEN: 'bad-token',\r\n\t BAD_PUSH_SET: 'bad-push-set',\r\n\t FAILED_DELETE_VAPID_KEY: 'failed-delete-vapid-key',\r\n\t INVALID_PUBLIC_VAPID_KEY: 'invalid-public-vapid-key',\r\n\t USE_PUBLIC_KEY_BEFORE_GET_TOKEN: 'use-public-key-before-get-token',\r\n\t PUBLIC_KEY_DECRYPTION_FAILED: 'public-vapid-key-decryption-failed'\r\n\t};\r\n\tvar ERROR_MAP = (_a = {}, _a[ERROR_CODES.AVAILABLE_IN_WINDOW] = 'This method is available in a Window context.', _a[ERROR_CODES.AVAILABLE_IN_SW] = 'This method is available in a service worker ' + 'context.', _a[ERROR_CODES.SHOULD_BE_INHERITED] = 'This method should be overriden by ' + 'extended classes.', _a[ERROR_CODES.BAD_SENDER_ID] = \"Please ensure that 'messagingSenderId' is set \" +\r\n\t 'correctly in the options passed into firebase.initializeApp().', _a[ERROR_CODES.PERMISSION_DEFAULT] = 'The required permissions were not granted and ' + 'dismissed instead.', _a[ERROR_CODES.PERMISSION_BLOCKED] = 'The required permissions were not granted and ' + 'blocked instead.', _a[ERROR_CODES.UNSUPPORTED_BROWSER] = \"This browser doesn't support the API's \" +\r\n\t 'required to use the firebase SDK.', _a[ERROR_CODES.NOTIFICATIONS_BLOCKED] = 'Notifications have been blocked.', _a[ERROR_CODES.FAILED_DEFAULT_REGISTRATION] = 'We are unable to register the ' +\r\n\t 'default service worker. {$browserErrorMessage}', _a[ERROR_CODES.SW_REGISTRATION_EXPECTED] = 'A service worker registration was the ' + 'expected input.', _a[ERROR_CODES.GET_SUBSCRIPTION_FAILED] = 'There was an error when trying to get ' +\r\n\t 'any existing Push Subscriptions.', _a[ERROR_CODES.INVALID_SAVED_TOKEN] = 'Unable to access details of the saved token.', _a[ERROR_CODES.SW_REG_REDUNDANT] = 'The service worker being used for push was made ' + 'redundant.', _a[ERROR_CODES.TOKEN_SUBSCRIBE_FAILED] = 'A problem occured while subscribing the ' + 'user to FCM: {$message}', _a[ERROR_CODES.TOKEN_SUBSCRIBE_NO_TOKEN] = 'FCM returned no token when subscribing ' + 'the user to push.', _a[ERROR_CODES.TOKEN_SUBSCRIBE_NO_PUSH_SET] = 'FCM returned an invalid response ' + 'when getting an FCM token.', _a[ERROR_CODES.TOKEN_UNSUBSCRIBE_FAILED] = 'A problem occured while unsubscribing the ' + 'user from FCM: {$message}', _a[ERROR_CODES.TOKEN_UPDATE_FAILED] = 'A problem occured while updating the ' + 'user from FCM: {$message}', _a[ERROR_CODES.TOKEN_UPDATE_NO_TOKEN] = 'FCM returned no token when updating ' + 'the user to push.', _a[ERROR_CODES.USE_SW_BEFORE_GET_TOKEN] = 'The useServiceWorker() method may only be called once and must be ' +\r\n\t 'called before calling getToken() to ensure your service worker is used.', _a[ERROR_CODES.INVALID_DELETE_TOKEN] = 'You must pass a valid token into ' +\r\n\t 'deleteToken(), i.e. the token from getToken().', _a[ERROR_CODES.DELETE_TOKEN_NOT_FOUND] = 'The deletion attempt for token could not ' +\r\n\t 'be performed as the token was not found.', _a[ERROR_CODES.DELETE_SCOPE_NOT_FOUND] = 'The deletion attempt for service worker ' +\r\n\t 'scope could not be performed as the scope was not found.', _a[ERROR_CODES.BG_HANDLER_FUNCTION_EXPECTED] = 'The input to ' + 'setBackgroundMessageHandler() must be a function.', _a[ERROR_CODES.NO_WINDOW_CLIENT_TO_MSG] = 'An attempt was made to message a ' + 'non-existant window client.', _a[ERROR_CODES.UNABLE_TO_RESUBSCRIBE] = 'There was an error while re-subscribing ' +\r\n\t 'the FCM token for push messaging. Will have to resubscribe the ' +\r\n\t 'user on next visit. {$message}', _a[ERROR_CODES.NO_FCM_TOKEN_FOR_RESUBSCRIBE] = 'Could not find an FCM token ' +\r\n\t 'and as a result, unable to resubscribe. Will have to resubscribe the ' +\r\n\t 'user on next visit.', _a[ERROR_CODES.FAILED_TO_DELETE_TOKEN] = 'Unable to delete the currently saved token.', _a[ERROR_CODES.NO_SW_IN_REG] = 'Even though the service worker registration was ' +\r\n\t 'successful, there was a problem accessing the service worker itself.', _a[ERROR_CODES.INCORRECT_GCM_SENDER_ID] = \"Please change your web app manifest's \" +\r\n\t \"'gcm_sender_id' value to '103953800507' to use Firebase messaging.\", _a[ERROR_CODES.BAD_SCOPE] = 'The service worker scope must be a string with at ' +\r\n\t 'least one character.', _a[ERROR_CODES.BAD_VAPID_KEY] = 'The public VAPID key is not a Uint8Array with 65 bytes.', _a[ERROR_CODES.BAD_SUBSCRIPTION] = 'The subscription must be a valid ' + 'PushSubscription.', _a[ERROR_CODES.BAD_TOKEN] = 'The FCM Token used for storage / lookup was not ' +\r\n\t 'a valid token string.', _a[ERROR_CODES.BAD_PUSH_SET] = 'The FCM push set used for storage / lookup was not ' +\r\n\t 'not a valid push set string.', _a[ERROR_CODES.FAILED_DELETE_VAPID_KEY] = 'The VAPID key could not be deleted.', _a[ERROR_CODES.INVALID_PUBLIC_VAPID_KEY] = 'The public VAPID key must be a string.', _a[ERROR_CODES.PUBLIC_KEY_DECRYPTION_FAILED] = 'The public VAPID key did not equal ' + '65 bytes when decrypted.', _a);\r\n\tvar errorFactory = new util.ErrorFactory('messaging', 'Messaging', ERROR_MAP);\r\n\tvar _a;\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar DEFAULT_PUBLIC_VAPID_KEY = new Uint8Array([\r\n\t 0x04,\r\n\t 0x33,\r\n\t 0x94,\r\n\t 0xf7,\r\n\t 0xdf,\r\n\t 0xa1,\r\n\t 0xeb,\r\n\t 0xb1,\r\n\t 0xdc,\r\n\t 0x03,\r\n\t 0xa2,\r\n\t 0x5e,\r\n\t 0x15,\r\n\t 0x71,\r\n\t 0xdb,\r\n\t 0x48,\r\n\t 0xd3,\r\n\t 0x2e,\r\n\t 0xed,\r\n\t 0xed,\r\n\t 0xb2,\r\n\t 0x34,\r\n\t 0xdb,\r\n\t 0xb7,\r\n\t 0x47,\r\n\t 0x3a,\r\n\t 0x0c,\r\n\t 0x8f,\r\n\t 0xc4,\r\n\t 0xcc,\r\n\t 0xe1,\r\n\t 0x6f,\r\n\t 0x3c,\r\n\t 0x8c,\r\n\t 0x84,\r\n\t 0xdf,\r\n\t 0xab,\r\n\t 0xb6,\r\n\t 0x66,\r\n\t 0x3e,\r\n\t 0xf2,\r\n\t 0x0c,\r\n\t 0xd4,\r\n\t 0x8b,\r\n\t 0xfe,\r\n\t 0xe3,\r\n\t 0xf9,\r\n\t 0x76,\r\n\t 0x2f,\r\n\t 0x14,\r\n\t 0x1c,\r\n\t 0x63,\r\n\t 0x08,\r\n\t 0x6a,\r\n\t 0x6f,\r\n\t 0x2d,\r\n\t 0xb1,\r\n\t 0x1a,\r\n\t 0x95,\r\n\t 0xb0,\r\n\t 0xce,\r\n\t 0x37,\r\n\t 0xc0,\r\n\t 0x9c,\r\n\t 0x6e\r\n\t]);\r\n\tvar ENDPOINT = 'https://fcm.googleapis.com';\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar MessageParameter;\r\n\t(function (MessageParameter) {\r\n\t MessageParameter[\"TYPE_OF_MSG\"] = \"firebase-messaging-msg-type\";\r\n\t MessageParameter[\"DATA\"] = \"firebase-messaging-msg-data\";\r\n\t})(MessageParameter || (MessageParameter = {}));\r\n\tvar MessageType;\r\n\t(function (MessageType) {\r\n\t MessageType[\"PUSH_MSG_RECEIVED\"] = \"push-msg-received\";\r\n\t MessageType[\"NOTIFICATION_CLICKED\"] = \"notification-clicked\";\r\n\t})(MessageType || (MessageType = {}));\n\t\n\t/**\r\n\t * Copyright 2018 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tfunction isArrayBufferEqual(a, b) {\r\n\t if (a == null || b == null) {\r\n\t return false;\r\n\t }\r\n\t if (a === b) {\r\n\t return true;\r\n\t }\r\n\t if (a.byteLength !== b.byteLength) {\r\n\t return false;\r\n\t }\r\n\t var viewA = new DataView(a);\r\n\t var viewB = new DataView(b);\r\n\t for (var i = 0; i < a.byteLength; i++) {\r\n\t if (viewA.getUint8(i) !== viewB.getUint8(i)) {\r\n\t return false;\r\n\t }\r\n\t }\r\n\t return true;\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tfunction toBase64(arrayBuffer) {\r\n\t var uint8Version = new Uint8Array(arrayBuffer);\r\n\t return btoa(String.fromCharCode.apply(null, uint8Version));\r\n\t}\r\n\tfunction arrayBufferToBase64(arrayBuffer) {\r\n\t var base64String = toBase64(arrayBuffer);\r\n\t return base64String\r\n\t .replace(/=/g, '')\r\n\t .replace(/\\+/g, '-')\r\n\t .replace(/\\//g, '_');\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar IIDModel = /** @class */ (function () {\r\n\t function IIDModel() {\r\n\t }\r\n\t IIDModel.prototype.getToken = function (senderId, subscription, publicVapidKey) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var p256dh, auth, fcmSubscribeBody, applicationPubKey, headers, subscribeOptions, responseData, response, err_1, message;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t p256dh = arrayBufferToBase64(subscription.getKey('p256dh'));\r\n\t auth = arrayBufferToBase64(subscription.getKey('auth'));\r\n\t fcmSubscribeBody = \"authorized_entity=\" + senderId + \"&\" +\r\n\t (\"endpoint=\" + subscription.endpoint + \"&\") +\r\n\t (\"encryption_key=\" + p256dh + \"&\") +\r\n\t (\"encryption_auth=\" + auth);\r\n\t if (publicVapidKey !== DEFAULT_PUBLIC_VAPID_KEY) {\r\n\t applicationPubKey = arrayBufferToBase64(publicVapidKey);\r\n\t fcmSubscribeBody += \"&application_pub_key=\" + applicationPubKey;\r\n\t }\r\n\t headers = new Headers();\r\n\t headers.append('Content-Type', 'application/x-www-form-urlencoded');\r\n\t subscribeOptions = {\r\n\t method: 'POST',\r\n\t headers: headers,\r\n\t body: fcmSubscribeBody\r\n\t };\r\n\t _a.label = 1;\r\n\t case 1:\r\n\t _a.trys.push([1, 4, , 5]);\r\n\t return [4 /*yield*/, fetch(ENDPOINT + '/fcm/connect/subscribe', subscribeOptions)];\r\n\t case 2:\r\n\t response = _a.sent();\r\n\t return [4 /*yield*/, response.json()];\r\n\t case 3:\r\n\t responseData = _a.sent();\r\n\t return [3 /*break*/, 5];\r\n\t case 4:\r\n\t err_1 = _a.sent();\r\n\t throw errorFactory.create(ERROR_CODES.TOKEN_SUBSCRIBE_FAILED);\r\n\t case 5:\r\n\t if (responseData.error) {\r\n\t message = responseData.error.message;\r\n\t throw errorFactory.create(ERROR_CODES.TOKEN_SUBSCRIBE_FAILED, {\r\n\t message: message\r\n\t });\r\n\t }\r\n\t if (!responseData.token) {\r\n\t throw errorFactory.create(ERROR_CODES.TOKEN_SUBSCRIBE_NO_TOKEN);\r\n\t }\r\n\t if (!responseData.pushSet) {\r\n\t throw errorFactory.create(ERROR_CODES.TOKEN_SUBSCRIBE_NO_PUSH_SET);\r\n\t }\r\n\t return [2 /*return*/, {\r\n\t token: responseData.token,\r\n\t pushSet: responseData.pushSet\r\n\t }];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Update the underlying token details for fcmToken.\r\n\t */\r\n\t IIDModel.prototype.updateToken = function (senderId, fcmToken, fcmPushSet, subscription, publicVapidKey) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var p256dh, auth, fcmUpdateBody, applicationPubKey, headers, updateOptions, responseData, response, err_2, message;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t p256dh = arrayBufferToBase64(subscription.getKey('p256dh'));\r\n\t auth = arrayBufferToBase64(subscription.getKey('auth'));\r\n\t fcmUpdateBody = \"push_set=\" + fcmPushSet + \"&\" +\r\n\t (\"token=\" + fcmToken + \"&\") +\r\n\t (\"authorized_entity=\" + senderId + \"&\") +\r\n\t (\"endpoint=\" + subscription.endpoint + \"&\") +\r\n\t (\"encryption_key=\" + p256dh + \"&\") +\r\n\t (\"encryption_auth=\" + auth);\r\n\t if (publicVapidKey !== DEFAULT_PUBLIC_VAPID_KEY) {\r\n\t applicationPubKey = arrayBufferToBase64(publicVapidKey);\r\n\t fcmUpdateBody += \"&application_pub_key=\" + applicationPubKey;\r\n\t }\r\n\t headers = new Headers();\r\n\t headers.append('Content-Type', 'application/x-www-form-urlencoded');\r\n\t updateOptions = {\r\n\t method: 'POST',\r\n\t headers: headers,\r\n\t body: fcmUpdateBody\r\n\t };\r\n\t _a.label = 1;\r\n\t case 1:\r\n\t _a.trys.push([1, 4, , 5]);\r\n\t return [4 /*yield*/, fetch(ENDPOINT + '/fcm/connect/subscribe', updateOptions)];\r\n\t case 2:\r\n\t response = _a.sent();\r\n\t return [4 /*yield*/, response.json()];\r\n\t case 3:\r\n\t responseData = _a.sent();\r\n\t return [3 /*break*/, 5];\r\n\t case 4:\r\n\t err_2 = _a.sent();\r\n\t throw errorFactory.create(ERROR_CODES.TOKEN_UPDATE_FAILED);\r\n\t case 5:\r\n\t if (responseData.error) {\r\n\t message = responseData.error.message;\r\n\t throw errorFactory.create(ERROR_CODES.TOKEN_UPDATE_FAILED, {\r\n\t message: message\r\n\t });\r\n\t }\r\n\t if (!responseData.token) {\r\n\t throw errorFactory.create(ERROR_CODES.TOKEN_UPDATE_NO_TOKEN);\r\n\t }\r\n\t return [2 /*return*/, responseData.token];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Given a fcmToken, pushSet and messagingSenderId, delete an FCM token.\r\n\t */\r\n\t IIDModel.prototype.deleteToken = function (senderId, fcmToken, fcmPushSet) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var fcmUnsubscribeBody, headers, unsubscribeOptions, response, responseData, message, err_3;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t fcmUnsubscribeBody = \"authorized_entity=\" + senderId + \"&\" +\r\n\t (\"token=\" + fcmToken + \"&\") +\r\n\t (\"pushSet=\" + fcmPushSet);\r\n\t headers = new Headers();\r\n\t headers.append('Content-Type', 'application/x-www-form-urlencoded');\r\n\t unsubscribeOptions = {\r\n\t method: 'POST',\r\n\t headers: headers,\r\n\t body: fcmUnsubscribeBody\r\n\t };\r\n\t _a.label = 1;\r\n\t case 1:\r\n\t _a.trys.push([1, 4, , 5]);\r\n\t return [4 /*yield*/, fetch(ENDPOINT + '/fcm/connect/unsubscribe', unsubscribeOptions)];\r\n\t case 2:\r\n\t response = _a.sent();\r\n\t return [4 /*yield*/, response.json()];\r\n\t case 3:\r\n\t responseData = _a.sent();\r\n\t if (responseData.error) {\r\n\t message = responseData.error.message;\r\n\t throw errorFactory.create(ERROR_CODES.TOKEN_UNSUBSCRIBE_FAILED, {\r\n\t message: message\r\n\t });\r\n\t }\r\n\t return [3 /*break*/, 5];\r\n\t case 4:\r\n\t err_3 = _a.sent();\r\n\t throw errorFactory.create(ERROR_CODES.TOKEN_UNSUBSCRIBE_FAILED);\r\n\t case 5: return [2 /*return*/];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t return IIDModel;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tfunction base64ToArrayBuffer(base64String) {\r\n\t var padding = '='.repeat((4 - base64String.length % 4) % 4);\r\n\t var base64 = (base64String + padding)\r\n\t .replace(/\\-/g, '+')\r\n\t .replace(/_/g, '/');\r\n\t var rawData = window.atob(base64);\r\n\t var outputArray = new Uint8Array(rawData.length);\r\n\t for (var i = 0; i < rawData.length; ++i) {\r\n\t outputArray[i] = rawData.charCodeAt(i);\r\n\t }\r\n\t return outputArray;\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar OLD_DB_NAME = 'undefined';\r\n\tvar OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\r\n\tfunction handleDb(db) {\r\n\t if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\r\n\t // We found a database with the name 'undefined', but our expected object\r\n\t // store isn't defined.\r\n\t return;\r\n\t }\r\n\t var transaction = db.transaction(OLD_OBJECT_STORE_NAME);\r\n\t var objectStore = transaction.objectStore(OLD_OBJECT_STORE_NAME);\r\n\t var iidModel = new IIDModel();\r\n\t var openCursorRequest = objectStore.openCursor();\r\n\t openCursorRequest.onerror = function (event) {\r\n\t // NOOP - Nothing we can do.\r\n\t console.warn('Unable to cleanup old IDB.', event);\r\n\t };\r\n\t openCursorRequest.onsuccess = function () {\r\n\t var cursor = openCursorRequest.result;\r\n\t if (cursor) {\r\n\t // cursor.value contains the current record being iterated through\r\n\t // this is where you'd do something with the result\r\n\t var tokenDetails = cursor.value;\r\n\t iidModel.deleteToken(tokenDetails.fcmSenderId, tokenDetails.fcmToken, tokenDetails.fcmPushSet);\r\n\t cursor.continue();\r\n\t }\r\n\t else {\r\n\t db.close();\r\n\t indexedDB.deleteDatabase(OLD_DB_NAME);\r\n\t }\r\n\t };\r\n\t}\r\n\tfunction cleanV1() {\r\n\t var request = indexedDB.open(OLD_DB_NAME);\r\n\t request.onerror = function (event) {\r\n\t // NOOP - Nothing we can do.\r\n\t };\r\n\t request.onsuccess = function (event) {\r\n\t var db = request.result;\r\n\t handleDb(db);\r\n\t };\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar DBInterface = /** @class */ (function () {\r\n\t function DBInterface() {\r\n\t this.dbPromise = null;\r\n\t }\r\n\t /** Gets record(s) from the objectStore that match the given key. */\r\n\t DBInterface.prototype.get = function (key) {\r\n\t return this.createTransaction(function (objectStore) { return objectStore.get(key); });\r\n\t };\r\n\t /** Gets record(s) from the objectStore that match the given index. */\r\n\t DBInterface.prototype.getIndex = function (index, key) {\r\n\t function runRequest(objectStore) {\r\n\t var idbIndex = objectStore.index(index);\r\n\t return idbIndex.get(key);\r\n\t }\r\n\t return this.createTransaction(runRequest);\r\n\t };\r\n\t /** Assigns or overwrites the record for the given value. */\r\n\t // tslint:disable-next-line:no-any IndexedDB values are of type \"any\"\r\n\t DBInterface.prototype.put = function (value) {\r\n\t return this.createTransaction(function (objectStore) { return objectStore.put(value); }, 'readwrite');\r\n\t };\r\n\t /** Deletes record(s) from the objectStore that match the given key. */\r\n\t DBInterface.prototype.delete = function (key) {\r\n\t return this.createTransaction(function (objectStore) { return objectStore.delete(key); }, 'readwrite');\r\n\t };\r\n\t /**\r\n\t * Close the currently open database.\r\n\t */\r\n\t DBInterface.prototype.closeDatabase = function () {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var db;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t if (!this.dbPromise) return [3 /*break*/, 2];\r\n\t return [4 /*yield*/, this.dbPromise];\r\n\t case 1:\r\n\t db = _a.sent();\r\n\t db.close();\r\n\t this.dbPromise = null;\r\n\t _a.label = 2;\r\n\t case 2: return [2 /*return*/];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Creates an IndexedDB Transaction and passes its objectStore to the\r\n\t * runRequest function, which runs the database request.\r\n\t *\r\n\t * @return Promise that resolves with the result of the runRequest function\r\n\t */\r\n\t DBInterface.prototype.createTransaction = function (runRequest, mode) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var db, transaction, request, result;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0: return [4 /*yield*/, this.getDb()];\r\n\t case 1:\r\n\t db = _a.sent();\r\n\t transaction = db.transaction(this.objectStoreName, mode);\r\n\t request = transaction.objectStore(this.objectStoreName);\r\n\t return [4 /*yield*/, promisify(runRequest(request))];\r\n\t case 2:\r\n\t result = _a.sent();\r\n\t return [2 /*return*/, new Promise(function (resolve, reject) {\r\n\t transaction.oncomplete = function () {\r\n\t resolve(result);\r\n\t };\r\n\t transaction.onerror = function () {\r\n\t reject(transaction.error);\r\n\t };\r\n\t })];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /** Gets the cached db connection or opens a new one. */\r\n\t DBInterface.prototype.getDb = function () {\r\n\t var _this = this;\r\n\t if (!this.dbPromise) {\r\n\t this.dbPromise = new Promise(function (resolve, reject) {\r\n\t var request = indexedDB.open(_this.dbName, _this.dbVersion);\r\n\t request.onsuccess = function () {\r\n\t resolve(request.result);\r\n\t };\r\n\t request.onerror = function () {\r\n\t _this.dbPromise = null;\r\n\t reject(request.error);\r\n\t };\r\n\t request.onupgradeneeded = function (event) { return _this.onDbUpgrade(request, event); };\r\n\t });\r\n\t }\r\n\t return this.dbPromise;\r\n\t };\r\n\t return DBInterface;\r\n\t}());\r\n\t/** Promisifies an IDBRequest. Resolves with the IDBRequest's result. */\r\n\tfunction promisify(request) {\r\n\t return new Promise(function (resolve, reject) {\r\n\t request.onsuccess = function () {\r\n\t resolve(request.result);\r\n\t };\r\n\t request.onerror = function () {\r\n\t reject(request.error);\r\n\t };\r\n\t });\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar TokenDetailsModel = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(TokenDetailsModel, _super);\r\n\t function TokenDetailsModel() {\r\n\t var _this = _super !== null && _super.apply(this, arguments) || this;\r\n\t _this.dbName = 'fcm_token_details_db';\r\n\t _this.dbVersion = 3;\r\n\t _this.objectStoreName = 'fcm_token_object_Store';\r\n\t return _this;\r\n\t }\r\n\t TokenDetailsModel.prototype.onDbUpgrade = function (request, event) {\r\n\t var db = request.result;\r\n\t // Lack of 'break' statements is intentional.\r\n\t switch (event.oldVersion) {\r\n\t case 0: {\r\n\t // New IDB instance\r\n\t var objectStore = db.createObjectStore(this.objectStoreName, {\r\n\t keyPath: 'swScope'\r\n\t });\r\n\t // Make sure the sender ID can be searched\r\n\t objectStore.createIndex('fcmSenderId', 'fcmSenderId', {\r\n\t unique: false\r\n\t });\r\n\t objectStore.createIndex('fcmToken', 'fcmToken', { unique: true });\r\n\t }\r\n\t case 1: {\r\n\t // Prior to version 2, we were using either 'fcm_token_details_db'\r\n\t // or 'undefined' as the database name due to bug in the SDK\r\n\t // So remove the old tokens and databases.\r\n\t cleanV1();\r\n\t }\r\n\t case 2: {\r\n\t var objectStore = request.transaction.objectStore(this.objectStoreName);\r\n\t var cursorRequest_1 = objectStore.openCursor();\r\n\t cursorRequest_1.onsuccess = function () {\r\n\t var cursor = cursorRequest_1.result;\r\n\t if (cursor) {\r\n\t var value = cursor.value;\r\n\t var newValue = tslib_1.__assign({}, value);\r\n\t if (!value.createTime) {\r\n\t newValue.createTime = Date.now();\r\n\t }\r\n\t if (typeof value.vapidKey === 'string') {\r\n\t newValue.vapidKey = base64ToArrayBuffer(value.vapidKey);\r\n\t }\r\n\t if (typeof value.auth === 'string') {\r\n\t newValue.auth = base64ToArrayBuffer(value.auth).buffer;\r\n\t }\r\n\t if (typeof value.auth === 'string') {\r\n\t newValue.p256dh = base64ToArrayBuffer(value.p256dh).buffer;\r\n\t }\r\n\t cursor.update(newValue);\r\n\t cursor.continue();\r\n\t }\r\n\t };\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Given a token, this method will look up the details in indexedDB.\r\n\t */\r\n\t TokenDetailsModel.prototype.getTokenDetailsFromToken = function (fcmToken) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t if (!fcmToken) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_TOKEN);\r\n\t }\r\n\t validateInputs({ fcmToken: fcmToken });\r\n\t return [2 /*return*/, this.getIndex('fcmToken', fcmToken)];\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Given a service worker scope, this method will look up the details in\r\n\t * indexedDB.\r\n\t * @return The details associated with that token.\r\n\t */\r\n\t TokenDetailsModel.prototype.getTokenDetailsFromSWScope = function (swScope) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t if (!swScope) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n\t }\r\n\t validateInputs({ swScope: swScope });\r\n\t return [2 /*return*/, this.get(swScope)];\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Save the details for the fcm token for re-use at a later date.\r\n\t * @param input A plain js object containing args to save.\r\n\t */\r\n\t TokenDetailsModel.prototype.saveTokenDetails = function (tokenDetails) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t if (!tokenDetails.swScope) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n\t }\r\n\t if (!tokenDetails.vapidKey) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_VAPID_KEY);\r\n\t }\r\n\t if (!tokenDetails.endpoint || !tokenDetails.auth || !tokenDetails.p256dh) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_SUBSCRIPTION);\r\n\t }\r\n\t if (!tokenDetails.fcmSenderId) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_SENDER_ID);\r\n\t }\r\n\t if (!tokenDetails.fcmToken) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_TOKEN);\r\n\t }\r\n\t if (!tokenDetails.fcmPushSet) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_PUSH_SET);\r\n\t }\r\n\t validateInputs(tokenDetails);\r\n\t return [2 /*return*/, this.put(tokenDetails)];\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * This method deletes details of the current FCM token.\r\n\t * It's returning a promise in case we need to move to an async\r\n\t * method for deleting at a later date.\r\n\t *\r\n\t * @return Resolves once the FCM token details have been deleted and returns\r\n\t * the deleted details.\r\n\t */\r\n\t TokenDetailsModel.prototype.deleteToken = function (token) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var details;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t if (typeof token !== 'string' || token.length === 0) {\r\n\t return [2 /*return*/, Promise.reject(errorFactory.create(ERROR_CODES.INVALID_DELETE_TOKEN))];\r\n\t }\r\n\t return [4 /*yield*/, this.getTokenDetailsFromToken(token)];\r\n\t case 1:\r\n\t details = _a.sent();\r\n\t if (!details) {\r\n\t throw errorFactory.create(ERROR_CODES.DELETE_TOKEN_NOT_FOUND);\r\n\t }\r\n\t return [4 /*yield*/, this.delete(details.swScope)];\r\n\t case 2:\r\n\t _a.sent();\r\n\t return [2 /*return*/, details];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t return TokenDetailsModel;\r\n\t}(DBInterface));\r\n\t/**\r\n\t * This method takes an object and will check for known arguments and\r\n\t * validate the input.\r\n\t * @return Promise that resolves if input is valid, rejects otherwise.\r\n\t */\r\n\tfunction validateInputs(input) {\r\n\t if (input.fcmToken) {\r\n\t if (typeof input.fcmToken !== 'string' || input.fcmToken.length === 0) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_TOKEN);\r\n\t }\r\n\t }\r\n\t if (input.swScope) {\r\n\t if (typeof input.swScope !== 'string' || input.swScope.length === 0) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n\t }\r\n\t }\r\n\t if (input.vapidKey) {\r\n\t if (!(input.vapidKey instanceof Uint8Array) ||\r\n\t input.vapidKey.length !== 65) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_VAPID_KEY);\r\n\t }\r\n\t }\r\n\t if (input.endpoint) {\r\n\t if (typeof input.endpoint !== 'string' || input.endpoint.length === 0) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_SUBSCRIPTION);\r\n\t }\r\n\t }\r\n\t if (input.auth) {\r\n\t if (!(input.auth instanceof ArrayBuffer)) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_SUBSCRIPTION);\r\n\t }\r\n\t }\r\n\t if (input.p256dh) {\r\n\t if (!(input.p256dh instanceof ArrayBuffer)) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_SUBSCRIPTION);\r\n\t }\r\n\t }\r\n\t if (input.fcmSenderId) {\r\n\t if (typeof input.fcmSenderId !== 'string' ||\r\n\t input.fcmSenderId.length === 0) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_SENDER_ID);\r\n\t }\r\n\t }\r\n\t if (input.fcmPushSet) {\r\n\t if (typeof input.fcmPushSet !== 'string' || input.fcmPushSet.length === 0) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_PUSH_SET);\r\n\t }\r\n\t }\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar UNCOMPRESSED_PUBLIC_KEY_SIZE = 65;\r\n\tvar VapidDetailsModel = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(VapidDetailsModel, _super);\r\n\t function VapidDetailsModel() {\r\n\t var _this = _super !== null && _super.apply(this, arguments) || this;\r\n\t _this.dbName = 'fcm_vapid_details_db';\r\n\t _this.dbVersion = 1;\r\n\t _this.objectStoreName = 'fcm_vapid_object_Store';\r\n\t return _this;\r\n\t }\r\n\t VapidDetailsModel.prototype.onDbUpgrade = function (request) {\r\n\t var db = request.result;\r\n\t db.createObjectStore(this.objectStoreName, { keyPath: 'swScope' });\r\n\t };\r\n\t /**\r\n\t * Given a service worker scope, this method will look up the vapid key\r\n\t * in indexedDB.\r\n\t */\r\n\t VapidDetailsModel.prototype.getVapidFromSWScope = function (swScope) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var result;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t if (typeof swScope !== 'string' || swScope.length === 0) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n\t }\r\n\t return [4 /*yield*/, this.get(swScope)];\r\n\t case 1:\r\n\t result = _a.sent();\r\n\t return [2 /*return*/, result ? result.vapidKey : undefined];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Save a vapid key against a swScope for later date.\r\n\t */\r\n\t VapidDetailsModel.prototype.saveVapidDetails = function (swScope, vapidKey) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var details;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t if (typeof swScope !== 'string' || swScope.length === 0) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n\t }\r\n\t if (vapidKey === null || vapidKey.length !== UNCOMPRESSED_PUBLIC_KEY_SIZE) {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_VAPID_KEY);\r\n\t }\r\n\t details = {\r\n\t swScope: swScope,\r\n\t vapidKey: vapidKey\r\n\t };\r\n\t return [2 /*return*/, this.put(details)];\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * This method deletes details of the current FCM VAPID key for a SW scope.\r\n\t * Resolves once the scope/vapid details have been deleted and returns the\r\n\t * deleted vapid key.\r\n\t */\r\n\t VapidDetailsModel.prototype.deleteVapidDetails = function (swScope) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var vapidKey;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0: return [4 /*yield*/, this.getVapidFromSWScope(swScope)];\r\n\t case 1:\r\n\t vapidKey = _a.sent();\r\n\t if (!vapidKey) {\r\n\t throw errorFactory.create(ERROR_CODES.DELETE_SCOPE_NOT_FOUND);\r\n\t }\r\n\t return [4 /*yield*/, this.delete(swScope)];\r\n\t case 2:\r\n\t _a.sent();\r\n\t return [2 /*return*/, vapidKey];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t return VapidDetailsModel;\r\n\t}(DBInterface));\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar SENDER_ID_OPTION_NAME = 'messagingSenderId';\r\n\t// Database cache should be invalidated once a week.\r\n\tvar TOKEN_EXPIRATION_MILLIS = 7 * 24 * 60 * 60 * 1000; // 7 days\r\n\tvar ControllerInterface = /** @class */ (function () {\r\n\t /**\r\n\t * An interface of the Messaging Service API\r\n\t */\r\n\t function ControllerInterface(app) {\r\n\t var _this = this;\r\n\t if (!app.options[SENDER_ID_OPTION_NAME] ||\r\n\t typeof app.options[SENDER_ID_OPTION_NAME] !== 'string') {\r\n\t throw errorFactory.create(ERROR_CODES.BAD_SENDER_ID);\r\n\t }\r\n\t this.messagingSenderId = app.options[SENDER_ID_OPTION_NAME];\r\n\t this.tokenDetailsModel = new TokenDetailsModel();\r\n\t this.vapidDetailsModel = new VapidDetailsModel();\r\n\t this.iidModel = new IIDModel();\r\n\t this.app = app;\r\n\t this.INTERNAL = {\r\n\t delete: function () { return _this.delete(); }\r\n\t };\r\n\t }\r\n\t /**\r\n\t * @export\r\n\t */\r\n\t ControllerInterface.prototype.getToken = function () {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var currentPermission, swReg, publicVapidKey, pushSubscription, tokenDetails;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t currentPermission = this.getNotificationPermission_();\r\n\t if (currentPermission !== 'granted') {\r\n\t if (currentPermission === 'denied') {\r\n\t return [2 /*return*/, Promise.reject(errorFactory.create(ERROR_CODES.NOTIFICATIONS_BLOCKED))];\r\n\t }\r\n\t // We must wait for permission to be granted\r\n\t return [2 /*return*/, Promise.resolve(null)];\r\n\t }\r\n\t return [4 /*yield*/, this.getSWRegistration_()];\r\n\t case 1:\r\n\t swReg = _a.sent();\r\n\t return [4 /*yield*/, this.getPublicVapidKey_()];\r\n\t case 2:\r\n\t publicVapidKey = _a.sent();\r\n\t return [4 /*yield*/, this.getPushSubscription(swReg, publicVapidKey)];\r\n\t case 3:\r\n\t pushSubscription = _a.sent();\r\n\t return [4 /*yield*/, this.tokenDetailsModel.getTokenDetailsFromSWScope(swReg.scope)];\r\n\t case 4:\r\n\t tokenDetails = _a.sent();\r\n\t if (tokenDetails) {\r\n\t return [2 /*return*/, this.manageExistingToken(swReg, pushSubscription, publicVapidKey, tokenDetails)];\r\n\t }\r\n\t return [2 /*return*/, this.getNewToken(swReg, pushSubscription, publicVapidKey)];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * manageExistingToken is triggered if there's an existing FCM token in the\r\n\t * database and it can take 3 different actions:\r\n\t * 1) Retrieve the existing FCM token from the database.\r\n\t * 2) If VAPID details have changed: Delete the existing token and create a\r\n\t * new one with the new VAPID key.\r\n\t * 3) If the database cache is invalidated: Send a request to FCM to update\r\n\t * the token, and to check if the token is still valid on FCM-side.\r\n\t */\r\n\t ControllerInterface.prototype.manageExistingToken = function (swReg, pushSubscription, publicVapidKey, tokenDetails) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var isTokenValid, now;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t isTokenValid = isTokenStillValid(pushSubscription, publicVapidKey, tokenDetails);\r\n\t if (isTokenValid) {\r\n\t now = Date.now();\r\n\t if (now < tokenDetails.createTime + TOKEN_EXPIRATION_MILLIS) {\r\n\t return [2 /*return*/, tokenDetails.fcmToken];\r\n\t }\r\n\t else {\r\n\t return [2 /*return*/, this.updateToken(swReg, pushSubscription, publicVapidKey, tokenDetails)];\r\n\t }\r\n\t }\r\n\t // If the token is no longer valid (for example if the VAPID details\r\n\t // have changed), delete the existing token from the FCM client and server\r\n\t // database. No need to unsubscribe from the Service Worker as we have a\r\n\t // good push subscription that we'd like to use in getNewToken.\r\n\t return [4 /*yield*/, this.deleteTokenFromDB(tokenDetails.fcmToken)];\r\n\t case 1:\r\n\t // If the token is no longer valid (for example if the VAPID details\r\n\t // have changed), delete the existing token from the FCM client and server\r\n\t // database. No need to unsubscribe from the Service Worker as we have a\r\n\t // good push subscription that we'd like to use in getNewToken.\r\n\t _a.sent();\r\n\t return [2 /*return*/, this.getNewToken(swReg, pushSubscription, publicVapidKey)];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t ControllerInterface.prototype.updateToken = function (swReg, pushSubscription, publicVapidKey, tokenDetails) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var updatedToken, allDetails, e_1;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t _a.trys.push([0, 4, , 6]);\r\n\t return [4 /*yield*/, this.iidModel.updateToken(this.messagingSenderId, tokenDetails.fcmToken, tokenDetails.fcmPushSet, pushSubscription, publicVapidKey)];\r\n\t case 1:\r\n\t updatedToken = _a.sent();\r\n\t allDetails = {\r\n\t swScope: swReg.scope,\r\n\t vapidKey: publicVapidKey,\r\n\t fcmSenderId: this.messagingSenderId,\r\n\t fcmToken: updatedToken,\r\n\t fcmPushSet: tokenDetails.fcmPushSet,\r\n\t createTime: Date.now(),\r\n\t endpoint: pushSubscription.endpoint,\r\n\t auth: pushSubscription.getKey('auth'),\r\n\t p256dh: pushSubscription.getKey('p256dh')\r\n\t };\r\n\t return [4 /*yield*/, this.tokenDetailsModel.saveTokenDetails(allDetails)];\r\n\t case 2:\r\n\t _a.sent();\r\n\t return [4 /*yield*/, this.vapidDetailsModel.saveVapidDetails(swReg.scope, publicVapidKey)];\r\n\t case 3:\r\n\t _a.sent();\r\n\t return [2 /*return*/, updatedToken];\r\n\t case 4:\r\n\t e_1 = _a.sent();\r\n\t return [4 /*yield*/, this.deleteToken(tokenDetails.fcmToken)];\r\n\t case 5:\r\n\t _a.sent();\r\n\t throw e_1;\r\n\t case 6: return [2 /*return*/];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t ControllerInterface.prototype.getNewToken = function (swReg, pushSubscription, publicVapidKey) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var tokenDetails, allDetails;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0: return [4 /*yield*/, this.iidModel.getToken(this.messagingSenderId, pushSubscription, publicVapidKey)];\r\n\t case 1:\r\n\t tokenDetails = _a.sent();\r\n\t allDetails = {\r\n\t swScope: swReg.scope,\r\n\t vapidKey: publicVapidKey,\r\n\t fcmSenderId: this.messagingSenderId,\r\n\t fcmToken: tokenDetails.token,\r\n\t fcmPushSet: tokenDetails.pushSet,\r\n\t createTime: Date.now(),\r\n\t endpoint: pushSubscription.endpoint,\r\n\t auth: pushSubscription.getKey('auth'),\r\n\t p256dh: pushSubscription.getKey('p256dh')\r\n\t };\r\n\t return [4 /*yield*/, this.tokenDetailsModel.saveTokenDetails(allDetails)];\r\n\t case 2:\r\n\t _a.sent();\r\n\t return [4 /*yield*/, this.vapidDetailsModel.saveVapidDetails(swReg.scope, publicVapidKey)];\r\n\t case 3:\r\n\t _a.sent();\r\n\t return [2 /*return*/, tokenDetails.token];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * This method deletes tokens that the token manager looks after,\r\n\t * unsubscribes the token from FCM and then unregisters the push\r\n\t * subscription if it exists. It returns a promise that indicates\r\n\t * whether or not the unsubscribe request was processed successfully.\r\n\t * @export\r\n\t */\r\n\t ControllerInterface.prototype.deleteToken = function (token) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var registration, pushSubscription;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0: \r\n\t // Delete the token details from the database.\r\n\t return [4 /*yield*/, this.deleteTokenFromDB(token)];\r\n\t case 1:\r\n\t // Delete the token details from the database.\r\n\t _a.sent();\r\n\t return [4 /*yield*/, this.getSWRegistration_()];\r\n\t case 2:\r\n\t registration = _a.sent();\r\n\t if (!registration) return [3 /*break*/, 4];\r\n\t return [4 /*yield*/, registration.pushManager.getSubscription()];\r\n\t case 3:\r\n\t pushSubscription = _a.sent();\r\n\t if (pushSubscription) {\r\n\t return [2 /*return*/, pushSubscription.unsubscribe()];\r\n\t }\r\n\t _a.label = 4;\r\n\t case 4: \r\n\t // If there's no SW, consider it a success.\r\n\t return [2 /*return*/, true];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * This method will delete the token from the client database, and make a\r\n\t * call to FCM to remove it from the server DB. Does not temper with the\r\n\t * push subscription.\r\n\t */\r\n\t ControllerInterface.prototype.deleteTokenFromDB = function (token) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var details;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0: return [4 /*yield*/, this.tokenDetailsModel.deleteToken(token)];\r\n\t case 1:\r\n\t details = _a.sent();\r\n\t return [4 /*yield*/, this.iidModel.deleteToken(details.fcmSenderId, details.fcmToken, details.fcmPushSet)];\r\n\t case 2:\r\n\t _a.sent();\r\n\t return [2 /*return*/];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Gets a PushSubscription for the current user.\r\n\t */\r\n\t ControllerInterface.prototype.getPushSubscription = function (swRegistration, publicVapidKey) {\r\n\t return swRegistration.pushManager.getSubscription().then(function (subscription) {\r\n\t if (subscription) {\r\n\t return subscription;\r\n\t }\r\n\t return swRegistration.pushManager.subscribe({\r\n\t userVisibleOnly: true,\r\n\t applicationServerKey: publicVapidKey\r\n\t });\r\n\t });\r\n\t };\r\n\t //\r\n\t // The following methods should only be available in the window.\r\n\t //\r\n\t ControllerInterface.prototype.requestPermission = function () {\r\n\t throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n\t };\r\n\t ControllerInterface.prototype.useServiceWorker = function (registration) {\r\n\t throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n\t };\r\n\t ControllerInterface.prototype.usePublicVapidKey = function (b64PublicKey) {\r\n\t throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n\t };\r\n\t ControllerInterface.prototype.onMessage = function (nextOrObserver, error, completed) {\r\n\t throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n\t };\r\n\t ControllerInterface.prototype.onTokenRefresh = function (nextOrObserver, error, completed) {\r\n\t throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n\t };\r\n\t //\r\n\t // The following methods are used by the service worker only.\r\n\t //\r\n\t ControllerInterface.prototype.setBackgroundMessageHandler = function (callback) {\r\n\t throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_SW);\r\n\t };\r\n\t //\r\n\t // The following methods are used by the service themselves and not exposed\r\n\t // publicly or not expected to be used by developers.\r\n\t //\r\n\t /**\r\n\t * This method is required to adhere to the Firebase interface.\r\n\t * It closes any currently open indexdb database connections.\r\n\t */\r\n\t ControllerInterface.prototype.delete = function () {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0: return [4 /*yield*/, Promise.all([\r\n\t this.tokenDetailsModel.closeDatabase(),\r\n\t this.vapidDetailsModel.closeDatabase()\r\n\t ])];\r\n\t case 1:\r\n\t _a.sent();\r\n\t return [2 /*return*/];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Returns the current Notification Permission state.\r\n\t */\r\n\t ControllerInterface.prototype.getNotificationPermission_ = function () {\r\n\t // TODO: Remove the cast when this issue is fixed:\r\n\t // https://github.com/Microsoft/TypeScript/issues/14701\r\n\t // tslint:disable-next-line no-any\r\n\t return Notification.permission;\r\n\t };\r\n\t ControllerInterface.prototype.getTokenDetailsModel = function () {\r\n\t return this.tokenDetailsModel;\r\n\t };\r\n\t ControllerInterface.prototype.getVapidDetailsModel = function () {\r\n\t return this.vapidDetailsModel;\r\n\t };\r\n\t // Visible for testing\r\n\t // TODO: make protected\r\n\t ControllerInterface.prototype.getIIDModel = function () {\r\n\t return this.iidModel;\r\n\t };\r\n\t return ControllerInterface;\r\n\t}());\r\n\t/**\r\n\t * Checks if the tokenDetails match the details provided in the clients.\r\n\t */\r\n\tfunction isTokenStillValid(pushSubscription, publicVapidKey, tokenDetails) {\r\n\t if (!isArrayBufferEqual(publicVapidKey.buffer, tokenDetails.vapidKey.buffer)) {\r\n\t return false;\r\n\t }\r\n\t var isEndpointEqual = pushSubscription.endpoint === tokenDetails.endpoint;\r\n\t var isAuthEqual = isArrayBufferEqual(pushSubscription.getKey('auth'), tokenDetails.auth);\r\n\t var isP256dhEqual = isArrayBufferEqual(pushSubscription.getKey('p256dh'), tokenDetails.p256dh);\r\n\t return isEndpointEqual && isAuthEqual && isP256dhEqual;\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar FCM_MSG = 'FCM_MSG';\r\n\tvar SWController = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(SWController, _super);\r\n\t function SWController(app) {\r\n\t var _this = _super.call(this, app) || this;\r\n\t _this.bgMessageHandler = null;\r\n\t self.addEventListener('push', function (e) {\r\n\t _this.onPush(e);\r\n\t });\r\n\t self.addEventListener('pushsubscriptionchange', function (e) {\r\n\t _this.onSubChange(e);\r\n\t });\r\n\t self.addEventListener('notificationclick', function (e) {\r\n\t _this.onNotificationClick(e);\r\n\t });\r\n\t return _this;\r\n\t }\r\n\t // Visible for testing\r\n\t // TODO: Make private\r\n\t SWController.prototype.onPush = function (event) {\r\n\t event.waitUntil(this.onPush_(event));\r\n\t };\r\n\t // Visible for testing\r\n\t // TODO: Make private\r\n\t SWController.prototype.onSubChange = function (event) {\r\n\t event.waitUntil(this.onSubChange_(event));\r\n\t };\r\n\t // Visible for testing\r\n\t // TODO: Make private\r\n\t SWController.prototype.onNotificationClick = function (event) {\r\n\t event.waitUntil(this.onNotificationClick_(event));\r\n\t };\r\n\t /**\r\n\t * A handler for push events that shows notifications based on the content of\r\n\t * the payload.\r\n\t *\r\n\t * The payload must be a JSON-encoded Object with a `notification` key. The\r\n\t * value of the `notification` property will be used as the NotificationOptions\r\n\t * object passed to showNotification. Additionally, the `title` property of the\r\n\t * notification object will be used as the title.\r\n\t *\r\n\t * If there is no notification data in the payload then no notification will be\r\n\t * shown.\r\n\t */\r\n\t SWController.prototype.onPush_ = function (event) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var msgPayload, hasVisibleClients, notificationDetails, notificationTitle, reg;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t if (!event.data) {\r\n\t return [2 /*return*/];\r\n\t }\r\n\t try {\r\n\t msgPayload = event.data.json();\r\n\t }\r\n\t catch (err) {\r\n\t // Not JSON so not an FCM message\r\n\t return [2 /*return*/];\r\n\t }\r\n\t return [4 /*yield*/, this.hasVisibleClients_()];\r\n\t case 1:\r\n\t hasVisibleClients = _a.sent();\r\n\t if (hasVisibleClients) {\r\n\t // Do not need to show a notification.\r\n\t if (msgPayload.notification || this.bgMessageHandler) {\r\n\t // Send to page\r\n\t return [2 /*return*/, this.sendMessageToWindowClients_(msgPayload)];\r\n\t }\r\n\t return [2 /*return*/];\r\n\t }\r\n\t notificationDetails = this.getNotificationData_(msgPayload);\r\n\t if (!notificationDetails) return [3 /*break*/, 3];\r\n\t notificationTitle = notificationDetails.title || '';\r\n\t return [4 /*yield*/, this.getSWRegistration_()];\r\n\t case 2:\r\n\t reg = _a.sent();\r\n\t return [2 /*return*/, reg.showNotification(notificationTitle, notificationDetails)];\r\n\t case 3:\r\n\t if (!this.bgMessageHandler) return [3 /*break*/, 5];\r\n\t return [4 /*yield*/, this.bgMessageHandler(msgPayload)];\r\n\t case 4:\r\n\t _a.sent();\r\n\t return [2 /*return*/];\r\n\t case 5: return [2 /*return*/];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t SWController.prototype.onSubChange_ = function (event) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var registration, err_1, err_2, tokenDetailsModel, tokenDetails;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t _a.trys.push([0, 2, , 3]);\r\n\t return [4 /*yield*/, this.getSWRegistration_()];\r\n\t case 1:\r\n\t registration = _a.sent();\r\n\t return [3 /*break*/, 3];\r\n\t case 2:\r\n\t err_1 = _a.sent();\r\n\t throw errorFactory.create(ERROR_CODES.UNABLE_TO_RESUBSCRIBE, {\r\n\t message: err_1\r\n\t });\r\n\t case 3:\r\n\t _a.trys.push([3, 5, , 8]);\r\n\t return [4 /*yield*/, registration.pushManager.getSubscription()];\r\n\t case 4:\r\n\t _a.sent();\r\n\t return [3 /*break*/, 8];\r\n\t case 5:\r\n\t err_2 = _a.sent();\r\n\t tokenDetailsModel = this.getTokenDetailsModel();\r\n\t return [4 /*yield*/, tokenDetailsModel.getTokenDetailsFromSWScope(registration.scope)];\r\n\t case 6:\r\n\t tokenDetails = _a.sent();\r\n\t if (!tokenDetails) {\r\n\t // This should rarely occure, but could if indexedDB\r\n\t // is corrupted or wiped\r\n\t throw err_2;\r\n\t }\r\n\t // Attempt to delete the token if we know it's bad\r\n\t return [4 /*yield*/, this.deleteToken(tokenDetails.fcmToken)];\r\n\t case 7:\r\n\t // Attempt to delete the token if we know it's bad\r\n\t _a.sent();\r\n\t throw err_2;\r\n\t case 8: return [2 /*return*/];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t SWController.prototype.onNotificationClick_ = function (event) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var msgPayload, clickAction, windowClient, internalMsg;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t if (!event.notification ||\r\n\t !event.notification.data ||\r\n\t !event.notification.data[FCM_MSG]) {\r\n\t // Not an FCM notification, do nothing.\r\n\t return [2 /*return*/];\r\n\t }\r\n\t // Prevent other listeners from receiving the event\r\n\t event.stopImmediatePropagation();\r\n\t event.notification.close();\r\n\t msgPayload = event.notification.data[FCM_MSG];\r\n\t if (!msgPayload.notification) {\r\n\t // Nothing to do.\r\n\t return [2 /*return*/];\r\n\t }\r\n\t clickAction = msgPayload.notification.click_action;\r\n\t if (!clickAction) {\r\n\t // Nothing to do.\r\n\t return [2 /*return*/];\r\n\t }\r\n\t return [4 /*yield*/, this.getWindowClient_(clickAction)];\r\n\t case 1:\r\n\t windowClient = _a.sent();\r\n\t if (!!windowClient) return [3 /*break*/, 3];\r\n\t return [4 /*yield*/, self.clients.openWindow(clickAction)];\r\n\t case 2:\r\n\t // Unable to find window client so need to open one.\r\n\t windowClient = _a.sent();\r\n\t return [3 /*break*/, 5];\r\n\t case 3: return [4 /*yield*/, windowClient.focus()];\r\n\t case 4:\r\n\t windowClient = _a.sent();\r\n\t _a.label = 5;\r\n\t case 5:\r\n\t if (!windowClient) {\r\n\t // Window Client will not be returned if it's for a third party origin.\r\n\t return [2 /*return*/];\r\n\t }\r\n\t // Delete notification data from payload before sending to the page.\r\n\t delete msgPayload.notification;\r\n\t internalMsg = createNewMsg(MessageType.NOTIFICATION_CLICKED, msgPayload);\r\n\t // Attempt to send a message to the client to handle the data\r\n\t // Is affected by: https://github.com/slightlyoff/ServiceWorker/issues/728\r\n\t return [2 /*return*/, this.attemptToMessageClient_(windowClient, internalMsg)];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t // Visible for testing\r\n\t // TODO: Make private\r\n\t SWController.prototype.getNotificationData_ = function (msgPayload) {\r\n\t if (!msgPayload) {\r\n\t return;\r\n\t }\r\n\t if (typeof msgPayload.notification !== 'object') {\r\n\t return;\r\n\t }\r\n\t var notificationInformation = tslib_1.__assign({}, msgPayload.notification);\r\n\t // Put the message payload under FCM_MSG name so we can identify the\r\n\t // notification as being an FCM notification vs a notification from\r\n\t // somewhere else (i.e. normal web push or developer generated\r\n\t // notification).\r\n\t notificationInformation.data = (_a = {}, _a[FCM_MSG] = msgPayload, _a);\r\n\t return notificationInformation;\r\n\t var _a;\r\n\t };\r\n\t /**\r\n\t * Calling setBackgroundMessageHandler will opt in to some specific\r\n\t * behaviours.\r\n\t * 1.) If a notification doesn't need to be shown due to a window already\r\n\t * being visible, then push messages will be sent to the page.\r\n\t * 2.) If a notification needs to be shown, and the message contains no\r\n\t * notification data this method will be called\r\n\t * and the promise it returns will be passed to event.waitUntil.\r\n\t * If you do not set this callback then all push messages will let and the\r\n\t * developer can handle them in a their own 'push' event callback\r\n\t *\r\n\t * @param callback The callback to be called when a push message is received\r\n\t * and a notification must be shown. The callback will be given the data from\r\n\t * the push message.\r\n\t */\r\n\t SWController.prototype.setBackgroundMessageHandler = function (callback) {\r\n\t if (!callback || typeof callback !== 'function') {\r\n\t throw errorFactory.create(ERROR_CODES.BG_HANDLER_FUNCTION_EXPECTED);\r\n\t }\r\n\t this.bgMessageHandler = callback;\r\n\t };\r\n\t /**\r\n\t * @param url The URL to look for when focusing a client.\r\n\t * @return Returns an existing window client or a newly opened WindowClient.\r\n\t */\r\n\t // Visible for testing\r\n\t // TODO: Make private\r\n\t SWController.prototype.getWindowClient_ = function (url) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var parsedURL, clientList, suitableClient, i, parsedClientUrl;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0:\r\n\t parsedURL = new URL(url, self.location.href).href;\r\n\t return [4 /*yield*/, getClientList()];\r\n\t case 1:\r\n\t clientList = _a.sent();\r\n\t suitableClient = null;\r\n\t for (i = 0; i < clientList.length; i++) {\r\n\t parsedClientUrl = new URL(clientList[i].url, self.location.href)\r\n\t .href;\r\n\t if (parsedClientUrl === parsedURL) {\r\n\t suitableClient = clientList[i];\r\n\t break;\r\n\t }\r\n\t }\r\n\t return [2 /*return*/, suitableClient];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * This message will attempt to send the message to a window client.\r\n\t * @param client The WindowClient to send the message to.\r\n\t * @param message The message to send to the client.\r\n\t * @returns Returns a promise that resolves after sending the message. This\r\n\t * does not guarantee that the message was successfully received.\r\n\t */\r\n\t // Visible for testing\r\n\t // TODO: Make private\r\n\t SWController.prototype.attemptToMessageClient_ = function (client, message) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t // NOTE: This returns a promise in case this API is abstracted later on to\r\n\t // do additional work\r\n\t if (!client) {\r\n\t throw errorFactory.create(ERROR_CODES.NO_WINDOW_CLIENT_TO_MSG);\r\n\t }\r\n\t client.postMessage(message);\r\n\t return [2 /*return*/];\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @returns If there is currently a visible WindowClient, this method will\r\n\t * resolve to true, otherwise false.\r\n\t */\r\n\t // Visible for testing\r\n\t // TODO: Make private\r\n\t SWController.prototype.hasVisibleClients_ = function () {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var clientList;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0: return [4 /*yield*/, getClientList()];\r\n\t case 1:\r\n\t clientList = _a.sent();\r\n\t return [2 /*return*/, clientList.some(function (client) { return client.visibilityState === 'visible'; })];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @param msgPayload The data from the push event that should be sent to all\r\n\t * available pages.\r\n\t * @returns Returns a promise that resolves once the message has been sent to\r\n\t * all WindowClients.\r\n\t */\r\n\t // Visible for testing\r\n\t // TODO: Make private\r\n\t SWController.prototype.sendMessageToWindowClients_ = function (msgPayload) {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var _this = this;\r\n\t var clientList, internalMsg;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0: return [4 /*yield*/, getClientList()];\r\n\t case 1:\r\n\t clientList = _a.sent();\r\n\t internalMsg = createNewMsg(MessageType.PUSH_MSG_RECEIVED, msgPayload);\r\n\t return [4 /*yield*/, Promise.all(clientList.map(function (client) {\r\n\t return _this.attemptToMessageClient_(client, internalMsg);\r\n\t }))];\r\n\t case 2:\r\n\t _a.sent();\r\n\t return [2 /*return*/];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * This will register the default service worker and return the registration.\r\n\t * @return he service worker registration to be used for the push service.\r\n\t */\r\n\t SWController.prototype.getSWRegistration_ = function () {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t return [2 /*return*/, self.registration];\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * This will return the default VAPID key or the uint8array version of the\r\n\t * public VAPID key provided by the developer.\r\n\t */\r\n\t SWController.prototype.getPublicVapidKey_ = function () {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t var swReg, vapidKeyFromDatabase;\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t switch (_a.label) {\r\n\t case 0: return [4 /*yield*/, this.getSWRegistration_()];\r\n\t case 1:\r\n\t swReg = _a.sent();\r\n\t if (!swReg) {\r\n\t throw errorFactory.create(ERROR_CODES.SW_REGISTRATION_EXPECTED);\r\n\t }\r\n\t return [4 /*yield*/, this.getVapidDetailsModel().getVapidFromSWScope(swReg.scope)];\r\n\t case 2:\r\n\t vapidKeyFromDatabase = _a.sent();\r\n\t if (vapidKeyFromDatabase == null) {\r\n\t return [2 /*return*/, DEFAULT_PUBLIC_VAPID_KEY];\r\n\t }\r\n\t return [2 /*return*/, vapidKeyFromDatabase];\r\n\t }\r\n\t });\r\n\t });\r\n\t };\r\n\t return SWController;\r\n\t}(ControllerInterface));\r\n\tfunction getClientList() {\r\n\t return self.clients.matchAll({\r\n\t type: 'window',\r\n\t includeUncontrolled: true\r\n\t // TS doesn't know that \"type: 'window'\" means it'll return WindowClient[]\r\n\t });\r\n\t}\r\n\tfunction createNewMsg(msgType, msgData) {\r\n\t return _a = {}, _a[MessageParameter.TYPE_OF_MSG] = msgType, _a[MessageParameter.DATA] = msgData, _a;\r\n\t var _a;\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\r\n\tvar DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar WindowController = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(WindowController, _super);\r\n\t /**\r\n\t * A service that provides a MessagingService instance.\r\n\t */\r\n\t function WindowController(app) {\r\n\t var _this = _super.call(this, app) || this;\r\n\t _this.registrationToUse = null;\r\n\t _this.publicVapidKeyToUse = null;\r\n\t _this.manifestCheckPromise = null;\r\n\t _this.messageObserver = null;\r\n\t // @ts-ignore: Unused variable error, this is not implemented yet.\r\n\t _this.tokenRefreshObserver = null;\r\n\t _this.onMessageInternal = util.createSubscribe(function (observer) {\r\n\t _this.messageObserver = observer;\r\n\t });\r\n\t _this.onTokenRefreshInternal = util.createSubscribe(function (observer) {\r\n\t _this.tokenRefreshObserver = observer;\r\n\t });\r\n\t _this.setupSWMessageListener_();\r\n\t return _this;\r\n\t }\r\n\t /**\r\n\t * This method returns an FCM token if it can be generated.\r\n\t * The return promise will reject if the browser doesn't support\r\n\t * FCM, if permission is denied for notifications or it's not\r\n\t * possible to generate a token.\r\n\t *\r\n\t * @return Returns a promise that resolves to an FCM token or null if\r\n\t * permission isn't granted.\r\n\t */\r\n\t WindowController.prototype.getToken = function () {\r\n\t var _this = this;\r\n\t // Check that the required API's are available\r\n\t if (!this.isSupported_()) {\r\n\t return Promise.reject(errorFactory.create(ERROR_CODES.UNSUPPORTED_BROWSER));\r\n\t }\r\n\t return this.manifestCheck_().then(function () {\r\n\t return _super.prototype.getToken.call(_this);\r\n\t });\r\n\t };\r\n\t /**\r\n\t * The method checks that a manifest is defined and has the correct GCM\r\n\t * sender ID.\r\n\t * @return Returns a promise that resolves if the manifest matches\r\n\t * our required sender ID\r\n\t */\r\n\t // Visible for testing\r\n\t // TODO: make private\r\n\t WindowController.prototype.manifestCheck_ = function () {\r\n\t if (this.manifestCheckPromise) {\r\n\t return this.manifestCheckPromise;\r\n\t }\r\n\t var manifestTag = document.querySelector('link[rel=\"manifest\"]');\r\n\t if (!manifestTag) {\r\n\t this.manifestCheckPromise = Promise.resolve();\r\n\t }\r\n\t else {\r\n\t this.manifestCheckPromise = fetch(manifestTag.href)\r\n\t .then(function (response) {\r\n\t return response.json();\r\n\t })\r\n\t .catch(function () {\r\n\t // If the download or parsing fails allow check.\r\n\t // We only want to error if we KNOW that the gcm_sender_id is incorrect.\r\n\t })\r\n\t .then(function (manifestContent) {\r\n\t if (!manifestContent) {\r\n\t return;\r\n\t }\r\n\t if (!manifestContent['gcm_sender_id']) {\r\n\t return;\r\n\t }\r\n\t if (manifestContent['gcm_sender_id'] !== '103953800507') {\r\n\t throw errorFactory.create(ERROR_CODES.INCORRECT_GCM_SENDER_ID);\r\n\t }\r\n\t });\r\n\t }\r\n\t return this.manifestCheckPromise;\r\n\t };\r\n\t /**\r\n\t * Request permission if it is not currently granted\r\n\t *\r\n\t * @return Resolves if the permission was granted, otherwise rejects\r\n\t */\r\n\t WindowController.prototype.requestPermission = function () {\r\n\t return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n\t return tslib_1.__generator(this, function (_a) {\r\n\t if (\r\n\t // TODO: Remove the cast when this issue is fixed:\r\n\t // https://github.com/Microsoft/TypeScript/issues/14701\r\n\t // tslint:disable-next-line no-any\r\n\t Notification.permission === 'granted') {\r\n\t return [2 /*return*/];\r\n\t }\r\n\t return [2 /*return*/, new Promise(function (resolve, reject) {\r\n\t var managePermissionResult = function (result) {\r\n\t if (result === 'granted') {\r\n\t return resolve();\r\n\t }\r\n\t else if (result === 'denied') {\r\n\t return reject(errorFactory.create(ERROR_CODES.PERMISSION_BLOCKED));\r\n\t }\r\n\t else {\r\n\t return reject(errorFactory.create(ERROR_CODES.PERMISSION_DEFAULT));\r\n\t }\r\n\t };\r\n\t // The Notification.requestPermission API was changed to\r\n\t // return a promise so now have to handle both in case\r\n\t // browsers stop support callbacks for promised version\r\n\t var permissionPromise = Notification.requestPermission(managePermissionResult);\r\n\t if (permissionPromise) {\r\n\t // Prefer the promise version as it's the future API.\r\n\t permissionPromise.then(managePermissionResult);\r\n\t }\r\n\t })];\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * This method allows a developer to override the default service worker and\r\n\t * instead use a custom service worker.\r\n\t *\r\n\t * @param registration The service worker registration that should be used to\r\n\t * receive the push messages.\r\n\t */\r\n\t WindowController.prototype.useServiceWorker = function (registration) {\r\n\t if (!(registration instanceof ServiceWorkerRegistration)) {\r\n\t throw errorFactory.create(ERROR_CODES.SW_REGISTRATION_EXPECTED);\r\n\t }\r\n\t if (this.registrationToUse != null) {\r\n\t throw errorFactory.create(ERROR_CODES.USE_SW_BEFORE_GET_TOKEN);\r\n\t }\r\n\t this.registrationToUse = registration;\r\n\t };\r\n\t /**\r\n\t * This method allows a developer to override the default vapid key\r\n\t * and instead use a custom VAPID public key.\r\n\t *\r\n\t * @param publicKey A URL safe base64 encoded string.\r\n\t */\r\n\t WindowController.prototype.usePublicVapidKey = function (publicKey) {\r\n\t if (typeof publicKey !== 'string') {\r\n\t throw errorFactory.create(ERROR_CODES.INVALID_PUBLIC_VAPID_KEY);\r\n\t }\r\n\t if (this.publicVapidKeyToUse != null) {\r\n\t throw errorFactory.create(ERROR_CODES.USE_PUBLIC_KEY_BEFORE_GET_TOKEN);\r\n\t }\r\n\t var parsedKey = base64ToArrayBuffer(publicKey);\r\n\t if (parsedKey.length !== 65) {\r\n\t throw errorFactory.create(ERROR_CODES.PUBLIC_KEY_DECRYPTION_FAILED);\r\n\t }\r\n\t this.publicVapidKeyToUse = parsedKey;\r\n\t };\r\n\t /**\r\n\t * @export\r\n\t * @param nextOrObserver An observer object or a function triggered on\r\n\t * message.\r\n\t * @param error A function triggered on message error.\r\n\t * @param completed function triggered when the observer is removed.\r\n\t * @return The unsubscribe function for the observer.\r\n\t */\r\n\t WindowController.prototype.onMessage = function (nextOrObserver, error, completed) {\r\n\t if (typeof nextOrObserver === 'function') {\r\n\t return this.onMessageInternal(nextOrObserver, error, completed);\r\n\t }\r\n\t else {\r\n\t return this.onMessageInternal(nextOrObserver);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @param nextOrObserver An observer object or a function triggered on token\r\n\t * refresh.\r\n\t * @param error A function triggered on token refresh error.\r\n\t * @param completed function triggered when the observer is removed.\r\n\t * @return The unsubscribe function for the observer.\r\n\t */\r\n\t WindowController.prototype.onTokenRefresh = function (nextOrObserver, error, completed) {\r\n\t if (typeof nextOrObserver === 'function') {\r\n\t return this.onTokenRefreshInternal(nextOrObserver, error, completed);\r\n\t }\r\n\t else {\r\n\t return this.onTokenRefreshInternal(nextOrObserver);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Given a registration, wait for the service worker it relates to\r\n\t * become activer\r\n\t * @param registration Registration to wait for service worker to become active\r\n\t * @return Wait for service worker registration to become active\r\n\t */\r\n\t // Visible for testing\r\n\t // TODO: Make private\r\n\t WindowController.prototype.waitForRegistrationToActivate_ = function (registration) {\r\n\t var serviceWorker = registration.installing || registration.waiting || registration.active;\r\n\t return new Promise(function (resolve, reject) {\r\n\t if (!serviceWorker) {\r\n\t // This is a rare scenario but has occured in firefox\r\n\t reject(errorFactory.create(ERROR_CODES.NO_SW_IN_REG));\r\n\t return;\r\n\t }\r\n\t // Because the Promise function is called on next tick there is a\r\n\t // small chance that the worker became active or redundant already.\r\n\t if (serviceWorker.state === 'activated') {\r\n\t resolve(registration);\r\n\t return;\r\n\t }\r\n\t if (serviceWorker.state === 'redundant') {\r\n\t reject(errorFactory.create(ERROR_CODES.SW_REG_REDUNDANT));\r\n\t return;\r\n\t }\r\n\t var stateChangeListener = function () {\r\n\t if (serviceWorker.state === 'activated') {\r\n\t resolve(registration);\r\n\t }\r\n\t else if (serviceWorker.state === 'redundant') {\r\n\t reject(errorFactory.create(ERROR_CODES.SW_REG_REDUNDANT));\r\n\t }\r\n\t else {\r\n\t // Return early and wait to next state change\r\n\t return;\r\n\t }\r\n\t serviceWorker.removeEventListener('statechange', stateChangeListener);\r\n\t };\r\n\t serviceWorker.addEventListener('statechange', stateChangeListener);\r\n\t });\r\n\t };\r\n\t /**\r\n\t * This will register the default service worker and return the registration\r\n\t * @return The service worker registration to be used for the push service.\r\n\t */\r\n\t WindowController.prototype.getSWRegistration_ = function () {\r\n\t var _this = this;\r\n\t if (this.registrationToUse) {\r\n\t return this.waitForRegistrationToActivate_(this.registrationToUse);\r\n\t }\r\n\t // Make the registration null so we know useServiceWorker will not\r\n\t // use a new service worker as registrationToUse is no longer undefined\r\n\t this.registrationToUse = null;\r\n\t return navigator.serviceWorker\r\n\t .register(DEFAULT_SW_PATH, {\r\n\t scope: DEFAULT_SW_SCOPE\r\n\t })\r\n\t .catch(function (err) {\r\n\t throw errorFactory.create(ERROR_CODES.FAILED_DEFAULT_REGISTRATION, {\r\n\t browserErrorMessage: err.message\r\n\t });\r\n\t })\r\n\t .then(function (registration) {\r\n\t return _this.waitForRegistrationToActivate_(registration).then(function () {\r\n\t _this.registrationToUse = registration;\r\n\t // We update after activation due to an issue with Firefox v49 where\r\n\t // a race condition occassionally causes the service work to not\r\n\t // install\r\n\t registration.update();\r\n\t return registration;\r\n\t });\r\n\t });\r\n\t };\r\n\t /**\r\n\t * This will return the default VAPID key or the uint8array version of the public VAPID key\r\n\t * provided by the developer.\r\n\t */\r\n\t WindowController.prototype.getPublicVapidKey_ = function () {\r\n\t if (this.publicVapidKeyToUse) {\r\n\t return Promise.resolve(this.publicVapidKeyToUse);\r\n\t }\r\n\t return Promise.resolve(DEFAULT_PUBLIC_VAPID_KEY);\r\n\t };\r\n\t /**\r\n\t * This method will set up a message listener to handle\r\n\t * events from the service worker that should trigger\r\n\t * events in the page.\r\n\t */\r\n\t // Visible for testing\r\n\t // TODO: Make private\r\n\t WindowController.prototype.setupSWMessageListener_ = function () {\r\n\t var _this = this;\r\n\t if (!('serviceWorker' in navigator)) {\r\n\t return;\r\n\t }\r\n\t navigator.serviceWorker.addEventListener('message', function (event) {\r\n\t if (!event.data || !event.data[MessageParameter.TYPE_OF_MSG]) {\r\n\t // Not a message from FCM\r\n\t return;\r\n\t }\r\n\t var workerPageMessage = event.data;\r\n\t switch (workerPageMessage[MessageParameter.TYPE_OF_MSG]) {\r\n\t case MessageType.PUSH_MSG_RECEIVED:\r\n\t case MessageType.NOTIFICATION_CLICKED:\r\n\t var pushMessage = workerPageMessage[MessageParameter.DATA];\r\n\t if (_this.messageObserver) {\r\n\t _this.messageObserver.next(pushMessage);\r\n\t }\r\n\t break;\r\n\t default:\r\n\t // Noop.\r\n\t break;\r\n\t }\r\n\t }, false);\r\n\t };\r\n\t /**\r\n\t * Checks to see if the required API's are valid or not.\r\n\t * @return Returns true if the desired APIs are available.\r\n\t */\r\n\t // Visible for testing\r\n\t // TODO: Make private\r\n\t WindowController.prototype.isSupported_ = function () {\r\n\t return ('serviceWorker' in navigator &&\r\n\t 'PushManager' in window &&\r\n\t 'Notification' in window &&\r\n\t 'fetch' in window &&\r\n\t ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\r\n\t PushSubscription.prototype.hasOwnProperty('getKey'));\r\n\t };\r\n\t return WindowController;\r\n\t}(ControllerInterface));\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tfunction registerMessaging(instance) {\r\n\t var messagingName = 'messaging';\r\n\t var factoryMethod = function (app) {\r\n\t if (self && 'ServiceWorkerGlobalScope' in self) {\r\n\t return new SWController(app);\r\n\t }\r\n\t // Assume we are in the window context.\r\n\t return new WindowController(app);\r\n\t };\r\n\t var namespaceExports = {\r\n\t // no-inline\r\n\t Messaging: WindowController\r\n\t };\r\n\t instance.INTERNAL.registerService(messagingName, factoryMethod, namespaceExports);\r\n\t}\r\n\tregisterMessaging(firebase);\n\t\n\texports.registerMessaging = registerMessaging;\n\n\n/***/ }),\n\n/***/ 442:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(setImmediate, global) {'use strict';\n\t\n\t__webpack_require__(689);\n\t\n\t// Store setTimeout reference so promise-polyfill will be unaffected by\n\t// other code modifying setTimeout (like sinon.useFakeTimers())\n\tvar setTimeoutFunc = setTimeout;\n\t\n\tfunction noop() {}\n\t\n\t// Polyfill for Function.prototype.bind\n\tfunction bind(fn, thisArg) {\n\t return function() {\n\t fn.apply(thisArg, arguments);\n\t };\n\t}\n\t\n\tfunction Promise(fn) {\n\t if (!(this instanceof Promise))\n\t throw new TypeError('Promises must be constructed via new');\n\t if (typeof fn !== 'function') throw new TypeError('not a function');\n\t this._state = 0;\n\t this._handled = false;\n\t this._value = undefined;\n\t this._deferreds = [];\n\t\n\t doResolve(fn, this);\n\t}\n\t\n\tfunction handle(self, deferred) {\n\t while (self._state === 3) {\n\t self = self._value;\n\t }\n\t if (self._state === 0) {\n\t self._deferreds.push(deferred);\n\t return;\n\t }\n\t self._handled = true;\n\t Promise._immediateFn(function() {\n\t var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n\t if (cb === null) {\n\t (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n\t return;\n\t }\n\t var ret;\n\t try {\n\t ret = cb(self._value);\n\t } catch (e) {\n\t reject(deferred.promise, e);\n\t return;\n\t }\n\t resolve(deferred.promise, ret);\n\t });\n\t}\n\t\n\tfunction resolve(self, newValue) {\n\t try {\n\t // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n\t if (newValue === self)\n\t throw new TypeError('A promise cannot be resolved with itself.');\n\t if (\n\t newValue &&\n\t (typeof newValue === 'object' || typeof newValue === 'function')\n\t ) {\n\t var then = newValue.then;\n\t if (newValue instanceof Promise) {\n\t self._state = 3;\n\t self._value = newValue;\n\t finale(self);\n\t return;\n\t } else if (typeof then === 'function') {\n\t doResolve(bind(then, newValue), self);\n\t return;\n\t }\n\t }\n\t self._state = 1;\n\t self._value = newValue;\n\t finale(self);\n\t } catch (e) {\n\t reject(self, e);\n\t }\n\t}\n\t\n\tfunction reject(self, newValue) {\n\t self._state = 2;\n\t self._value = newValue;\n\t finale(self);\n\t}\n\t\n\tfunction finale(self) {\n\t if (self._state === 2 && self._deferreds.length === 0) {\n\t Promise._immediateFn(function() {\n\t if (!self._handled) {\n\t Promise._unhandledRejectionFn(self._value);\n\t }\n\t });\n\t }\n\t\n\t for (var i = 0, len = self._deferreds.length; i < len; i++) {\n\t handle(self, self._deferreds[i]);\n\t }\n\t self._deferreds = null;\n\t}\n\t\n\tfunction Handler(onFulfilled, onRejected, promise) {\n\t this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n\t this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n\t this.promise = promise;\n\t}\n\t\n\t/**\n\t * Take a potentially misbehaving resolver function and make sure\n\t * onFulfilled and onRejected are only called once.\n\t *\n\t * Makes no guarantees about asynchrony.\n\t */\n\tfunction doResolve(fn, self) {\n\t var done = false;\n\t try {\n\t fn(\n\t function(value) {\n\t if (done) return;\n\t done = true;\n\t resolve(self, value);\n\t },\n\t function(reason) {\n\t if (done) return;\n\t done = true;\n\t reject(self, reason);\n\t }\n\t );\n\t } catch (ex) {\n\t if (done) return;\n\t done = true;\n\t reject(self, ex);\n\t }\n\t}\n\t\n\tPromise.prototype['catch'] = function(onRejected) {\n\t return this.then(null, onRejected);\n\t};\n\t\n\tPromise.prototype.then = function(onFulfilled, onRejected) {\n\t var prom = new this.constructor(noop);\n\t\n\t handle(this, new Handler(onFulfilled, onRejected, prom));\n\t return prom;\n\t};\n\t\n\tPromise.prototype['finally'] = function(callback) {\n\t var constructor = this.constructor;\n\t return this.then(\n\t function(value) {\n\t return constructor.resolve(callback()).then(function() {\n\t return value;\n\t });\n\t },\n\t function(reason) {\n\t return constructor.resolve(callback()).then(function() {\n\t return constructor.reject(reason);\n\t });\n\t }\n\t );\n\t};\n\t\n\tPromise.all = function(arr) {\n\t return new Promise(function(resolve, reject) {\n\t if (!arr || typeof arr.length === 'undefined')\n\t throw new TypeError('Promise.all accepts an array');\n\t var args = Array.prototype.slice.call(arr);\n\t if (args.length === 0) return resolve([]);\n\t var remaining = args.length;\n\t\n\t function res(i, val) {\n\t try {\n\t if (val && (typeof val === 'object' || typeof val === 'function')) {\n\t var then = val.then;\n\t if (typeof then === 'function') {\n\t then.call(\n\t val,\n\t function(val) {\n\t res(i, val);\n\t },\n\t reject\n\t );\n\t return;\n\t }\n\t }\n\t args[i] = val;\n\t if (--remaining === 0) {\n\t resolve(args);\n\t }\n\t } catch (ex) {\n\t reject(ex);\n\t }\n\t }\n\t\n\t for (var i = 0; i < args.length; i++) {\n\t res(i, args[i]);\n\t }\n\t });\n\t};\n\t\n\tPromise.resolve = function(value) {\n\t if (value && typeof value === 'object' && value.constructor === Promise) {\n\t return value;\n\t }\n\t\n\t return new Promise(function(resolve) {\n\t resolve(value);\n\t });\n\t};\n\t\n\tPromise.reject = function(value) {\n\t return new Promise(function(resolve, reject) {\n\t reject(value);\n\t });\n\t};\n\t\n\tPromise.race = function(values) {\n\t return new Promise(function(resolve, reject) {\n\t for (var i = 0, len = values.length; i < len; i++) {\n\t values[i].then(resolve, reject);\n\t }\n\t });\n\t};\n\t\n\t// Use polyfill for setImmediate for performance gains\n\tPromise._immediateFn =\n\t (typeof setImmediate === 'function' &&\n\t function(fn) {\n\t setImmediate(fn);\n\t }) ||\n\t function(fn) {\n\t setTimeoutFunc(fn, 0);\n\t };\n\t\n\tPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n\t if (typeof console !== 'undefined' && console) {\n\t console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n\t }\n\t};\n\t\n\tvar globalNS = (function() {\n\t // the only reliable means to get the global object is\n\t // `Function('return this')()`\n\t // However, this causes CSP violations in Chrome apps.\n\t if (typeof self !== 'undefined') {\n\t return self;\n\t }\n\t if (typeof window !== 'undefined') {\n\t return window;\n\t }\n\t if (typeof global !== 'undefined') {\n\t return global;\n\t }\n\t throw new Error('unable to locate global object');\n\t})();\n\t\n\tif (!globalNS.Promise) {\n\t globalNS.Promise = Promise;\n\t}\n\t\n\tfunction createCommonjsModule(fn, module) {\n\t\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n\t}\n\t\n\tvar _global = createCommonjsModule(function (module) {\n\t// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\n\tvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n\t ? window : typeof self != 'undefined' && self.Math == Math ? self\n\t // eslint-disable-next-line no-new-func\n\t : Function('return this')();\n\tif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n\t});\n\t\n\tvar _core = createCommonjsModule(function (module) {\n\tvar core = module.exports = { version: '2.5.5' };\n\tif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n\t});\n\tvar _core_1 = _core.version;\n\t\n\tvar _isObject = function (it) {\n\t return typeof it === 'object' ? it !== null : typeof it === 'function';\n\t};\n\t\n\tvar _anObject = function (it) {\n\t if (!_isObject(it)) throw TypeError(it + ' is not an object!');\n\t return it;\n\t};\n\t\n\tvar _fails = function (exec) {\n\t try {\n\t return !!exec();\n\t } catch (e) {\n\t return true;\n\t }\n\t};\n\t\n\t// Thank's IE8 for his funny defineProperty\n\tvar _descriptors = !_fails(function () {\n\t return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n\t});\n\t\n\tvar document = _global.document;\n\t// typeof document.createElement is 'object' in old IE\n\tvar is = _isObject(document) && _isObject(document.createElement);\n\tvar _domCreate = function (it) {\n\t return is ? document.createElement(it) : {};\n\t};\n\t\n\tvar _ie8DomDefine = !_descriptors && !_fails(function () {\n\t return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;\n\t});\n\t\n\t// 7.1.1 ToPrimitive(input [, PreferredType])\n\t\n\t// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n\t// and the second argument - flag - preferred type is a string\n\tvar _toPrimitive = function (it, S) {\n\t if (!_isObject(it)) return it;\n\t var fn, val;\n\t if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n\t if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;\n\t if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n\t throw TypeError(\"Can't convert object to primitive value\");\n\t};\n\t\n\tvar dP = Object.defineProperty;\n\t\n\tvar f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n\t _anObject(O);\n\t P = _toPrimitive(P, true);\n\t _anObject(Attributes);\n\t if (_ie8DomDefine) try {\n\t return dP(O, P, Attributes);\n\t } catch (e) { /* empty */ }\n\t if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n\t if ('value' in Attributes) O[P] = Attributes.value;\n\t return O;\n\t};\n\t\n\tvar _objectDp = {\n\t\tf: f\n\t};\n\t\n\tvar _propertyDesc = function (bitmap, value) {\n\t return {\n\t enumerable: !(bitmap & 1),\n\t configurable: !(bitmap & 2),\n\t writable: !(bitmap & 4),\n\t value: value\n\t };\n\t};\n\t\n\tvar _hide = _descriptors ? function (object, key, value) {\n\t return _objectDp.f(object, key, _propertyDesc(1, value));\n\t} : function (object, key, value) {\n\t object[key] = value;\n\t return object;\n\t};\n\t\n\tvar hasOwnProperty = {}.hasOwnProperty;\n\tvar _has = function (it, key) {\n\t return hasOwnProperty.call(it, key);\n\t};\n\t\n\tvar id = 0;\n\tvar px = Math.random();\n\tvar _uid = function (key) {\n\t return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n\t};\n\t\n\tvar _redefine = createCommonjsModule(function (module) {\n\tvar SRC = _uid('src');\n\tvar TO_STRING = 'toString';\n\tvar $toString = Function[TO_STRING];\n\tvar TPL = ('' + $toString).split(TO_STRING);\n\t\n\t_core.inspectSource = function (it) {\n\t return $toString.call(it);\n\t};\n\t\n\t(module.exports = function (O, key, val, safe) {\n\t var isFunction = typeof val == 'function';\n\t if (isFunction) _has(val, 'name') || _hide(val, 'name', key);\n\t if (O[key] === val) return;\n\t if (isFunction) _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n\t if (O === _global) {\n\t O[key] = val;\n\t } else if (!safe) {\n\t delete O[key];\n\t _hide(O, key, val);\n\t } else if (O[key]) {\n\t O[key] = val;\n\t } else {\n\t _hide(O, key, val);\n\t }\n\t// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n\t})(Function.prototype, TO_STRING, function toString() {\n\t return typeof this == 'function' && this[SRC] || $toString.call(this);\n\t});\n\t});\n\t\n\tvar _aFunction = function (it) {\n\t if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n\t return it;\n\t};\n\t\n\t// optional / simple context binding\n\t\n\tvar _ctx = function (fn, that, length) {\n\t _aFunction(fn);\n\t if (that === undefined) return fn;\n\t switch (length) {\n\t case 1: return function (a) {\n\t return fn.call(that, a);\n\t };\n\t case 2: return function (a, b) {\n\t return fn.call(that, a, b);\n\t };\n\t case 3: return function (a, b, c) {\n\t return fn.call(that, a, b, c);\n\t };\n\t }\n\t return function (/* ...args */) {\n\t return fn.apply(that, arguments);\n\t };\n\t};\n\t\n\tvar PROTOTYPE = 'prototype';\n\t\n\tvar $export = function (type, name, source) {\n\t var IS_FORCED = type & $export.F;\n\t var IS_GLOBAL = type & $export.G;\n\t var IS_STATIC = type & $export.S;\n\t var IS_PROTO = type & $export.P;\n\t var IS_BIND = type & $export.B;\n\t var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE];\n\t var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});\n\t var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n\t var key, own, out, exp;\n\t if (IS_GLOBAL) source = name;\n\t for (key in source) {\n\t // contains in native\n\t own = !IS_FORCED && target && target[key] !== undefined;\n\t // export native or passed\n\t out = (own ? target : source)[key];\n\t // bind timers to global for call from export context\n\t exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;\n\t // extend global\n\t if (target) _redefine(target, key, out, type & $export.U);\n\t // export\n\t if (exports[key] != out) _hide(exports, key, exp);\n\t if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n\t }\n\t};\n\t_global.core = _core;\n\t// type bitmap\n\t$export.F = 1; // forced\n\t$export.G = 2; // global\n\t$export.S = 4; // static\n\t$export.P = 8; // proto\n\t$export.B = 16; // bind\n\t$export.W = 32; // wrap\n\t$export.U = 64; // safe\n\t$export.R = 128; // real proto method for `library`\n\tvar _export = $export;\n\t\n\tvar toString = {}.toString;\n\t\n\tvar _cof = function (it) {\n\t return toString.call(it).slice(8, -1);\n\t};\n\t\n\t// fallback for non-array-like ES3 and non-enumerable old V8 strings\n\t\n\t// eslint-disable-next-line no-prototype-builtins\n\tvar _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n\t return _cof(it) == 'String' ? it.split('') : Object(it);\n\t};\n\t\n\t// 7.2.1 RequireObjectCoercible(argument)\n\tvar _defined = function (it) {\n\t if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n\t return it;\n\t};\n\t\n\t// 7.1.13 ToObject(argument)\n\t\n\tvar _toObject = function (it) {\n\t return Object(_defined(it));\n\t};\n\t\n\t// 7.1.4 ToInteger\n\tvar ceil = Math.ceil;\n\tvar floor = Math.floor;\n\tvar _toInteger = function (it) {\n\t return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n\t};\n\t\n\t// 7.1.15 ToLength\n\t\n\tvar min = Math.min;\n\tvar _toLength = function (it) {\n\t return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n\t};\n\t\n\t// 7.2.2 IsArray(argument)\n\t\n\tvar _isArray = Array.isArray || function isArray(arg) {\n\t return _cof(arg) == 'Array';\n\t};\n\t\n\tvar SHARED = '__core-js_shared__';\n\tvar store = _global[SHARED] || (_global[SHARED] = {});\n\tvar _shared = function (key) {\n\t return store[key] || (store[key] = {});\n\t};\n\t\n\tvar _wks = createCommonjsModule(function (module) {\n\tvar store = _shared('wks');\n\t\n\tvar Symbol = _global.Symbol;\n\tvar USE_SYMBOL = typeof Symbol == 'function';\n\t\n\tvar $exports = module.exports = function (name) {\n\t return store[name] || (store[name] =\n\t USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : _uid)('Symbol.' + name));\n\t};\n\t\n\t$exports.store = store;\n\t});\n\t\n\tvar SPECIES = _wks('species');\n\t\n\tvar _arraySpeciesConstructor = function (original) {\n\t var C;\n\t if (_isArray(original)) {\n\t C = original.constructor;\n\t // cross-realm fallback\n\t if (typeof C == 'function' && (C === Array || _isArray(C.prototype))) C = undefined;\n\t if (_isObject(C)) {\n\t C = C[SPECIES];\n\t if (C === null) C = undefined;\n\t }\n\t } return C === undefined ? Array : C;\n\t};\n\t\n\t// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\n\t\n\t\n\tvar _arraySpeciesCreate = function (original, length) {\n\t return new (_arraySpeciesConstructor(original))(length);\n\t};\n\t\n\t// 0 -> Array#forEach\n\t// 1 -> Array#map\n\t// 2 -> Array#filter\n\t// 3 -> Array#some\n\t// 4 -> Array#every\n\t// 5 -> Array#find\n\t// 6 -> Array#findIndex\n\t\n\t\n\t\n\t\n\t\n\tvar _arrayMethods = function (TYPE, $create) {\n\t var IS_MAP = TYPE == 1;\n\t var IS_FILTER = TYPE == 2;\n\t var IS_SOME = TYPE == 3;\n\t var IS_EVERY = TYPE == 4;\n\t var IS_FIND_INDEX = TYPE == 6;\n\t var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n\t var create = $create || _arraySpeciesCreate;\n\t return function ($this, callbackfn, that) {\n\t var O = _toObject($this);\n\t var self = _iobject(O);\n\t var f = _ctx(callbackfn, that, 3);\n\t var length = _toLength(self.length);\n\t var index = 0;\n\t var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n\t var val, res;\n\t for (;length > index; index++) if (NO_HOLES || index in self) {\n\t val = self[index];\n\t res = f(val, index, O);\n\t if (TYPE) {\n\t if (IS_MAP) result[index] = res; // map\n\t else if (res) switch (TYPE) {\n\t case 3: return true; // some\n\t case 5: return val; // find\n\t case 6: return index; // findIndex\n\t case 2: result.push(val); // filter\n\t } else if (IS_EVERY) return false; // every\n\t }\n\t }\n\t return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n\t };\n\t};\n\t\n\t// 22.1.3.31 Array.prototype[@@unscopables]\n\tvar UNSCOPABLES = _wks('unscopables');\n\tvar ArrayProto = Array.prototype;\n\tif (ArrayProto[UNSCOPABLES] == undefined) _hide(ArrayProto, UNSCOPABLES, {});\n\tvar _addToUnscopables = function (key) {\n\t ArrayProto[UNSCOPABLES][key] = true;\n\t};\n\t\n\t// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\n\t\n\tvar $find = _arrayMethods(5);\n\tvar KEY = 'find';\n\tvar forced = true;\n\t// Shouldn't skip holes\n\tif (KEY in []) Array(1)[KEY](function () { forced = false; });\n\t_export(_export.P + _export.F * forced, 'Array', {\n\t find: function find(callbackfn /* , that = undefined */) {\n\t return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n\t }\n\t});\n\t_addToUnscopables(KEY);\n\t\n\tvar find = _core.Array.find;\n\t\n\t// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\n\t\n\tvar $find$1 = _arrayMethods(6);\n\tvar KEY$1 = 'findIndex';\n\tvar forced$1 = true;\n\t// Shouldn't skip holes\n\tif (KEY$1 in []) Array(1)[KEY$1](function () { forced$1 = false; });\n\t_export(_export.P + _export.F * forced$1, 'Array', {\n\t findIndex: function findIndex(callbackfn /* , that = undefined */) {\n\t return $find$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n\t }\n\t});\n\t_addToUnscopables(KEY$1);\n\t\n\tvar findIndex = _core.Array.findIndex;\n\t\n\t// 7.2.8 IsRegExp(argument)\n\t\n\t\n\tvar MATCH = _wks('match');\n\tvar _isRegexp = function (it) {\n\t var isRegExp;\n\t return _isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : _cof(it) == 'RegExp');\n\t};\n\t\n\t// helper for String#{startsWith, endsWith, includes}\n\t\n\t\n\t\n\tvar _stringContext = function (that, searchString, NAME) {\n\t if (_isRegexp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n\t return String(_defined(that));\n\t};\n\t\n\tvar MATCH$1 = _wks('match');\n\tvar _failsIsRegexp = function (KEY) {\n\t var re = /./;\n\t try {\n\t '/./'[KEY](re);\n\t } catch (e) {\n\t try {\n\t re[MATCH$1] = false;\n\t return !'/./'[KEY](re);\n\t } catch (f) { /* empty */ }\n\t } return true;\n\t};\n\t\n\tvar STARTS_WITH = 'startsWith';\n\tvar $startsWith = ''[STARTS_WITH];\n\t\n\t_export(_export.P + _export.F * _failsIsRegexp(STARTS_WITH), 'String', {\n\t startsWith: function startsWith(searchString /* , position = 0 */) {\n\t var that = _stringContext(this, searchString, STARTS_WITH);\n\t var index = _toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n\t var search = String(searchString);\n\t return $startsWith\n\t ? $startsWith.call(that, search, index)\n\t : that.slice(index, index + search.length) === search;\n\t }\n\t});\n\t\n\tvar startsWith = _core.String.startsWith;\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\n\t\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(671).setImmediate, (function() { return this; }())))\n\n/***/ }),\n\n/***/ 443:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\t\n\tfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\t\n\tvar firebase = _interopDefault(__webpack_require__(73));\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @fileoverview Constants used in the Firebase Storage library.\r\n\t */\r\n\t/**\r\n\t * Domain and scheme for API calls.\r\n\t */\r\n\tvar domainBase = 'https://firebasestorage.googleapis.com';\r\n\t/**\r\n\t * Domain and scheme for object downloads.\r\n\t */\r\n\tvar downloadBase = 'https://firebasestorage.googleapis.com';\r\n\t/**\r\n\t * Base URL for non-upload calls to the API.\r\n\t */\r\n\tvar apiBaseUrl = '/v0';\r\n\t/**\r\n\t * Base URL for upload calls to the API.\r\n\t */\r\n\tvar apiUploadBaseUrl = '/v0';\r\n\tvar configOption = 'storageBucket';\r\n\t/**\r\n\t * 2 minutes\r\n\t */\r\n\tvar defaultMaxOperationRetryTime = 2 * 60 * 1000;\r\n\t/**\r\n\t * 10 minutes\r\n\t */\r\n\tvar defaultMaxUploadRetryTime = 10 * 60 * 100;\r\n\t/**\r\n\t * This is the value of Number.MIN_SAFE_INTEGER, which is not well supported\r\n\t * enough for us to use it directly.\r\n\t */\r\n\tvar minSafeInteger = -9007199254740991;\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar FirebaseStorageError = /** @class */ (function () {\r\n\t function FirebaseStorageError(code, message) {\r\n\t this.code_ = prependCode(code);\r\n\t this.message_ = 'Firebase Storage: ' + message;\r\n\t this.serverResponse_ = null;\r\n\t this.name_ = 'FirebaseError';\r\n\t }\r\n\t FirebaseStorageError.prototype.codeProp = function () {\r\n\t return this.code;\r\n\t };\r\n\t FirebaseStorageError.prototype.codeEquals = function (code) {\r\n\t return prependCode(code) === this.codeProp();\r\n\t };\r\n\t FirebaseStorageError.prototype.serverResponseProp = function () {\r\n\t return this.serverResponse_;\r\n\t };\r\n\t FirebaseStorageError.prototype.setServerResponseProp = function (serverResponse) {\r\n\t this.serverResponse_ = serverResponse;\r\n\t };\r\n\t Object.defineProperty(FirebaseStorageError.prototype, \"name\", {\r\n\t get: function () {\r\n\t return this.name_;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(FirebaseStorageError.prototype, \"code\", {\r\n\t get: function () {\r\n\t return this.code_;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(FirebaseStorageError.prototype, \"message\", {\r\n\t get: function () {\r\n\t return this.message_;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(FirebaseStorageError.prototype, \"serverResponse\", {\r\n\t get: function () {\r\n\t return this.serverResponse_;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t return FirebaseStorageError;\r\n\t}());\r\n\tvar Code = {\r\n\t // Shared between all platforms\r\n\t UNKNOWN: 'unknown',\r\n\t OBJECT_NOT_FOUND: 'object-not-found',\r\n\t BUCKET_NOT_FOUND: 'bucket-not-found',\r\n\t PROJECT_NOT_FOUND: 'project-not-found',\r\n\t QUOTA_EXCEEDED: 'quota-exceeded',\r\n\t UNAUTHENTICATED: 'unauthenticated',\r\n\t UNAUTHORIZED: 'unauthorized',\r\n\t RETRY_LIMIT_EXCEEDED: 'retry-limit-exceeded',\r\n\t INVALID_CHECKSUM: 'invalid-checksum',\r\n\t CANCELED: 'canceled',\r\n\t // JS specific\r\n\t INVALID_EVENT_NAME: 'invalid-event-name',\r\n\t INVALID_URL: 'invalid-url',\r\n\t INVALID_DEFAULT_BUCKET: 'invalid-default-bucket',\r\n\t NO_DEFAULT_BUCKET: 'no-default-bucket',\r\n\t CANNOT_SLICE_BLOB: 'cannot-slice-blob',\r\n\t SERVER_FILE_WRONG_SIZE: 'server-file-wrong-size',\r\n\t NO_DOWNLOAD_URL: 'no-download-url',\r\n\t INVALID_ARGUMENT: 'invalid-argument',\r\n\t INVALID_ARGUMENT_COUNT: 'invalid-argument-count',\r\n\t APP_DELETED: 'app-deleted',\r\n\t INVALID_ROOT_OPERATION: 'invalid-root-operation',\r\n\t INVALID_FORMAT: 'invalid-format',\r\n\t INTERNAL_ERROR: 'internal-error'\r\n\t};\r\n\tfunction prependCode(code) {\r\n\t return 'storage/' + code;\r\n\t}\r\n\tfunction unknown() {\r\n\t var message = 'An unknown error occurred, please check the error payload for ' +\r\n\t 'server response.';\r\n\t return new FirebaseStorageError(Code.UNKNOWN, message);\r\n\t}\r\n\tfunction objectNotFound(path) {\r\n\t return new FirebaseStorageError(Code.OBJECT_NOT_FOUND, \"Object '\" + path + \"' does not exist.\");\r\n\t}\r\n\tfunction quotaExceeded(bucket) {\r\n\t return new FirebaseStorageError(Code.QUOTA_EXCEEDED, \"Quota for bucket '\" +\r\n\t bucket +\r\n\t \"' exceeded, please view quota on \" +\r\n\t 'https://firebase.google.com/pricing/.');\r\n\t}\r\n\tfunction unauthenticated() {\r\n\t var message = 'User is not authenticated, please authenticate using Firebase ' +\r\n\t 'Authentication and try again.';\r\n\t return new FirebaseStorageError(Code.UNAUTHENTICATED, message);\r\n\t}\r\n\tfunction unauthorized(path) {\r\n\t return new FirebaseStorageError(Code.UNAUTHORIZED, \"User does not have permission to access '\" + path + \"'.\");\r\n\t}\r\n\tfunction retryLimitExceeded() {\r\n\t return new FirebaseStorageError(Code.RETRY_LIMIT_EXCEEDED, 'Max retry time for operation exceeded, please try again.');\r\n\t}\r\n\tfunction canceled() {\r\n\t return new FirebaseStorageError(Code.CANCELED, 'User canceled the upload/download.');\r\n\t}\r\n\tfunction invalidUrl(url) {\r\n\t return new FirebaseStorageError(Code.INVALID_URL, \"Invalid URL '\" + url + \"'.\");\r\n\t}\r\n\tfunction invalidDefaultBucket(bucket) {\r\n\t return new FirebaseStorageError(Code.INVALID_DEFAULT_BUCKET, \"Invalid default bucket '\" + bucket + \"'.\");\r\n\t}\r\n\tfunction cannotSliceBlob() {\r\n\t return new FirebaseStorageError(Code.CANNOT_SLICE_BLOB, 'Cannot slice blob for upload. Please retry the upload.');\r\n\t}\r\n\tfunction serverFileWrongSize() {\r\n\t return new FirebaseStorageError(Code.SERVER_FILE_WRONG_SIZE, 'Server recorded incorrect upload file size, please retry the upload.');\r\n\t}\r\n\tfunction noDownloadURL() {\r\n\t return new FirebaseStorageError(Code.NO_DOWNLOAD_URL, 'The given file does not have any download URLs.');\r\n\t}\r\n\tfunction invalidArgument(index, fnName, message) {\r\n\t return new FirebaseStorageError(Code.INVALID_ARGUMENT, 'Invalid argument in `' + fnName + '` at index ' + index + ': ' + message);\r\n\t}\r\n\tfunction invalidArgumentCount(argMin, argMax, fnName, real) {\r\n\t var countPart;\r\n\t var plural;\r\n\t if (argMin === argMax) {\r\n\t countPart = argMin;\r\n\t plural = argMin === 1 ? 'argument' : 'arguments';\r\n\t }\r\n\t else {\r\n\t countPart = 'between ' + argMin + ' and ' + argMax;\r\n\t plural = 'arguments';\r\n\t }\r\n\t return new FirebaseStorageError(Code.INVALID_ARGUMENT_COUNT, 'Invalid argument count in `' +\r\n\t fnName +\r\n\t '`: Expected ' +\r\n\t countPart +\r\n\t ' ' +\r\n\t plural +\r\n\t ', received ' +\r\n\t real +\r\n\t '.');\r\n\t}\r\n\tfunction appDeleted() {\r\n\t return new FirebaseStorageError(Code.APP_DELETED, 'The Firebase app was deleted.');\r\n\t}\r\n\t/**\r\n\t * @param name The name of the operation that was invalid.\r\n\t */\r\n\tfunction invalidRootOperation(name) {\r\n\t return new FirebaseStorageError(Code.INVALID_ROOT_OPERATION, \"The operation '\" +\r\n\t name +\r\n\t \"' cannot be performed on a root reference, create a non-root \" +\r\n\t \"reference using child, such as .child('file.png').\");\r\n\t}\r\n\t/**\r\n\t * @param format The format that was not valid.\r\n\t * @param message A message describing the format violation.\r\n\t */\r\n\tfunction invalidFormat(format, message) {\r\n\t return new FirebaseStorageError(Code.INVALID_FORMAT, \"String does not match format '\" + format + \"': \" + message);\r\n\t}\r\n\t/**\r\n\t * @param message A message describing the internal error.\r\n\t */\r\n\tfunction internalError(message) {\r\n\t throw new FirebaseStorageError(Code.INTERNAL_ERROR, 'Internal error: ' + message);\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar StringFormat = {\r\n\t RAW: 'raw',\r\n\t BASE64: 'base64',\r\n\t BASE64URL: 'base64url',\r\n\t DATA_URL: 'data_url'\r\n\t};\r\n\tfunction formatValidator(stringFormat) {\r\n\t switch (stringFormat) {\r\n\t case StringFormat.RAW:\r\n\t case StringFormat.BASE64:\r\n\t case StringFormat.BASE64URL:\r\n\t case StringFormat.DATA_URL:\r\n\t return;\r\n\t default:\r\n\t throw 'Expected one of the event types: [' +\r\n\t StringFormat.RAW +\r\n\t ', ' +\r\n\t StringFormat.BASE64 +\r\n\t ', ' +\r\n\t StringFormat.BASE64URL +\r\n\t ', ' +\r\n\t StringFormat.DATA_URL +\r\n\t '].';\r\n\t }\r\n\t}\r\n\t/**\r\n\t * @struct\r\n\t */\r\n\tvar StringData = /** @class */ (function () {\r\n\t function StringData(data, opt_contentType) {\r\n\t this.data = data;\r\n\t this.contentType = opt_contentType || null;\r\n\t }\r\n\t return StringData;\r\n\t}());\r\n\tfunction dataFromString(format, string) {\r\n\t switch (format) {\r\n\t case StringFormat.RAW:\r\n\t return new StringData(utf8Bytes_(string));\r\n\t case StringFormat.BASE64:\r\n\t case StringFormat.BASE64URL:\r\n\t return new StringData(base64Bytes_(format, string));\r\n\t case StringFormat.DATA_URL:\r\n\t return new StringData(dataURLBytes_(string), dataURLContentType_(string));\r\n\t }\r\n\t // assert(false);\r\n\t throw unknown();\r\n\t}\r\n\tfunction utf8Bytes_(string) {\r\n\t var b = [];\r\n\t for (var i = 0; i < string.length; i++) {\r\n\t var c = string.charCodeAt(i);\r\n\t if (c <= 127) {\r\n\t b.push(c);\r\n\t }\r\n\t else {\r\n\t if (c <= 2047) {\r\n\t b.push(192 | (c >> 6), 128 | (c & 63));\r\n\t }\r\n\t else {\r\n\t if ((c & 64512) == 55296) {\r\n\t // The start of a surrogate pair.\r\n\t var valid = i < string.length - 1 &&\r\n\t (string.charCodeAt(i + 1) & 64512) == 56320;\r\n\t if (!valid) {\r\n\t // The second surrogate wasn't there.\r\n\t b.push(239, 191, 189);\r\n\t }\r\n\t else {\r\n\t var hi = c;\r\n\t var lo = string.charCodeAt(++i);\r\n\t c = 65536 | ((hi & 1023) << 10) | (lo & 1023);\r\n\t b.push(240 | (c >> 18), 128 | ((c >> 12) & 63), 128 | ((c >> 6) & 63), 128 | (c & 63));\r\n\t }\r\n\t }\r\n\t else {\r\n\t if ((c & 64512) == 56320) {\r\n\t // Invalid low surrogate.\r\n\t b.push(239, 191, 189);\r\n\t }\r\n\t else {\r\n\t b.push(224 | (c >> 12), 128 | ((c >> 6) & 63), 128 | (c & 63));\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t return new Uint8Array(b);\r\n\t}\r\n\tfunction percentEncodedBytes_(string) {\r\n\t var decoded;\r\n\t try {\r\n\t decoded = decodeURIComponent(string);\r\n\t }\r\n\t catch (e) {\r\n\t throw invalidFormat(StringFormat.DATA_URL, 'Malformed data URL.');\r\n\t }\r\n\t return utf8Bytes_(decoded);\r\n\t}\r\n\tfunction base64Bytes_(format, string) {\r\n\t switch (format) {\r\n\t case StringFormat.BASE64: {\r\n\t var hasMinus = string.indexOf('-') !== -1;\r\n\t var hasUnder = string.indexOf('_') !== -1;\r\n\t if (hasMinus || hasUnder) {\r\n\t var invalidChar = hasMinus ? '-' : '_';\r\n\t throw invalidFormat(format, \"Invalid character '\" +\r\n\t invalidChar +\r\n\t \"' found: is it base64url encoded?\");\r\n\t }\r\n\t break;\r\n\t }\r\n\t case StringFormat.BASE64URL: {\r\n\t var hasPlus = string.indexOf('+') !== -1;\r\n\t var hasSlash = string.indexOf('/') !== -1;\r\n\t if (hasPlus || hasSlash) {\r\n\t var invalidChar = hasPlus ? '+' : '/';\r\n\t throw invalidFormat(format, \"Invalid character '\" + invalidChar + \"' found: is it base64 encoded?\");\r\n\t }\r\n\t string = string.replace(/-/g, '+').replace(/_/g, '/');\r\n\t break;\r\n\t }\r\n\t }\r\n\t var bytes;\r\n\t try {\r\n\t bytes = atob(string);\r\n\t }\r\n\t catch (e) {\r\n\t throw invalidFormat(format, 'Invalid character found');\r\n\t }\r\n\t var array = new Uint8Array(bytes.length);\r\n\t for (var i = 0; i < bytes.length; i++) {\r\n\t array[i] = bytes.charCodeAt(i);\r\n\t }\r\n\t return array;\r\n\t}\r\n\t/**\r\n\t * @struct\r\n\t */\r\n\tvar DataURLParts = /** @class */ (function () {\r\n\t function DataURLParts(dataURL) {\r\n\t this.base64 = false;\r\n\t this.contentType = null;\r\n\t var matches = dataURL.match(/^data:([^,]+)?,/);\r\n\t if (matches === null) {\r\n\t throw invalidFormat(StringFormat.DATA_URL, \"Must be formatted 'data:[][;base64],\");\r\n\t }\r\n\t var middle = matches[1] || null;\r\n\t if (middle != null) {\r\n\t this.base64 = endsWith(middle, ';base64');\r\n\t this.contentType = this.base64\r\n\t ? middle.substring(0, middle.length - ';base64'.length)\r\n\t : middle;\r\n\t }\r\n\t this.rest = dataURL.substring(dataURL.indexOf(',') + 1);\r\n\t }\r\n\t return DataURLParts;\r\n\t}());\r\n\tfunction dataURLBytes_(string) {\r\n\t var parts = new DataURLParts(string);\r\n\t if (parts.base64) {\r\n\t return base64Bytes_(StringFormat.BASE64, parts.rest);\r\n\t }\r\n\t else {\r\n\t return percentEncodedBytes_(parts.rest);\r\n\t }\r\n\t}\r\n\tfunction dataURLContentType_(string) {\r\n\t var parts = new DataURLParts(string);\r\n\t return parts.contentType;\r\n\t}\r\n\tfunction endsWith(s, end) {\r\n\t var longEnough = s.length >= end.length;\r\n\t if (!longEnough) {\r\n\t return false;\r\n\t }\r\n\t return s.substring(s.length - end.length) === end;\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar TaskEvent = {\r\n\t /** Triggered whenever the task changes or progress is updated. */\r\n\t STATE_CHANGED: 'state_changed'\r\n\t};\r\n\tvar InternalTaskState = {\r\n\t RUNNING: 'running',\r\n\t PAUSING: 'pausing',\r\n\t PAUSED: 'paused',\r\n\t SUCCESS: 'success',\r\n\t CANCELING: 'canceling',\r\n\t CANCELED: 'canceled',\r\n\t ERROR: 'error'\r\n\t};\r\n\tvar TaskState = {\r\n\t /** The task is currently transferring data. */\r\n\t RUNNING: 'running',\r\n\t /** The task was paused by the user. */\r\n\t PAUSED: 'paused',\r\n\t /** The task completed successfully. */\r\n\t SUCCESS: 'success',\r\n\t /** The task was canceled. */\r\n\t CANCELED: 'canceled',\r\n\t /** The task failed with an error. */\r\n\t ERROR: 'error'\r\n\t};\r\n\tfunction taskStateFromInternalTaskState(state) {\r\n\t switch (state) {\r\n\t case InternalTaskState.RUNNING:\r\n\t case InternalTaskState.PAUSING:\r\n\t case InternalTaskState.CANCELING:\r\n\t return TaskState.RUNNING;\r\n\t case InternalTaskState.PAUSED:\r\n\t return TaskState.PAUSED;\r\n\t case InternalTaskState.SUCCESS:\r\n\t return TaskState.SUCCESS;\r\n\t case InternalTaskState.CANCELED:\r\n\t return TaskState.CANCELED;\r\n\t case InternalTaskState.ERROR:\r\n\t return TaskState.ERROR;\r\n\t default:\r\n\t // TODO(andysoto): assert(false);\r\n\t return TaskState.ERROR;\r\n\t }\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @fileoverview Contains methods for working with objects.\r\n\t */\r\n\tfunction contains(obj, prop) {\r\n\t return Object.prototype.hasOwnProperty.call(obj, prop);\r\n\t}\r\n\tfunction forEach(obj, f) {\r\n\t for (var key in obj) {\r\n\t if (contains(obj, key)) {\r\n\t f(key, obj[key]);\r\n\t }\r\n\t }\r\n\t}\r\n\tfunction clone(obj) {\r\n\t if (obj == null) {\r\n\t return {};\r\n\t }\r\n\t var c = {};\r\n\t forEach(obj, function (key, val) {\r\n\t c[key] = val;\r\n\t });\r\n\t return c;\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @fileoverview Implements the promise abstraction interface for external\r\n\t * (public SDK) packaging, which just passes through to the firebase-app impl.\r\n\t */\r\n\t/**\r\n\t * @template T\r\n\t * @param {function((function(T): void),\r\n\t * (function(!Error): void))} resolver\r\n\t */\r\n\tfunction make(resolver) {\r\n\t return new Promise(resolver);\r\n\t}\r\n\t/**\r\n\t * @template T\r\n\t */\r\n\tfunction resolve(value) {\r\n\t return Promise.resolve(value);\r\n\t}\r\n\tfunction reject(error) {\r\n\t return Promise.reject(error);\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @return False if the object is undefined or null, true otherwise.\r\n\t */\r\n\tfunction isDef(p) {\r\n\t return p != null;\r\n\t}\r\n\tfunction isJustDef(p) {\r\n\t return p !== void 0;\r\n\t}\r\n\tfunction isFunction(p) {\r\n\t return typeof p === 'function';\r\n\t}\r\n\tfunction isObject(p) {\r\n\t return typeof p === 'object';\r\n\t}\r\n\tfunction isNonNullObject(p) {\r\n\t return isObject(p) && p !== null;\r\n\t}\r\n\tfunction isNonArrayObject(p) {\r\n\t return isObject(p) && !Array.isArray(p);\r\n\t}\r\n\tfunction isString(p) {\r\n\t return typeof p === 'string' || p instanceof String;\r\n\t}\r\n\tfunction isNumber(p) {\r\n\t return typeof p === 'number' || p instanceof Number;\r\n\t}\r\n\tfunction isNativeBlob(p) {\r\n\t return isNativeBlobDefined() && p instanceof Blob;\r\n\t}\r\n\tfunction isNativeBlobDefined() {\r\n\t return typeof Blob !== 'undefined';\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @enum{number}\r\n\t */\r\n\tvar ErrorCode;\r\n\t(function (ErrorCode) {\r\n\t ErrorCode[ErrorCode[\"NO_ERROR\"] = 0] = \"NO_ERROR\";\r\n\t ErrorCode[ErrorCode[\"NETWORK_ERROR\"] = 1] = \"NETWORK_ERROR\";\r\n\t ErrorCode[ErrorCode[\"ABORT\"] = 2] = \"ABORT\";\r\n\t})(ErrorCode || (ErrorCode = {}));\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * We use this instead of goog.net.XhrIo because goog.net.XhrIo is hyuuuuge and\r\n\t * doesn't work in React Native on Android.\r\n\t */\r\n\tvar NetworkXhrIo = /** @class */ (function () {\r\n\t function NetworkXhrIo() {\r\n\t var _this = this;\r\n\t this.sent_ = false;\r\n\t this.xhr_ = new XMLHttpRequest();\r\n\t this.errorCode_ = ErrorCode.NO_ERROR;\r\n\t this.sendPromise_ = make(function (resolve$$1, reject$$1) {\r\n\t _this.xhr_.addEventListener('abort', function (event) {\r\n\t _this.errorCode_ = ErrorCode.ABORT;\r\n\t resolve$$1(_this);\r\n\t });\r\n\t _this.xhr_.addEventListener('error', function (event) {\r\n\t _this.errorCode_ = ErrorCode.NETWORK_ERROR;\r\n\t resolve$$1(_this);\r\n\t });\r\n\t _this.xhr_.addEventListener('load', function (event) {\r\n\t resolve$$1(_this);\r\n\t });\r\n\t });\r\n\t }\r\n\t /**\r\n\t * @override\r\n\t */\r\n\t NetworkXhrIo.prototype.send = function (url, method, opt_body, opt_headers) {\r\n\t var _this = this;\r\n\t if (this.sent_) {\r\n\t throw internalError('cannot .send() more than once');\r\n\t }\r\n\t this.sent_ = true;\r\n\t this.xhr_.open(method, url, true);\r\n\t if (isDef(opt_headers)) {\r\n\t var headers = opt_headers;\r\n\t forEach(headers, function (key, val) {\r\n\t _this.xhr_.setRequestHeader(key, val.toString());\r\n\t });\r\n\t }\r\n\t if (isDef(opt_body)) {\r\n\t this.xhr_.send(opt_body);\r\n\t }\r\n\t else {\r\n\t this.xhr_.send();\r\n\t }\r\n\t return this.sendPromise_;\r\n\t };\r\n\t /**\r\n\t * @override\r\n\t */\r\n\t NetworkXhrIo.prototype.getErrorCode = function () {\r\n\t if (!this.sent_) {\r\n\t throw internalError('cannot .getErrorCode() before sending');\r\n\t }\r\n\t return this.errorCode_;\r\n\t };\r\n\t /**\r\n\t * @override\r\n\t */\r\n\t NetworkXhrIo.prototype.getStatus = function () {\r\n\t if (!this.sent_) {\r\n\t throw internalError('cannot .getStatus() before sending');\r\n\t }\r\n\t try {\r\n\t return this.xhr_.status;\r\n\t }\r\n\t catch (e) {\r\n\t return -1;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @override\r\n\t */\r\n\t NetworkXhrIo.prototype.getResponseText = function () {\r\n\t if (!this.sent_) {\r\n\t throw internalError('cannot .getResponseText() before sending');\r\n\t }\r\n\t return this.xhr_.responseText;\r\n\t };\r\n\t /**\r\n\t * Aborts the request.\r\n\t * @override\r\n\t */\r\n\t NetworkXhrIo.prototype.abort = function () {\r\n\t this.xhr_.abort();\r\n\t };\r\n\t /**\r\n\t * @override\r\n\t */\r\n\t NetworkXhrIo.prototype.getResponseHeader = function (header) {\r\n\t return this.xhr_.getResponseHeader(header);\r\n\t };\r\n\t /**\r\n\t * @override\r\n\t */\r\n\t NetworkXhrIo.prototype.addUploadProgressListener = function (listener) {\r\n\t if (isDef(this.xhr_.upload)) {\r\n\t this.xhr_.upload.addEventListener('progress', listener);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * @override\r\n\t */\r\n\t NetworkXhrIo.prototype.removeUploadProgressListener = function (listener) {\r\n\t if (isDef(this.xhr_.upload)) {\r\n\t this.xhr_.upload.removeEventListener('progress', listener);\r\n\t }\r\n\t };\r\n\t return NetworkXhrIo;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Factory-like class for creating XhrIo instances.\r\n\t */\r\n\tvar XhrIoPool = /** @class */ (function () {\r\n\t function XhrIoPool() {\r\n\t }\r\n\t XhrIoPool.prototype.createXhrIo = function () {\r\n\t return new NetworkXhrIo();\r\n\t };\r\n\t return XhrIoPool;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Returns the Object resulting from parsing the given JSON, or null if the\r\n\t * given string does not represent a JSON object.\r\n\t */\r\n\tfunction jsonObjectOrNull(s) {\r\n\t var obj;\r\n\t try {\r\n\t obj = JSON.parse(s);\r\n\t }\r\n\t catch (e) {\r\n\t return null;\r\n\t }\r\n\t if (isNonArrayObject(obj)) {\r\n\t return obj;\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @struct\r\n\t */\r\n\tvar Location = /** @class */ (function () {\r\n\t function Location(bucket, path) {\r\n\t this.bucket = bucket;\r\n\t this.path_ = path;\r\n\t }\r\n\t Object.defineProperty(Location.prototype, \"path\", {\r\n\t get: function () {\r\n\t return this.path_;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Location.prototype.fullServerUrl = function () {\r\n\t var encode = encodeURIComponent;\r\n\t return '/b/' + encode(this.bucket) + '/o/' + encode(this.path);\r\n\t };\r\n\t Location.prototype.bucketOnlyServerUrl = function () {\r\n\t var encode = encodeURIComponent;\r\n\t return '/b/' + encode(this.bucket) + '/o';\r\n\t };\r\n\t Location.makeFromBucketSpec = function (bucketString) {\r\n\t var bucketLocation;\r\n\t try {\r\n\t bucketLocation = Location.makeFromUrl(bucketString);\r\n\t }\r\n\t catch (e) {\r\n\t // Not valid URL, use as-is. This lets you put bare bucket names in\r\n\t // config.\r\n\t return new Location(bucketString, '');\r\n\t }\r\n\t if (bucketLocation.path === '') {\r\n\t return bucketLocation;\r\n\t }\r\n\t else {\r\n\t throw invalidDefaultBucket(bucketString);\r\n\t }\r\n\t };\r\n\t Location.makeFromUrl = function (url) {\r\n\t var location = null;\r\n\t var bucketDomain = '([A-Za-z0-9.\\\\-]+)';\r\n\t function gsModify(loc) {\r\n\t if (loc.path.charAt(loc.path.length - 1) === '/') {\r\n\t loc.path_ = loc.path_.slice(0, -1);\r\n\t }\r\n\t }\r\n\t var gsPath = '(/(.*))?$';\r\n\t var path = '(/([^?#]*).*)?$';\r\n\t var gsRegex = new RegExp('^gs://' + bucketDomain + gsPath, 'i');\r\n\t var gsIndices = { bucket: 1, path: 3 };\r\n\t function httpModify(loc) {\r\n\t loc.path_ = decodeURIComponent(loc.path);\r\n\t }\r\n\t var version = 'v[A-Za-z0-9_]+';\r\n\t var httpRegex = new RegExp('^https?://firebasestorage\\\\.googleapis\\\\.com/' +\r\n\t version +\r\n\t '/b/' +\r\n\t bucketDomain +\r\n\t '/o' +\r\n\t path, 'i');\r\n\t var httpIndices = { bucket: 1, path: 3 };\r\n\t var groups = [\r\n\t { regex: gsRegex, indices: gsIndices, postModify: gsModify },\r\n\t { regex: httpRegex, indices: httpIndices, postModify: httpModify }\r\n\t ];\r\n\t for (var i = 0; i < groups.length; i++) {\r\n\t var group = groups[i];\r\n\t var captures = group.regex.exec(url);\r\n\t if (captures) {\r\n\t var bucketValue = captures[group.indices.bucket];\r\n\t var pathValue = captures[group.indices.path];\r\n\t if (!pathValue) {\r\n\t pathValue = '';\r\n\t }\r\n\t location = new Location(bucketValue, pathValue);\r\n\t group.postModify(location);\r\n\t break;\r\n\t }\r\n\t }\r\n\t if (location == null) {\r\n\t throw invalidUrl(url);\r\n\t }\r\n\t return location;\r\n\t };\r\n\t return Location;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @fileoverview Contains helper methods for manipulating paths.\r\n\t */\r\n\t/**\r\n\t * @return Null if the path is already at the root.\r\n\t */\r\n\tfunction parent(path) {\r\n\t if (path.length == 0) {\r\n\t return null;\r\n\t }\r\n\t var index = path.lastIndexOf('/');\r\n\t if (index === -1) {\r\n\t return '';\r\n\t }\r\n\t var newPath = path.slice(0, index);\r\n\t return newPath;\r\n\t}\r\n\tfunction child(path, childPath) {\r\n\t var canonicalChildPath = childPath\r\n\t .split('/')\r\n\t .filter(function (component) {\r\n\t return component.length > 0;\r\n\t })\r\n\t .join('/');\r\n\t if (path.length === 0) {\r\n\t return canonicalChildPath;\r\n\t }\r\n\t else {\r\n\t return path + '/' + canonicalChildPath;\r\n\t }\r\n\t}\r\n\t/**\r\n\t * Returns the last component of a path.\r\n\t * '/foo/bar' -> 'bar'\r\n\t * '/foo/bar/baz/' -> 'baz/'\r\n\t * '/a' -> 'a'\r\n\t */\r\n\tfunction lastComponent(path) {\r\n\t var index = path.lastIndexOf('/', path.length - 2);\r\n\t if (index === -1) {\r\n\t return path;\r\n\t }\r\n\t else {\r\n\t return path.slice(index + 1);\r\n\t }\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tfunction makeNormalUrl(urlPart) {\r\n\t return domainBase + apiBaseUrl + urlPart;\r\n\t}\r\n\tfunction makeDownloadUrl(urlPart) {\r\n\t return downloadBase + apiBaseUrl + urlPart;\r\n\t}\r\n\tfunction makeUploadUrl(urlPart) {\r\n\t return domainBase + apiUploadBaseUrl + urlPart;\r\n\t}\r\n\tfunction makeQueryString(params) {\r\n\t var encode = encodeURIComponent;\r\n\t var queryPart = '?';\r\n\t forEach(params, function (key, val) {\r\n\t var nextPart = encode(key) + '=' + encode(val);\r\n\t queryPart = queryPart + nextPart + '&';\r\n\t });\r\n\t // Chop off the extra '&' or '?' on the end\r\n\t queryPart = queryPart.slice(0, -1);\r\n\t return queryPart;\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tfunction noXform_(metadata, value) {\r\n\t return value;\r\n\t}\r\n\t/**\r\n\t * @struct\r\n\t */\r\n\tvar Mapping = /** @class */ (function () {\r\n\t function Mapping(server, opt_local, opt_writable, opt_xform) {\r\n\t this.server = server;\r\n\t this.local = opt_local || server;\r\n\t this.writable = !!opt_writable;\r\n\t this.xform = opt_xform || noXform_;\r\n\t }\r\n\t return Mapping;\r\n\t}());\r\n\tvar mappings_ = null;\r\n\tfunction xformPath(fullPath) {\r\n\t var valid = isString(fullPath);\r\n\t if (!valid || fullPath.length < 2) {\r\n\t return fullPath;\r\n\t }\r\n\t else {\r\n\t fullPath = fullPath;\r\n\t return lastComponent(fullPath);\r\n\t }\r\n\t}\r\n\tfunction getMappings() {\r\n\t if (mappings_) {\r\n\t return mappings_;\r\n\t }\r\n\t var mappings = [];\r\n\t mappings.push(new Mapping('bucket'));\r\n\t mappings.push(new Mapping('generation'));\r\n\t mappings.push(new Mapping('metageneration'));\r\n\t mappings.push(new Mapping('name', 'fullPath', true));\r\n\t function mappingsXformPath(metadata, fullPath) {\r\n\t return xformPath(fullPath);\r\n\t }\r\n\t var nameMapping = new Mapping('name');\r\n\t nameMapping.xform = mappingsXformPath;\r\n\t mappings.push(nameMapping);\r\n\t /**\r\n\t * Coerces the second param to a number, if it is defined.\r\n\t */\r\n\t function xformSize(metadata, size) {\r\n\t if (isDef(size)) {\r\n\t return +size;\r\n\t }\r\n\t else {\r\n\t return size;\r\n\t }\r\n\t }\r\n\t var sizeMapping = new Mapping('size');\r\n\t sizeMapping.xform = xformSize;\r\n\t mappings.push(sizeMapping);\r\n\t mappings.push(new Mapping('timeCreated'));\r\n\t mappings.push(new Mapping('updated'));\r\n\t mappings.push(new Mapping('md5Hash', null, true));\r\n\t mappings.push(new Mapping('cacheControl', null, true));\r\n\t mappings.push(new Mapping('contentDisposition', null, true));\r\n\t mappings.push(new Mapping('contentEncoding', null, true));\r\n\t mappings.push(new Mapping('contentLanguage', null, true));\r\n\t mappings.push(new Mapping('contentType', null, true));\r\n\t mappings.push(new Mapping('metadata', 'customMetadata', true));\r\n\t /**\r\n\t * Transforms a comma-separated string of tokens into a list of download\r\n\t * URLs.\r\n\t */\r\n\t function xformTokens(metadata, tokens) {\r\n\t var valid = isString(tokens) && tokens.length > 0;\r\n\t if (!valid) {\r\n\t // This can happen if objects are uploaded through GCS and retrieved\r\n\t // through list, so we don't want to throw an Error.\r\n\t return [];\r\n\t }\r\n\t var encode = encodeURIComponent;\r\n\t var tokensList = tokens.split(',');\r\n\t var urls = tokensList.map(function (token) {\r\n\t var bucket = metadata['bucket'];\r\n\t var path = metadata['fullPath'];\r\n\t var urlPart = '/b/' + encode(bucket) + '/o/' + encode(path);\r\n\t var base = makeDownloadUrl(urlPart);\r\n\t var queryString = makeQueryString({\r\n\t alt: 'media',\r\n\t token: token\r\n\t });\r\n\t return base + queryString;\r\n\t });\r\n\t return urls;\r\n\t }\r\n\t mappings.push(new Mapping('downloadTokens', 'downloadURLs', false, xformTokens));\r\n\t mappings_ = mappings;\r\n\t return mappings_;\r\n\t}\r\n\tfunction addRef(metadata, authWrapper) {\r\n\t function generateRef() {\r\n\t var bucket = metadata['bucket'];\r\n\t var path = metadata['fullPath'];\r\n\t var loc = new Location(bucket, path);\r\n\t return authWrapper.makeStorageReference(loc);\r\n\t }\r\n\t Object.defineProperty(metadata, 'ref', { get: generateRef });\r\n\t}\r\n\tfunction fromResource(authWrapper, resource, mappings) {\r\n\t var metadata = {};\r\n\t metadata['type'] = 'file';\r\n\t var len = mappings.length;\r\n\t for (var i = 0; i < len; i++) {\r\n\t var mapping = mappings[i];\r\n\t metadata[mapping.local] = mapping.xform(metadata, resource[mapping.server]);\r\n\t }\r\n\t addRef(metadata, authWrapper);\r\n\t return metadata;\r\n\t}\r\n\tfunction fromResourceString(authWrapper, resourceString, mappings) {\r\n\t var obj = jsonObjectOrNull(resourceString);\r\n\t if (obj === null) {\r\n\t return null;\r\n\t }\r\n\t var resource = obj;\r\n\t return fromResource(authWrapper, resource, mappings);\r\n\t}\r\n\tfunction toResourceString(metadata, mappings) {\r\n\t var resource = {};\r\n\t var len = mappings.length;\r\n\t for (var i = 0; i < len; i++) {\r\n\t var mapping = mappings[i];\r\n\t if (mapping.writable) {\r\n\t resource[mapping.server] = metadata[mapping.local];\r\n\t }\r\n\t }\r\n\t return JSON.stringify(resource);\r\n\t}\r\n\tfunction metadataValidator(p) {\r\n\t var validType = p && isObject(p);\r\n\t if (!validType) {\r\n\t throw 'Expected Metadata object.';\r\n\t }\r\n\t for (var key in p) {\r\n\t var val = p[key];\r\n\t if (key === 'customMetadata') {\r\n\t if (!isObject(val)) {\r\n\t throw 'Expected object for \\'customMetadata\\' mapping.';\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (isNonNullObject(val)) {\r\n\t throw \"Mapping for '\" + key + \"' cannot be an object.\";\r\n\t }\r\n\t }\r\n\t }\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @param name Name of the function.\r\n\t * @param specs Argument specs.\r\n\t * @param passed The actual arguments passed to the function.\r\n\t * @throws {fbs.Error} If the arguments are invalid.\r\n\t */\r\n\tfunction validate(name, specs, passed) {\r\n\t var minArgs = specs.length;\r\n\t var maxArgs = specs.length;\r\n\t for (var i = 0; i < specs.length; i++) {\r\n\t if (specs[i].optional) {\r\n\t minArgs = i;\r\n\t break;\r\n\t }\r\n\t }\r\n\t var validLength = minArgs <= passed.length && passed.length <= maxArgs;\r\n\t if (!validLength) {\r\n\t throw invalidArgumentCount(minArgs, maxArgs, name, passed.length);\r\n\t }\r\n\t for (var i = 0; i < passed.length; i++) {\r\n\t try {\r\n\t specs[i].validator(passed[i]);\r\n\t }\r\n\t catch (e) {\r\n\t if (e instanceof Error) {\r\n\t throw invalidArgument(i, name, e.message);\r\n\t }\r\n\t else {\r\n\t throw invalidArgument(i, name, e);\r\n\t }\r\n\t }\r\n\t }\r\n\t}\r\n\t/**\r\n\t * @struct\r\n\t */\r\n\tvar ArgSpec = /** @class */ (function () {\r\n\t function ArgSpec(validator, opt_optional) {\r\n\t var self = this;\r\n\t this.validator = function (p) {\r\n\t if (self.optional && !isJustDef(p)) {\r\n\t return;\r\n\t }\r\n\t validator(p);\r\n\t };\r\n\t this.optional = !!opt_optional;\r\n\t }\r\n\t return ArgSpec;\r\n\t}());\r\n\tfunction and_(v1, v2) {\r\n\t return function (p) {\r\n\t v1(p);\r\n\t v2(p);\r\n\t };\r\n\t}\r\n\tfunction stringSpec(opt_validator, opt_optional) {\r\n\t function stringValidator(p) {\r\n\t if (!isString(p)) {\r\n\t throw 'Expected string.';\r\n\t }\r\n\t }\r\n\t var validator;\r\n\t if (opt_validator) {\r\n\t validator = and_(stringValidator, opt_validator);\r\n\t }\r\n\t else {\r\n\t validator = stringValidator;\r\n\t }\r\n\t return new ArgSpec(validator, opt_optional);\r\n\t}\r\n\tfunction uploadDataSpec() {\r\n\t function validator(p) {\r\n\t var valid = p instanceof Uint8Array ||\r\n\t p instanceof ArrayBuffer ||\r\n\t (isNativeBlobDefined() && p instanceof Blob);\r\n\t if (!valid) {\r\n\t throw 'Expected Blob or File.';\r\n\t }\r\n\t }\r\n\t return new ArgSpec(validator);\r\n\t}\r\n\tfunction metadataSpec(opt_optional) {\r\n\t return new ArgSpec(metadataValidator, opt_optional);\r\n\t}\r\n\tfunction nonNegativeNumberSpec() {\r\n\t function validator(p) {\r\n\t var valid = isNumber(p) && p >= 0;\r\n\t if (!valid) {\r\n\t throw 'Expected a number 0 or greater.';\r\n\t }\r\n\t }\r\n\t return new ArgSpec(validator);\r\n\t}\r\n\tfunction looseObjectSpec(opt_validator, opt_optional) {\r\n\t function validator(p) {\r\n\t var isLooseObject = p === null || (isDef(p) && p instanceof Object);\r\n\t if (!isLooseObject) {\r\n\t throw 'Expected an Object.';\r\n\t }\r\n\t if (opt_validator !== undefined && opt_validator !== null) {\r\n\t opt_validator(p);\r\n\t }\r\n\t }\r\n\t return new ArgSpec(validator, opt_optional);\r\n\t}\r\n\tfunction nullFunctionSpec(opt_optional) {\r\n\t function validator(p) {\r\n\t var valid = p === null || isFunction(p);\r\n\t if (!valid) {\r\n\t throw 'Expected a Function.';\r\n\t }\r\n\t }\r\n\t return new ArgSpec(validator, opt_optional);\r\n\t}\n\t\n\tfunction getBlobBuilder() {\r\n\t if (typeof BlobBuilder !== 'undefined') {\r\n\t return BlobBuilder;\r\n\t }\r\n\t else if (typeof WebKitBlobBuilder !== 'undefined') {\r\n\t return WebKitBlobBuilder;\r\n\t }\r\n\t else {\r\n\t return undefined;\r\n\t }\r\n\t}\r\n\t/**\r\n\t * Concatenates one or more values together and converts them to a Blob.\r\n\t *\r\n\t * @param var_args The values that will make up the resulting blob.\r\n\t * @return The blob.\r\n\t */\r\n\tfunction getBlob() {\r\n\t var var_args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t var_args[_i] = arguments[_i];\r\n\t }\r\n\t var BlobBuilder = getBlobBuilder();\r\n\t if (BlobBuilder !== undefined) {\r\n\t var bb = new BlobBuilder();\r\n\t for (var i = 0; i < var_args.length; i++) {\r\n\t bb.append(var_args[i]);\r\n\t }\r\n\t return bb.getBlob();\r\n\t }\r\n\t else {\r\n\t if (isNativeBlobDefined()) {\r\n\t return new Blob(var_args);\r\n\t }\r\n\t else {\r\n\t throw Error(\"This browser doesn't seem to support creating Blobs\");\r\n\t }\r\n\t }\r\n\t}\r\n\t/**\r\n\t * Slices the blob. The returned blob contains data from the start byte\r\n\t * (inclusive) till the end byte (exclusive). Negative indices cannot be used.\r\n\t *\r\n\t * @param blob The blob to be sliced.\r\n\t * @param start Index of the starting byte.\r\n\t * @param end Index of the ending byte.\r\n\t * @return The blob slice or null if not supported.\r\n\t */\r\n\tfunction sliceBlob(blob, start, end) {\r\n\t if (blob.webkitSlice) {\r\n\t return blob.webkitSlice(start, end);\r\n\t }\r\n\t else if (blob.mozSlice) {\r\n\t return blob.mozSlice(start, end);\r\n\t }\r\n\t else if (blob.slice) {\r\n\t return blob.slice(start, end);\r\n\t }\r\n\t return null;\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @param opt_elideCopy If true, doesn't copy mutable input data\r\n\t * (e.g. Uint8Arrays). Pass true only if you know the objects will not be\r\n\t * modified after this blob's construction.\r\n\t */\r\n\tvar FbsBlob = /** @class */ (function () {\r\n\t function FbsBlob(data, opt_elideCopy) {\r\n\t var size = 0;\r\n\t var blobType = '';\r\n\t if (isNativeBlob(data)) {\r\n\t this.data_ = data;\r\n\t size = data.size;\r\n\t blobType = data.type;\r\n\t }\r\n\t else if (data instanceof ArrayBuffer) {\r\n\t if (opt_elideCopy) {\r\n\t this.data_ = new Uint8Array(data);\r\n\t }\r\n\t else {\r\n\t this.data_ = new Uint8Array(data.byteLength);\r\n\t this.data_.set(new Uint8Array(data));\r\n\t }\r\n\t size = this.data_.length;\r\n\t }\r\n\t else if (data instanceof Uint8Array) {\r\n\t if (opt_elideCopy) {\r\n\t this.data_ = data;\r\n\t }\r\n\t else {\r\n\t this.data_ = new Uint8Array(data.length);\r\n\t this.data_.set(data);\r\n\t }\r\n\t size = data.length;\r\n\t }\r\n\t this.size_ = size;\r\n\t this.type_ = blobType;\r\n\t }\r\n\t FbsBlob.prototype.size = function () {\r\n\t return this.size_;\r\n\t };\r\n\t FbsBlob.prototype.type = function () {\r\n\t return this.type_;\r\n\t };\r\n\t FbsBlob.prototype.slice = function (startByte, endByte) {\r\n\t if (isNativeBlob(this.data_)) {\r\n\t var realBlob = this.data_;\r\n\t var sliced = sliceBlob(realBlob, startByte, endByte);\r\n\t if (sliced === null) {\r\n\t return null;\r\n\t }\r\n\t return new FbsBlob(sliced);\r\n\t }\r\n\t else {\r\n\t var slice = new Uint8Array(this.data_.buffer, startByte, endByte - startByte);\r\n\t return new FbsBlob(slice, true);\r\n\t }\r\n\t };\r\n\t FbsBlob.getBlob = function () {\r\n\t var var_args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t var_args[_i] = arguments[_i];\r\n\t }\r\n\t if (isNativeBlobDefined()) {\r\n\t var blobby = var_args.map(function (val) {\r\n\t if (val instanceof FbsBlob) {\r\n\t return val.data_;\r\n\t }\r\n\t else {\r\n\t return val;\r\n\t }\r\n\t });\r\n\t return new FbsBlob(getBlob.apply(null, blobby));\r\n\t }\r\n\t else {\r\n\t var uint8Arrays = var_args.map(function (val) {\r\n\t if (isString(val)) {\r\n\t return dataFromString(StringFormat.RAW, val).data;\r\n\t }\r\n\t else {\r\n\t // Blobs don't exist, so this has to be a Uint8Array.\r\n\t return val.data_;\r\n\t }\r\n\t });\r\n\t var finalLength_1 = 0;\r\n\t uint8Arrays.forEach(function (array) {\r\n\t finalLength_1 += array.byteLength;\r\n\t });\r\n\t var merged_1 = new Uint8Array(finalLength_1);\r\n\t var index_1 = 0;\r\n\t uint8Arrays.forEach(function (array) {\r\n\t for (var i = 0; i < array.length; i++) {\r\n\t merged_1[index_1++] = array[i];\r\n\t }\r\n\t });\r\n\t return new FbsBlob(merged_1, true);\r\n\t }\r\n\t };\r\n\t FbsBlob.prototype.uploadData = function () {\r\n\t return this.data_;\r\n\t };\r\n\t return FbsBlob;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Returns true if the object is contained in the array (compared with ===).\r\n\t * @template T\r\n\t */\r\n\tfunction contains$1(array, elem) {\r\n\t return array.indexOf(elem) !== -1;\r\n\t}\r\n\t/**\r\n\t * Returns a shallow copy of the array or array-like object (e.g. arguments).\r\n\t * @template T\r\n\t */\r\n\tfunction clone$1(arraylike) {\r\n\t return Array.prototype.slice.call(arraylike);\r\n\t}\r\n\t/**\r\n\t * Removes the given element from the given array, if it is contained.\r\n\t * Directly modifies the passed-in array.\r\n\t * @template T\r\n\t */\r\n\tfunction remove(array, elem) {\r\n\t var i = array.indexOf(elem);\r\n\t if (i !== -1) {\r\n\t array.splice(i, 1);\r\n\t }\r\n\t}\n\t\n\tvar RequestInfo = /** @class */ (function () {\r\n\t function RequestInfo(url, method, \r\n\t /**\r\n\t * Returns the value with which to resolve the request's promise. Only called\r\n\t * if the request is successful. Throw from this function to reject the\r\n\t * returned Request's promise with the thrown error.\r\n\t * Note: The XhrIo passed to this function may be reused after this callback\r\n\t * returns. Do not keep a reference to it in any way.\r\n\t */\r\n\t handler, timeout) {\r\n\t this.url = url;\r\n\t this.method = method;\r\n\t this.handler = handler;\r\n\t this.timeout = timeout;\r\n\t this.urlParams = {};\r\n\t this.headers = {};\r\n\t this.body = null;\r\n\t this.errorHandler = null;\r\n\t /**\r\n\t * Called with the current number of bytes uploaded and total size (-1 if not\r\n\t * computable) of the request body (i.e. used to report upload progress).\r\n\t */\r\n\t this.progressCallback = null;\r\n\t this.successCodes = [200];\r\n\t this.additionalRetryCodes = [];\r\n\t }\r\n\t return RequestInfo;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Throws the UNKNOWN FirebaseStorageError if cndn is false.\r\n\t */\r\n\tfunction handlerCheck(cndn) {\r\n\t if (!cndn) {\r\n\t throw unknown();\r\n\t }\r\n\t}\r\n\tfunction metadataHandler(authWrapper, mappings) {\r\n\t function handler(xhr, text) {\r\n\t var metadata = fromResourceString(authWrapper, text, mappings);\r\n\t handlerCheck(metadata !== null);\r\n\t return metadata;\r\n\t }\r\n\t return handler;\r\n\t}\r\n\tfunction sharedErrorHandler(location) {\r\n\t function errorHandler(xhr, err) {\r\n\t var newErr;\r\n\t if (xhr.getStatus() === 401) {\r\n\t newErr = unauthenticated();\r\n\t }\r\n\t else {\r\n\t if (xhr.getStatus() === 402) {\r\n\t newErr = quotaExceeded(location.bucket);\r\n\t }\r\n\t else {\r\n\t if (xhr.getStatus() === 403) {\r\n\t newErr = unauthorized(location.path);\r\n\t }\r\n\t else {\r\n\t newErr = err;\r\n\t }\r\n\t }\r\n\t }\r\n\t newErr.setServerResponseProp(err.serverResponseProp());\r\n\t return newErr;\r\n\t }\r\n\t return errorHandler;\r\n\t}\r\n\tfunction objectErrorHandler(location) {\r\n\t var shared = sharedErrorHandler(location);\r\n\t function errorHandler(xhr, err) {\r\n\t var newErr = shared(xhr, err);\r\n\t if (xhr.getStatus() === 404) {\r\n\t newErr = objectNotFound(location.path);\r\n\t }\r\n\t newErr.setServerResponseProp(err.serverResponseProp());\r\n\t return newErr;\r\n\t }\r\n\t return errorHandler;\r\n\t}\r\n\tfunction getMetadata(authWrapper, location, mappings) {\r\n\t var urlPart = location.fullServerUrl();\r\n\t var url = makeNormalUrl(urlPart);\r\n\t var method = 'GET';\r\n\t var timeout = authWrapper.maxOperationRetryTime();\r\n\t var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, mappings), timeout);\r\n\t requestInfo.errorHandler = objectErrorHandler(location);\r\n\t return requestInfo;\r\n\t}\r\n\tfunction updateMetadata(authWrapper, location, metadata, mappings) {\r\n\t var urlPart = location.fullServerUrl();\r\n\t var url = makeNormalUrl(urlPart);\r\n\t var method = 'PATCH';\r\n\t var body = toResourceString(metadata, mappings);\r\n\t var headers = { 'Content-Type': 'application/json; charset=utf-8' };\r\n\t var timeout = authWrapper.maxOperationRetryTime();\r\n\t var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, mappings), timeout);\r\n\t requestInfo.headers = headers;\r\n\t requestInfo.body = body;\r\n\t requestInfo.errorHandler = objectErrorHandler(location);\r\n\t return requestInfo;\r\n\t}\r\n\tfunction deleteObject(authWrapper, location) {\r\n\t var urlPart = location.fullServerUrl();\r\n\t var url = makeNormalUrl(urlPart);\r\n\t var method = 'DELETE';\r\n\t var timeout = authWrapper.maxOperationRetryTime();\r\n\t function handler(xhr, text) { }\r\n\t var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n\t requestInfo.successCodes = [200, 204];\r\n\t requestInfo.errorHandler = objectErrorHandler(location);\r\n\t return requestInfo;\r\n\t}\r\n\tfunction determineContentType_(metadata, blob) {\r\n\t return ((metadata && metadata['contentType']) ||\r\n\t (blob && blob.type()) ||\r\n\t 'application/octet-stream');\r\n\t}\r\n\tfunction metadataForUpload_(location, blob, opt_metadata) {\r\n\t var metadata = clone(opt_metadata);\r\n\t metadata['fullPath'] = location.path;\r\n\t metadata['size'] = blob.size();\r\n\t if (!metadata['contentType']) {\r\n\t metadata['contentType'] = determineContentType_(null, blob);\r\n\t }\r\n\t return metadata;\r\n\t}\r\n\tfunction multipartUpload(authWrapper, location, mappings, blob, opt_metadata) {\r\n\t var urlPart = location.bucketOnlyServerUrl();\r\n\t var headers = {\r\n\t 'X-Goog-Upload-Protocol': 'multipart'\r\n\t };\r\n\t function genBoundary() {\r\n\t var str = '';\r\n\t for (var i = 0; i < 2; i++) {\r\n\t str =\r\n\t str +\r\n\t Math.random()\r\n\t .toString()\r\n\t .slice(2);\r\n\t }\r\n\t return str;\r\n\t }\r\n\t var boundary = genBoundary();\r\n\t headers['Content-Type'] = 'multipart/related; boundary=' + boundary;\r\n\t var metadata = metadataForUpload_(location, blob, opt_metadata);\r\n\t var metadataString = toResourceString(metadata, mappings);\r\n\t var preBlobPart = '--' +\r\n\t boundary +\r\n\t '\\r\\n' +\r\n\t 'Content-Type: application/json; charset=utf-8\\r\\n\\r\\n' +\r\n\t metadataString +\r\n\t '\\r\\n--' +\r\n\t boundary +\r\n\t '\\r\\n' +\r\n\t 'Content-Type: ' +\r\n\t metadata['contentType'] +\r\n\t '\\r\\n\\r\\n';\r\n\t var postBlobPart = '\\r\\n--' + boundary + '--';\r\n\t var body = FbsBlob.getBlob(preBlobPart, blob, postBlobPart);\r\n\t if (body === null) {\r\n\t throw cannotSliceBlob();\r\n\t }\r\n\t var urlParams = { name: metadata['fullPath'] };\r\n\t var url = makeUploadUrl(urlPart);\r\n\t var method = 'POST';\r\n\t var timeout = authWrapper.maxUploadRetryTime();\r\n\t var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, mappings), timeout);\r\n\t requestInfo.urlParams = urlParams;\r\n\t requestInfo.headers = headers;\r\n\t requestInfo.body = body.uploadData();\r\n\t requestInfo.errorHandler = sharedErrorHandler(location);\r\n\t return requestInfo;\r\n\t}\r\n\t/**\r\n\t * @param current The number of bytes that have been uploaded so far.\r\n\t * @param total The total number of bytes in the upload.\r\n\t * @param opt_finalized True if the server has finished the upload.\r\n\t * @param opt_metadata The upload metadata, should\r\n\t * only be passed if opt_finalized is true.\r\n\t * @struct\r\n\t */\r\n\tvar ResumableUploadStatus = /** @class */ (function () {\r\n\t function ResumableUploadStatus(current, total, finalized, metadata) {\r\n\t this.current = current;\r\n\t this.total = total;\r\n\t this.finalized = !!finalized;\r\n\t this.metadata = metadata || null;\r\n\t }\r\n\t return ResumableUploadStatus;\r\n\t}());\r\n\tfunction checkResumeHeader_(xhr, opt_allowed) {\r\n\t var status;\r\n\t try {\r\n\t status = xhr.getResponseHeader('X-Goog-Upload-Status');\r\n\t }\r\n\t catch (e) {\r\n\t handlerCheck(false);\r\n\t }\r\n\t var allowed = opt_allowed || ['active'];\r\n\t handlerCheck(contains$1(allowed, status));\r\n\t return status;\r\n\t}\r\n\tfunction createResumableUpload(authWrapper, location, mappings, blob, opt_metadata) {\r\n\t var urlPart = location.bucketOnlyServerUrl();\r\n\t var metadata = metadataForUpload_(location, blob, opt_metadata);\r\n\t var urlParams = { name: metadata['fullPath'] };\r\n\t var url = makeUploadUrl(urlPart);\r\n\t var method = 'POST';\r\n\t var headers = {\r\n\t 'X-Goog-Upload-Protocol': 'resumable',\r\n\t 'X-Goog-Upload-Command': 'start',\r\n\t 'X-Goog-Upload-Header-Content-Length': blob.size(),\r\n\t 'X-Goog-Upload-Header-Content-Type': metadata['contentType'],\r\n\t 'Content-Type': 'application/json; charset=utf-8'\r\n\t };\r\n\t var body = toResourceString(metadata, mappings);\r\n\t var timeout = authWrapper.maxUploadRetryTime();\r\n\t function handler(xhr, text) {\r\n\t checkResumeHeader_(xhr);\r\n\t var url;\r\n\t try {\r\n\t url = xhr.getResponseHeader('X-Goog-Upload-URL');\r\n\t }\r\n\t catch (e) {\r\n\t handlerCheck(false);\r\n\t }\r\n\t handlerCheck(isString(url));\r\n\t return url;\r\n\t }\r\n\t var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n\t requestInfo.urlParams = urlParams;\r\n\t requestInfo.headers = headers;\r\n\t requestInfo.body = body;\r\n\t requestInfo.errorHandler = sharedErrorHandler(location);\r\n\t return requestInfo;\r\n\t}\r\n\t/**\r\n\t * @param url From a call to fbs.requests.createResumableUpload.\r\n\t */\r\n\tfunction getResumableUploadStatus(authWrapper, location, url, blob) {\r\n\t var headers = { 'X-Goog-Upload-Command': 'query' };\r\n\t function handler(xhr, text) {\r\n\t var status = checkResumeHeader_(xhr, ['active', 'final']);\r\n\t var sizeString;\r\n\t try {\r\n\t sizeString = xhr.getResponseHeader('X-Goog-Upload-Size-Received');\r\n\t }\r\n\t catch (e) {\r\n\t handlerCheck(false);\r\n\t }\r\n\t var size = parseInt(sizeString, 10);\r\n\t handlerCheck(!isNaN(size));\r\n\t return new ResumableUploadStatus(size, blob.size(), status === 'final');\r\n\t }\r\n\t var method = 'POST';\r\n\t var timeout = authWrapper.maxUploadRetryTime();\r\n\t var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n\t requestInfo.headers = headers;\r\n\t requestInfo.errorHandler = sharedErrorHandler(location);\r\n\t return requestInfo;\r\n\t}\r\n\t/**\r\n\t * Any uploads via the resumable upload API must transfer a number of bytes\r\n\t * that is a multiple of this number.\r\n\t */\r\n\tvar resumableUploadChunkSize = 256 * 1024;\r\n\t/**\r\n\t * @param url From a call to fbs.requests.createResumableUpload.\r\n\t * @param chunkSize Number of bytes to upload.\r\n\t * @param opt_status The previous status.\r\n\t * If not passed or null, we start from the beginning.\r\n\t * @throws fbs.Error If the upload is already complete, the passed in status\r\n\t * has a final size inconsistent with the blob, or the blob cannot be sliced\r\n\t * for upload.\r\n\t */\r\n\tfunction continueResumableUpload(location, authWrapper, url, blob, chunkSize, mappings, opt_status, opt_progressCallback) {\r\n\t // TODO(andysoto): standardize on internal asserts\r\n\t // assert(!(opt_status && opt_status.finalized));\r\n\t var status = new ResumableUploadStatus(0, 0);\r\n\t if (opt_status) {\r\n\t status.current = opt_status.current;\r\n\t status.total = opt_status.total;\r\n\t }\r\n\t else {\r\n\t status.current = 0;\r\n\t status.total = blob.size();\r\n\t }\r\n\t if (blob.size() !== status.total) {\r\n\t throw serverFileWrongSize();\r\n\t }\r\n\t var bytesLeft = status.total - status.current;\r\n\t var bytesToUpload = bytesLeft;\r\n\t if (chunkSize > 0) {\r\n\t bytesToUpload = Math.min(bytesToUpload, chunkSize);\r\n\t }\r\n\t var startByte = status.current;\r\n\t var endByte = startByte + bytesToUpload;\r\n\t var uploadCommand = bytesToUpload === bytesLeft ? 'upload, finalize' : 'upload';\r\n\t var headers = {\r\n\t 'X-Goog-Upload-Command': uploadCommand,\r\n\t 'X-Goog-Upload-Offset': status.current\r\n\t };\r\n\t var body = blob.slice(startByte, endByte);\r\n\t if (body === null) {\r\n\t throw cannotSliceBlob();\r\n\t }\r\n\t function handler(xhr, text) {\r\n\t // TODO(andysoto): Verify the MD5 of each uploaded range:\r\n\t // the 'x-range-md5' header comes back with status code 308 responses.\r\n\t // We'll only be able to bail out though, because you can't re-upload a\r\n\t // range that you previously uploaded.\r\n\t var uploadStatus = checkResumeHeader_(xhr, ['active', 'final']);\r\n\t var newCurrent = status.current + bytesToUpload;\r\n\t var size = blob.size();\r\n\t var metadata;\r\n\t if (uploadStatus === 'final') {\r\n\t metadata = metadataHandler(authWrapper, mappings)(xhr, text);\r\n\t }\r\n\t else {\r\n\t metadata = null;\r\n\t }\r\n\t return new ResumableUploadStatus(newCurrent, size, uploadStatus === 'final', metadata);\r\n\t }\r\n\t var method = 'POST';\r\n\t var timeout = authWrapper.maxUploadRetryTime();\r\n\t var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n\t requestInfo.headers = headers;\r\n\t requestInfo.body = body.uploadData();\r\n\t requestInfo.progressCallback = opt_progressCallback || null;\r\n\t requestInfo.errorHandler = sharedErrorHandler(location);\r\n\t return requestInfo;\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @struct\r\n\t */\r\n\tvar Observer = /** @class */ (function () {\r\n\t function Observer(nextOrObserver, opt_error, opt_complete) {\r\n\t var asFunctions = isFunction(nextOrObserver) ||\r\n\t isDef(opt_error) ||\r\n\t isDef(opt_complete);\r\n\t if (asFunctions) {\r\n\t this.next = nextOrObserver;\r\n\t this.error = opt_error || null;\r\n\t this.complete = opt_complete || null;\r\n\t }\r\n\t else {\r\n\t var observer = nextOrObserver;\r\n\t this.next = observer.next || null;\r\n\t this.error = observer.error || null;\r\n\t this.complete = observer.complete || null;\r\n\t }\r\n\t }\r\n\t return Observer;\r\n\t}());\n\t\n\tvar UploadTaskSnapshot = /** @class */ (function () {\r\n\t function UploadTaskSnapshot(bytesTransferred, totalBytes, state, metadata, task, ref) {\r\n\t this.bytesTransferred = bytesTransferred;\r\n\t this.totalBytes = totalBytes;\r\n\t this.state = state;\r\n\t this.metadata = metadata;\r\n\t this.task = task;\r\n\t this.ref = ref;\r\n\t }\r\n\t Object.defineProperty(UploadTaskSnapshot.prototype, \"downloadURL\", {\r\n\t get: function () {\r\n\t if (this.metadata !== null) {\r\n\t var urls = this.metadata['downloadURLs'];\r\n\t if (urls != null && urls[0] != null) {\r\n\t return urls[0];\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t return UploadTaskSnapshot;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Returns a function that invokes f with its arguments asynchronously as a\r\n\t * microtask, i.e. as soon as possible after the current script returns back\r\n\t * into browser code.\r\n\t */\r\n\tfunction async(f) {\r\n\t return function () {\r\n\t var argsToForward = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t argsToForward[_i] = arguments[_i];\r\n\t }\r\n\t resolve(true).then(function () {\r\n\t f.apply(null, argsToForward);\r\n\t });\r\n\t };\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Represents a blob being uploaded. Can be used to pause/resume/cancel the\r\n\t * upload and manage callbacks for various events.\r\n\t */\r\n\tvar UploadTask = /** @class */ (function () {\r\n\t /**\r\n\t * @param ref The firebaseStorage.Reference object this task came\r\n\t * from, untyped to avoid cyclic dependencies.\r\n\t * @param blob The blob to upload.\r\n\t */\r\n\t function UploadTask(ref, authWrapper, location, mappings, blob, metadata) {\r\n\t if (metadata === void 0) { metadata = null; }\r\n\t var _this = this;\r\n\t this.transferred_ = 0;\r\n\t this.needToFetchStatus_ = false;\r\n\t this.needToFetchMetadata_ = false;\r\n\t this.observers_ = [];\r\n\t this.error_ = null;\r\n\t this.uploadUrl_ = null;\r\n\t this.request_ = null;\r\n\t this.chunkMultiplier_ = 1;\r\n\t this.resolve_ = null;\r\n\t this.reject_ = null;\r\n\t this.ref_ = ref;\r\n\t this.authWrapper_ = authWrapper;\r\n\t this.location_ = location;\r\n\t this.blob_ = blob;\r\n\t this.metadata_ = metadata;\r\n\t this.mappings_ = mappings;\r\n\t this.resumable_ = this.shouldDoResumable_(this.blob_);\r\n\t this.state_ = InternalTaskState.RUNNING;\r\n\t this.errorHandler_ = function (error) {\r\n\t _this.request_ = null;\r\n\t _this.chunkMultiplier_ = 1;\r\n\t if (error.codeEquals(Code.CANCELED)) {\r\n\t _this.needToFetchStatus_ = true;\r\n\t _this.completeTransitions_();\r\n\t }\r\n\t else {\r\n\t _this.error_ = error;\r\n\t _this.transition_(InternalTaskState.ERROR);\r\n\t }\r\n\t };\r\n\t this.metadataErrorHandler_ = function (error) {\r\n\t _this.request_ = null;\r\n\t if (error.codeEquals(Code.CANCELED)) {\r\n\t _this.completeTransitions_();\r\n\t }\r\n\t else {\r\n\t _this.error_ = error;\r\n\t _this.transition_(InternalTaskState.ERROR);\r\n\t }\r\n\t };\r\n\t this.promise_ = make(function (resolve$$1, reject$$1) {\r\n\t _this.resolve_ = resolve$$1;\r\n\t _this.reject_ = reject$$1;\r\n\t _this.start_();\r\n\t });\r\n\t // Prevent uncaught rejections on the internal promise from bubbling out\r\n\t // to the top level with a dummy handler.\r\n\t this.promise_.then(null, function () { });\r\n\t }\r\n\t UploadTask.prototype.makeProgressCallback_ = function () {\r\n\t var _this = this;\r\n\t var sizeBefore = this.transferred_;\r\n\t return function (loaded, total) {\r\n\t _this.updateProgress_(sizeBefore + loaded);\r\n\t };\r\n\t };\r\n\t UploadTask.prototype.shouldDoResumable_ = function (blob) {\r\n\t return blob.size() > 256 * 1024;\r\n\t };\r\n\t UploadTask.prototype.start_ = function () {\r\n\t if (this.state_ !== InternalTaskState.RUNNING) {\r\n\t // This can happen if someone pauses us in a resume callback, for example.\r\n\t return;\r\n\t }\r\n\t if (this.request_ !== null) {\r\n\t return;\r\n\t }\r\n\t if (this.resumable_) {\r\n\t if (this.uploadUrl_ === null) {\r\n\t this.createResumable_();\r\n\t }\r\n\t else {\r\n\t if (this.needToFetchStatus_) {\r\n\t this.fetchStatus_();\r\n\t }\r\n\t else {\r\n\t if (this.needToFetchMetadata_) {\r\n\t // Happens if we miss the metadata on upload completion.\r\n\t this.fetchMetadata_();\r\n\t }\r\n\t else {\r\n\t this.continueUpload_();\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t this.oneShotUpload_();\r\n\t }\r\n\t };\r\n\t UploadTask.prototype.resolveToken_ = function (callback) {\r\n\t var _this = this;\r\n\t this.authWrapper_.getAuthToken().then(function (authToken) {\r\n\t switch (_this.state_) {\r\n\t case InternalTaskState.RUNNING:\r\n\t callback(authToken);\r\n\t break;\r\n\t case InternalTaskState.CANCELING:\r\n\t _this.transition_(InternalTaskState.CANCELED);\r\n\t break;\r\n\t case InternalTaskState.PAUSING:\r\n\t _this.transition_(InternalTaskState.PAUSED);\r\n\t break;\r\n\t default:\r\n\t }\r\n\t });\r\n\t };\r\n\t // TODO(andysoto): assert false\r\n\t UploadTask.prototype.createResumable_ = function () {\r\n\t var _this = this;\r\n\t this.resolveToken_(function (authToken) {\r\n\t var requestInfo = createResumableUpload(_this.authWrapper_, _this.location_, _this.mappings_, _this.blob_, _this.metadata_);\r\n\t var createRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n\t _this.request_ = createRequest;\r\n\t createRequest.getPromise().then(function (url) {\r\n\t _this.request_ = null;\r\n\t _this.uploadUrl_ = url;\r\n\t _this.needToFetchStatus_ = false;\r\n\t _this.completeTransitions_();\r\n\t }, _this.errorHandler_);\r\n\t });\r\n\t };\r\n\t UploadTask.prototype.fetchStatus_ = function () {\r\n\t var _this = this;\r\n\t // TODO(andysoto): assert(this.uploadUrl_ !== null);\r\n\t var url = this.uploadUrl_;\r\n\t this.resolveToken_(function (authToken) {\r\n\t var requestInfo = getResumableUploadStatus(_this.authWrapper_, _this.location_, url, _this.blob_);\r\n\t var statusRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n\t _this.request_ = statusRequest;\r\n\t statusRequest.getPromise().then(function (status) {\r\n\t status = status;\r\n\t _this.request_ = null;\r\n\t _this.updateProgress_(status.current);\r\n\t _this.needToFetchStatus_ = false;\r\n\t if (status.finalized) {\r\n\t _this.needToFetchMetadata_ = true;\r\n\t }\r\n\t _this.completeTransitions_();\r\n\t }, _this.errorHandler_);\r\n\t });\r\n\t };\r\n\t UploadTask.prototype.continueUpload_ = function () {\r\n\t var _this = this;\r\n\t var chunkSize = resumableUploadChunkSize * this.chunkMultiplier_;\r\n\t var status = new ResumableUploadStatus(this.transferred_, this.blob_.size());\r\n\t // TODO(andysoto): assert(this.uploadUrl_ !== null);\r\n\t var url = this.uploadUrl_;\r\n\t this.resolveToken_(function (authToken) {\r\n\t var requestInfo;\r\n\t try {\r\n\t requestInfo = continueResumableUpload(_this.location_, _this.authWrapper_, url, _this.blob_, chunkSize, _this.mappings_, status, _this.makeProgressCallback_());\r\n\t }\r\n\t catch (e) {\r\n\t _this.error_ = e;\r\n\t _this.transition_(InternalTaskState.ERROR);\r\n\t return;\r\n\t }\r\n\t var uploadRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n\t _this.request_ = uploadRequest;\r\n\t uploadRequest\r\n\t .getPromise()\r\n\t .then(function (newStatus) {\r\n\t _this.increaseMultiplier_();\r\n\t _this.request_ = null;\r\n\t _this.updateProgress_(newStatus.current);\r\n\t if (newStatus.finalized) {\r\n\t _this.metadata_ = newStatus.metadata;\r\n\t _this.transition_(InternalTaskState.SUCCESS);\r\n\t }\r\n\t else {\r\n\t _this.completeTransitions_();\r\n\t }\r\n\t }, _this.errorHandler_);\r\n\t });\r\n\t };\r\n\t UploadTask.prototype.increaseMultiplier_ = function () {\r\n\t var currentSize = resumableUploadChunkSize * this.chunkMultiplier_;\r\n\t // Max chunk size is 32M.\r\n\t if (currentSize < 32 * 1024 * 1024) {\r\n\t this.chunkMultiplier_ *= 2;\r\n\t }\r\n\t };\r\n\t UploadTask.prototype.fetchMetadata_ = function () {\r\n\t var _this = this;\r\n\t this.resolveToken_(function (authToken) {\r\n\t var requestInfo = getMetadata(_this.authWrapper_, _this.location_, _this.mappings_);\r\n\t var metadataRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n\t _this.request_ = metadataRequest;\r\n\t metadataRequest.getPromise().then(function (metadata) {\r\n\t _this.request_ = null;\r\n\t _this.metadata_ = metadata;\r\n\t _this.transition_(InternalTaskState.SUCCESS);\r\n\t }, _this.metadataErrorHandler_);\r\n\t });\r\n\t };\r\n\t UploadTask.prototype.oneShotUpload_ = function () {\r\n\t var _this = this;\r\n\t this.resolveToken_(function (authToken) {\r\n\t var requestInfo = multipartUpload(_this.authWrapper_, _this.location_, _this.mappings_, _this.blob_, _this.metadata_);\r\n\t var multipartRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n\t _this.request_ = multipartRequest;\r\n\t multipartRequest.getPromise().then(function (metadata) {\r\n\t _this.request_ = null;\r\n\t _this.metadata_ = metadata;\r\n\t _this.updateProgress_(_this.blob_.size());\r\n\t _this.transition_(InternalTaskState.SUCCESS);\r\n\t }, _this.errorHandler_);\r\n\t });\r\n\t };\r\n\t UploadTask.prototype.updateProgress_ = function (transferred) {\r\n\t var old = this.transferred_;\r\n\t this.transferred_ = transferred;\r\n\t // A progress update can make the \"transferred\" value smaller (e.g. a\r\n\t // partial upload not completed by server, after which the \"transferred\"\r\n\t // value may reset to the value at the beginning of the request).\r\n\t if (this.transferred_ !== old) {\r\n\t this.notifyObservers_();\r\n\t }\r\n\t };\r\n\t UploadTask.prototype.transition_ = function (state) {\r\n\t if (this.state_ === state) {\r\n\t return;\r\n\t }\r\n\t switch (state) {\r\n\t case InternalTaskState.CANCELING:\r\n\t // TODO(andysoto):\r\n\t // assert(this.state_ === InternalTaskState.RUNNING ||\r\n\t // this.state_ === InternalTaskState.PAUSING);\r\n\t this.state_ = state;\r\n\t if (this.request_ !== null) {\r\n\t this.request_.cancel();\r\n\t }\r\n\t break;\r\n\t case InternalTaskState.PAUSING:\r\n\t // TODO(andysoto):\r\n\t // assert(this.state_ === InternalTaskState.RUNNING);\r\n\t this.state_ = state;\r\n\t if (this.request_ !== null) {\r\n\t this.request_.cancel();\r\n\t }\r\n\t break;\r\n\t case InternalTaskState.RUNNING:\r\n\t // TODO(andysoto):\r\n\t // assert(this.state_ === InternalTaskState.PAUSED ||\r\n\t // this.state_ === InternalTaskState.PAUSING);\r\n\t var wasPaused = this.state_ === InternalTaskState.PAUSED;\r\n\t this.state_ = state;\r\n\t if (wasPaused) {\r\n\t this.notifyObservers_();\r\n\t this.start_();\r\n\t }\r\n\t break;\r\n\t case InternalTaskState.PAUSED:\r\n\t // TODO(andysoto):\r\n\t // assert(this.state_ === InternalTaskState.PAUSING);\r\n\t this.state_ = state;\r\n\t this.notifyObservers_();\r\n\t break;\r\n\t case InternalTaskState.CANCELED:\r\n\t // TODO(andysoto):\r\n\t // assert(this.state_ === InternalTaskState.PAUSED ||\r\n\t // this.state_ === InternalTaskState.CANCELING);\r\n\t this.error_ = canceled();\r\n\t this.state_ = state;\r\n\t this.notifyObservers_();\r\n\t break;\r\n\t case InternalTaskState.ERROR:\r\n\t // TODO(andysoto):\r\n\t // assert(this.state_ === InternalTaskState.RUNNING ||\r\n\t // this.state_ === InternalTaskState.PAUSING ||\r\n\t // this.state_ === InternalTaskState.CANCELING);\r\n\t this.state_ = state;\r\n\t this.notifyObservers_();\r\n\t break;\r\n\t case InternalTaskState.SUCCESS:\r\n\t // TODO(andysoto):\r\n\t // assert(this.state_ === InternalTaskState.RUNNING ||\r\n\t // this.state_ === InternalTaskState.PAUSING ||\r\n\t // this.state_ === InternalTaskState.CANCELING);\r\n\t this.state_ = state;\r\n\t this.notifyObservers_();\r\n\t break;\r\n\t }\r\n\t };\r\n\t UploadTask.prototype.completeTransitions_ = function () {\r\n\t switch (this.state_) {\r\n\t case InternalTaskState.PAUSING:\r\n\t this.transition_(InternalTaskState.PAUSED);\r\n\t break;\r\n\t case InternalTaskState.CANCELING:\r\n\t this.transition_(InternalTaskState.CANCELED);\r\n\t break;\r\n\t case InternalTaskState.RUNNING:\r\n\t this.start_();\r\n\t break;\r\n\t default:\r\n\t // TODO(andysoto): assert(false);\r\n\t break;\r\n\t }\r\n\t };\r\n\t Object.defineProperty(UploadTask.prototype, \"snapshot\", {\r\n\t get: function () {\r\n\t var externalState = taskStateFromInternalTaskState(this.state_);\r\n\t return new UploadTaskSnapshot(this.transferred_, this.blob_.size(), externalState, this.metadata_, this, this.ref_);\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t /**\r\n\t * Adds a callback for an event.\r\n\t * @param type The type of event to listen for.\r\n\t */\r\n\t UploadTask.prototype.on = function (type, nextOrObserver, error, completed) {\r\n\t if (nextOrObserver === void 0) { nextOrObserver = undefined; }\r\n\t if (error === void 0) { error = undefined; }\r\n\t if (completed === void 0) { completed = undefined; }\r\n\t function typeValidator(_p) {\r\n\t if (type !== TaskEvent.STATE_CHANGED) {\r\n\t throw \"Expected one of the event types: [\" + TaskEvent.STATE_CHANGED + \"].\";\r\n\t }\r\n\t }\r\n\t var nextOrObserverMessage = 'Expected a function or an Object with one of ' +\r\n\t '`next`, `error`, `complete` properties.';\r\n\t var nextValidator = nullFunctionSpec(true).validator;\r\n\t var observerValidator = looseObjectSpec(null, true).validator;\r\n\t function nextOrObserverValidator(p) {\r\n\t try {\r\n\t nextValidator(p);\r\n\t return;\r\n\t }\r\n\t catch (e) { }\r\n\t try {\r\n\t observerValidator(p);\r\n\t var anyDefined = isJustDef(p['next']) ||\r\n\t isJustDef(p['error']) ||\r\n\t isJustDef(p['complete']);\r\n\t if (!anyDefined) {\r\n\t throw '';\r\n\t }\r\n\t return;\r\n\t }\r\n\t catch (e) {\r\n\t throw nextOrObserverMessage;\r\n\t }\r\n\t }\r\n\t var specs = [\r\n\t stringSpec(typeValidator),\r\n\t looseObjectSpec(nextOrObserverValidator, true),\r\n\t nullFunctionSpec(true),\r\n\t nullFunctionSpec(true)\r\n\t ];\r\n\t validate('on', specs, arguments);\r\n\t var self = this;\r\n\t function makeBinder(specs) {\r\n\t function binder(nextOrObserver, error, opt_complete) {\r\n\t if (specs !== null) {\r\n\t validate('on', specs, arguments);\r\n\t }\r\n\t var observer = new Observer(nextOrObserver, error, completed);\r\n\t self.addObserver_(observer);\r\n\t return function () {\r\n\t self.removeObserver_(observer);\r\n\t };\r\n\t }\r\n\t return binder;\r\n\t }\r\n\t function binderNextOrObserverValidator(p) {\r\n\t if (p === null) {\r\n\t throw nextOrObserverMessage;\r\n\t }\r\n\t nextOrObserverValidator(p);\r\n\t }\r\n\t var binderSpecs = [\r\n\t looseObjectSpec(binderNextOrObserverValidator),\r\n\t nullFunctionSpec(true),\r\n\t nullFunctionSpec(true)\r\n\t ];\r\n\t var typeOnly = !(isJustDef(nextOrObserver) ||\r\n\t isJustDef(error) ||\r\n\t isJustDef(completed));\r\n\t if (typeOnly) {\r\n\t return makeBinder(binderSpecs);\r\n\t }\r\n\t else {\r\n\t return makeBinder(null)(nextOrObserver, error, completed);\r\n\t }\r\n\t };\r\n\t /**\r\n\t * This object behaves like a Promise, and resolves with its snapshot data\r\n\t * when the upload completes.\r\n\t * @param onFulfilled The fulfillment callback. Promise chaining works as normal.\r\n\t * @param onRejected The rejection callback.\r\n\t */\r\n\t UploadTask.prototype.then = function (onFulfilled, onRejected) {\r\n\t // These casts are needed so that TypeScript can infer the types of the\r\n\t // resulting Promise.\r\n\t return this.promise_.then(onFulfilled, onRejected);\r\n\t };\r\n\t /**\r\n\t * Equivalent to calling `then(null, onRejected)`.\r\n\t */\r\n\t UploadTask.prototype.catch = function (onRejected) {\r\n\t return this.then(null, onRejected);\r\n\t };\r\n\t /**\r\n\t * Adds the given observer.\r\n\t */\r\n\t UploadTask.prototype.addObserver_ = function (observer) {\r\n\t this.observers_.push(observer);\r\n\t this.notifyObserver_(observer);\r\n\t };\r\n\t /**\r\n\t * Removes the given observer.\r\n\t */\r\n\t UploadTask.prototype.removeObserver_ = function (observer) {\r\n\t remove(this.observers_, observer);\r\n\t };\r\n\t UploadTask.prototype.notifyObservers_ = function () {\r\n\t var _this = this;\r\n\t this.finishPromise_();\r\n\t var observers = clone$1(this.observers_);\r\n\t observers.forEach(function (observer) {\r\n\t _this.notifyObserver_(observer);\r\n\t });\r\n\t };\r\n\t UploadTask.prototype.finishPromise_ = function () {\r\n\t if (this.resolve_ !== null) {\r\n\t var triggered = true;\r\n\t switch (taskStateFromInternalTaskState(this.state_)) {\r\n\t case TaskState.SUCCESS:\r\n\t async(this.resolve_.bind(null, this.snapshot))();\r\n\t break;\r\n\t case TaskState.CANCELED:\r\n\t case TaskState.ERROR:\r\n\t var toCall = this.reject_;\r\n\t async(toCall.bind(null, this.error_))();\r\n\t break;\r\n\t default:\r\n\t triggered = false;\r\n\t break;\r\n\t }\r\n\t if (triggered) {\r\n\t this.resolve_ = null;\r\n\t this.reject_ = null;\r\n\t }\r\n\t }\r\n\t };\r\n\t UploadTask.prototype.notifyObserver_ = function (observer) {\r\n\t var externalState = taskStateFromInternalTaskState(this.state_);\r\n\t switch (externalState) {\r\n\t case TaskState.RUNNING:\r\n\t case TaskState.PAUSED:\r\n\t if (observer.next !== null) {\r\n\t async(observer.next.bind(observer, this.snapshot))();\r\n\t }\r\n\t break;\r\n\t case TaskState.SUCCESS:\r\n\t if (observer.complete !== null) {\r\n\t async(observer.complete.bind(observer))();\r\n\t }\r\n\t break;\r\n\t case TaskState.CANCELED:\r\n\t case TaskState.ERROR:\r\n\t if (observer.error !== null) {\r\n\t async(observer.error.bind(observer, this.error_))();\r\n\t }\r\n\t break;\r\n\t default:\r\n\t // TODO(andysoto): assert(false);\r\n\t if (observer.error !== null) {\r\n\t async(observer.error.bind(observer, this.error_))();\r\n\t }\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Resumes a paused task. Has no effect on a currently running or failed task.\r\n\t * @return True if the operation took effect, false if ignored.\r\n\t */\r\n\t UploadTask.prototype.resume = function () {\r\n\t validate('resume', [], arguments);\r\n\t var valid = this.state_ === InternalTaskState.PAUSED ||\r\n\t this.state_ === InternalTaskState.PAUSING;\r\n\t if (valid) {\r\n\t this.transition_(InternalTaskState.RUNNING);\r\n\t }\r\n\t return valid;\r\n\t };\r\n\t /**\r\n\t * Pauses a currently running task. Has no effect on a paused or failed task.\r\n\t * @return True if the operation took effect, false if ignored.\r\n\t */\r\n\t UploadTask.prototype.pause = function () {\r\n\t validate('pause', [], arguments);\r\n\t var valid = this.state_ === InternalTaskState.RUNNING;\r\n\t if (valid) {\r\n\t this.transition_(InternalTaskState.PAUSING);\r\n\t }\r\n\t return valid;\r\n\t };\r\n\t /**\r\n\t * Cancels a currently running or paused task. Has no effect on a complete or\r\n\t * failed task.\r\n\t * @return True if the operation took effect, false if ignored.\r\n\t */\r\n\t UploadTask.prototype.cancel = function () {\r\n\t validate('cancel', [], arguments);\r\n\t var valid = this.state_ === InternalTaskState.RUNNING ||\r\n\t this.state_ === InternalTaskState.PAUSING;\r\n\t if (valid) {\r\n\t this.transition_(InternalTaskState.CANCELING);\r\n\t }\r\n\t return valid;\r\n\t };\r\n\t return UploadTask;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Provides methods to interact with a bucket in the Firebase Storage service.\r\n\t * @param location An fbs.location, or the URL at\r\n\t * which to base this object, in one of the following forms:\r\n\t * gs:///\r\n\t * http[s]://firebasestorage.googleapis.com/\r\n\t * /b//o/\r\n\t * Any query or fragment strings will be ignored in the http[s]\r\n\t * format. If no value is passed, the storage object will use a URL based on\r\n\t * the project ID of the base firebase.App instance.\r\n\t */\r\n\tvar Reference = /** @class */ (function () {\r\n\t function Reference(authWrapper, location) {\r\n\t this.authWrapper = authWrapper;\r\n\t if (location instanceof Location) {\r\n\t this.location = location;\r\n\t }\r\n\t else {\r\n\t this.location = Location.makeFromUrl(location);\r\n\t }\r\n\t }\r\n\t /**\r\n\t * @return The URL for the bucket and path this object references,\r\n\t * in the form gs:///\r\n\t * @override\r\n\t */\r\n\t Reference.prototype.toString = function () {\r\n\t validate('toString', [], arguments);\r\n\t return 'gs://' + this.location.bucket + '/' + this.location.path;\r\n\t };\r\n\t Reference.prototype.newRef = function (authWrapper, location) {\r\n\t return new Reference(authWrapper, location);\r\n\t };\r\n\t Reference.prototype.mappings = function () {\r\n\t return getMappings();\r\n\t };\r\n\t /**\r\n\t * @return A reference to the object obtained by\r\n\t * appending childPath, removing any duplicate, beginning, or trailing\r\n\t * slashes.\r\n\t */\r\n\t Reference.prototype.child = function (childPath) {\r\n\t validate('child', [stringSpec()], arguments);\r\n\t var newPath = child(this.location.path, childPath);\r\n\t var location = new Location(this.location.bucket, newPath);\r\n\t return this.newRef(this.authWrapper, location);\r\n\t };\r\n\t Object.defineProperty(Reference.prototype, \"parent\", {\r\n\t /**\r\n\t * @return A reference to the parent of the\r\n\t * current object, or null if the current object is the root.\r\n\t */\r\n\t get: function () {\r\n\t var newPath = parent(this.location.path);\r\n\t if (newPath === null) {\r\n\t return null;\r\n\t }\r\n\t var location = new Location(this.location.bucket, newPath);\r\n\t return this.newRef(this.authWrapper, location);\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(Reference.prototype, \"root\", {\r\n\t /**\r\n\t * @return An reference to the root of this\r\n\t * object's bucket.\r\n\t */\r\n\t get: function () {\r\n\t var location = new Location(this.location.bucket, '');\r\n\t return this.newRef(this.authWrapper, location);\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(Reference.prototype, \"bucket\", {\r\n\t get: function () {\r\n\t return this.location.bucket;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(Reference.prototype, \"fullPath\", {\r\n\t get: function () {\r\n\t return this.location.path;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(Reference.prototype, \"name\", {\r\n\t get: function () {\r\n\t return lastComponent(this.location.path);\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(Reference.prototype, \"storage\", {\r\n\t get: function () {\r\n\t return this.authWrapper.service();\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t /**\r\n\t * Uploads a blob to this object's location.\r\n\t * @param data The blob to upload.\r\n\t * @return An UploadTask that lets you control and\r\n\t * observe the upload.\r\n\t */\r\n\t Reference.prototype.put = function (data, metadata) {\r\n\t if (metadata === void 0) { metadata = null; }\r\n\t validate('put', [uploadDataSpec(), metadataSpec(true)], arguments);\r\n\t this.throwIfRoot_('put');\r\n\t return new UploadTask(this, this.authWrapper, this.location, this.mappings(), new FbsBlob(data), metadata);\r\n\t };\r\n\t /**\r\n\t * Uploads a string to this object's location.\r\n\t * @param string The string to upload.\r\n\t * @param opt_format The format of the string to upload.\r\n\t * @return An UploadTask that lets you control and\r\n\t * observe the upload.\r\n\t */\r\n\t Reference.prototype.putString = function (string, format, opt_metadata) {\r\n\t if (format === void 0) { format = StringFormat.RAW; }\r\n\t validate('putString', [\r\n\t stringSpec(),\r\n\t stringSpec(formatValidator, true),\r\n\t metadataSpec(true)\r\n\t ], arguments);\r\n\t this.throwIfRoot_('putString');\r\n\t var data = dataFromString(format, string);\r\n\t var metadata = clone(opt_metadata);\r\n\t if (!isDef(metadata['contentType']) && isDef(data.contentType)) {\r\n\t metadata['contentType'] = data.contentType;\r\n\t }\r\n\t return new UploadTask(this, this.authWrapper, this.location, this.mappings(), new FbsBlob(data.data, true), metadata);\r\n\t };\r\n\t /**\r\n\t * Deletes the object at this location.\r\n\t * @return A promise that resolves if the deletion succeeds.\r\n\t */\r\n\t Reference.prototype.delete = function () {\r\n\t validate('delete', [], arguments);\r\n\t this.throwIfRoot_('delete');\r\n\t var self = this;\r\n\t return this.authWrapper.getAuthToken().then(function (authToken) {\r\n\t var requestInfo = deleteObject(self.authWrapper, self.location);\r\n\t return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\r\n\t });\r\n\t };\r\n\t /**\r\n\t * A promise that resolves with the metadata for this object. If this\r\n\t * object doesn't exist or metadata cannot be retreived, the promise is\r\n\t * rejected.\r\n\t */\r\n\t Reference.prototype.getMetadata = function () {\r\n\t validate('getMetadata', [], arguments);\r\n\t this.throwIfRoot_('getMetadata');\r\n\t var self = this;\r\n\t return this.authWrapper.getAuthToken().then(function (authToken) {\r\n\t var requestInfo = getMetadata(self.authWrapper, self.location, self.mappings());\r\n\t return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\r\n\t });\r\n\t };\r\n\t /**\r\n\t * Updates the metadata for this object.\r\n\t * @param metadata The new metadata for the object.\r\n\t * Only values that have been explicitly set will be changed. Explicitly\r\n\t * setting a value to null will remove the metadata.\r\n\t * @return A promise that resolves\r\n\t * with the new metadata for this object.\r\n\t * @see firebaseStorage.Reference.prototype.getMetadata\r\n\t */\r\n\t Reference.prototype.updateMetadata = function (metadata) {\r\n\t validate('updateMetadata', [metadataSpec()], arguments);\r\n\t this.throwIfRoot_('updateMetadata');\r\n\t var self = this;\r\n\t return this.authWrapper.getAuthToken().then(function (authToken) {\r\n\t var requestInfo = updateMetadata(self.authWrapper, self.location, metadata, self.mappings());\r\n\t return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\r\n\t });\r\n\t };\r\n\t /**\r\n\t * @return A promise that resolves with the download\r\n\t * URL for this object.\r\n\t */\r\n\t Reference.prototype.getDownloadURL = function () {\r\n\t validate('getDownloadURL', [], arguments);\r\n\t this.throwIfRoot_('getDownloadURL');\r\n\t return this.getMetadata().then(function (metadata) {\r\n\t var url = metadata['downloadURLs'][0];\r\n\t if (isDef(url)) {\r\n\t return url;\r\n\t }\r\n\t else {\r\n\t throw noDownloadURL();\r\n\t }\r\n\t });\r\n\t };\r\n\t Reference.prototype.throwIfRoot_ = function (name) {\r\n\t if (this.location.path === '') {\r\n\t throw invalidRootOperation(name);\r\n\t }\r\n\t };\r\n\t return Reference;\r\n\t}());\n\t\n\t/**\r\n\t * A request whose promise always fails.\r\n\t * @struct\r\n\t * @template T\r\n\t */\r\n\tvar FailRequest = /** @class */ (function () {\r\n\t function FailRequest(error) {\r\n\t this.promise_ = reject(error);\r\n\t }\r\n\t /** @inheritDoc */\r\n\t FailRequest.prototype.getPromise = function () {\r\n\t return this.promise_;\r\n\t };\r\n\t /** @inheritDoc */\r\n\t FailRequest.prototype.cancel = function (appDelete) {\r\n\t if (appDelete === void 0) { appDelete = false; }\r\n\t };\r\n\t return FailRequest;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @struct\r\n\t */\r\n\tvar RequestMap = /** @class */ (function () {\r\n\t function RequestMap() {\r\n\t this.map_ = {};\r\n\t this.id_ = minSafeInteger;\r\n\t }\r\n\t /**\r\n\t * Registers the given request with this map.\r\n\t * The request is unregistered when it completes.\r\n\t * @param r The request to register.\r\n\t */\r\n\t RequestMap.prototype.addRequest = function (r) {\r\n\t var id = this.id_;\r\n\t this.id_++;\r\n\t this.map_[id] = r;\r\n\t var self = this;\r\n\t function unmap() {\r\n\t delete self.map_[id];\r\n\t }\r\n\t r.getPromise().then(unmap, unmap);\r\n\t };\r\n\t /**\r\n\t * Cancels all registered requests.\r\n\t */\r\n\t RequestMap.prototype.clear = function () {\r\n\t forEach(this.map_, function (key, val) {\r\n\t if (val) {\r\n\t val.cancel(true);\r\n\t }\r\n\t });\r\n\t this.map_ = {};\r\n\t };\r\n\t return RequestMap;\r\n\t}());\n\t\n\t/**\r\n\t * @param app If null, getAuthToken always resolves with null.\r\n\t * @param service The storage service associated with this auth wrapper.\r\n\t * Untyped to avoid circular type dependencies.\r\n\t * @struct\r\n\t */\r\n\tvar AuthWrapper = /** @class */ (function () {\r\n\t function AuthWrapper(app, maker, requestMaker, service, pool) {\r\n\t this.bucket_ = null;\r\n\t this.deleted_ = false;\r\n\t this.app_ = app;\r\n\t if (this.app_ !== null) {\r\n\t var options = this.app_.options;\r\n\t if (isDef(options)) {\r\n\t this.bucket_ = AuthWrapper.extractBucket_(options);\r\n\t }\r\n\t }\r\n\t this.storageRefMaker_ = maker;\r\n\t this.requestMaker_ = requestMaker;\r\n\t this.pool_ = pool;\r\n\t this.service_ = service;\r\n\t this.maxOperationRetryTime_ = defaultMaxOperationRetryTime;\r\n\t this.maxUploadRetryTime_ = defaultMaxUploadRetryTime;\r\n\t this.requestMap_ = new RequestMap();\r\n\t }\r\n\t AuthWrapper.extractBucket_ = function (config) {\r\n\t var bucketString = config[configOption] || null;\r\n\t if (bucketString == null) {\r\n\t return null;\r\n\t }\r\n\t var loc = Location.makeFromBucketSpec(bucketString);\r\n\t return loc.bucket;\r\n\t };\r\n\t AuthWrapper.prototype.getAuthToken = function () {\r\n\t // TODO(andysoto): remove ifDef checks after firebase-app implements stubs\r\n\t // (b/28673818).\r\n\t if (this.app_ !== null &&\r\n\t isDef(this.app_.INTERNAL) &&\r\n\t isDef(this.app_.INTERNAL.getToken)) {\r\n\t return this.app_.INTERNAL.getToken().then(function (response) {\r\n\t if (response !== null) {\r\n\t return response.accessToken;\r\n\t }\r\n\t else {\r\n\t return null;\r\n\t }\r\n\t }, function (_error) {\r\n\t return null;\r\n\t });\r\n\t }\r\n\t else {\r\n\t return resolve(null);\r\n\t }\r\n\t };\r\n\t AuthWrapper.prototype.bucket = function () {\r\n\t if (this.deleted_) {\r\n\t throw appDeleted();\r\n\t }\r\n\t else {\r\n\t return this.bucket_;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * The service associated with this auth wrapper. Untyped to avoid circular\r\n\t * type dependencies.\r\n\t */\r\n\t AuthWrapper.prototype.service = function () {\r\n\t return this.service_;\r\n\t };\r\n\t /**\r\n\t * Returns a new firebaseStorage.Reference object referencing this AuthWrapper\r\n\t * at the given Location.\r\n\t * @param loc The Location.\r\n\t * @return Actually a firebaseStorage.Reference, typing not allowed\r\n\t * because of circular dependency problems.\r\n\t */\r\n\t AuthWrapper.prototype.makeStorageReference = function (loc) {\r\n\t return this.storageRefMaker_(this, loc);\r\n\t };\r\n\t AuthWrapper.prototype.makeRequest = function (requestInfo, authToken) {\r\n\t if (!this.deleted_) {\r\n\t var request = this.requestMaker_(requestInfo, authToken, this.pool_);\r\n\t this.requestMap_.addRequest(request);\r\n\t return request;\r\n\t }\r\n\t else {\r\n\t return new FailRequest(appDeleted());\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Stop running requests and prevent more from being created.\r\n\t */\r\n\t AuthWrapper.prototype.deleteApp = function () {\r\n\t this.deleted_ = true;\r\n\t this.app_ = null;\r\n\t this.requestMap_.clear();\r\n\t };\r\n\t AuthWrapper.prototype.maxUploadRetryTime = function () {\r\n\t return this.maxUploadRetryTime_;\r\n\t };\r\n\t AuthWrapper.prototype.setMaxUploadRetryTime = function (time) {\r\n\t this.maxUploadRetryTime_ = time;\r\n\t };\r\n\t AuthWrapper.prototype.maxOperationRetryTime = function () {\r\n\t return this.maxOperationRetryTime_;\r\n\t };\r\n\t AuthWrapper.prototype.setMaxOperationRetryTime = function (time) {\r\n\t this.maxOperationRetryTime_ = time;\r\n\t };\r\n\t return AuthWrapper;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @param f May be invoked\r\n\t * before the function returns.\r\n\t * @param callback Get all the arguments passed to the function\r\n\t * passed to f, including the initial boolean.\r\n\t */\r\n\tfunction start(f, callback, timeout) {\r\n\t // TODO(andysoto): make this code cleaner (probably refactor into an actual\r\n\t // type instead of a bunch of functions with state shared in the closure)\r\n\t var waitSeconds = 1;\r\n\t // Would type this as \"number\" but that doesn't work for Node so ¯\\_(ツ)_/¯\r\n\t var timeoutId = null;\r\n\t var hitTimeout = false;\r\n\t var cancelState = 0;\r\n\t function canceled() {\r\n\t return cancelState === 2;\r\n\t }\r\n\t var triggeredCallback = false;\r\n\t function triggerCallback() {\r\n\t if (!triggeredCallback) {\r\n\t triggeredCallback = true;\r\n\t callback.apply(null, arguments);\r\n\t }\r\n\t }\r\n\t function callWithDelay(millis) {\r\n\t timeoutId = setTimeout(function () {\r\n\t timeoutId = null;\r\n\t f(handler, canceled());\r\n\t }, millis);\r\n\t }\r\n\t function handler(success) {\r\n\t var var_args = [];\r\n\t for (var _i = 1; _i < arguments.length; _i++) {\r\n\t var_args[_i - 1] = arguments[_i];\r\n\t }\r\n\t if (triggeredCallback) {\r\n\t return;\r\n\t }\r\n\t if (success) {\r\n\t triggerCallback.apply(null, arguments);\r\n\t return;\r\n\t }\r\n\t var mustStop = canceled() || hitTimeout;\r\n\t if (mustStop) {\r\n\t triggerCallback.apply(null, arguments);\r\n\t return;\r\n\t }\r\n\t if (waitSeconds < 64) {\r\n\t /* TODO(andysoto): don't back off so quickly if we know we're offline. */\r\n\t waitSeconds *= 2;\r\n\t }\r\n\t var waitMillis;\r\n\t if (cancelState === 1) {\r\n\t cancelState = 2;\r\n\t waitMillis = 0;\r\n\t }\r\n\t else {\r\n\t waitMillis = (waitSeconds + Math.random()) * 1000;\r\n\t }\r\n\t callWithDelay(waitMillis);\r\n\t }\r\n\t var stopped = false;\r\n\t function stop(wasTimeout) {\r\n\t if (stopped) {\r\n\t return;\r\n\t }\r\n\t stopped = true;\r\n\t if (triggeredCallback) {\r\n\t return;\r\n\t }\r\n\t if (timeoutId !== null) {\r\n\t if (!wasTimeout) {\r\n\t cancelState = 2;\r\n\t }\r\n\t clearTimeout(timeoutId);\r\n\t callWithDelay(0);\r\n\t }\r\n\t else {\r\n\t if (!wasTimeout) {\r\n\t cancelState = 1;\r\n\t }\r\n\t }\r\n\t }\r\n\t callWithDelay(0);\r\n\t setTimeout(function () {\r\n\t hitTimeout = true;\r\n\t stop(true);\r\n\t }, timeout);\r\n\t return stop;\r\n\t}\r\n\t/**\r\n\t * Stops the retry loop from repeating.\r\n\t * If the function is currently \"in between\" retries, it is invoked immediately\r\n\t * with the second parameter as \"true\". Otherwise, it will be invoked once more\r\n\t * after the current invocation finishes iff the current invocation would have\r\n\t * triggered another retry.\r\n\t */\r\n\tfunction stop(id) {\r\n\t id(false);\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @struct\r\n\t * @template T\r\n\t */\r\n\tvar NetworkRequest = /** @class */ (function () {\r\n\t function NetworkRequest(url, method, headers, body, successCodes, additionalRetryCodes, callback, errorCallback, timeout, progressCallback, pool) {\r\n\t this.pendingXhr_ = null;\r\n\t this.backoffId_ = null;\r\n\t this.resolve_ = null;\r\n\t this.reject_ = null;\r\n\t this.canceled_ = false;\r\n\t this.appDelete_ = false;\r\n\t this.url_ = url;\r\n\t this.method_ = method;\r\n\t this.headers_ = headers;\r\n\t this.body_ = body;\r\n\t this.successCodes_ = successCodes.slice();\r\n\t this.additionalRetryCodes_ = additionalRetryCodes.slice();\r\n\t this.callback_ = callback;\r\n\t this.errorCallback_ = errorCallback;\r\n\t this.progressCallback_ = progressCallback;\r\n\t this.timeout_ = timeout;\r\n\t this.pool_ = pool;\r\n\t var self = this;\r\n\t this.promise_ = make(function (resolve$$1, reject$$1) {\r\n\t self.resolve_ = resolve$$1;\r\n\t self.reject_ = reject$$1;\r\n\t self.start_();\r\n\t });\r\n\t }\r\n\t /**\r\n\t * Actually starts the retry loop.\r\n\t */\r\n\t NetworkRequest.prototype.start_ = function () {\r\n\t var self = this;\r\n\t function doTheRequest(backoffCallback, canceled$$1) {\r\n\t if (canceled$$1) {\r\n\t backoffCallback(false, new RequestEndStatus(false, null, true));\r\n\t return;\r\n\t }\r\n\t var xhr = self.pool_.createXhrIo();\r\n\t self.pendingXhr_ = xhr;\r\n\t function progressListener(progressEvent) {\r\n\t var loaded = progressEvent.loaded;\r\n\t var total = progressEvent.lengthComputable ? progressEvent.total : -1;\r\n\t if (self.progressCallback_ !== null) {\r\n\t self.progressCallback_(loaded, total);\r\n\t }\r\n\t }\r\n\t if (self.progressCallback_ !== null) {\r\n\t xhr.addUploadProgressListener(progressListener);\r\n\t }\r\n\t xhr\r\n\t .send(self.url_, self.method_, self.body_, self.headers_)\r\n\t .then(function (xhr) {\r\n\t if (self.progressCallback_ !== null) {\r\n\t xhr.removeUploadProgressListener(progressListener);\r\n\t }\r\n\t self.pendingXhr_ = null;\r\n\t xhr = xhr;\r\n\t var hitServer = xhr.getErrorCode() === ErrorCode.NO_ERROR;\r\n\t var status = xhr.getStatus();\r\n\t if (!hitServer || self.isRetryStatusCode_(status)) {\r\n\t var wasCanceled = xhr.getErrorCode() === ErrorCode.ABORT;\r\n\t backoffCallback(false, new RequestEndStatus(false, null, wasCanceled));\r\n\t return;\r\n\t }\r\n\t var successCode = contains$1(self.successCodes_, status);\r\n\t backoffCallback(true, new RequestEndStatus(successCode, xhr));\r\n\t });\r\n\t }\r\n\t /**\r\n\t * @param requestWentThrough True if the request eventually went\r\n\t * through, false if it hit the retry limit or was canceled.\r\n\t */\r\n\t function backoffDone(requestWentThrough, status) {\r\n\t var resolve$$1 = self.resolve_;\r\n\t var reject$$1 = self.reject_;\r\n\t var xhr = status.xhr;\r\n\t if (status.wasSuccessCode) {\r\n\t try {\r\n\t var result = self.callback_(xhr, xhr.getResponseText());\r\n\t if (isJustDef(result)) {\r\n\t resolve$$1(result);\r\n\t }\r\n\t else {\r\n\t resolve$$1();\r\n\t }\r\n\t }\r\n\t catch (e) {\r\n\t reject$$1(e);\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (xhr !== null) {\r\n\t var err = unknown();\r\n\t err.setServerResponseProp(xhr.getResponseText());\r\n\t if (self.errorCallback_) {\r\n\t reject$$1(self.errorCallback_(xhr, err));\r\n\t }\r\n\t else {\r\n\t reject$$1(err);\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (status.canceled) {\r\n\t var err = self.appDelete_\r\n\t ? appDeleted()\r\n\t : canceled();\r\n\t reject$$1(err);\r\n\t }\r\n\t else {\r\n\t var err = retryLimitExceeded();\r\n\t reject$$1(err);\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t if (this.canceled_) {\r\n\t backoffDone(false, new RequestEndStatus(false, null, true));\r\n\t }\r\n\t else {\r\n\t this.backoffId_ = start(doTheRequest, backoffDone, this.timeout_);\r\n\t }\r\n\t };\r\n\t /** @inheritDoc */\r\n\t NetworkRequest.prototype.getPromise = function () {\r\n\t return this.promise_;\r\n\t };\r\n\t /** @inheritDoc */\r\n\t NetworkRequest.prototype.cancel = function (appDelete) {\r\n\t this.canceled_ = true;\r\n\t this.appDelete_ = appDelete || false;\r\n\t if (this.backoffId_ !== null) {\r\n\t stop(this.backoffId_);\r\n\t }\r\n\t if (this.pendingXhr_ !== null) {\r\n\t this.pendingXhr_.abort();\r\n\t }\r\n\t };\r\n\t NetworkRequest.prototype.isRetryStatusCode_ = function (status) {\r\n\t // The codes for which to retry came from this page:\r\n\t // https://cloud.google.com/storage/docs/exponential-backoff\r\n\t var isFiveHundredCode = status >= 500 && status < 600;\r\n\t var extraRetryCodes = [\r\n\t // Request Timeout: web server didn't receive full request in time.\r\n\t 408,\r\n\t // Too Many Requests: you're getting rate-limited, basically.\r\n\t 429\r\n\t ];\r\n\t var isExtraRetryCode = contains$1(extraRetryCodes, status);\r\n\t var isRequestSpecificRetryCode = contains$1(this.additionalRetryCodes_, status);\r\n\t return isFiveHundredCode || isExtraRetryCode || isRequestSpecificRetryCode;\r\n\t };\r\n\t return NetworkRequest;\r\n\t}());\r\n\t/**\r\n\t * A collection of information about the result of a network request.\r\n\t * @param opt_canceled Defaults to false.\r\n\t * @struct\r\n\t */\r\n\tvar RequestEndStatus = /** @class */ (function () {\r\n\t function RequestEndStatus(wasSuccessCode, xhr, opt_canceled) {\r\n\t this.wasSuccessCode = wasSuccessCode;\r\n\t this.xhr = xhr;\r\n\t this.canceled = !!opt_canceled;\r\n\t }\r\n\t return RequestEndStatus;\r\n\t}());\r\n\tfunction addAuthHeader_(headers, authToken) {\r\n\t if (authToken !== null && authToken.length > 0) {\r\n\t headers['Authorization'] = 'Firebase ' + authToken;\r\n\t }\r\n\t}\r\n\tfunction addVersionHeader_(headers) {\r\n\t var number = typeof firebase !== 'undefined' ? firebase.SDK_VERSION : 'AppManager';\r\n\t headers['X-Firebase-Storage-Version'] = 'webjs/' + number;\r\n\t}\r\n\t/**\r\n\t * @template T\r\n\t */\r\n\tfunction makeRequest(requestInfo, authToken, pool) {\r\n\t var queryPart = makeQueryString(requestInfo.urlParams);\r\n\t var url = requestInfo.url + queryPart;\r\n\t var headers = clone(requestInfo.headers);\r\n\t addAuthHeader_(headers, authToken);\r\n\t addVersionHeader_(headers);\r\n\t return new NetworkRequest(url, requestInfo.method, headers, requestInfo.body, requestInfo.successCodes, requestInfo.additionalRetryCodes, requestInfo.handler, requestInfo.errorHandler, requestInfo.timeout, requestInfo.progressCallback, pool);\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * A service that provides firebaseStorage.Reference instances.\r\n\t * @param opt_url gs:// url to a custom Storage Bucket\r\n\t *\r\n\t * @struct\r\n\t */\r\n\tvar Service = /** @class */ (function () {\r\n\t function Service(app, pool, url) {\r\n\t this.bucket_ = null;\r\n\t function maker(authWrapper, loc) {\r\n\t return new Reference(authWrapper, loc);\r\n\t }\r\n\t this.authWrapper_ = new AuthWrapper(app, maker, makeRequest, this, pool);\r\n\t this.app_ = app;\r\n\t if (url != null) {\r\n\t this.bucket_ = Location.makeFromBucketSpec(url);\r\n\t }\r\n\t else {\r\n\t var authWrapperBucket = this.authWrapper_.bucket();\r\n\t if (authWrapperBucket != null) {\r\n\t this.bucket_ = new Location(authWrapperBucket, '');\r\n\t }\r\n\t }\r\n\t this.internals_ = new ServiceInternals(this);\r\n\t }\r\n\t /**\r\n\t * Returns a firebaseStorage.Reference for the given path in the default\r\n\t * bucket.\r\n\t */\r\n\t Service.prototype.ref = function (path) {\r\n\t function validator(path) {\r\n\t if (/^[A-Za-z]+:\\/\\//.test(path)) {\r\n\t throw 'Expected child path but got a URL, use refFromURL instead.';\r\n\t }\r\n\t }\r\n\t validate('ref', [stringSpec(validator, true)], arguments);\r\n\t if (this.bucket_ == null) {\r\n\t throw new Error('No Storage Bucket defined in Firebase Options.');\r\n\t }\r\n\t var ref = new Reference(this.authWrapper_, this.bucket_);\r\n\t if (path != null) {\r\n\t return ref.child(path);\r\n\t }\r\n\t else {\r\n\t return ref;\r\n\t }\r\n\t };\r\n\t /**\r\n\t * Returns a firebaseStorage.Reference object for the given absolute URL,\r\n\t * which must be a gs:// or http[s]:// URL.\r\n\t */\r\n\t Service.prototype.refFromURL = function (url) {\r\n\t function validator(p) {\r\n\t if (!/^[A-Za-z]+:\\/\\//.test(p)) {\r\n\t throw 'Expected full URL but got a child path, use ref instead.';\r\n\t }\r\n\t try {\r\n\t Location.makeFromUrl(p);\r\n\t }\r\n\t catch (e) {\r\n\t throw 'Expected valid full URL but got an invalid one.';\r\n\t }\r\n\t }\r\n\t validate('refFromURL', [stringSpec(validator, false)], arguments);\r\n\t return new Reference(this.authWrapper_, url);\r\n\t };\r\n\t Object.defineProperty(Service.prototype, \"maxUploadRetryTime\", {\r\n\t get: function () {\r\n\t return this.authWrapper_.maxUploadRetryTime();\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Service.prototype.setMaxUploadRetryTime = function (time) {\r\n\t validate('setMaxUploadRetryTime', [nonNegativeNumberSpec()], arguments);\r\n\t this.authWrapper_.setMaxUploadRetryTime(time);\r\n\t };\r\n\t Object.defineProperty(Service.prototype, \"maxOperationRetryTime\", {\r\n\t get: function () {\r\n\t return this.authWrapper_.maxOperationRetryTime();\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Service.prototype.setMaxOperationRetryTime = function (time) {\r\n\t validate('setMaxOperationRetryTime', [nonNegativeNumberSpec()], arguments);\r\n\t this.authWrapper_.setMaxOperationRetryTime(time);\r\n\t };\r\n\t Object.defineProperty(Service.prototype, \"app\", {\r\n\t get: function () {\r\n\t return this.app_;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t Object.defineProperty(Service.prototype, \"INTERNAL\", {\r\n\t get: function () {\r\n\t return this.internals_;\r\n\t },\r\n\t enumerable: true,\r\n\t configurable: true\r\n\t });\r\n\t return Service;\r\n\t}());\r\n\t/**\r\n\t * @struct\r\n\t */\r\n\tvar ServiceInternals = /** @class */ (function () {\r\n\t function ServiceInternals(service) {\r\n\t this.service_ = service;\r\n\t }\r\n\t /**\r\n\t * Called when the associated app is deleted.\r\n\t * @see {!fbs.AuthWrapper.prototype.deleteApp}\r\n\t */\r\n\t ServiceInternals.prototype.delete = function () {\r\n\t this.service_.authWrapper_.deleteApp();\r\n\t return resolve(undefined);\r\n\t };\r\n\t return ServiceInternals;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Type constant for Firebase Storage.\r\n\t */\r\n\tvar STORAGE_TYPE = 'storage';\r\n\tfunction factory(app, unused, opt_url) {\r\n\t return new Service(app, new XhrIoPool(), opt_url);\r\n\t}\r\n\tfunction registerStorage(instance) {\r\n\t var namespaceExports = {\r\n\t // no-inline\r\n\t TaskState: TaskState,\r\n\t TaskEvent: TaskEvent,\r\n\t StringFormat: StringFormat,\r\n\t Storage: Service,\r\n\t Reference: Reference\r\n\t };\r\n\t instance.INTERNAL.registerService(STORAGE_TYPE, factory, namespaceExports, undefined, \r\n\t // Allow multiple storage instances per app.\r\n\t true);\r\n\t}\r\n\tregisterStorage(firebase);\n\t\n\texports.registerStorage = registerStorage;\n\n\n/***/ }),\n\n/***/ 132:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t'use strict';\n\t\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\t\n\tvar tslib_1 = __webpack_require__(286);\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.\r\n\t */\r\n\tvar CONSTANTS = {\r\n\t /**\r\n\t * @define {boolean} Whether this is the client Node.js SDK.\r\n\t */\r\n\t NODE_CLIENT: false,\r\n\t /**\r\n\t * @define {boolean} Whether this is the Admin Node.js SDK.\r\n\t */\r\n\t NODE_ADMIN: false,\r\n\t /**\r\n\t * Firebase SDK Version\r\n\t */\r\n\t SDK_VERSION: '${JSCORE_VERSION}'\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Throws an error if the provided assertion is falsy\r\n\t * @param {*} assertion The assertion to be tested for falsiness\r\n\t * @param {!string} message The message to display if the check fails\r\n\t */\r\n\tvar assert = function (assertion, message) {\r\n\t if (!assertion) {\r\n\t throw assertionError(message);\r\n\t }\r\n\t};\r\n\t/**\r\n\t * Returns an Error object suitable for throwing.\r\n\t * @param {string} message\r\n\t * @return {!Error}\r\n\t */\r\n\tvar assertionError = function (message) {\r\n\t return new Error('Firebase Database (' +\r\n\t CONSTANTS.SDK_VERSION +\r\n\t ') INTERNAL ASSERT FAILED: ' +\r\n\t message);\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar stringToByteArray = function (str) {\r\n\t // TODO(user): Use native implementations if/when available\r\n\t var out = [], p = 0;\r\n\t for (var i = 0; i < str.length; i++) {\r\n\t var c = str.charCodeAt(i);\r\n\t if (c < 128) {\r\n\t out[p++] = c;\r\n\t }\r\n\t else if (c < 2048) {\r\n\t out[p++] = (c >> 6) | 192;\r\n\t out[p++] = (c & 63) | 128;\r\n\t }\r\n\t else if ((c & 0xfc00) == 0xd800 &&\r\n\t i + 1 < str.length &&\r\n\t (str.charCodeAt(i + 1) & 0xfc00) == 0xdc00) {\r\n\t // Surrogate Pair\r\n\t c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n\t out[p++] = (c >> 18) | 240;\r\n\t out[p++] = ((c >> 12) & 63) | 128;\r\n\t out[p++] = ((c >> 6) & 63) | 128;\r\n\t out[p++] = (c & 63) | 128;\r\n\t }\r\n\t else {\r\n\t out[p++] = (c >> 12) | 224;\r\n\t out[p++] = ((c >> 6) & 63) | 128;\r\n\t out[p++] = (c & 63) | 128;\r\n\t }\r\n\t }\r\n\t return out;\r\n\t};\r\n\t/**\r\n\t * Turns an array of numbers into the string given by the concatenation of the\r\n\t * characters to which the numbers correspond.\r\n\t * @param {Array} bytes Array of numbers representing characters.\r\n\t * @return {string} Stringification of the array.\r\n\t */\r\n\tvar byteArrayToString = function (bytes) {\r\n\t // TODO(user): Use native implementations if/when available\r\n\t var out = [], pos = 0, c = 0;\r\n\t while (pos < bytes.length) {\r\n\t var c1 = bytes[pos++];\r\n\t if (c1 < 128) {\r\n\t out[c++] = String.fromCharCode(c1);\r\n\t }\r\n\t else if (c1 > 191 && c1 < 224) {\r\n\t var c2 = bytes[pos++];\r\n\t out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n\t }\r\n\t else if (c1 > 239 && c1 < 365) {\r\n\t // Surrogate Pair\r\n\t var c2 = bytes[pos++];\r\n\t var c3 = bytes[pos++];\r\n\t var c4 = bytes[pos++];\r\n\t var u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n\t 0x10000;\r\n\t out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n\t out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n\t }\r\n\t else {\r\n\t var c2 = bytes[pos++];\r\n\t var c3 = bytes[pos++];\r\n\t out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n\t }\r\n\t }\r\n\t return out.join('');\r\n\t};\r\n\t// Static lookup maps, lazily populated by init_()\r\n\tvar base64 = {\r\n\t /**\r\n\t * Maps bytes to characters.\r\n\t * @type {Object}\r\n\t * @private\r\n\t */\r\n\t byteToCharMap_: null,\r\n\t /**\r\n\t * Maps characters to bytes.\r\n\t * @type {Object}\r\n\t * @private\r\n\t */\r\n\t charToByteMap_: null,\r\n\t /**\r\n\t * Maps bytes to websafe characters.\r\n\t * @type {Object}\r\n\t * @private\r\n\t */\r\n\t byteToCharMapWebSafe_: null,\r\n\t /**\r\n\t * Maps websafe characters to bytes.\r\n\t * @type {Object}\r\n\t * @private\r\n\t */\r\n\t charToByteMapWebSafe_: null,\r\n\t /**\r\n\t * Our default alphabet, shared between\r\n\t * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n\t * @type {string}\r\n\t */\r\n\t ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n\t /**\r\n\t * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n\t * @type {string}\r\n\t */\r\n\t get ENCODED_VALS() {\r\n\t return this.ENCODED_VALS_BASE + '+/=';\r\n\t },\r\n\t /**\r\n\t * Our websafe alphabet.\r\n\t * @type {string}\r\n\t */\r\n\t get ENCODED_VALS_WEBSAFE() {\r\n\t return this.ENCODED_VALS_BASE + '-_.';\r\n\t },\r\n\t /**\r\n\t * Whether this browser supports the atob and btoa functions. This extension\r\n\t * started at Mozilla but is now implemented by many browsers. We use the\r\n\t * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n\t * but still allowing the standard per-browser compilations.\r\n\t *\r\n\t * @type {boolean}\r\n\t */\r\n\t HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n\t /**\r\n\t * Base64-encode an array of bytes.\r\n\t *\r\n\t * @param {Array|Uint8Array} input An array of bytes (numbers with\r\n\t * value in [0, 255]) to encode.\r\n\t * @param {boolean=} opt_webSafe Boolean indicating we should use the\r\n\t * alternative alphabet.\r\n\t * @return {string} The base64 encoded string.\r\n\t */\r\n\t encodeByteArray: function (input, opt_webSafe) {\r\n\t if (!Array.isArray(input)) {\r\n\t throw Error('encodeByteArray takes an array as a parameter');\r\n\t }\r\n\t this.init_();\r\n\t var byteToCharMap = opt_webSafe\r\n\t ? this.byteToCharMapWebSafe_\r\n\t : this.byteToCharMap_;\r\n\t var output = [];\r\n\t for (var i = 0; i < input.length; i += 3) {\r\n\t var byte1 = input[i];\r\n\t var haveByte2 = i + 1 < input.length;\r\n\t var byte2 = haveByte2 ? input[i + 1] : 0;\r\n\t var haveByte3 = i + 2 < input.length;\r\n\t var byte3 = haveByte3 ? input[i + 2] : 0;\r\n\t var outByte1 = byte1 >> 2;\r\n\t var outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n\t var outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n\t var outByte4 = byte3 & 0x3f;\r\n\t if (!haveByte3) {\r\n\t outByte4 = 64;\r\n\t if (!haveByte2) {\r\n\t outByte3 = 64;\r\n\t }\r\n\t }\r\n\t output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n\t }\r\n\t return output.join('');\r\n\t },\r\n\t /**\r\n\t * Base64-encode a string.\r\n\t *\r\n\t * @param {string} input A string to encode.\r\n\t * @param {boolean=} opt_webSafe If true, we should use the\r\n\t * alternative alphabet.\r\n\t * @return {string} The base64 encoded string.\r\n\t */\r\n\t encodeString: function (input, opt_webSafe) {\r\n\t // Shortcut for Mozilla browsers that implement\r\n\t // a native base64 encoder in the form of \"btoa/atob\"\r\n\t if (this.HAS_NATIVE_SUPPORT && !opt_webSafe) {\r\n\t return btoa(input);\r\n\t }\r\n\t return this.encodeByteArray(stringToByteArray(input), opt_webSafe);\r\n\t },\r\n\t /**\r\n\t * Base64-decode a string.\r\n\t *\r\n\t * @param {string} input to decode.\r\n\t * @param {boolean=} opt_webSafe True if we should use the\r\n\t * alternative alphabet.\r\n\t * @return {string} string representing the decoded value.\r\n\t */\r\n\t decodeString: function (input, opt_webSafe) {\r\n\t // Shortcut for Mozilla browsers that implement\r\n\t // a native base64 encoder in the form of \"btoa/atob\"\r\n\t if (this.HAS_NATIVE_SUPPORT && !opt_webSafe) {\r\n\t return atob(input);\r\n\t }\r\n\t return byteArrayToString(this.decodeStringToByteArray(input, opt_webSafe));\r\n\t },\r\n\t /**\r\n\t * Base64-decode a string.\r\n\t *\r\n\t * In base-64 decoding, groups of four characters are converted into three\r\n\t * bytes. If the encoder did not apply padding, the input length may not\r\n\t * be a multiple of 4.\r\n\t *\r\n\t * In this case, the last group will have fewer than 4 characters, and\r\n\t * padding will be inferred. If the group has one or two characters, it decodes\r\n\t * to one byte. If the group has three characters, it decodes to two bytes.\r\n\t *\r\n\t * @param {string} input Input to decode.\r\n\t * @param {boolean=} opt_webSafe True if we should use the web-safe alphabet.\r\n\t * @return {!Array} bytes representing the decoded value.\r\n\t */\r\n\t decodeStringToByteArray: function (input, opt_webSafe) {\r\n\t this.init_();\r\n\t var charToByteMap = opt_webSafe\r\n\t ? this.charToByteMapWebSafe_\r\n\t : this.charToByteMap_;\r\n\t var output = [];\r\n\t for (var i = 0; i < input.length;) {\r\n\t var byte1 = charToByteMap[input.charAt(i++)];\r\n\t var haveByte2 = i < input.length;\r\n\t var byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n\t ++i;\r\n\t var haveByte3 = i < input.length;\r\n\t var byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n\t ++i;\r\n\t var haveByte4 = i < input.length;\r\n\t var byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n\t ++i;\r\n\t if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n\t throw Error();\r\n\t }\r\n\t var outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n\t output.push(outByte1);\r\n\t if (byte3 != 64) {\r\n\t var outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n\t output.push(outByte2);\r\n\t if (byte4 != 64) {\r\n\t var outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n\t output.push(outByte3);\r\n\t }\r\n\t }\r\n\t }\r\n\t return output;\r\n\t },\r\n\t /**\r\n\t * Lazy static initialization function. Called before\r\n\t * accessing any of the static map variables.\r\n\t * @private\r\n\t */\r\n\t init_: function () {\r\n\t if (!this.byteToCharMap_) {\r\n\t this.byteToCharMap_ = {};\r\n\t this.charToByteMap_ = {};\r\n\t this.byteToCharMapWebSafe_ = {};\r\n\t this.charToByteMapWebSafe_ = {};\r\n\t // We want quick mappings back and forth, so we precompute two maps.\r\n\t for (var i = 0; i < this.ENCODED_VALS.length; i++) {\r\n\t this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n\t this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n\t this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n\t this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n\t // Be forgiving when decoding and correctly decode both encodings.\r\n\t if (i >= this.ENCODED_VALS_BASE.length) {\r\n\t this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n\t this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t};\r\n\t/**\r\n\t * URL-safe base64 encoding\r\n\t * @param {!string} str\r\n\t * @return {!string}\r\n\t */\r\n\tvar base64Encode = function (str) {\r\n\t var utf8Bytes = stringToByteArray(str);\r\n\t return base64.encodeByteArray(utf8Bytes, true);\r\n\t};\r\n\t/**\r\n\t * URL-safe base64 decoding\r\n\t *\r\n\t * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n\t * base64Url variant encoding.\r\n\t *\r\n\t * @param {string} str To be decoded\r\n\t * @return {?string} Decoded result, if possible\r\n\t */\r\n\tvar base64Decode = function (str) {\r\n\t try {\r\n\t return base64.decodeString(str, true);\r\n\t }\r\n\t catch (e) {\r\n\t console.error('base64Decode failed: ', e);\r\n\t }\r\n\t return null;\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n\t */\r\n\tfunction deepCopy(value) {\r\n\t return deepExtend(undefined, value);\r\n\t}\r\n\t/**\r\n\t * Copy properties from source to target (recursively allows extension\r\n\t * of Objects and Arrays). Scalar values in the target are over-written.\r\n\t * If target is undefined, an object of the appropriate type will be created\r\n\t * (and returned).\r\n\t *\r\n\t * We recursively copy all child properties of plain Objects in the source- so\r\n\t * that namespace- like dictionaries are merged.\r\n\t *\r\n\t * Note that the target can be a function, in which case the properties in\r\n\t * the source Object are copied onto it as static properties of the Function.\r\n\t */\r\n\tfunction deepExtend(target, source) {\r\n\t if (!(source instanceof Object)) {\r\n\t return source;\r\n\t }\r\n\t switch (source.constructor) {\r\n\t case Date:\r\n\t // Treat Dates like scalars; if the target date object had any child\r\n\t // properties - they will be lost!\r\n\t var dateValue = source;\r\n\t return new Date(dateValue.getTime());\r\n\t case Object:\r\n\t if (target === undefined) {\r\n\t target = {};\r\n\t }\r\n\t break;\r\n\t case Array:\r\n\t // Always copy the array source and overwrite the target.\r\n\t target = [];\r\n\t break;\r\n\t default:\r\n\t // Not a plain Object - treat it as a scalar.\r\n\t return source;\r\n\t }\r\n\t for (var prop in source) {\r\n\t if (!source.hasOwnProperty(prop)) {\r\n\t continue;\r\n\t }\r\n\t target[prop] = deepExtend(target[prop], source[prop]);\r\n\t }\r\n\t return target;\r\n\t}\r\n\t// TODO: Really needed (for JSCompiler type checking)?\r\n\tfunction patchProperty(obj, prop, value) {\r\n\t obj[prop] = value;\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\tvar Deferred = /** @class */ (function () {\r\n\t function Deferred() {\r\n\t var _this = this;\r\n\t this.promise = new Promise(function (resolve, reject) {\r\n\t _this.resolve = resolve;\r\n\t _this.reject = reject;\r\n\t });\r\n\t }\r\n\t /**\r\n\t * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\r\n\t * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n\t * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n\t * @param {((?function(?(Error)): (?|undefined))| (?function(?(Error),?=): (?|undefined)))=} callback\r\n\t * @return {!function(?(Error), ?=)}\r\n\t */\r\n\t Deferred.prototype.wrapCallback = function (callback) {\r\n\t var _this = this;\r\n\t return function (error, value) {\r\n\t if (error) {\r\n\t _this.reject(error);\r\n\t }\r\n\t else {\r\n\t _this.resolve(value);\r\n\t }\r\n\t if (typeof callback === 'function') {\r\n\t // Attaching noop handler just in case developer wasn't expecting\r\n\t // promises\r\n\t _this.promise.catch(function () { });\r\n\t // Some of our callbacks don't expect a value and our own tests\r\n\t // assert that the parameter length is 1\r\n\t if (callback.length === 1) {\r\n\t callback(error);\r\n\t }\r\n\t else {\r\n\t callback(error, value);\r\n\t }\r\n\t }\r\n\t };\r\n\t };\r\n\t return Deferred;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Returns navigator.userAgent string or '' if it's not defined.\r\n\t * @return {string} user agent string\r\n\t */\r\n\tvar getUA = function () {\r\n\t if (typeof navigator !== 'undefined' &&\r\n\t typeof navigator['userAgent'] === 'string') {\r\n\t return navigator['userAgent'];\r\n\t }\r\n\t else {\r\n\t return '';\r\n\t }\r\n\t};\r\n\t/**\r\n\t * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n\t *\r\n\t * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap in the Ripple emulator) nor\r\n\t * Cordova `onDeviceReady`, which would normally wait for a callback.\r\n\t *\r\n\t * @return {boolean} isMobileCordova\r\n\t */\r\n\tvar isMobileCordova = function () {\r\n\t return (typeof window !== 'undefined' &&\r\n\t !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n\t /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n\t};\r\n\t/**\r\n\t * Detect React Native.\r\n\t *\r\n\t * @return {boolean} True if ReactNative environment is detected.\r\n\t */\r\n\tvar isReactNative = function () {\r\n\t return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n\t};\r\n\t/**\r\n\t * Detect Node.js.\r\n\t *\r\n\t * @return {boolean} True if Node.js environment is detected.\r\n\t */\r\n\tvar isNodeSdk = function () {\r\n\t return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n\t};\n\t\n\tvar ERROR_NAME = 'FirebaseError';\r\n\tvar captureStackTrace = Error\r\n\t .captureStackTrace;\r\n\t// Export for faking in tests\r\n\tfunction patchCapture(captureFake) {\r\n\t var result = captureStackTrace;\r\n\t captureStackTrace = captureFake;\r\n\t return result;\r\n\t}\r\n\tvar FirebaseError = /** @class */ (function () {\r\n\t function FirebaseError(code, message) {\r\n\t this.code = code;\r\n\t this.message = message;\r\n\t // We want the stack value, if implemented by Error\r\n\t if (captureStackTrace) {\r\n\t // Patches this.stack, omitted calls above ErrorFactory#create\r\n\t captureStackTrace(this, ErrorFactory.prototype.create);\r\n\t }\r\n\t else {\r\n\t var err_1 = Error.apply(this, arguments);\r\n\t this.name = ERROR_NAME;\r\n\t // Make non-enumerable getter for the property.\r\n\t Object.defineProperty(this, 'stack', {\r\n\t get: function () {\r\n\t return err_1.stack;\r\n\t }\r\n\t });\r\n\t }\r\n\t }\r\n\t return FirebaseError;\r\n\t}());\r\n\t// Back-door inheritance\r\n\tFirebaseError.prototype = Object.create(Error.prototype);\r\n\tFirebaseError.prototype.constructor = FirebaseError;\r\n\tFirebaseError.prototype.name = ERROR_NAME;\r\n\tvar ErrorFactory = /** @class */ (function () {\r\n\t function ErrorFactory(service, serviceName, errors) {\r\n\t this.service = service;\r\n\t this.serviceName = serviceName;\r\n\t this.errors = errors;\r\n\t // Matches {$name}, by default.\r\n\t this.pattern = /\\{\\$([^}]+)}/g;\r\n\t // empty\r\n\t }\r\n\t ErrorFactory.prototype.create = function (code, data) {\r\n\t if (data === undefined) {\r\n\t data = {};\r\n\t }\r\n\t var template = this.errors[code];\r\n\t var fullCode = this.service + '/' + code;\r\n\t var message;\r\n\t if (template === undefined) {\r\n\t message = 'Error';\r\n\t }\r\n\t else {\r\n\t message = template.replace(this.pattern, function (match, key) {\r\n\t var value = data[key];\r\n\t return value !== undefined ? value.toString() : '<' + key + '?>';\r\n\t });\r\n\t }\r\n\t // Service: Error message (service/code).\r\n\t message = this.serviceName + ': ' + message + ' (' + fullCode + ').';\r\n\t var err = new FirebaseError(fullCode, message);\r\n\t // Populate the Error object with message parts for programmatic\r\n\t // accesses (e.g., e.file).\r\n\t for (var prop in data) {\r\n\t if (!data.hasOwnProperty(prop) || prop.slice(-1) === '_') {\r\n\t continue;\r\n\t }\r\n\t err[prop] = data[prop];\r\n\t }\r\n\t return err;\r\n\t };\r\n\t return ErrorFactory;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Evaluates a JSON string into a javascript object.\r\n\t *\r\n\t * @param {string} str A string containing JSON.\r\n\t * @return {*} The javascript object representing the specified JSON.\r\n\t */\r\n\tfunction jsonEval(str) {\r\n\t return JSON.parse(str);\r\n\t}\r\n\t/**\r\n\t * Returns JSON representing a javascript object.\r\n\t * @param {*} data Javascript object to be stringified.\r\n\t * @return {string} The JSON contents of the object.\r\n\t */\r\n\tfunction stringify(data) {\r\n\t return JSON.stringify(data);\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Decodes a Firebase auth. token into constituent parts.\r\n\t *\r\n\t * Notes:\r\n\t * - May return with invalid / incomplete claims if there's no native base64 decoding support.\r\n\t * - Doesn't check if the token is actually valid.\r\n\t *\r\n\t * @param {?string} token\r\n\t * @return {{header: *, claims: *, data: *, signature: string}}\r\n\t */\r\n\tvar decode = function (token) {\r\n\t var header = {}, claims = {}, data = {}, signature = '';\r\n\t try {\r\n\t var parts = token.split('.');\r\n\t header = jsonEval(base64Decode(parts[0]) || '');\r\n\t claims = jsonEval(base64Decode(parts[1]) || '');\r\n\t signature = parts[2];\r\n\t data = claims['d'] || {};\r\n\t delete claims['d'];\r\n\t }\r\n\t catch (e) { }\r\n\t return {\r\n\t header: header,\r\n\t claims: claims,\r\n\t data: data,\r\n\t signature: signature\r\n\t };\r\n\t};\r\n\t/**\r\n\t * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\r\n\t * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\r\n\t *\r\n\t * Notes:\r\n\t * - May return a false negative if there's no native base64 decoding support.\r\n\t * - Doesn't check if the token is actually valid.\r\n\t *\r\n\t * @param {?string} token\r\n\t * @return {boolean}\r\n\t */\r\n\tvar isValidTimestamp = function (token) {\r\n\t var claims = decode(token).claims, now = Math.floor(new Date().getTime() / 1000), validSince, validUntil;\r\n\t if (typeof claims === 'object') {\r\n\t if (claims.hasOwnProperty('nbf')) {\r\n\t validSince = claims['nbf'];\r\n\t }\r\n\t else if (claims.hasOwnProperty('iat')) {\r\n\t validSince = claims['iat'];\r\n\t }\r\n\t if (claims.hasOwnProperty('exp')) {\r\n\t validUntil = claims['exp'];\r\n\t }\r\n\t else {\r\n\t // token will expire after 24h by default\r\n\t validUntil = validSince + 86400;\r\n\t }\r\n\t }\r\n\t return (now && validSince && validUntil && now >= validSince && now <= validUntil);\r\n\t};\r\n\t/**\r\n\t * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\r\n\t *\r\n\t * Notes:\r\n\t * - May return null if there's no native base64 decoding support.\r\n\t * - Doesn't check if the token is actually valid.\r\n\t *\r\n\t * @param {?string} token\r\n\t * @return {?number}\r\n\t */\r\n\tvar issuedAtTime = function (token) {\r\n\t var claims = decode(token).claims;\r\n\t if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\r\n\t return claims['iat'];\r\n\t }\r\n\t return null;\r\n\t};\r\n\t/**\r\n\t * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time and non-empty\r\n\t * signature.\r\n\t *\r\n\t * Notes:\r\n\t * - May return a false negative if there's no native base64 decoding support.\r\n\t * - Doesn't check if the token is actually valid.\r\n\t *\r\n\t * @param {?string} token\r\n\t * @return {boolean}\r\n\t */\r\n\tvar isValidFormat = function (token) {\r\n\t var decoded = decode(token), claims = decoded.claims;\r\n\t return (!!decoded.signature &&\r\n\t !!claims &&\r\n\t typeof claims === 'object' &&\r\n\t claims.hasOwnProperty('iat'));\r\n\t};\r\n\t/**\r\n\t * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\r\n\t *\r\n\t * Notes:\r\n\t * - May return a false negative if there's no native base64 decoding support.\r\n\t * - Doesn't check if the token is actually valid.\r\n\t *\r\n\t * @param {?string} token\r\n\t * @return {boolean}\r\n\t */\r\n\tvar isAdmin = function (token) {\r\n\t var claims = decode(token).claims;\r\n\t return typeof claims === 'object' && claims['admin'] === true;\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t// See http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/\r\n\tvar contains = function (obj, key) {\r\n\t return Object.prototype.hasOwnProperty.call(obj, key);\r\n\t};\r\n\tvar safeGet = function (obj, key) {\r\n\t if (Object.prototype.hasOwnProperty.call(obj, key))\r\n\t return obj[key];\r\n\t // else return undefined.\r\n\t};\r\n\t/**\r\n\t * Enumerates the keys/values in an object, excluding keys defined on the prototype.\r\n\t *\r\n\t * @param {?Object.} obj Object to enumerate.\r\n\t * @param {!function(K, V)} fn Function to call for each key and value.\r\n\t * @template K,V\r\n\t */\r\n\tvar forEach = function (obj, fn) {\r\n\t for (var key in obj) {\r\n\t if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n\t fn(key, obj[key]);\r\n\t }\r\n\t }\r\n\t};\r\n\t/**\r\n\t * Copies all the (own) properties from one object to another.\r\n\t * @param {!Object} objTo\r\n\t * @param {!Object} objFrom\r\n\t * @return {!Object} objTo\r\n\t */\r\n\tvar extend = function (objTo, objFrom) {\r\n\t forEach(objFrom, function (key, value) {\r\n\t objTo[key] = value;\r\n\t });\r\n\t return objTo;\r\n\t};\r\n\t/**\r\n\t * Returns a clone of the specified object.\r\n\t * @param {!Object} obj\r\n\t * @return {!Object} cloned obj.\r\n\t */\r\n\tvar clone = function (obj) {\r\n\t return extend({}, obj);\r\n\t};\r\n\t/**\r\n\t * Returns true if obj has typeof \"object\" and is not null. Unlike goog.isObject(), does not return true\r\n\t * for functions.\r\n\t *\r\n\t * @param obj {*} A potential object.\r\n\t * @returns {boolean} True if it's an object.\r\n\t */\r\n\tvar isNonNullObject = function (obj) {\r\n\t return typeof obj === 'object' && obj !== null;\r\n\t};\r\n\tvar isEmpty = function (obj) {\r\n\t for (var key in obj) {\r\n\t return false;\r\n\t }\r\n\t return true;\r\n\t};\r\n\tvar getCount = function (obj) {\r\n\t var rv = 0;\r\n\t for (var key in obj) {\r\n\t rv++;\r\n\t }\r\n\t return rv;\r\n\t};\r\n\tvar map = function (obj, f, opt_obj) {\r\n\t var res = {};\r\n\t for (var key in obj) {\r\n\t res[key] = f.call(opt_obj, obj[key], key, obj);\r\n\t }\r\n\t return res;\r\n\t};\r\n\tvar findKey = function (obj, fn, opt_this) {\r\n\t for (var key in obj) {\r\n\t if (fn.call(opt_this, obj[key], key, obj)) {\r\n\t return key;\r\n\t }\r\n\t }\r\n\t return undefined;\r\n\t};\r\n\tvar findValue = function (obj, fn, opt_this) {\r\n\t var key = findKey(obj, fn, opt_this);\r\n\t return key && obj[key];\r\n\t};\r\n\tvar getAnyKey = function (obj) {\r\n\t for (var key in obj) {\r\n\t return key;\r\n\t }\r\n\t};\r\n\tvar getValues = function (obj) {\r\n\t var res = [];\r\n\t var i = 0;\r\n\t for (var key in obj) {\r\n\t res[i++] = obj[key];\r\n\t }\r\n\t return res;\r\n\t};\r\n\t/**\r\n\t * Tests whether every key/value pair in an object pass the test implemented\r\n\t * by the provided function\r\n\t *\r\n\t * @param {?Object.} obj Object to test.\r\n\t * @param {!function(K, V)} fn Function to call for each key and value.\r\n\t * @template K,V\r\n\t */\r\n\tvar every = function (obj, fn) {\r\n\t for (var key in obj) {\r\n\t if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n\t if (!fn(key, obj[key])) {\r\n\t return false;\r\n\t }\r\n\t }\r\n\t }\r\n\t return true;\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a params\r\n\t * object (e.g. {arg: 'val', arg2: 'val2'})\r\n\t * Note: You must prepend it with ? when adding it to a URL.\r\n\t *\r\n\t * @param {!Object} querystringParams\r\n\t * @return {string}\r\n\t */\r\n\tvar querystring = function (querystringParams) {\r\n\t var params = [];\r\n\t forEach(querystringParams, function (key, value) {\r\n\t if (Array.isArray(value)) {\r\n\t value.forEach(function (arrayVal) {\r\n\t params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\r\n\t });\r\n\t }\r\n\t else {\r\n\t params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n\t }\r\n\t });\r\n\t return params.length ? '&' + params.join('&') : '';\r\n\t};\r\n\t/**\r\n\t * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object (e.g. {arg: 'val', arg2: 'val2'})\r\n\t *\r\n\t * @param {string} querystring\r\n\t * @return {!Object}\r\n\t */\r\n\tvar querystringDecode = function (querystring) {\r\n\t var obj = {};\r\n\t var tokens = querystring.replace(/^\\?/, '').split('&');\r\n\t tokens.forEach(function (token) {\r\n\t if (token) {\r\n\t var key = token.split('=');\r\n\t obj[key[0]] = key[1];\r\n\t }\r\n\t });\r\n\t return obj;\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t// Copyright 2011 The Closure Library Authors. All Rights Reserved.\r\n\t//\r\n\t// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t// you may not use this file except in compliance with the License.\r\n\t// You may obtain a copy of the License at\r\n\t//\r\n\t// http://www.apache.org/licenses/LICENSE-2.0\r\n\t//\r\n\t// Unless required by applicable law or agreed to in writing, software\r\n\t// distributed under the License is distributed on an \"AS-IS\" BASIS,\r\n\t// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t// See the License for the specific language governing permissions and\r\n\t// limitations under the License.\r\n\t/**\r\n\t * @fileoverview Abstract cryptographic hash interface.\r\n\t *\r\n\t * See Sha1 and Md5 for sample implementations.\r\n\t *\r\n\t */\r\n\t/**\r\n\t * Create a cryptographic hash instance.\r\n\t *\r\n\t * @constructor\r\n\t * @struct\r\n\t */\r\n\tvar Hash = /** @class */ (function () {\r\n\t function Hash() {\r\n\t /**\r\n\t * The block size for the hasher.\r\n\t * @type {number}\r\n\t */\r\n\t this.blockSize = -1;\r\n\t }\r\n\t return Hash;\r\n\t}());\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * @fileoverview SHA-1 cryptographic hash.\r\n\t * Variable names follow the notation in FIPS PUB 180-3:\r\n\t * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\r\n\t *\r\n\t * Usage:\r\n\t * var sha1 = new sha1();\r\n\t * sha1.update(bytes);\r\n\t * var hash = sha1.digest();\r\n\t *\r\n\t * Performance:\r\n\t * Chrome 23: ~400 Mbit/s\r\n\t * Firefox 16: ~250 Mbit/s\r\n\t *\r\n\t */\r\n\t/**\r\n\t * SHA-1 cryptographic hash constructor.\r\n\t *\r\n\t * The properties declared here are discussed in the above algorithm document.\r\n\t * @constructor\r\n\t * @extends {Hash}\r\n\t * @final\r\n\t * @struct\r\n\t */\r\n\tvar Sha1 = /** @class */ (function (_super) {\r\n\t tslib_1.__extends(Sha1, _super);\r\n\t function Sha1() {\r\n\t var _this = _super.call(this) || this;\r\n\t /**\r\n\t * Holds the previous values of accumulated variables a-e in the compress_\r\n\t * function.\r\n\t * @type {!Array}\r\n\t * @private\r\n\t */\r\n\t _this.chain_ = [];\r\n\t /**\r\n\t * A buffer holding the partially computed hash result.\r\n\t * @type {!Array}\r\n\t * @private\r\n\t */\r\n\t _this.buf_ = [];\r\n\t /**\r\n\t * An array of 80 bytes, each a part of the message to be hashed. Referred to\r\n\t * as the message schedule in the docs.\r\n\t * @type {!Array}\r\n\t * @private\r\n\t */\r\n\t _this.W_ = [];\r\n\t /**\r\n\t * Contains data needed to pad messages less than 64 bytes.\r\n\t * @type {!Array}\r\n\t * @private\r\n\t */\r\n\t _this.pad_ = [];\r\n\t /**\r\n\t * @private {number}\r\n\t */\r\n\t _this.inbuf_ = 0;\r\n\t /**\r\n\t * @private {number}\r\n\t */\r\n\t _this.total_ = 0;\r\n\t _this.blockSize = 512 / 8;\r\n\t _this.pad_[0] = 128;\r\n\t for (var i = 1; i < _this.blockSize; ++i) {\r\n\t _this.pad_[i] = 0;\r\n\t }\r\n\t _this.reset();\r\n\t return _this;\r\n\t }\r\n\t Sha1.prototype.reset = function () {\r\n\t this.chain_[0] = 0x67452301;\r\n\t this.chain_[1] = 0xefcdab89;\r\n\t this.chain_[2] = 0x98badcfe;\r\n\t this.chain_[3] = 0x10325476;\r\n\t this.chain_[4] = 0xc3d2e1f0;\r\n\t this.inbuf_ = 0;\r\n\t this.total_ = 0;\r\n\t };\r\n\t /**\r\n\t * Internal compress helper function.\r\n\t * @param {!Array|!Uint8Array|string} buf Block to compress.\r\n\t * @param {number=} opt_offset Offset of the block in the buffer.\r\n\t * @private\r\n\t */\r\n\t Sha1.prototype.compress_ = function (buf, opt_offset) {\r\n\t if (!opt_offset) {\r\n\t opt_offset = 0;\r\n\t }\r\n\t var W = this.W_;\r\n\t // get 16 big endian words\r\n\t if (typeof buf === 'string') {\r\n\t for (var i = 0; i < 16; i++) {\r\n\t // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\r\n\t // have a bug that turns the post-increment ++ operator into pre-increment\r\n\t // during JIT compilation. We have code that depends heavily on SHA-1 for\r\n\t // correctness and which is affected by this bug, so I've removed all uses\r\n\t // of post-increment ++ in which the result value is used. We can revert\r\n\t // this change once the Safari bug\r\n\t // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\r\n\t // most clients have been updated.\r\n\t W[i] =\r\n\t (buf.charCodeAt(opt_offset) << 24) |\r\n\t (buf.charCodeAt(opt_offset + 1) << 16) |\r\n\t (buf.charCodeAt(opt_offset + 2) << 8) |\r\n\t buf.charCodeAt(opt_offset + 3);\r\n\t opt_offset += 4;\r\n\t }\r\n\t }\r\n\t else {\r\n\t for (var i = 0; i < 16; i++) {\r\n\t W[i] =\r\n\t (buf[opt_offset] << 24) |\r\n\t (buf[opt_offset + 1] << 16) |\r\n\t (buf[opt_offset + 2] << 8) |\r\n\t buf[opt_offset + 3];\r\n\t opt_offset += 4;\r\n\t }\r\n\t }\r\n\t // expand to 80 words\r\n\t for (var i = 16; i < 80; i++) {\r\n\t var t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\r\n\t W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\r\n\t }\r\n\t var a = this.chain_[0];\r\n\t var b = this.chain_[1];\r\n\t var c = this.chain_[2];\r\n\t var d = this.chain_[3];\r\n\t var e = this.chain_[4];\r\n\t var f, k;\r\n\t // TODO(user): Try to unroll this loop to speed up the computation.\r\n\t for (var i = 0; i < 80; i++) {\r\n\t if (i < 40) {\r\n\t if (i < 20) {\r\n\t f = d ^ (b & (c ^ d));\r\n\t k = 0x5a827999;\r\n\t }\r\n\t else {\r\n\t f = b ^ c ^ d;\r\n\t k = 0x6ed9eba1;\r\n\t }\r\n\t }\r\n\t else {\r\n\t if (i < 60) {\r\n\t f = (b & c) | (d & (b | c));\r\n\t k = 0x8f1bbcdc;\r\n\t }\r\n\t else {\r\n\t f = b ^ c ^ d;\r\n\t k = 0xca62c1d6;\r\n\t }\r\n\t }\r\n\t var t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\r\n\t e = d;\r\n\t d = c;\r\n\t c = ((b << 30) | (b >>> 2)) & 0xffffffff;\r\n\t b = a;\r\n\t a = t;\r\n\t }\r\n\t this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\r\n\t this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\r\n\t this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\r\n\t this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\r\n\t this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\r\n\t };\r\n\t Sha1.prototype.update = function (bytes, opt_length) {\r\n\t // TODO(johnlenz): tighten the function signature and remove this check\r\n\t if (bytes == null) {\r\n\t return;\r\n\t }\r\n\t if (opt_length === undefined) {\r\n\t opt_length = bytes.length;\r\n\t }\r\n\t var lengthMinusBlock = opt_length - this.blockSize;\r\n\t var n = 0;\r\n\t // Using local instead of member variables gives ~5% speedup on Firefox 16.\r\n\t var buf = this.buf_;\r\n\t var inbuf = this.inbuf_;\r\n\t // The outer while loop should execute at most twice.\r\n\t while (n < opt_length) {\r\n\t // When we have no data in the block to top up, we can directly process the\r\n\t // input buffer (assuming it contains sufficient data). This gives ~25%\r\n\t // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\r\n\t // the data is provided in large chunks (or in multiples of 64 bytes).\r\n\t if (inbuf == 0) {\r\n\t while (n <= lengthMinusBlock) {\r\n\t this.compress_(bytes, n);\r\n\t n += this.blockSize;\r\n\t }\r\n\t }\r\n\t if (typeof bytes === 'string') {\r\n\t while (n < opt_length) {\r\n\t buf[inbuf] = bytes.charCodeAt(n);\r\n\t ++inbuf;\r\n\t ++n;\r\n\t if (inbuf == this.blockSize) {\r\n\t this.compress_(buf);\r\n\t inbuf = 0;\r\n\t // Jump to the outer loop so we use the full-block optimization.\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t else {\r\n\t while (n < opt_length) {\r\n\t buf[inbuf] = bytes[n];\r\n\t ++inbuf;\r\n\t ++n;\r\n\t if (inbuf == this.blockSize) {\r\n\t this.compress_(buf);\r\n\t inbuf = 0;\r\n\t // Jump to the outer loop so we use the full-block optimization.\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t this.inbuf_ = inbuf;\r\n\t this.total_ += opt_length;\r\n\t };\r\n\t /** @override */\r\n\t Sha1.prototype.digest = function () {\r\n\t var digest = [];\r\n\t var totalBits = this.total_ * 8;\r\n\t // Add pad 0x80 0x00*.\r\n\t if (this.inbuf_ < 56) {\r\n\t this.update(this.pad_, 56 - this.inbuf_);\r\n\t }\r\n\t else {\r\n\t this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\r\n\t }\r\n\t // Add # bits.\r\n\t for (var i = this.blockSize - 1; i >= 56; i--) {\r\n\t this.buf_[i] = totalBits & 255;\r\n\t totalBits /= 256; // Don't use bit-shifting here!\r\n\t }\r\n\t this.compress_(this.buf_);\r\n\t var n = 0;\r\n\t for (var i = 0; i < 5; i++) {\r\n\t for (var j = 24; j >= 0; j -= 8) {\r\n\t digest[n] = (this.chain_[i] >> j) & 255;\r\n\t ++n;\r\n\t }\r\n\t }\r\n\t return digest;\r\n\t };\r\n\t return Sha1;\r\n\t}(Hash));\n\t\n\t/**\r\n\t * Helper to make a Subscribe function (just like Promise helps make a\r\n\t * Thenable).\r\n\t *\r\n\t * @param executor Function which can make calls to a single Observer\r\n\t * as a proxy.\r\n\t * @param onNoObservers Callback when count of Observers goes to zero.\r\n\t */\r\n\tfunction createSubscribe(executor, onNoObservers) {\r\n\t var proxy = new ObserverProxy(executor, onNoObservers);\r\n\t return proxy.subscribe.bind(proxy);\r\n\t}\r\n\t/**\r\n\t * Implement fan-out for any number of Observers attached via a subscribe\r\n\t * function.\r\n\t */\r\n\tvar ObserverProxy = /** @class */ (function () {\r\n\t /**\r\n\t * @param executor Function which can make calls to a single Observer\r\n\t * as a proxy.\r\n\t * @param onNoObservers Callback when count of Observers goes to zero.\r\n\t */\r\n\t function ObserverProxy(executor, onNoObservers) {\r\n\t var _this = this;\r\n\t this.observers = [];\r\n\t this.unsubscribes = [];\r\n\t this.observerCount = 0;\r\n\t // Micro-task scheduling by calling task.then().\r\n\t this.task = Promise.resolve();\r\n\t this.finalized = false;\r\n\t this.onNoObservers = onNoObservers;\r\n\t // Call the executor asynchronously so subscribers that are called\r\n\t // synchronously after the creation of the subscribe function\r\n\t // can still receive the very first value generated in the executor.\r\n\t this.task\r\n\t .then(function () {\r\n\t executor(_this);\r\n\t })\r\n\t .catch(function (e) {\r\n\t _this.error(e);\r\n\t });\r\n\t }\r\n\t ObserverProxy.prototype.next = function (value) {\r\n\t this.forEachObserver(function (observer) {\r\n\t observer.next(value);\r\n\t });\r\n\t };\r\n\t ObserverProxy.prototype.error = function (error) {\r\n\t this.forEachObserver(function (observer) {\r\n\t observer.error(error);\r\n\t });\r\n\t this.close(error);\r\n\t };\r\n\t ObserverProxy.prototype.complete = function () {\r\n\t this.forEachObserver(function (observer) {\r\n\t observer.complete();\r\n\t });\r\n\t this.close();\r\n\t };\r\n\t /**\r\n\t * Subscribe function that can be used to add an Observer to the fan-out list.\r\n\t *\r\n\t * - We require that no event is sent to a subscriber sychronously to their\r\n\t * call to subscribe().\r\n\t */\r\n\t ObserverProxy.prototype.subscribe = function (nextOrObserver, error, complete) {\r\n\t var _this = this;\r\n\t var observer;\r\n\t if (nextOrObserver === undefined &&\r\n\t error === undefined &&\r\n\t complete === undefined) {\r\n\t throw new Error('Missing Observer.');\r\n\t }\r\n\t // Assemble an Observer object when passed as callback functions.\r\n\t if (implementsAnyMethods(nextOrObserver, ['next', 'error', 'complete'])) {\r\n\t observer = nextOrObserver;\r\n\t }\r\n\t else {\r\n\t observer = {\r\n\t next: nextOrObserver,\r\n\t error: error,\r\n\t complete: complete\r\n\t };\r\n\t }\r\n\t if (observer.next === undefined) {\r\n\t observer.next = noop;\r\n\t }\r\n\t if (observer.error === undefined) {\r\n\t observer.error = noop;\r\n\t }\r\n\t if (observer.complete === undefined) {\r\n\t observer.complete = noop;\r\n\t }\r\n\t var unsub = this.unsubscribeOne.bind(this, this.observers.length);\r\n\t // Attempt to subscribe to a terminated Observable - we\r\n\t // just respond to the Observer with the final error or complete\r\n\t // event.\r\n\t if (this.finalized) {\r\n\t this.task.then(function () {\r\n\t try {\r\n\t if (_this.finalError) {\r\n\t observer.error(_this.finalError);\r\n\t }\r\n\t else {\r\n\t observer.complete();\r\n\t }\r\n\t }\r\n\t catch (e) {\r\n\t // nothing\r\n\t }\r\n\t return;\r\n\t });\r\n\t }\r\n\t this.observers.push(observer);\r\n\t return unsub;\r\n\t };\r\n\t // Unsubscribe is synchronous - we guarantee that no events are sent to\r\n\t // any unsubscribed Observer.\r\n\t ObserverProxy.prototype.unsubscribeOne = function (i) {\r\n\t if (this.observers === undefined || this.observers[i] === undefined) {\r\n\t return;\r\n\t }\r\n\t delete this.observers[i];\r\n\t this.observerCount -= 1;\r\n\t if (this.observerCount === 0 && this.onNoObservers !== undefined) {\r\n\t this.onNoObservers(this);\r\n\t }\r\n\t };\r\n\t ObserverProxy.prototype.forEachObserver = function (fn) {\r\n\t if (this.finalized) {\r\n\t // Already closed by previous event....just eat the additional values.\r\n\t return;\r\n\t }\r\n\t // Since sendOne calls asynchronously - there is no chance that\r\n\t // this.observers will become undefined.\r\n\t for (var i = 0; i < this.observers.length; i++) {\r\n\t this.sendOne(i, fn);\r\n\t }\r\n\t };\r\n\t // Call the Observer via one of it's callback function. We are careful to\r\n\t // confirm that the observe has not been unsubscribed since this asynchronous\r\n\t // function had been queued.\r\n\t ObserverProxy.prototype.sendOne = function (i, fn) {\r\n\t var _this = this;\r\n\t // Execute the callback asynchronously\r\n\t this.task.then(function () {\r\n\t if (_this.observers !== undefined && _this.observers[i] !== undefined) {\r\n\t try {\r\n\t fn(_this.observers[i]);\r\n\t }\r\n\t catch (e) {\r\n\t // Ignore exceptions raised in Observers or missing methods of an\r\n\t // Observer.\r\n\t // Log error to console. b/31404806\r\n\t if (typeof console !== 'undefined' && console.error) {\r\n\t console.error(e);\r\n\t }\r\n\t }\r\n\t }\r\n\t });\r\n\t };\r\n\t ObserverProxy.prototype.close = function (err) {\r\n\t var _this = this;\r\n\t if (this.finalized) {\r\n\t return;\r\n\t }\r\n\t this.finalized = true;\r\n\t if (err !== undefined) {\r\n\t this.finalError = err;\r\n\t }\r\n\t // Proxy is no longer needed - garbage collect references\r\n\t this.task.then(function () {\r\n\t _this.observers = undefined;\r\n\t _this.onNoObservers = undefined;\r\n\t });\r\n\t };\r\n\t return ObserverProxy;\r\n\t}());\r\n\t/** Turn synchronous function into one called asynchronously. */\r\n\tfunction async(fn, onError) {\r\n\t return function () {\r\n\t var args = [];\r\n\t for (var _i = 0; _i < arguments.length; _i++) {\r\n\t args[_i] = arguments[_i];\r\n\t }\r\n\t Promise.resolve(true)\r\n\t .then(function () {\r\n\t fn.apply(void 0, args);\r\n\t })\r\n\t .catch(function (error) {\r\n\t if (onError) {\r\n\t onError(error);\r\n\t }\r\n\t });\r\n\t };\r\n\t}\r\n\t/**\r\n\t * Return true if the object passed in implements any of the named methods.\r\n\t */\r\n\tfunction implementsAnyMethods(obj, methods) {\r\n\t if (typeof obj !== 'object' || obj === null) {\r\n\t return false;\r\n\t }\r\n\t for (var _i = 0, methods_1 = methods; _i < methods_1.length; _i++) {\r\n\t var method = methods_1[_i];\r\n\t if (method in obj && typeof obj[method] === 'function') {\r\n\t return true;\r\n\t }\r\n\t }\r\n\t return false;\r\n\t}\r\n\tfunction noop() {\r\n\t // do nothing\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t/**\r\n\t * Check to make sure the appropriate number of arguments are provided for a public function.\r\n\t * Throws an error if it fails.\r\n\t *\r\n\t * @param {!string} fnName The function name\r\n\t * @param {!number} minCount The minimum number of arguments to allow for the function call\r\n\t * @param {!number} maxCount The maximum number of argument to allow for the function call\r\n\t * @param {!number} argCount The actual number of arguments provided.\r\n\t */\r\n\tvar validateArgCount = function (fnName, minCount, maxCount, argCount) {\r\n\t var argError;\r\n\t if (argCount < minCount) {\r\n\t argError = 'at least ' + minCount;\r\n\t }\r\n\t else if (argCount > maxCount) {\r\n\t argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\r\n\t }\r\n\t if (argError) {\r\n\t var error = fnName +\r\n\t ' failed: Was called with ' +\r\n\t argCount +\r\n\t (argCount === 1 ? ' argument.' : ' arguments.') +\r\n\t ' Expects ' +\r\n\t argError +\r\n\t '.';\r\n\t throw new Error(error);\r\n\t }\r\n\t};\r\n\t/**\r\n\t * Generates a string to prefix an error message about failed argument validation\r\n\t *\r\n\t * @param {!string} fnName The function name\r\n\t * @param {!number} argumentNumber The index of the argument\r\n\t * @param {boolean} optional Whether or not the argument is optional\r\n\t * @return {!string} The prefix to add to the error thrown for validation.\r\n\t */\r\n\tfunction errorPrefix(fnName, argumentNumber, optional) {\r\n\t var argName = '';\r\n\t switch (argumentNumber) {\r\n\t case 1:\r\n\t argName = optional ? 'first' : 'First';\r\n\t break;\r\n\t case 2:\r\n\t argName = optional ? 'second' : 'Second';\r\n\t break;\r\n\t case 3:\r\n\t argName = optional ? 'third' : 'Third';\r\n\t break;\r\n\t case 4:\r\n\t argName = optional ? 'fourth' : 'Fourth';\r\n\t break;\r\n\t default:\r\n\t throw new Error('errorPrefix called with argumentNumber > 4. Need to update it?');\r\n\t }\r\n\t var error = fnName + ' failed: ';\r\n\t error += argName + ' argument ';\r\n\t return error;\r\n\t}\r\n\t/**\r\n\t * @param {!string} fnName\r\n\t * @param {!number} argumentNumber\r\n\t * @param {!string} namespace\r\n\t * @param {boolean} optional\r\n\t */\r\n\tfunction validateNamespace(fnName, argumentNumber, namespace, optional) {\r\n\t if (optional && !namespace)\r\n\t return;\r\n\t if (typeof namespace !== 'string') {\r\n\t //TODO: I should do more validation here. We only allow certain chars in namespaces.\r\n\t throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n\t 'must be a valid firebase namespace.');\r\n\t }\r\n\t}\r\n\tfunction validateCallback(fnName, argumentNumber, callback, optional) {\r\n\t if (optional && !callback)\r\n\t return;\r\n\t if (typeof callback !== 'function')\r\n\t throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n\t 'must be a valid function.');\r\n\t}\r\n\tfunction validateContextObject(fnName, argumentNumber, context, optional) {\r\n\t if (optional && !context)\r\n\t return;\r\n\t if (typeof context !== 'object' || context === null)\r\n\t throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n\t 'must be a valid context object.');\r\n\t}\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\r\n\t// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\r\n\t// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\r\n\t// so it's been modified.\r\n\t// Note that not all Unicode characters appear as single characters in JavaScript strings.\r\n\t// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\r\n\t// use 2 characters in Javascript. All 4-byte UTF-8 characters begin with a first\r\n\t// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\r\n\t// pair).\r\n\t// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\r\n\t/**\r\n\t * @param {string} str\r\n\t * @return {Array}\r\n\t */\r\n\tvar stringToByteArray$1 = function (str) {\r\n\t var out = [], p = 0;\r\n\t for (var i = 0; i < str.length; i++) {\r\n\t var c = str.charCodeAt(i);\r\n\t // Is this the lead surrogate in a surrogate pair?\r\n\t if (c >= 0xd800 && c <= 0xdbff) {\r\n\t var high = c - 0xd800; // the high 10 bits.\r\n\t i++;\r\n\t assert(i < str.length, 'Surrogate pair missing trail surrogate.');\r\n\t var low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\r\n\t c = 0x10000 + (high << 10) + low;\r\n\t }\r\n\t if (c < 128) {\r\n\t out[p++] = c;\r\n\t }\r\n\t else if (c < 2048) {\r\n\t out[p++] = (c >> 6) | 192;\r\n\t out[p++] = (c & 63) | 128;\r\n\t }\r\n\t else if (c < 65536) {\r\n\t out[p++] = (c >> 12) | 224;\r\n\t out[p++] = ((c >> 6) & 63) | 128;\r\n\t out[p++] = (c & 63) | 128;\r\n\t }\r\n\t else {\r\n\t out[p++] = (c >> 18) | 240;\r\n\t out[p++] = ((c >> 12) & 63) | 128;\r\n\t out[p++] = ((c >> 6) & 63) | 128;\r\n\t out[p++] = (c & 63) | 128;\r\n\t }\r\n\t }\r\n\t return out;\r\n\t};\r\n\t/**\r\n\t * Calculate length without actually converting; useful for doing cheaper validation.\r\n\t * @param {string} str\r\n\t * @return {number}\r\n\t */\r\n\tvar stringLength = function (str) {\r\n\t var p = 0;\r\n\t for (var i = 0; i < str.length; i++) {\r\n\t var c = str.charCodeAt(i);\r\n\t if (c < 128) {\r\n\t p++;\r\n\t }\r\n\t else if (c < 2048) {\r\n\t p += 2;\r\n\t }\r\n\t else if (c >= 0xd800 && c <= 0xdbff) {\r\n\t // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.\r\n\t p += 4;\r\n\t i++; // skip trail surrogate.\r\n\t }\r\n\t else {\r\n\t p += 3;\r\n\t }\r\n\t }\r\n\t return p;\r\n\t};\n\t\n\t/**\r\n\t * Copyright 2017 Google Inc.\r\n\t *\r\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n\t * you may not use this file except in compliance with the License.\r\n\t * You may obtain a copy of the License at\r\n\t *\r\n\t * http://www.apache.org/licenses/LICENSE-2.0\r\n\t *\r\n\t * Unless required by applicable law or agreed to in writing, software\r\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n\t * See the License for the specific language governing permissions and\r\n\t * limitations under the License.\r\n\t */\n\t\n\texports.assert = assert;\n\texports.assertionError = assertionError;\n\texports.base64 = base64;\n\texports.base64Decode = base64Decode;\n\texports.base64Encode = base64Encode;\n\texports.CONSTANTS = CONSTANTS;\n\texports.deepCopy = deepCopy;\n\texports.deepExtend = deepExtend;\n\texports.patchProperty = patchProperty;\n\texports.Deferred = Deferred;\n\texports.getUA = getUA;\n\texports.isMobileCordova = isMobileCordova;\n\texports.isNodeSdk = isNodeSdk;\n\texports.isReactNative = isReactNative;\n\texports.ErrorFactory = ErrorFactory;\n\texports.FirebaseError = FirebaseError;\n\texports.patchCapture = patchCapture;\n\texports.jsonEval = jsonEval;\n\texports.stringify = stringify;\n\texports.decode = decode;\n\texports.isAdmin = isAdmin;\n\texports.issuedAtTime = issuedAtTime;\n\texports.isValidFormat = isValidFormat;\n\texports.isValidTimestamp = isValidTimestamp;\n\texports.clone = clone;\n\texports.contains = contains;\n\texports.every = every;\n\texports.extend = extend;\n\texports.findKey = findKey;\n\texports.findValue = findValue;\n\texports.forEach = forEach;\n\texports.getAnyKey = getAnyKey;\n\texports.getCount = getCount;\n\texports.getValues = getValues;\n\texports.isEmpty = isEmpty;\n\texports.isNonNullObject = isNonNullObject;\n\texports.map = map;\n\texports.safeGet = safeGet;\n\texports.querystring = querystring;\n\texports.querystringDecode = querystringDecode;\n\texports.Sha1 = Sha1;\n\texports.async = async;\n\texports.createSubscribe = createSubscribe;\n\texports.errorPrefix = errorPrefix;\n\texports.validateArgCount = validateArgCount;\n\texports.validateCallback = validateCallback;\n\texports.validateContextObject = validateContextObject;\n\texports.validateNamespace = validateNamespace;\n\texports.stringLength = stringLength;\n\texports.stringToByteArray = stringToByteArray$1;\n\n\n/***/ }),\n\n/***/ 578:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2017 Google Inc.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t * http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t */\n\t\n\t__webpack_require__(442);\n\tmodule.exports = __webpack_require__(73).default;\n\n\n/***/ }),\n\n/***/ 579:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2017 Google Inc.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t * http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t */\n\t\n\t__webpack_require__(438);\n\n\n/***/ }),\n\n/***/ 580:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2017 Google Inc.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t * http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t */\n\t\n\tmodule.exports = __webpack_require__(439);\n\n\n/***/ }),\n\n/***/ 581:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2017 Google Inc.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t * http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t */\n\t\n\tvar firebase = __webpack_require__(578);\n\t__webpack_require__(579);\n\t__webpack_require__(580);\n\t__webpack_require__(582);\n\t__webpack_require__(583);\n\t\n\tmodule.exports = firebase;\n\n\n/***/ }),\n\n/***/ 582:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2017 Google Inc.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t * http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t */\n\t\n\t__webpack_require__(441);\n\n\n/***/ }),\n\n/***/ 583:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/**\n\t * Copyright 2017 Google Inc.\n\t *\n\t * Licensed under the Apache License, Version 2.0 (the \"License\");\n\t * you may not use this file except in compliance with the License.\n\t * You may obtain a copy of the License at\n\t *\n\t * http://www.apache.org/licenses/LICENSE-2.0\n\t *\n\t * Unless required by applicable law or agreed to in writing, software\n\t * distributed under the License is distributed on an \"AS IS\" BASIS,\n\t * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\t * See the License for the specific language governing permissions and\n\t * limitations under the License.\n\t */\n\t\n\t__webpack_require__(443);\n\n\n/***/ }),\n\n/***/ 606:\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n\t * JavaScript Cookie v2.2.0\n\t * https://github.com/js-cookie/js-cookie\n\t *\n\t * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n\t * Released under the MIT license\n\t */\n\t;(function (factory) {\n\t\tvar registeredInModuleLoader = false;\n\t\tif (true) {\n\t\t\t!(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t\t\tregisteredInModuleLoader = true;\n\t\t}\n\t\tif (true) {\n\t\t\tmodule.exports = factory();\n\t\t\tregisteredInModuleLoader = true;\n\t\t}\n\t\tif (!registeredInModuleLoader) {\n\t\t\tvar OldCookies = window.Cookies;\n\t\t\tvar api = window.Cookies = factory();\n\t\t\tapi.noConflict = function () {\n\t\t\t\twindow.Cookies = OldCookies;\n\t\t\t\treturn api;\n\t\t\t};\n\t\t}\n\t}(function () {\n\t\tfunction extend () {\n\t\t\tvar i = 0;\n\t\t\tvar result = {};\n\t\t\tfor (; i < arguments.length; i++) {\n\t\t\t\tvar attributes = arguments[ i ];\n\t\t\t\tfor (var key in attributes) {\n\t\t\t\t\tresult[key] = attributes[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t\n\t\tfunction init (converter) {\n\t\t\tfunction api (key, value, attributes) {\n\t\t\t\tvar result;\n\t\t\t\tif (typeof document === 'undefined') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\n\t\t\t\t// Write\n\t\n\t\t\t\tif (arguments.length > 1) {\n\t\t\t\t\tattributes = extend({\n\t\t\t\t\t\tpath: '/'\n\t\t\t\t\t}, api.defaults, attributes);\n\t\n\t\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\t\tvar expires = new Date();\n\t\t\t\t\t\texpires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n\t\t\t\t\t\tattributes.expires = expires;\n\t\t\t\t\t}\n\t\n\t\t\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tresult = JSON.stringify(value);\n\t\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {}\n\t\n\t\t\t\t\tif (!converter.write) {\n\t\t\t\t\t\tvalue = encodeURIComponent(String(value))\n\t\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvalue = converter.write(value, key);\n\t\t\t\t\t}\n\t\n\t\t\t\t\tkey = encodeURIComponent(String(key));\n\t\t\t\t\tkey = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n\t\t\t\t\tkey = key.replace(/[\\(\\)]/g, escape);\n\t\n\t\t\t\t\tvar stringifiedAttributes = '';\n\t\n\t\t\t\t\tfor (var attributeName in attributes) {\n\t\t\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName];\n\t\t\t\t\t}\n\t\t\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t\t\t}\n\t\n\t\t\t\t// Read\n\t\n\t\t\t\tif (!key) {\n\t\t\t\t\tresult = {};\n\t\t\t\t}\n\t\n\t\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t\t// calling \"get()\"\n\t\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\t\tvar rdecode = /(%[0-9A-Z]{2})+/g;\n\t\t\t\tvar i = 0;\n\t\n\t\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\t\tvar cookie = parts.slice(1).join('=');\n\t\n\t\t\t\t\tif (!this.json && cookie.charAt(0) === '\"') {\n\t\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t\t}\n\t\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar name = parts[0].replace(rdecode, decodeURIComponent);\n\t\t\t\t\t\tcookie = converter.read ?\n\t\t\t\t\t\t\tconverter.read(cookie, name) : converter(cookie, name) ||\n\t\t\t\t\t\t\tcookie.replace(rdecode, decodeURIComponent);\n\t\n\t\t\t\t\t\tif (this.json) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\t\tresult = cookie;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\n\t\t\t\t\t\tif (!key) {\n\t\t\t\t\t\t\tresult[name] = cookie;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {}\n\t\t\t\t}\n\t\n\t\t\t\treturn result;\n\t\t\t}\n\t\n\t\t\tapi.set = api;\n\t\t\tapi.get = function (key) {\n\t\t\t\treturn api.call(api, key);\n\t\t\t};\n\t\t\tapi.getJSON = function () {\n\t\t\t\treturn api.apply({\n\t\t\t\t\tjson: true\n\t\t\t\t}, [].slice.call(arguments));\n\t\t\t};\n\t\t\tapi.defaults = {};\n\t\n\t\t\tapi.remove = function (key, attributes) {\n\t\t\t\tapi(key, '', extend(attributes, {\n\t\t\t\t\texpires: -1\n\t\t\t\t}));\n\t\t\t};\n\t\n\t\t\tapi.withConverter = init;\n\t\n\t\t\treturn api;\n\t\t}\n\t\n\t\treturn init(function () {});\n\t}));\n\n\n/***/ }),\n\n/***/ 660:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t// This method of obtaining a reference to the global object needs to be\n\t// kept identical to the way it is obtained in runtime.js\n\tvar g = (function() { return this })() || Function(\"return this\")();\n\t\n\t// Use `getOwnPropertyNames` because not all browsers support calling\n\t// `hasOwnProperty` on the global `self` object in a worker. See #183.\n\tvar hadRuntime = g.regeneratorRuntime &&\n\t Object.getOwnPropertyNames(g).indexOf(\"regeneratorRuntime\") >= 0;\n\t\n\t// Save the old regeneratorRuntime in case it needs to be restored later.\n\tvar oldRuntime = hadRuntime && g.regeneratorRuntime;\n\t\n\t// Force reevalutation of runtime.js.\n\tg.regeneratorRuntime = undefined;\n\t\n\tmodule.exports = __webpack_require__(661);\n\t\n\tif (hadRuntime) {\n\t // Restore the original runtime.\n\t g.regeneratorRuntime = oldRuntime;\n\t} else {\n\t // Remove the global property added by runtime.js.\n\t try {\n\t delete g.regeneratorRuntime;\n\t } catch(e) {\n\t g.regeneratorRuntime = undefined;\n\t }\n\t}\n\n\n/***/ }),\n\n/***/ 661:\n/***/ (function(module, exports) {\n\n\t/**\n\t * Copyright (c) 2014, Facebook, Inc.\n\t * All rights reserved.\n\t *\n\t * This source code is licensed under the BSD-style license found in the\n\t * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n\t * additional grant of patent rights can be found in the PATENTS file in\n\t * the same directory.\n\t */\n\t\n\t!(function(global) {\n\t \"use strict\";\n\t\n\t var Op = Object.prototype;\n\t var hasOwn = Op.hasOwnProperty;\n\t var undefined; // More compressible than void 0.\n\t var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n\t var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n\t var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n\t var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\t\n\t var inModule = typeof module === \"object\";\n\t var runtime = global.regeneratorRuntime;\n\t if (runtime) {\n\t if (inModule) {\n\t // If regeneratorRuntime is defined globally and we're in a module,\n\t // make the exports object identical to regeneratorRuntime.\n\t module.exports = runtime;\n\t }\n\t // Don't bother evaluating the rest of this file if the runtime was\n\t // already defined globally.\n\t return;\n\t }\n\t\n\t // Define the runtime globally (as expected by generated code) as either\n\t // module.exports (if we're in a module) or a new, empty object.\n\t runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\t\n\t function wrap(innerFn, outerFn, self, tryLocsList) {\n\t // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n\t var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n\t var generator = Object.create(protoGenerator.prototype);\n\t var context = new Context(tryLocsList || []);\n\t\n\t // The ._invoke method unifies the implementations of the .next,\n\t // .throw, and .return methods.\n\t generator._invoke = makeInvokeMethod(innerFn, self, context);\n\t\n\t return generator;\n\t }\n\t runtime.wrap = wrap;\n\t\n\t // Try/catch helper to minimize deoptimizations. Returns a completion\n\t // record like context.tryEntries[i].completion. This interface could\n\t // have been (and was previously) designed to take a closure to be\n\t // invoked without arguments, but in all the cases we care about we\n\t // already have an existing method we want to call, so there's no need\n\t // to create a new function object. We can even get away with assuming\n\t // the method takes exactly one argument, since that happens to be true\n\t // in every case, so we don't have to touch the arguments object. The\n\t // only additional allocation required is the completion record, which\n\t // has a stable shape and so hopefully should be cheap to allocate.\n\t function tryCatch(fn, obj, arg) {\n\t try {\n\t return { type: \"normal\", arg: fn.call(obj, arg) };\n\t } catch (err) {\n\t return { type: \"throw\", arg: err };\n\t }\n\t }\n\t\n\t var GenStateSuspendedStart = \"suspendedStart\";\n\t var GenStateSuspendedYield = \"suspendedYield\";\n\t var GenStateExecuting = \"executing\";\n\t var GenStateCompleted = \"completed\";\n\t\n\t // Returning this object from the innerFn has the same effect as\n\t // breaking out of the dispatch switch statement.\n\t var ContinueSentinel = {};\n\t\n\t // Dummy constructor functions that we use as the .constructor and\n\t // .constructor.prototype properties for functions that return Generator\n\t // objects. For full spec compliance, you may wish to configure your\n\t // minifier not to mangle the names of these two functions.\n\t function Generator() {}\n\t function GeneratorFunction() {}\n\t function GeneratorFunctionPrototype() {}\n\t\n\t // This is a polyfill for %IteratorPrototype% for environments that\n\t // don't natively support it.\n\t var IteratorPrototype = {};\n\t IteratorPrototype[iteratorSymbol] = function () {\n\t return this;\n\t };\n\t\n\t var getProto = Object.getPrototypeOf;\n\t var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n\t if (NativeIteratorPrototype &&\n\t NativeIteratorPrototype !== Op &&\n\t hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n\t // This environment has a native %IteratorPrototype%; use it instead\n\t // of the polyfill.\n\t IteratorPrototype = NativeIteratorPrototype;\n\t }\n\t\n\t var Gp = GeneratorFunctionPrototype.prototype =\n\t Generator.prototype = Object.create(IteratorPrototype);\n\t GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n\t GeneratorFunctionPrototype.constructor = GeneratorFunction;\n\t GeneratorFunctionPrototype[toStringTagSymbol] =\n\t GeneratorFunction.displayName = \"GeneratorFunction\";\n\t\n\t // Helper for defining the .next, .throw, and .return methods of the\n\t // Iterator interface in terms of a single ._invoke method.\n\t function defineIteratorMethods(prototype) {\n\t [\"next\", \"throw\", \"return\"].forEach(function(method) {\n\t prototype[method] = function(arg) {\n\t return this._invoke(method, arg);\n\t };\n\t });\n\t }\n\t\n\t runtime.isGeneratorFunction = function(genFun) {\n\t var ctor = typeof genFun === \"function\" && genFun.constructor;\n\t return ctor\n\t ? ctor === GeneratorFunction ||\n\t // For the native GeneratorFunction constructor, the best we can\n\t // do is to check its .name property.\n\t (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n\t : false;\n\t };\n\t\n\t runtime.mark = function(genFun) {\n\t if (Object.setPrototypeOf) {\n\t Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n\t } else {\n\t genFun.__proto__ = GeneratorFunctionPrototype;\n\t if (!(toStringTagSymbol in genFun)) {\n\t genFun[toStringTagSymbol] = \"GeneratorFunction\";\n\t }\n\t }\n\t genFun.prototype = Object.create(Gp);\n\t return genFun;\n\t };\n\t\n\t // Within the body of any async function, `await x` is transformed to\n\t // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n\t // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n\t // meant to be awaited.\n\t runtime.awrap = function(arg) {\n\t return { __await: arg };\n\t };\n\t\n\t function AsyncIterator(generator) {\n\t function invoke(method, arg, resolve, reject) {\n\t var record = tryCatch(generator[method], generator, arg);\n\t if (record.type === \"throw\") {\n\t reject(record.arg);\n\t } else {\n\t var result = record.arg;\n\t var value = result.value;\n\t if (value &&\n\t typeof value === \"object\" &&\n\t hasOwn.call(value, \"__await\")) {\n\t return Promise.resolve(value.__await).then(function(value) {\n\t invoke(\"next\", value, resolve, reject);\n\t }, function(err) {\n\t invoke(\"throw\", err, resolve, reject);\n\t });\n\t }\n\t\n\t return Promise.resolve(value).then(function(unwrapped) {\n\t // When a yielded Promise is resolved, its final value becomes\n\t // the .value of the Promise<{value,done}> result for the\n\t // current iteration. If the Promise is rejected, however, the\n\t // result for this iteration will be rejected with the same\n\t // reason. Note that rejections of yielded Promises are not\n\t // thrown back into the generator function, as is the case\n\t // when an awaited Promise is rejected. This difference in\n\t // behavior between yield and await is important, because it\n\t // allows the consumer to decide what to do with the yielded\n\t // rejection (swallow it and continue, manually .throw it back\n\t // into the generator, abandon iteration, whatever). With\n\t // await, by contrast, there is no opportunity to examine the\n\t // rejection reason outside the generator function, so the\n\t // only option is to throw it from the await expression, and\n\t // let the generator function handle the exception.\n\t result.value = unwrapped;\n\t resolve(result);\n\t }, reject);\n\t }\n\t }\n\t\n\t var previousPromise;\n\t\n\t function enqueue(method, arg) {\n\t function callInvokeWithMethodAndArg() {\n\t return new Promise(function(resolve, reject) {\n\t invoke(method, arg, resolve, reject);\n\t });\n\t }\n\t\n\t return previousPromise =\n\t // If enqueue has been called before, then we want to wait until\n\t // all previous Promises have been resolved before calling invoke,\n\t // so that results are always delivered in the correct order. If\n\t // enqueue has not been called before, then it is important to\n\t // call invoke immediately, without waiting on a callback to fire,\n\t // so that the async generator function has the opportunity to do\n\t // any necessary setup in a predictable way. This predictability\n\t // is why the Promise constructor synchronously invokes its\n\t // executor callback, and why async functions synchronously\n\t // execute code before the first await. Since we implement simple\n\t // async functions in terms of async generators, it is especially\n\t // important to get this right, even though it requires care.\n\t previousPromise ? previousPromise.then(\n\t callInvokeWithMethodAndArg,\n\t // Avoid propagating failures to Promises returned by later\n\t // invocations of the iterator.\n\t callInvokeWithMethodAndArg\n\t ) : callInvokeWithMethodAndArg();\n\t }\n\t\n\t // Define the unified helper method that is used to implement .next,\n\t // .throw, and .return (see defineIteratorMethods).\n\t this._invoke = enqueue;\n\t }\n\t\n\t defineIteratorMethods(AsyncIterator.prototype);\n\t AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n\t return this;\n\t };\n\t runtime.AsyncIterator = AsyncIterator;\n\t\n\t // Note that simple async functions are implemented on top of\n\t // AsyncIterator objects; they just return a Promise for the value of\n\t // the final result produced by the iterator.\n\t runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n\t var iter = new AsyncIterator(\n\t wrap(innerFn, outerFn, self, tryLocsList)\n\t );\n\t\n\t return runtime.isGeneratorFunction(outerFn)\n\t ? iter // If outerFn is a generator, return the full iterator.\n\t : iter.next().then(function(result) {\n\t return result.done ? result.value : iter.next();\n\t });\n\t };\n\t\n\t function makeInvokeMethod(innerFn, self, context) {\n\t var state = GenStateSuspendedStart;\n\t\n\t return function invoke(method, arg) {\n\t if (state === GenStateExecuting) {\n\t throw new Error(\"Generator is already running\");\n\t }\n\t\n\t if (state === GenStateCompleted) {\n\t if (method === \"throw\") {\n\t throw arg;\n\t }\n\t\n\t // Be forgiving, per 25.3.3.3.3 of the spec:\n\t // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n\t return doneResult();\n\t }\n\t\n\t context.method = method;\n\t context.arg = arg;\n\t\n\t while (true) {\n\t var delegate = context.delegate;\n\t if (delegate) {\n\t var delegateResult = maybeInvokeDelegate(delegate, context);\n\t if (delegateResult) {\n\t if (delegateResult === ContinueSentinel) continue;\n\t return delegateResult;\n\t }\n\t }\n\t\n\t if (context.method === \"next\") {\n\t // Setting context._sent for legacy support of Babel's\n\t // function.sent implementation.\n\t context.sent = context._sent = context.arg;\n\t\n\t } else if (context.method === \"throw\") {\n\t if (state === GenStateSuspendedStart) {\n\t state = GenStateCompleted;\n\t throw context.arg;\n\t }\n\t\n\t context.dispatchException(context.arg);\n\t\n\t } else if (context.method === \"return\") {\n\t context.abrupt(\"return\", context.arg);\n\t }\n\t\n\t state = GenStateExecuting;\n\t\n\t var record = tryCatch(innerFn, self, context);\n\t if (record.type === \"normal\") {\n\t // If an exception is thrown from innerFn, we leave state ===\n\t // GenStateExecuting and loop back for another invocation.\n\t state = context.done\n\t ? GenStateCompleted\n\t : GenStateSuspendedYield;\n\t\n\t if (record.arg === ContinueSentinel) {\n\t continue;\n\t }\n\t\n\t return {\n\t value: record.arg,\n\t done: context.done\n\t };\n\t\n\t } else if (record.type === \"throw\") {\n\t state = GenStateCompleted;\n\t // Dispatch the exception by looping back around to the\n\t // context.dispatchException(context.arg) call above.\n\t context.method = \"throw\";\n\t context.arg = record.arg;\n\t }\n\t }\n\t };\n\t }\n\t\n\t // Call delegate.iterator[context.method](context.arg) and handle the\n\t // result, either by returning a { value, done } result from the\n\t // delegate iterator, or by modifying context.method and context.arg,\n\t // setting context.delegate to null, and returning the ContinueSentinel.\n\t function maybeInvokeDelegate(delegate, context) {\n\t var method = delegate.iterator[context.method];\n\t if (method === undefined) {\n\t // A .throw or .return when the delegate iterator has no .throw\n\t // method always terminates the yield* loop.\n\t context.delegate = null;\n\t\n\t if (context.method === \"throw\") {\n\t if (delegate.iterator.return) {\n\t // If the delegate iterator has a return method, give it a\n\t // chance to clean up.\n\t context.method = \"return\";\n\t context.arg = undefined;\n\t maybeInvokeDelegate(delegate, context);\n\t\n\t if (context.method === \"throw\") {\n\t // If maybeInvokeDelegate(context) changed context.method from\n\t // \"return\" to \"throw\", let that override the TypeError below.\n\t return ContinueSentinel;\n\t }\n\t }\n\t\n\t context.method = \"throw\";\n\t context.arg = new TypeError(\n\t \"The iterator does not provide a 'throw' method\");\n\t }\n\t\n\t return ContinueSentinel;\n\t }\n\t\n\t var record = tryCatch(method, delegate.iterator, context.arg);\n\t\n\t if (record.type === \"throw\") {\n\t context.method = \"throw\";\n\t context.arg = record.arg;\n\t context.delegate = null;\n\t return ContinueSentinel;\n\t }\n\t\n\t var info = record.arg;\n\t\n\t if (! info) {\n\t context.method = \"throw\";\n\t context.arg = new TypeError(\"iterator result is not an object\");\n\t context.delegate = null;\n\t return ContinueSentinel;\n\t }\n\t\n\t if (info.done) {\n\t // Assign the result of the finished delegate to the temporary\n\t // variable specified by delegate.resultName (see delegateYield).\n\t context[delegate.resultName] = info.value;\n\t\n\t // Resume execution at the desired location (see delegateYield).\n\t context.next = delegate.nextLoc;\n\t\n\t // If context.method was \"throw\" but the delegate handled the\n\t // exception, let the outer generator proceed normally. If\n\t // context.method was \"next\", forget context.arg since it has been\n\t // \"consumed\" by the delegate iterator. If context.method was\n\t // \"return\", allow the original .return call to continue in the\n\t // outer generator.\n\t if (context.method !== \"return\") {\n\t context.method = \"next\";\n\t context.arg = undefined;\n\t }\n\t\n\t } else {\n\t // Re-yield the result returned by the delegate method.\n\t return info;\n\t }\n\t\n\t // The delegate iterator is finished, so forget it and continue with\n\t // the outer generator.\n\t context.delegate = null;\n\t return ContinueSentinel;\n\t }\n\t\n\t // Define Generator.prototype.{next,throw,return} in terms of the\n\t // unified ._invoke helper method.\n\t defineIteratorMethods(Gp);\n\t\n\t Gp[toStringTagSymbol] = \"Generator\";\n\t\n\t // A Generator should always return itself as the iterator object when the\n\t // @@iterator function is called on it. Some browsers' implementations of the\n\t // iterator prototype chain incorrectly implement this, causing the Generator\n\t // object to not be returned from this call. This ensures that doesn't happen.\n\t // See https://github.com/facebook/regenerator/issues/274 for more details.\n\t Gp[iteratorSymbol] = function() {\n\t return this;\n\t };\n\t\n\t Gp.toString = function() {\n\t return \"[object Generator]\";\n\t };\n\t\n\t function pushTryEntry(locs) {\n\t var entry = { tryLoc: locs[0] };\n\t\n\t if (1 in locs) {\n\t entry.catchLoc = locs[1];\n\t }\n\t\n\t if (2 in locs) {\n\t entry.finallyLoc = locs[2];\n\t entry.afterLoc = locs[3];\n\t }\n\t\n\t this.tryEntries.push(entry);\n\t }\n\t\n\t function resetTryEntry(entry) {\n\t var record = entry.completion || {};\n\t record.type = \"normal\";\n\t delete record.arg;\n\t entry.completion = record;\n\t }\n\t\n\t function Context(tryLocsList) {\n\t // The root entry object (effectively a try statement without a catch\n\t // or a finally block) gives us a place to store values thrown from\n\t // locations where there is no enclosing try statement.\n\t this.tryEntries = [{ tryLoc: \"root\" }];\n\t tryLocsList.forEach(pushTryEntry, this);\n\t this.reset(true);\n\t }\n\t\n\t runtime.keys = function(object) {\n\t var keys = [];\n\t for (var key in object) {\n\t keys.push(key);\n\t }\n\t keys.reverse();\n\t\n\t // Rather than returning an object with a next method, we keep\n\t // things simple and return the next function itself.\n\t return function next() {\n\t while (keys.length) {\n\t var key = keys.pop();\n\t if (key in object) {\n\t next.value = key;\n\t next.done = false;\n\t return next;\n\t }\n\t }\n\t\n\t // To avoid creating an additional object, we just hang the .value\n\t // and .done properties off the next function object itself. This\n\t // also ensures that the minifier will not anonymize the function.\n\t next.done = true;\n\t return next;\n\t };\n\t };\n\t\n\t function values(iterable) {\n\t if (iterable) {\n\t var iteratorMethod = iterable[iteratorSymbol];\n\t if (iteratorMethod) {\n\t return iteratorMethod.call(iterable);\n\t }\n\t\n\t if (typeof iterable.next === \"function\") {\n\t return iterable;\n\t }\n\t\n\t if (!isNaN(iterable.length)) {\n\t var i = -1, next = function next() {\n\t while (++i < iterable.length) {\n\t if (hasOwn.call(iterable, i)) {\n\t next.value = iterable[i];\n\t next.done = false;\n\t return next;\n\t }\n\t }\n\t\n\t next.value = undefined;\n\t next.done = true;\n\t\n\t return next;\n\t };\n\t\n\t return next.next = next;\n\t }\n\t }\n\t\n\t // Return an iterator with no values.\n\t return { next: doneResult };\n\t }\n\t runtime.values = values;\n\t\n\t function doneResult() {\n\t return { value: undefined, done: true };\n\t }\n\t\n\t Context.prototype = {\n\t constructor: Context,\n\t\n\t reset: function(skipTempReset) {\n\t this.prev = 0;\n\t this.next = 0;\n\t // Resetting context._sent for legacy support of Babel's\n\t // function.sent implementation.\n\t this.sent = this._sent = undefined;\n\t this.done = false;\n\t this.delegate = null;\n\t\n\t this.method = \"next\";\n\t this.arg = undefined;\n\t\n\t this.tryEntries.forEach(resetTryEntry);\n\t\n\t if (!skipTempReset) {\n\t for (var name in this) {\n\t // Not sure about the optimal order of these conditions:\n\t if (name.charAt(0) === \"t\" &&\n\t hasOwn.call(this, name) &&\n\t !isNaN(+name.slice(1))) {\n\t this[name] = undefined;\n\t }\n\t }\n\t }\n\t },\n\t\n\t stop: function() {\n\t this.done = true;\n\t\n\t var rootEntry = this.tryEntries[0];\n\t var rootRecord = rootEntry.completion;\n\t if (rootRecord.type === \"throw\") {\n\t throw rootRecord.arg;\n\t }\n\t\n\t return this.rval;\n\t },\n\t\n\t dispatchException: function(exception) {\n\t if (this.done) {\n\t throw exception;\n\t }\n\t\n\t var context = this;\n\t function handle(loc, caught) {\n\t record.type = \"throw\";\n\t record.arg = exception;\n\t context.next = loc;\n\t\n\t if (caught) {\n\t // If the dispatched exception was caught by a catch block,\n\t // then let that catch block handle the exception normally.\n\t context.method = \"next\";\n\t context.arg = undefined;\n\t }\n\t\n\t return !! caught;\n\t }\n\t\n\t for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n\t var entry = this.tryEntries[i];\n\t var record = entry.completion;\n\t\n\t if (entry.tryLoc === \"root\") {\n\t // Exception thrown outside of any try block that could handle\n\t // it, so set the completion value of the entire function to\n\t // throw the exception.\n\t return handle(\"end\");\n\t }\n\t\n\t if (entry.tryLoc <= this.prev) {\n\t var hasCatch = hasOwn.call(entry, \"catchLoc\");\n\t var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\t\n\t if (hasCatch && hasFinally) {\n\t if (this.prev < entry.catchLoc) {\n\t return handle(entry.catchLoc, true);\n\t } else if (this.prev < entry.finallyLoc) {\n\t return handle(entry.finallyLoc);\n\t }\n\t\n\t } else if (hasCatch) {\n\t if (this.prev < entry.catchLoc) {\n\t return handle(entry.catchLoc, true);\n\t }\n\t\n\t } else if (hasFinally) {\n\t if (this.prev < entry.finallyLoc) {\n\t return handle(entry.finallyLoc);\n\t }\n\t\n\t } else {\n\t throw new Error(\"try statement without catch or finally\");\n\t }\n\t }\n\t }\n\t },\n\t\n\t abrupt: function(type, arg) {\n\t for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n\t var entry = this.tryEntries[i];\n\t if (entry.tryLoc <= this.prev &&\n\t hasOwn.call(entry, \"finallyLoc\") &&\n\t this.prev < entry.finallyLoc) {\n\t var finallyEntry = entry;\n\t break;\n\t }\n\t }\n\t\n\t if (finallyEntry &&\n\t (type === \"break\" ||\n\t type === \"continue\") &&\n\t finallyEntry.tryLoc <= arg &&\n\t arg <= finallyEntry.finallyLoc) {\n\t // Ignore the finally entry if control is not jumping to a\n\t // location outside the try/catch block.\n\t finallyEntry = null;\n\t }\n\t\n\t var record = finallyEntry ? finallyEntry.completion : {};\n\t record.type = type;\n\t record.arg = arg;\n\t\n\t if (finallyEntry) {\n\t this.method = \"next\";\n\t this.next = finallyEntry.finallyLoc;\n\t return ContinueSentinel;\n\t }\n\t\n\t return this.complete(record);\n\t },\n\t\n\t complete: function(record, afterLoc) {\n\t if (record.type === \"throw\") {\n\t throw record.arg;\n\t }\n\t\n\t if (record.type === \"break\" ||\n\t record.type === \"continue\") {\n\t this.next = record.arg;\n\t } else if (record.type === \"return\") {\n\t this.rval = this.arg = record.arg;\n\t this.method = \"return\";\n\t this.next = \"end\";\n\t } else if (record.type === \"normal\" && afterLoc) {\n\t this.next = afterLoc;\n\t }\n\t\n\t return ContinueSentinel;\n\t },\n\t\n\t finish: function(finallyLoc) {\n\t for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n\t var entry = this.tryEntries[i];\n\t if (entry.finallyLoc === finallyLoc) {\n\t this.complete(entry.completion, entry.afterLoc);\n\t resetTryEntry(entry);\n\t return ContinueSentinel;\n\t }\n\t }\n\t },\n\t\n\t \"catch\": function(tryLoc) {\n\t for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n\t var entry = this.tryEntries[i];\n\t if (entry.tryLoc === tryLoc) {\n\t var record = entry.completion;\n\t if (record.type === \"throw\") {\n\t var thrown = record.arg;\n\t resetTryEntry(entry);\n\t }\n\t return thrown;\n\t }\n\t }\n\t\n\t // The context.catch method must only be called with a location\n\t // argument that corresponds to a known catch block.\n\t throw new Error(\"illegal catch attempt\");\n\t },\n\t\n\t delegateYield: function(iterable, resultName, nextLoc) {\n\t this.delegate = {\n\t iterator: values(iterable),\n\t resultName: resultName,\n\t nextLoc: nextLoc\n\t };\n\t\n\t if (this.method === \"next\") {\n\t // Deliberately forget the last sent value so that we don't\n\t // accidentally pass it on to the delegate.\n\t this.arg = undefined;\n\t }\n\t\n\t return ContinueSentinel;\n\t }\n\t };\n\t})(\n\t // In sloppy mode, unbound `this` refers to the global object, fallback to\n\t // Function constructor if we're in global strict mode. That is sadly a form\n\t // of indirect eval which violates Content Security Policy.\n\t (function() { return this })() || Function(\"return this\")()\n\t);\n\n\n/***/ }),\n\n/***/ 665:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(global, process) {(function (global, undefined) {\n\t \"use strict\";\n\t\n\t if (global.setImmediate) {\n\t return;\n\t }\n\t\n\t var nextHandle = 1; // Spec says greater than zero\n\t var tasksByHandle = {};\n\t var currentlyRunningATask = false;\n\t var doc = global.document;\n\t var registerImmediate;\n\t\n\t function setImmediate(callback) {\n\t // Callback can either be a function or a string\n\t if (typeof callback !== \"function\") {\n\t callback = new Function(\"\" + callback);\n\t }\n\t // Copy function arguments\n\t var args = new Array(arguments.length - 1);\n\t for (var i = 0; i < args.length; i++) {\n\t args[i] = arguments[i + 1];\n\t }\n\t // Store and register the task\n\t var task = { callback: callback, args: args };\n\t tasksByHandle[nextHandle] = task;\n\t registerImmediate(nextHandle);\n\t return nextHandle++;\n\t }\n\t\n\t function clearImmediate(handle) {\n\t delete tasksByHandle[handle];\n\t }\n\t\n\t function run(task) {\n\t var callback = task.callback;\n\t var args = task.args;\n\t switch (args.length) {\n\t case 0:\n\t callback();\n\t break;\n\t case 1:\n\t callback(args[0]);\n\t break;\n\t case 2:\n\t callback(args[0], args[1]);\n\t break;\n\t case 3:\n\t callback(args[0], args[1], args[2]);\n\t break;\n\t default:\n\t callback.apply(undefined, args);\n\t break;\n\t }\n\t }\n\t\n\t function runIfPresent(handle) {\n\t // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n\t // So if we're currently running a task, we'll need to delay this invocation.\n\t if (currentlyRunningATask) {\n\t // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n\t // \"too much recursion\" error.\n\t setTimeout(runIfPresent, 0, handle);\n\t } else {\n\t var task = tasksByHandle[handle];\n\t if (task) {\n\t currentlyRunningATask = true;\n\t try {\n\t run(task);\n\t } finally {\n\t clearImmediate(handle);\n\t currentlyRunningATask = false;\n\t }\n\t }\n\t }\n\t }\n\t\n\t function installNextTickImplementation() {\n\t registerImmediate = function(handle) {\n\t process.nextTick(function () { runIfPresent(handle); });\n\t };\n\t }\n\t\n\t function canUsePostMessage() {\n\t // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n\t // where `global.postMessage` means something completely different and can't be used for this purpose.\n\t if (global.postMessage && !global.importScripts) {\n\t var postMessageIsAsynchronous = true;\n\t var oldOnMessage = global.onmessage;\n\t global.onmessage = function() {\n\t postMessageIsAsynchronous = false;\n\t };\n\t global.postMessage(\"\", \"*\");\n\t global.onmessage = oldOnMessage;\n\t return postMessageIsAsynchronous;\n\t }\n\t }\n\t\n\t function installPostMessageImplementation() {\n\t // Installs an event handler on `global` for the `message` event: see\n\t // * https://developer.mozilla.org/en/DOM/window.postMessage\n\t // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\t\n\t var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n\t var onGlobalMessage = function(event) {\n\t if (event.source === global &&\n\t typeof event.data === \"string\" &&\n\t event.data.indexOf(messagePrefix) === 0) {\n\t runIfPresent(+event.data.slice(messagePrefix.length));\n\t }\n\t };\n\t\n\t if (global.addEventListener) {\n\t global.addEventListener(\"message\", onGlobalMessage, false);\n\t } else {\n\t global.attachEvent(\"onmessage\", onGlobalMessage);\n\t }\n\t\n\t registerImmediate = function(handle) {\n\t global.postMessage(messagePrefix + handle, \"*\");\n\t };\n\t }\n\t\n\t function installMessageChannelImplementation() {\n\t var channel = new MessageChannel();\n\t channel.port1.onmessage = function(event) {\n\t var handle = event.data;\n\t runIfPresent(handle);\n\t };\n\t\n\t registerImmediate = function(handle) {\n\t channel.port2.postMessage(handle);\n\t };\n\t }\n\t\n\t function installReadyStateChangeImplementation() {\n\t var html = doc.documentElement;\n\t registerImmediate = function(handle) {\n\t // Create a ';\r\n }\r\n var iframeContents = '' + script + '';\r\n try {\r\n this.myIFrame.doc.open();\r\n this.myIFrame.doc.write(iframeContents);\r\n this.myIFrame.doc.close();\r\n }\r\n catch (e) {\r\n log('frame writing exception');\r\n if (e.stack) {\r\n log(e.stack);\r\n }\r\n log(e);\r\n }\r\n }\r\n else {\r\n this.commandCB = commandCB;\r\n this.onMessageCB = onMessageCB;\r\n }\r\n }\r\n /**\r\n * Each browser has its own funny way to handle iframes. Here we mush them all together into one object that I can\r\n * actually use.\r\n * @private\r\n * @return {Element}\r\n */\r\n FirebaseIFrameScriptHolder.createIFrame_ = function () {\r\n var iframe = document.createElement('iframe');\r\n iframe.style.display = 'none';\r\n // This is necessary in order to initialize the document inside the iframe\r\n if (document.body) {\r\n document.body.appendChild(iframe);\r\n try {\r\n // If document.domain has been modified in IE, this will throw an error, and we need to set the\r\n // domain of the iframe's document manually. We can do this via a javascript: url as the src attribute\r\n // Also note that we must do this *after* the iframe has been appended to the page. Otherwise it doesn't work.\r\n var a = iframe.contentWindow.document;\r\n if (!a) {\r\n // Apologies for the log-spam, I need to do something to keep closure from optimizing out the assignment above.\r\n log('No IE domain setting required');\r\n }\r\n }\r\n catch (e) {\r\n var domain = document.domain;\r\n iframe.src =\r\n \"javascript:void((function(){document.open();document.domain='\" +\r\n domain +\r\n \"';document.close();})())\";\r\n }\r\n }\r\n else {\r\n // LongPollConnection attempts to delay initialization until the document is ready, so hopefully this\r\n // never gets hit.\r\n throw 'Document body has not initialized. Wait to initialize Firebase until after the document is ready.';\r\n }\r\n // Get the document of the iframe in a browser-specific way.\r\n if (iframe.contentDocument) {\r\n iframe.doc = iframe.contentDocument; // Firefox, Opera, Safari\r\n }\r\n else if (iframe.contentWindow) {\r\n iframe.doc = iframe.contentWindow.document; // Internet Explorer\r\n }\r\n else if (iframe.document) {\r\n iframe.doc = iframe.document; //others?\r\n }\r\n return iframe;\r\n };\r\n /**\r\n * Cancel all outstanding queries and remove the frame.\r\n */\r\n FirebaseIFrameScriptHolder.prototype.close = function () {\r\n var _this = this;\r\n //Mark this iframe as dead, so no new requests are sent.\r\n this.alive = false;\r\n if (this.myIFrame) {\r\n //We have to actually remove all of the html inside this iframe before removing it from the\r\n //window, or IE will continue loading and executing the script tags we've already added, which\r\n //can lead to some errors being thrown. Setting innerHTML seems to be the easiest way to do this.\r\n this.myIFrame.doc.body.innerHTML = '';\r\n setTimeout(function () {\r\n if (_this.myIFrame !== null) {\r\n document.body.removeChild(_this.myIFrame);\r\n _this.myIFrame = null;\r\n }\r\n }, Math.floor(0));\r\n }\r\n if (util.isNodeSdk() && this.myID) {\r\n var urlParams = {};\r\n urlParams[FIREBASE_LONGPOLL_DISCONN_FRAME_PARAM] = 't';\r\n urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\r\n urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\r\n var theURL = this.urlFn(urlParams);\r\n FirebaseIFrameScriptHolder.nodeRestRequest(theURL);\r\n }\r\n // Protect from being called recursively.\r\n var onDisconnect = this.onDisconnect;\r\n if (onDisconnect) {\r\n this.onDisconnect = null;\r\n onDisconnect();\r\n }\r\n };\r\n /**\r\n * Actually start the long-polling session by adding the first script tag(s) to the iframe.\r\n * @param {!string} id - The ID of this connection\r\n * @param {!string} pw - The password for this connection\r\n */\r\n FirebaseIFrameScriptHolder.prototype.startLongPoll = function (id, pw) {\r\n this.myID = id;\r\n this.myPW = pw;\r\n this.alive = true;\r\n //send the initial request. If there are requests queued, make sure that we transmit as many as we are currently able to.\r\n while (this.newRequest_()) { }\r\n };\r\n /**\r\n * This is called any time someone might want a script tag to be added. It adds a script tag when there aren't\r\n * too many outstanding requests and we are still alive.\r\n *\r\n * If there are outstanding packet segments to send, it sends one. If there aren't, it sends a long-poll anyways if\r\n * needed.\r\n */\r\n FirebaseIFrameScriptHolder.prototype.newRequest_ = function () {\r\n // We keep one outstanding request open all the time to receive data, but if we need to send data\r\n // (pendingSegs.length > 0) then we create a new request to send the data. The server will automatically\r\n // close the old request.\r\n if (this.alive &&\r\n this.sendNewPolls &&\r\n this.outstandingRequests.count() < (this.pendingSegs.length > 0 ? 2 : 1)) {\r\n //construct our url\r\n this.currentSerial++;\r\n var urlParams = {};\r\n urlParams[FIREBASE_LONGPOLL_ID_PARAM] = this.myID;\r\n urlParams[FIREBASE_LONGPOLL_PW_PARAM] = this.myPW;\r\n urlParams[FIREBASE_LONGPOLL_SERIAL_PARAM] = this.currentSerial;\r\n var theURL = this.urlFn(urlParams);\r\n //Now add as much data as we can.\r\n var curDataString = '';\r\n var i = 0;\r\n while (this.pendingSegs.length > 0) {\r\n //first, lets see if the next segment will fit.\r\n var nextSeg = this.pendingSegs[0];\r\n if (nextSeg.d.length + SEG_HEADER_SIZE + curDataString.length <=\r\n MAX_URL_DATA_SIZE) {\r\n //great, the segment will fit. Lets append it.\r\n var theSeg = this.pendingSegs.shift();\r\n curDataString =\r\n curDataString +\r\n '&' +\r\n FIREBASE_LONGPOLL_SEGMENT_NUM_PARAM +\r\n i +\r\n '=' +\r\n theSeg.seg +\r\n '&' +\r\n FIREBASE_LONGPOLL_SEGMENTS_IN_PACKET +\r\n i +\r\n '=' +\r\n theSeg.ts +\r\n '&' +\r\n FIREBASE_LONGPOLL_DATA_PARAM +\r\n i +\r\n '=' +\r\n theSeg.d;\r\n i++;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n theURL = theURL + curDataString;\r\n this.addLongPollTag_(theURL, this.currentSerial);\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n };\r\n /**\r\n * Queue a packet for transmission to the server.\r\n * @param segnum - A sequential id for this packet segment used for reassembly\r\n * @param totalsegs - The total number of segments in this packet\r\n * @param data - The data for this segment.\r\n */\r\n FirebaseIFrameScriptHolder.prototype.enqueueSegment = function (segnum, totalsegs, data) {\r\n //add this to the queue of segments to send.\r\n this.pendingSegs.push({ seg: segnum, ts: totalsegs, d: data });\r\n //send the data immediately if there isn't already data being transmitted, unless\r\n //startLongPoll hasn't been called yet.\r\n if (this.alive) {\r\n this.newRequest_();\r\n }\r\n };\r\n /**\r\n * Add a script tag for a regular long-poll request.\r\n * @param {!string} url - The URL of the script tag.\r\n * @param {!number} serial - The serial number of the request.\r\n * @private\r\n */\r\n FirebaseIFrameScriptHolder.prototype.addLongPollTag_ = function (url, serial) {\r\n var _this = this;\r\n //remember that we sent this request.\r\n this.outstandingRequests.add(serial, 1);\r\n var doNewRequest = function () {\r\n _this.outstandingRequests.remove(serial);\r\n _this.newRequest_();\r\n };\r\n // If this request doesn't return on its own accord (by the server sending us some data), we'll\r\n // create a new one after the KEEPALIVE interval to make sure we always keep a fresh request open.\r\n var keepaliveTimeout = setTimeout(doNewRequest, Math.floor(KEEPALIVE_REQUEST_INTERVAL));\r\n var readyStateCB = function () {\r\n // Request completed. Cancel the keepalive.\r\n clearTimeout(keepaliveTimeout);\r\n // Trigger a new request so we can continue receiving data.\r\n doNewRequest();\r\n };\r\n this.addTag(url, readyStateCB);\r\n };\r\n /**\r\n * Add an arbitrary script tag to the iframe.\r\n * @param {!string} url - The URL for the script tag source.\r\n * @param {!function()} loadCB - A callback to be triggered once the script has loaded.\r\n */\r\n FirebaseIFrameScriptHolder.prototype.addTag = function (url, loadCB) {\r\n var _this = this;\r\n if (util.isNodeSdk()) {\r\n this.doNodeLongPoll(url, loadCB);\r\n }\r\n else {\r\n setTimeout(function () {\r\n try {\r\n // if we're already closed, don't add this poll\r\n if (!_this.sendNewPolls)\r\n return;\r\n var newScript_1 = _this.myIFrame.doc.createElement('script');\r\n newScript_1.type = 'text/javascript';\r\n newScript_1.async = true;\r\n newScript_1.src = url;\r\n newScript_1.onload = newScript_1.onreadystatechange = function () {\r\n var rstate = newScript_1.readyState;\r\n if (!rstate || rstate === 'loaded' || rstate === 'complete') {\r\n newScript_1.onload = newScript_1.onreadystatechange = null;\r\n if (newScript_1.parentNode) {\r\n newScript_1.parentNode.removeChild(newScript_1);\r\n }\r\n loadCB();\r\n }\r\n };\r\n newScript_1.onerror = function () {\r\n log('Long-poll script failed to load: ' + url);\r\n _this.sendNewPolls = false;\r\n _this.close();\r\n };\r\n _this.myIFrame.doc.body.appendChild(newScript_1);\r\n }\r\n catch (e) {\r\n // TODO: we should make this error visible somehow\r\n }\r\n }, Math.floor(1));\r\n }\r\n };\r\n return FirebaseIFrameScriptHolder;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar WEBSOCKET_MAX_FRAME_SIZE = 16384;\r\nvar WEBSOCKET_KEEPALIVE_INTERVAL = 45000;\r\nvar WebSocketImpl = null;\r\nif (typeof MozWebSocket !== 'undefined') {\r\n WebSocketImpl = MozWebSocket;\r\n}\r\nelse if (typeof WebSocket !== 'undefined') {\r\n WebSocketImpl = WebSocket;\r\n}\r\n/**\r\n * Create a new websocket connection with the given callbacks.\r\n * @constructor\r\n * @implements {Transport}\r\n */\r\nvar WebSocketConnection = /** @class */ (function () {\r\n /**\r\n * @param {string} connId identifier for this transport\r\n * @param {RepoInfo} repoInfo The info for the websocket endpoint.\r\n * @param {string=} transportSessionId Optional transportSessionId if this is connecting to an existing transport\r\n * session\r\n * @param {string=} lastSessionId Optional lastSessionId if there was a previous connection\r\n */\r\n function WebSocketConnection(connId, repoInfo, transportSessionId, lastSessionId) {\r\n this.connId = connId;\r\n this.keepaliveTimer = null;\r\n this.frames = null;\r\n this.totalFrames = 0;\r\n this.bytesSent = 0;\r\n this.bytesReceived = 0;\r\n this.log_ = logWrapper(this.connId);\r\n this.stats_ = StatsManager.getCollection(repoInfo);\r\n this.connURL = WebSocketConnection.connectionURL_(repoInfo, transportSessionId, lastSessionId);\r\n }\r\n /**\r\n * @param {RepoInfo} repoInfo The info for the websocket endpoint.\r\n * @param {string=} transportSessionId Optional transportSessionId if this is connecting to an existing transport\r\n * session\r\n * @param {string=} lastSessionId Optional lastSessionId if there was a previous connection\r\n * @return {string} connection url\r\n * @private\r\n */\r\n WebSocketConnection.connectionURL_ = function (repoInfo, transportSessionId, lastSessionId) {\r\n var urlParams = {};\r\n urlParams[VERSION_PARAM] = PROTOCOL_VERSION;\r\n if (!util.isNodeSdk() &&\r\n typeof location !== 'undefined' &&\r\n location.href &&\r\n location.href.indexOf(FORGE_DOMAIN) !== -1) {\r\n urlParams[REFERER_PARAM] = FORGE_REF;\r\n }\r\n if (transportSessionId) {\r\n urlParams[TRANSPORT_SESSION_PARAM] = transportSessionId;\r\n }\r\n if (lastSessionId) {\r\n urlParams[LAST_SESSION_PARAM] = lastSessionId;\r\n }\r\n return repoInfo.connectionURL(WEBSOCKET, urlParams);\r\n };\r\n /**\r\n *\r\n * @param onMessage Callback when messages arrive\r\n * @param onDisconnect Callback with connection lost.\r\n */\r\n WebSocketConnection.prototype.open = function (onMessage, onDisconnect) {\r\n var _this = this;\r\n this.onDisconnect = onDisconnect;\r\n this.onMessage = onMessage;\r\n this.log_('Websocket connecting to ' + this.connURL);\r\n this.everConnected_ = false;\r\n // Assume failure until proven otherwise.\r\n PersistentStorage.set('previous_websocket_failure', true);\r\n try {\r\n if (util.isNodeSdk()) {\r\n var device = util.CONSTANTS.NODE_ADMIN ? 'AdminNode' : 'Node';\r\n // UA Format: Firebase////\r\n var options = {\r\n headers: {\r\n 'User-Agent': \"Firebase/\" + PROTOCOL_VERSION + \"/\" + firebase.SDK_VERSION + \"/\" + process.platform + \"/\" + device\r\n }\r\n };\r\n // Plumb appropriate http_proxy environment variable into faye-websocket if it exists.\r\n var env = process['env'];\r\n var proxy = this.connURL.indexOf('wss://') == 0\r\n ? env['HTTPS_PROXY'] || env['https_proxy']\r\n : env['HTTP_PROXY'] || env['http_proxy'];\r\n if (proxy) {\r\n options['proxy'] = { origin: proxy };\r\n }\r\n this.mySock = new WebSocketImpl(this.connURL, [], options);\r\n }\r\n else {\r\n this.mySock = new WebSocketImpl(this.connURL);\r\n }\r\n }\r\n catch (e) {\r\n this.log_('Error instantiating WebSocket.');\r\n var error$$1 = e.message || e.data;\r\n if (error$$1) {\r\n this.log_(error$$1);\r\n }\r\n this.onClosed_();\r\n return;\r\n }\r\n this.mySock.onopen = function () {\r\n _this.log_('Websocket connected.');\r\n _this.everConnected_ = true;\r\n };\r\n this.mySock.onclose = function () {\r\n _this.log_('Websocket connection was disconnected.');\r\n _this.mySock = null;\r\n _this.onClosed_();\r\n };\r\n this.mySock.onmessage = function (m) {\r\n _this.handleIncomingFrame(m);\r\n };\r\n this.mySock.onerror = function (e) {\r\n _this.log_('WebSocket error. Closing connection.');\r\n var error$$1 = e.message || e.data;\r\n if (error$$1) {\r\n _this.log_(error$$1);\r\n }\r\n _this.onClosed_();\r\n };\r\n };\r\n /**\r\n * No-op for websockets, we don't need to do anything once the connection is confirmed as open\r\n */\r\n WebSocketConnection.prototype.start = function () { };\r\n WebSocketConnection.forceDisallow = function () {\r\n WebSocketConnection.forceDisallow_ = true;\r\n };\r\n WebSocketConnection.isAvailable = function () {\r\n var isOldAndroid = false;\r\n if (typeof navigator !== 'undefined' && navigator.userAgent) {\r\n var oldAndroidRegex = /Android ([0-9]{0,}\\.[0-9]{0,})/;\r\n var oldAndroidMatch = navigator.userAgent.match(oldAndroidRegex);\r\n if (oldAndroidMatch && oldAndroidMatch.length > 1) {\r\n if (parseFloat(oldAndroidMatch[1]) < 4.4) {\r\n isOldAndroid = true;\r\n }\r\n }\r\n }\r\n return (!isOldAndroid &&\r\n WebSocketImpl !== null &&\r\n !WebSocketConnection.forceDisallow_);\r\n };\r\n /**\r\n * Returns true if we previously failed to connect with this transport.\r\n * @return {boolean}\r\n */\r\n WebSocketConnection.previouslyFailed = function () {\r\n // If our persistent storage is actually only in-memory storage,\r\n // we default to assuming that it previously failed to be safe.\r\n return (PersistentStorage.isInMemoryStorage ||\r\n PersistentStorage.get('previous_websocket_failure') === true);\r\n };\r\n WebSocketConnection.prototype.markConnectionHealthy = function () {\r\n PersistentStorage.remove('previous_websocket_failure');\r\n };\r\n WebSocketConnection.prototype.appendFrame_ = function (data) {\r\n this.frames.push(data);\r\n if (this.frames.length == this.totalFrames) {\r\n var fullMess = this.frames.join('');\r\n this.frames = null;\r\n var jsonMess = util.jsonEval(fullMess);\r\n //handle the message\r\n this.onMessage(jsonMess);\r\n }\r\n };\r\n /**\r\n * @param {number} frameCount The number of frames we are expecting from the server\r\n * @private\r\n */\r\n WebSocketConnection.prototype.handleNewFrameCount_ = function (frameCount) {\r\n this.totalFrames = frameCount;\r\n this.frames = [];\r\n };\r\n /**\r\n * Attempts to parse a frame count out of some text. If it can't, assumes a value of 1\r\n * @param {!String} data\r\n * @return {?String} Any remaining data to be process, or null if there is none\r\n * @private\r\n */\r\n WebSocketConnection.prototype.extractFrameCount_ = function (data) {\r\n util.assert(this.frames === null, 'We already have a frame buffer');\r\n // TODO: The server is only supposed to send up to 9999 frames (i.e. length <= 4), but that isn't being enforced\r\n // currently. So allowing larger frame counts (length <= 6). See https://app.asana.com/0/search/8688598998380/8237608042508\r\n if (data.length <= 6) {\r\n var frameCount = Number(data);\r\n if (!isNaN(frameCount)) {\r\n this.handleNewFrameCount_(frameCount);\r\n return null;\r\n }\r\n }\r\n this.handleNewFrameCount_(1);\r\n return data;\r\n };\r\n /**\r\n * Process a websocket frame that has arrived from the server.\r\n * @param mess The frame data\r\n */\r\n WebSocketConnection.prototype.handleIncomingFrame = function (mess) {\r\n if (this.mySock === null)\r\n return; // Chrome apparently delivers incoming packets even after we .close() the connection sometimes.\r\n var data = mess['data'];\r\n this.bytesReceived += data.length;\r\n this.stats_.incrementCounter('bytes_received', data.length);\r\n this.resetKeepAlive();\r\n if (this.frames !== null) {\r\n // we're buffering\r\n this.appendFrame_(data);\r\n }\r\n else {\r\n // try to parse out a frame count, otherwise, assume 1 and process it\r\n var remainingData = this.extractFrameCount_(data);\r\n if (remainingData !== null) {\r\n this.appendFrame_(remainingData);\r\n }\r\n }\r\n };\r\n /**\r\n * Send a message to the server\r\n * @param {Object} data The JSON object to transmit\r\n */\r\n WebSocketConnection.prototype.send = function (data) {\r\n this.resetKeepAlive();\r\n var dataStr = util.stringify(data);\r\n this.bytesSent += dataStr.length;\r\n this.stats_.incrementCounter('bytes_sent', dataStr.length);\r\n //We can only fit a certain amount in each websocket frame, so we need to split this request\r\n //up into multiple pieces if it doesn't fit in one request.\r\n var dataSegs = splitStringBySize(dataStr, WEBSOCKET_MAX_FRAME_SIZE);\r\n //Send the length header\r\n if (dataSegs.length > 1) {\r\n this.sendString_(String(dataSegs.length));\r\n }\r\n //Send the actual data in segments.\r\n for (var i = 0; i < dataSegs.length; i++) {\r\n this.sendString_(dataSegs[i]);\r\n }\r\n };\r\n WebSocketConnection.prototype.shutdown_ = function () {\r\n this.isClosed_ = true;\r\n if (this.keepaliveTimer) {\r\n clearInterval(this.keepaliveTimer);\r\n this.keepaliveTimer = null;\r\n }\r\n if (this.mySock) {\r\n this.mySock.close();\r\n this.mySock = null;\r\n }\r\n };\r\n WebSocketConnection.prototype.onClosed_ = function () {\r\n if (!this.isClosed_) {\r\n this.log_('WebSocket is closing itself');\r\n this.shutdown_();\r\n // since this is an internal close, trigger the close listener\r\n if (this.onDisconnect) {\r\n this.onDisconnect(this.everConnected_);\r\n this.onDisconnect = null;\r\n }\r\n }\r\n };\r\n /**\r\n * External-facing close handler.\r\n * Close the websocket and kill the connection.\r\n */\r\n WebSocketConnection.prototype.close = function () {\r\n if (!this.isClosed_) {\r\n this.log_('WebSocket is being closed');\r\n this.shutdown_();\r\n }\r\n };\r\n /**\r\n * Kill the current keepalive timer and start a new one, to ensure that it always fires N seconds after\r\n * the last activity.\r\n */\r\n WebSocketConnection.prototype.resetKeepAlive = function () {\r\n var _this = this;\r\n clearInterval(this.keepaliveTimer);\r\n this.keepaliveTimer = setInterval(function () {\r\n //If there has been no websocket activity for a while, send a no-op\r\n if (_this.mySock) {\r\n _this.sendString_('0');\r\n }\r\n _this.resetKeepAlive();\r\n }, Math.floor(WEBSOCKET_KEEPALIVE_INTERVAL));\r\n };\r\n /**\r\n * Send a string over the websocket.\r\n *\r\n * @param {string} str String to send.\r\n * @private\r\n */\r\n WebSocketConnection.prototype.sendString_ = function (str) {\r\n // Firefox seems to sometimes throw exceptions (NS_ERROR_UNEXPECTED) from websocket .send()\r\n // calls for some unknown reason. We treat these as an error and disconnect.\r\n // See https://app.asana.com/0/58926111402292/68021340250410\r\n try {\r\n this.mySock.send(str);\r\n }\r\n catch (e) {\r\n this.log_('Exception thrown from WebSocket.send():', e.message || e.data, 'Closing connection.');\r\n setTimeout(this.onClosed_.bind(this), 0);\r\n }\r\n };\r\n /**\r\n * Number of response before we consider the connection \"healthy.\"\r\n * @type {number}\r\n */\r\n WebSocketConnection.responsesRequiredToBeHealthy = 2;\r\n /**\r\n * Time to wait for the connection te become healthy before giving up.\r\n * @type {number}\r\n */\r\n WebSocketConnection.healthyTimeout = 30000;\r\n return WebSocketConnection;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Currently simplistic, this class manages what transport a Connection should use at various stages of its\r\n * lifecycle.\r\n *\r\n * It starts with longpolling in a browser, and httppolling on node. It then upgrades to websockets if\r\n * they are available.\r\n * @constructor\r\n */\r\nvar TransportManager = /** @class */ (function () {\r\n /**\r\n * @param {!RepoInfo} repoInfo Metadata around the namespace we're connecting to\r\n */\r\n function TransportManager(repoInfo) {\r\n this.initTransports_(repoInfo);\r\n }\r\n Object.defineProperty(TransportManager, \"ALL_TRANSPORTS\", {\r\n /**\r\n * @const\r\n * @type {!Array.}\r\n */\r\n get: function () {\r\n return [BrowserPollConnection, WebSocketConnection];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * @param {!RepoInfo} repoInfo\r\n * @private\r\n */\r\n TransportManager.prototype.initTransports_ = function (repoInfo) {\r\n var isWebSocketsAvailable = WebSocketConnection && WebSocketConnection['isAvailable']();\r\n var isSkipPollConnection = isWebSocketsAvailable && !WebSocketConnection.previouslyFailed();\r\n if (repoInfo.webSocketOnly) {\r\n if (!isWebSocketsAvailable)\r\n warn(\"wss:// URL used, but browser isn't known to support websockets. Trying anyway.\");\r\n isSkipPollConnection = true;\r\n }\r\n if (isSkipPollConnection) {\r\n this.transports_ = [WebSocketConnection];\r\n }\r\n else {\r\n var transports_1 = (this.transports_ = []);\r\n each(TransportManager.ALL_TRANSPORTS, function (i, transport) {\r\n if (transport && transport['isAvailable']()) {\r\n transports_1.push(transport);\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * @return {function(new:Transport, !string, !RepoInfo, string=, string=)} The constructor for the\r\n * initial transport to use\r\n */\r\n TransportManager.prototype.initialTransport = function () {\r\n if (this.transports_.length > 0) {\r\n return this.transports_[0];\r\n }\r\n else {\r\n throw new Error('No transports available');\r\n }\r\n };\r\n /**\r\n * @return {?function(new:Transport, function(),function(), string=)} The constructor for the next\r\n * transport, or null\r\n */\r\n TransportManager.prototype.upgradeTransport = function () {\r\n if (this.transports_.length > 1) {\r\n return this.transports_[1];\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n return TransportManager;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Abort upgrade attempt if it takes longer than 60s.\r\nvar UPGRADE_TIMEOUT = 60000;\r\n// For some transports (WebSockets), we need to \"validate\" the transport by exchanging a few requests and responses.\r\n// If we haven't sent enough requests within 5s, we'll start sending noop ping requests.\r\nvar DELAY_BEFORE_SENDING_EXTRA_REQUESTS = 5000;\r\n// If the initial data sent triggers a lot of bandwidth (i.e. it's a large put or a listen for a large amount of data)\r\n// then we may not be able to exchange our ping/pong requests within the healthy timeout. So if we reach the timeout\r\n// but we've sent/received enough bytes, we don't cancel the connection.\r\nvar BYTES_SENT_HEALTHY_OVERRIDE = 10 * 1024;\r\nvar BYTES_RECEIVED_HEALTHY_OVERRIDE = 100 * 1024;\r\nvar MESSAGE_TYPE = 't';\r\nvar MESSAGE_DATA = 'd';\r\nvar CONTROL_SHUTDOWN = 's';\r\nvar CONTROL_RESET = 'r';\r\nvar CONTROL_ERROR = 'e';\r\nvar CONTROL_PONG = 'o';\r\nvar SWITCH_ACK = 'a';\r\nvar END_TRANSMISSION = 'n';\r\nvar PING = 'p';\r\nvar SERVER_HELLO = 'h';\r\n/**\r\n * Creates a new real-time connection to the server using whichever method works\r\n * best in the current browser.\r\n *\r\n * @constructor\r\n */\r\nvar Connection = /** @class */ (function () {\r\n /**\r\n * @param {!string} id - an id for this connection\r\n * @param {!RepoInfo} repoInfo_ - the info for the endpoint to connect to\r\n * @param {function(Object)} onMessage_ - the callback to be triggered when a server-push message arrives\r\n * @param {function(number, string)} onReady_ - the callback to be triggered when this connection is ready to send messages.\r\n * @param {function()} onDisconnect_ - the callback to be triggered when a connection was lost\r\n * @param {function(string)} onKill_ - the callback to be triggered when this connection has permanently shut down.\r\n * @param {string=} lastSessionId - last session id in persistent connection. is used to clean up old session in real-time server\r\n */\r\n function Connection(id, repoInfo_, onMessage_, onReady_, onDisconnect_, onKill_, lastSessionId) {\r\n this.id = id;\r\n this.repoInfo_ = repoInfo_;\r\n this.onMessage_ = onMessage_;\r\n this.onReady_ = onReady_;\r\n this.onDisconnect_ = onDisconnect_;\r\n this.onKill_ = onKill_;\r\n this.lastSessionId = lastSessionId;\r\n this.connectionCount = 0;\r\n this.pendingDataMessages = [];\r\n this.state_ = 0 /* CONNECTING */;\r\n this.log_ = logWrapper('c:' + this.id + ':');\r\n this.transportManager_ = new TransportManager(repoInfo_);\r\n this.log_('Connection created');\r\n this.start_();\r\n }\r\n /**\r\n * Starts a connection attempt\r\n * @private\r\n */\r\n Connection.prototype.start_ = function () {\r\n var _this = this;\r\n var conn = this.transportManager_.initialTransport();\r\n this.conn_ = new conn(this.nextTransportId_(), this.repoInfo_, undefined, this.lastSessionId);\r\n // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n // can consider the transport healthy.\r\n this.primaryResponsesRequired_ = conn['responsesRequiredToBeHealthy'] || 0;\r\n var onMessageReceived = this.connReceiver_(this.conn_);\r\n var onConnectionLost = this.disconnReceiver_(this.conn_);\r\n this.tx_ = this.conn_;\r\n this.rx_ = this.conn_;\r\n this.secondaryConn_ = null;\r\n this.isHealthy_ = false;\r\n /*\r\n * Firefox doesn't like when code from one iframe tries to create another iframe by way of the parent frame.\r\n * This can occur in the case of a redirect, i.e. we guessed wrong on what server to connect to and received a reset.\r\n * Somehow, setTimeout seems to make this ok. That doesn't make sense from a security perspective, since you should\r\n * still have the context of your originating frame.\r\n */\r\n setTimeout(function () {\r\n // this.conn_ gets set to null in some of the tests. Check to make sure it still exists before using it\r\n _this.conn_ && _this.conn_.open(onMessageReceived, onConnectionLost);\r\n }, Math.floor(0));\r\n var healthyTimeout_ms = conn['healthyTimeout'] || 0;\r\n if (healthyTimeout_ms > 0) {\r\n this.healthyTimeout_ = setTimeoutNonBlocking(function () {\r\n _this.healthyTimeout_ = null;\r\n if (!_this.isHealthy_) {\r\n if (_this.conn_ &&\r\n _this.conn_.bytesReceived > BYTES_RECEIVED_HEALTHY_OVERRIDE) {\r\n _this.log_('Connection exceeded healthy timeout but has received ' +\r\n _this.conn_.bytesReceived +\r\n ' bytes. Marking connection healthy.');\r\n _this.isHealthy_ = true;\r\n _this.conn_.markConnectionHealthy();\r\n }\r\n else if (_this.conn_ &&\r\n _this.conn_.bytesSent > BYTES_SENT_HEALTHY_OVERRIDE) {\r\n _this.log_('Connection exceeded healthy timeout but has sent ' +\r\n _this.conn_.bytesSent +\r\n ' bytes. Leaving connection alive.');\r\n // NOTE: We don't want to mark it healthy, since we have no guarantee that the bytes have made it to\r\n // the server.\r\n }\r\n else {\r\n _this.log_('Closing unhealthy connection after timeout.');\r\n _this.close();\r\n }\r\n }\r\n }, Math.floor(healthyTimeout_ms));\r\n }\r\n };\r\n /**\r\n * @return {!string}\r\n * @private\r\n */\r\n Connection.prototype.nextTransportId_ = function () {\r\n return 'c:' + this.id + ':' + this.connectionCount++;\r\n };\r\n Connection.prototype.disconnReceiver_ = function (conn) {\r\n var _this = this;\r\n return function (everConnected) {\r\n if (conn === _this.conn_) {\r\n _this.onConnectionLost_(everConnected);\r\n }\r\n else if (conn === _this.secondaryConn_) {\r\n _this.log_('Secondary connection lost.');\r\n _this.onSecondaryConnectionLost_();\r\n }\r\n else {\r\n _this.log_('closing an old connection');\r\n }\r\n };\r\n };\r\n Connection.prototype.connReceiver_ = function (conn) {\r\n var _this = this;\r\n return function (message) {\r\n if (_this.state_ != 2 /* DISCONNECTED */) {\r\n if (conn === _this.rx_) {\r\n _this.onPrimaryMessageReceived_(message);\r\n }\r\n else if (conn === _this.secondaryConn_) {\r\n _this.onSecondaryMessageReceived_(message);\r\n }\r\n else {\r\n _this.log_('message on old connection');\r\n }\r\n }\r\n };\r\n };\r\n /**\r\n *\r\n * @param {Object} dataMsg An arbitrary data message to be sent to the server\r\n */\r\n Connection.prototype.sendRequest = function (dataMsg) {\r\n // wrap in a data message envelope and send it on\r\n var msg = { t: 'd', d: dataMsg };\r\n this.sendData_(msg);\r\n };\r\n Connection.prototype.tryCleanupConnection = function () {\r\n if (this.tx_ === this.secondaryConn_ && this.rx_ === this.secondaryConn_) {\r\n this.log_('cleaning up and promoting a connection: ' + this.secondaryConn_.connId);\r\n this.conn_ = this.secondaryConn_;\r\n this.secondaryConn_ = null;\r\n // the server will shutdown the old connection\r\n }\r\n };\r\n Connection.prototype.onSecondaryControl_ = function (controlData) {\r\n if (MESSAGE_TYPE in controlData) {\r\n var cmd = controlData[MESSAGE_TYPE];\r\n if (cmd === SWITCH_ACK) {\r\n this.upgradeIfSecondaryHealthy_();\r\n }\r\n else if (cmd === CONTROL_RESET) {\r\n // Most likely the session wasn't valid. Abandon the switch attempt\r\n this.log_('Got a reset on secondary, closing it');\r\n this.secondaryConn_.close();\r\n // If we were already using this connection for something, than we need to fully close\r\n if (this.tx_ === this.secondaryConn_ ||\r\n this.rx_ === this.secondaryConn_) {\r\n this.close();\r\n }\r\n }\r\n else if (cmd === CONTROL_PONG) {\r\n this.log_('got pong on secondary.');\r\n this.secondaryResponsesRequired_--;\r\n this.upgradeIfSecondaryHealthy_();\r\n }\r\n }\r\n };\r\n Connection.prototype.onSecondaryMessageReceived_ = function (parsedData) {\r\n var layer = requireKey('t', parsedData);\r\n var data = requireKey('d', parsedData);\r\n if (layer == 'c') {\r\n this.onSecondaryControl_(data);\r\n }\r\n else if (layer == 'd') {\r\n // got a data message, but we're still second connection. Need to buffer it up\r\n this.pendingDataMessages.push(data);\r\n }\r\n else {\r\n throw new Error('Unknown protocol layer: ' + layer);\r\n }\r\n };\r\n Connection.prototype.upgradeIfSecondaryHealthy_ = function () {\r\n if (this.secondaryResponsesRequired_ <= 0) {\r\n this.log_('Secondary connection is healthy.');\r\n this.isHealthy_ = true;\r\n this.secondaryConn_.markConnectionHealthy();\r\n this.proceedWithUpgrade_();\r\n }\r\n else {\r\n // Send a ping to make sure the connection is healthy.\r\n this.log_('sending ping on secondary.');\r\n this.secondaryConn_.send({ t: 'c', d: { t: PING, d: {} } });\r\n }\r\n };\r\n Connection.prototype.proceedWithUpgrade_ = function () {\r\n // tell this connection to consider itself open\r\n this.secondaryConn_.start();\r\n // send ack\r\n this.log_('sending client ack on secondary');\r\n this.secondaryConn_.send({ t: 'c', d: { t: SWITCH_ACK, d: {} } });\r\n // send end packet on primary transport, switch to sending on this one\r\n // can receive on this one, buffer responses until end received on primary transport\r\n this.log_('Ending transmission on primary');\r\n this.conn_.send({ t: 'c', d: { t: END_TRANSMISSION, d: {} } });\r\n this.tx_ = this.secondaryConn_;\r\n this.tryCleanupConnection();\r\n };\r\n Connection.prototype.onPrimaryMessageReceived_ = function (parsedData) {\r\n // Must refer to parsedData properties in quotes, so closure doesn't touch them.\r\n var layer = requireKey('t', parsedData);\r\n var data = requireKey('d', parsedData);\r\n if (layer == 'c') {\r\n this.onControl_(data);\r\n }\r\n else if (layer == 'd') {\r\n this.onDataMessage_(data);\r\n }\r\n };\r\n Connection.prototype.onDataMessage_ = function (message) {\r\n this.onPrimaryResponse_();\r\n // We don't do anything with data messages, just kick them up a level\r\n this.onMessage_(message);\r\n };\r\n Connection.prototype.onPrimaryResponse_ = function () {\r\n if (!this.isHealthy_) {\r\n this.primaryResponsesRequired_--;\r\n if (this.primaryResponsesRequired_ <= 0) {\r\n this.log_('Primary connection is healthy.');\r\n this.isHealthy_ = true;\r\n this.conn_.markConnectionHealthy();\r\n }\r\n }\r\n };\r\n Connection.prototype.onControl_ = function (controlData) {\r\n var cmd = requireKey(MESSAGE_TYPE, controlData);\r\n if (MESSAGE_DATA in controlData) {\r\n var payload = controlData[MESSAGE_DATA];\r\n if (cmd === SERVER_HELLO) {\r\n this.onHandshake_(payload);\r\n }\r\n else if (cmd === END_TRANSMISSION) {\r\n this.log_('recvd end transmission on primary');\r\n this.rx_ = this.secondaryConn_;\r\n for (var i = 0; i < this.pendingDataMessages.length; ++i) {\r\n this.onDataMessage_(this.pendingDataMessages[i]);\r\n }\r\n this.pendingDataMessages = [];\r\n this.tryCleanupConnection();\r\n }\r\n else if (cmd === CONTROL_SHUTDOWN) {\r\n // This was previously the 'onKill' callback passed to the lower-level connection\r\n // payload in this case is the reason for the shutdown. Generally a human-readable error\r\n this.onConnectionShutdown_(payload);\r\n }\r\n else if (cmd === CONTROL_RESET) {\r\n // payload in this case is the host we should contact\r\n this.onReset_(payload);\r\n }\r\n else if (cmd === CONTROL_ERROR) {\r\n error('Server Error: ' + payload);\r\n }\r\n else if (cmd === CONTROL_PONG) {\r\n this.log_('got pong on primary.');\r\n this.onPrimaryResponse_();\r\n this.sendPingOnPrimaryIfNecessary_();\r\n }\r\n else {\r\n error('Unknown control packet command: ' + cmd);\r\n }\r\n }\r\n };\r\n /**\r\n *\r\n * @param {Object} handshake The handshake data returned from the server\r\n * @private\r\n */\r\n Connection.prototype.onHandshake_ = function (handshake) {\r\n var timestamp = handshake.ts;\r\n var version = handshake.v;\r\n var host = handshake.h;\r\n this.sessionId = handshake.s;\r\n this.repoInfo_.updateHost(host);\r\n // if we've already closed the connection, then don't bother trying to progress further\r\n if (this.state_ == 0 /* CONNECTING */) {\r\n this.conn_.start();\r\n this.onConnectionEstablished_(this.conn_, timestamp);\r\n if (PROTOCOL_VERSION !== version) {\r\n warn('Protocol version mismatch detected');\r\n }\r\n // TODO: do we want to upgrade? when? maybe a delay?\r\n this.tryStartUpgrade_();\r\n }\r\n };\r\n Connection.prototype.tryStartUpgrade_ = function () {\r\n var conn = this.transportManager_.upgradeTransport();\r\n if (conn) {\r\n this.startUpgrade_(conn);\r\n }\r\n };\r\n Connection.prototype.startUpgrade_ = function (conn) {\r\n var _this = this;\r\n this.secondaryConn_ = new conn(this.nextTransportId_(), this.repoInfo_, this.sessionId);\r\n // For certain transports (WebSockets), we need to send and receive several messages back and forth before we\r\n // can consider the transport healthy.\r\n this.secondaryResponsesRequired_ =\r\n conn['responsesRequiredToBeHealthy'] || 0;\r\n var onMessage = this.connReceiver_(this.secondaryConn_);\r\n var onDisconnect = this.disconnReceiver_(this.secondaryConn_);\r\n this.secondaryConn_.open(onMessage, onDisconnect);\r\n // If we haven't successfully upgraded after UPGRADE_TIMEOUT, give up and kill the secondary.\r\n setTimeoutNonBlocking(function () {\r\n if (_this.secondaryConn_) {\r\n _this.log_('Timed out trying to upgrade.');\r\n _this.secondaryConn_.close();\r\n }\r\n }, Math.floor(UPGRADE_TIMEOUT));\r\n };\r\n Connection.prototype.onReset_ = function (host) {\r\n this.log_('Reset packet received. New host: ' + host);\r\n this.repoInfo_.updateHost(host);\r\n // TODO: if we're already \"connected\", we need to trigger a disconnect at the next layer up.\r\n // We don't currently support resets after the connection has already been established\r\n if (this.state_ === 1 /* CONNECTED */) {\r\n this.close();\r\n }\r\n else {\r\n // Close whatever connections we have open and start again.\r\n this.closeConnections_();\r\n this.start_();\r\n }\r\n };\r\n Connection.prototype.onConnectionEstablished_ = function (conn, timestamp) {\r\n var _this = this;\r\n this.log_('Realtime connection established.');\r\n this.conn_ = conn;\r\n this.state_ = 1 /* CONNECTED */;\r\n if (this.onReady_) {\r\n this.onReady_(timestamp, this.sessionId);\r\n this.onReady_ = null;\r\n }\r\n // If after 5 seconds we haven't sent enough requests to the server to get the connection healthy,\r\n // send some pings.\r\n if (this.primaryResponsesRequired_ === 0) {\r\n this.log_('Primary connection is healthy.');\r\n this.isHealthy_ = true;\r\n }\r\n else {\r\n setTimeoutNonBlocking(function () {\r\n _this.sendPingOnPrimaryIfNecessary_();\r\n }, Math.floor(DELAY_BEFORE_SENDING_EXTRA_REQUESTS));\r\n }\r\n };\r\n Connection.prototype.sendPingOnPrimaryIfNecessary_ = function () {\r\n // If the connection isn't considered healthy yet, we'll send a noop ping packet request.\r\n if (!this.isHealthy_ && this.state_ === 1 /* CONNECTED */) {\r\n this.log_('sending ping on primary.');\r\n this.sendData_({ t: 'c', d: { t: PING, d: {} } });\r\n }\r\n };\r\n Connection.prototype.onSecondaryConnectionLost_ = function () {\r\n var conn = this.secondaryConn_;\r\n this.secondaryConn_ = null;\r\n if (this.tx_ === conn || this.rx_ === conn) {\r\n // we are relying on this connection already in some capacity. Therefore, a failure is real\r\n this.close();\r\n }\r\n };\r\n /**\r\n *\r\n * @param {boolean} everConnected Whether or not the connection ever reached a server. Used to determine if\r\n * we should flush the host cache\r\n * @private\r\n */\r\n Connection.prototype.onConnectionLost_ = function (everConnected) {\r\n this.conn_ = null;\r\n // NOTE: IF you're seeing a Firefox error for this line, I think it might be because it's getting\r\n // called on window close and RealtimeState.CONNECTING is no longer defined. Just a guess.\r\n if (!everConnected && this.state_ === 0 /* CONNECTING */) {\r\n this.log_('Realtime connection failed.');\r\n // Since we failed to connect at all, clear any cached entry for this namespace in case the machine went away\r\n if (this.repoInfo_.isCacheableHost()) {\r\n PersistentStorage.remove('host:' + this.repoInfo_.host);\r\n // reset the internal host to what we would show the user, i.e. .firebaseio.com\r\n this.repoInfo_.internalHost = this.repoInfo_.host;\r\n }\r\n }\r\n else if (this.state_ === 1 /* CONNECTED */) {\r\n this.log_('Realtime connection lost.');\r\n }\r\n this.close();\r\n };\r\n /**\r\n *\r\n * @param {string} reason\r\n * @private\r\n */\r\n Connection.prototype.onConnectionShutdown_ = function (reason) {\r\n this.log_('Connection shutdown command received. Shutting down...');\r\n if (this.onKill_) {\r\n this.onKill_(reason);\r\n this.onKill_ = null;\r\n }\r\n // We intentionally don't want to fire onDisconnect (kill is a different case),\r\n // so clear the callback.\r\n this.onDisconnect_ = null;\r\n this.close();\r\n };\r\n Connection.prototype.sendData_ = function (data) {\r\n if (this.state_ !== 1 /* CONNECTED */) {\r\n throw 'Connection is not connected';\r\n }\r\n else {\r\n this.tx_.send(data);\r\n }\r\n };\r\n /**\r\n * Cleans up this connection, calling the appropriate callbacks\r\n */\r\n Connection.prototype.close = function () {\r\n if (this.state_ !== 2 /* DISCONNECTED */) {\r\n this.log_('Closing realtime connection.');\r\n this.state_ = 2 /* DISCONNECTED */;\r\n this.closeConnections_();\r\n if (this.onDisconnect_) {\r\n this.onDisconnect_();\r\n this.onDisconnect_ = null;\r\n }\r\n }\r\n };\r\n /**\r\n *\r\n * @private\r\n */\r\n Connection.prototype.closeConnections_ = function () {\r\n this.log_('Shutting down all connections');\r\n if (this.conn_) {\r\n this.conn_.close();\r\n this.conn_ = null;\r\n }\r\n if (this.secondaryConn_) {\r\n this.secondaryConn_.close();\r\n this.secondaryConn_ = null;\r\n }\r\n if (this.healthyTimeout_) {\r\n clearTimeout(this.healthyTimeout_);\r\n this.healthyTimeout_ = null;\r\n }\r\n };\r\n return Connection;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Interface defining the set of actions that can be performed against the Firebase server\r\n * (basically corresponds to our wire protocol).\r\n *\r\n * @interface\r\n */\r\nvar ServerActions = /** @class */ (function () {\r\n function ServerActions() {\r\n }\r\n /**\r\n * @param {string} pathString\r\n * @param {*} data\r\n * @param {function(string, string)=} onComplete\r\n * @param {string=} hash\r\n */\r\n ServerActions.prototype.put = function (pathString, data, onComplete, hash) { };\r\n /**\r\n * @param {string} pathString\r\n * @param {*} data\r\n * @param {function(string, ?string)} onComplete\r\n * @param {string=} hash\r\n */\r\n ServerActions.prototype.merge = function (pathString, data, onComplete, hash) { };\r\n /**\r\n * Refreshes the auth token for the current connection.\r\n * @param {string} token The authentication token\r\n */\r\n ServerActions.prototype.refreshAuthToken = function (token) { };\r\n /**\r\n * @param {string} pathString\r\n * @param {*} data\r\n * @param {function(string, string)=} onComplete\r\n */\r\n ServerActions.prototype.onDisconnectPut = function (pathString, data, onComplete) { };\r\n /**\r\n * @param {string} pathString\r\n * @param {*} data\r\n * @param {function(string, string)=} onComplete\r\n */\r\n ServerActions.prototype.onDisconnectMerge = function (pathString, data, onComplete) { };\r\n /**\r\n * @param {string} pathString\r\n * @param {function(string, string)=} onComplete\r\n */\r\n ServerActions.prototype.onDisconnectCancel = function (pathString, onComplete) { };\r\n /**\r\n * @param {Object.} stats\r\n */\r\n ServerActions.prototype.reportStats = function (stats) { };\r\n return ServerActions;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar RECONNECT_MIN_DELAY = 1000;\r\nvar RECONNECT_MAX_DELAY_DEFAULT = 60 * 5 * 1000; // 5 minutes in milliseconds (Case: 1858)\r\nvar RECONNECT_MAX_DELAY_FOR_ADMINS = 30 * 1000; // 30 seconds for admin clients (likely to be a backend server)\r\nvar RECONNECT_DELAY_MULTIPLIER = 1.3;\r\nvar RECONNECT_DELAY_RESET_TIMEOUT = 30000; // Reset delay back to MIN_DELAY after being connected for 30sec.\r\nvar SERVER_KILL_INTERRUPT_REASON = 'server_kill';\r\n// If auth fails repeatedly, we'll assume something is wrong and log a warning / back off.\r\nvar INVALID_AUTH_TOKEN_THRESHOLD = 3;\r\n/**\r\n * Firebase connection. Abstracts wire protocol and handles reconnecting.\r\n *\r\n * NOTE: All JSON objects sent to the realtime connection must have property names enclosed\r\n * in quotes to make sure the closure compiler does not minify them.\r\n */\r\nvar PersistentConnection = /** @class */ (function (_super) {\r\n tslib_1.__extends(PersistentConnection, _super);\r\n /**\r\n * @implements {ServerActions}\r\n * @param {!RepoInfo} repoInfo_ Data about the namespace we are connecting to\r\n * @param {function(string, *, boolean, ?number)} onDataUpdate_ A callback for new data from the server\r\n * @param onConnectStatus_\r\n * @param onServerInfoUpdate_\r\n * @param authTokenProvider_\r\n * @param authOverride_\r\n */\r\n function PersistentConnection(repoInfo_, onDataUpdate_, onConnectStatus_, onServerInfoUpdate_, authTokenProvider_, authOverride_) {\r\n var _this = _super.call(this) || this;\r\n _this.repoInfo_ = repoInfo_;\r\n _this.onDataUpdate_ = onDataUpdate_;\r\n _this.onConnectStatus_ = onConnectStatus_;\r\n _this.onServerInfoUpdate_ = onServerInfoUpdate_;\r\n _this.authTokenProvider_ = authTokenProvider_;\r\n _this.authOverride_ = authOverride_;\r\n // Used for diagnostic logging.\r\n _this.id = PersistentConnection.nextPersistentConnectionId_++;\r\n _this.log_ = logWrapper('p:' + _this.id + ':');\r\n /** @private {Object} */\r\n _this.interruptReasons_ = {};\r\n _this.listens_ = {};\r\n _this.outstandingPuts_ = [];\r\n _this.outstandingPutCount_ = 0;\r\n _this.onDisconnectRequestQueue_ = [];\r\n _this.connected_ = false;\r\n _this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n _this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_DEFAULT;\r\n _this.securityDebugCallback_ = null;\r\n _this.lastSessionId = null;\r\n /** @private {number|null} */\r\n _this.establishConnectionTimer_ = null;\r\n /** @private {boolean} */\r\n _this.visible_ = false;\r\n // Before we get connected, we keep a queue of pending messages to send.\r\n _this.requestCBHash_ = {};\r\n _this.requestNumber_ = 0;\r\n /** @private {?{\r\n * sendRequest(Object),\r\n * close()\r\n * }} */\r\n _this.realtime_ = null;\r\n /** @private {string|null} */\r\n _this.authToken_ = null;\r\n _this.forceTokenRefresh_ = false;\r\n _this.invalidAuthTokenCount_ = 0;\r\n _this.firstConnection_ = true;\r\n _this.lastConnectionAttemptTime_ = null;\r\n _this.lastConnectionEstablishedTime_ = null;\r\n if (authOverride_ && !util.isNodeSdk()) {\r\n throw new Error('Auth override specified in options, but not supported on non Node.js platforms');\r\n }\r\n _this.scheduleConnect_(0);\r\n VisibilityMonitor.getInstance().on('visible', _this.onVisible_, _this);\r\n if (repoInfo_.host.indexOf('fblocal') === -1) {\r\n OnlineMonitor.getInstance().on('online', _this.onOnline_, _this);\r\n }\r\n return _this;\r\n }\r\n /**\r\n * @param {!string} action\r\n * @param {*} body\r\n * @param {function(*)=} onResponse\r\n * @protected\r\n */\r\n PersistentConnection.prototype.sendRequest = function (action, body, onResponse) {\r\n var curReqNum = ++this.requestNumber_;\r\n var msg = { r: curReqNum, a: action, b: body };\r\n this.log_(util.stringify(msg));\r\n util.assert(this.connected_, \"sendRequest call when we're not connected not allowed.\");\r\n this.realtime_.sendRequest(msg);\r\n if (onResponse) {\r\n this.requestCBHash_[curReqNum] = onResponse;\r\n }\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n PersistentConnection.prototype.listen = function (query, currentHashFn, tag, onComplete) {\r\n var queryId = query.queryIdentifier();\r\n var pathString = query.path.toString();\r\n this.log_('Listen called for ' + pathString + ' ' + queryId);\r\n this.listens_[pathString] = this.listens_[pathString] || {};\r\n util.assert(query.getQueryParams().isDefault() ||\r\n !query.getQueryParams().loadsAllData(), 'listen() called for non-default but complete query');\r\n util.assert(!this.listens_[pathString][queryId], 'listen() called twice for same path/queryId.');\r\n var listenSpec = {\r\n onComplete: onComplete,\r\n hashFn: currentHashFn,\r\n query: query,\r\n tag: tag\r\n };\r\n this.listens_[pathString][queryId] = listenSpec;\r\n if (this.connected_) {\r\n this.sendListen_(listenSpec);\r\n }\r\n };\r\n /**\r\n * @param {!{onComplete(),\r\n * hashFn():!string,\r\n * query: !Query,\r\n * tag: ?number}} listenSpec\r\n * @private\r\n */\r\n PersistentConnection.prototype.sendListen_ = function (listenSpec) {\r\n var _this = this;\r\n var query = listenSpec.query;\r\n var pathString = query.path.toString();\r\n var queryId = query.queryIdentifier();\r\n this.log_('Listen on ' + pathString + ' for ' + queryId);\r\n var req = { /*path*/ p: pathString };\r\n var action = 'q';\r\n // Only bother to send query if it's non-default.\r\n if (listenSpec.tag) {\r\n req['q'] = query.queryObject();\r\n req['t'] = listenSpec.tag;\r\n }\r\n req[ /*hash*/'h'] = listenSpec.hashFn();\r\n this.sendRequest(action, req, function (message) {\r\n var payload = message[ /*data*/'d'];\r\n var status = message[ /*status*/'s'];\r\n // print warnings in any case...\r\n PersistentConnection.warnOnListenWarnings_(payload, query);\r\n var currentListenSpec = _this.listens_[pathString] && _this.listens_[pathString][queryId];\r\n // only trigger actions if the listen hasn't been removed and readded\r\n if (currentListenSpec === listenSpec) {\r\n _this.log_('listen response', message);\r\n if (status !== 'ok') {\r\n _this.removeListen_(pathString, queryId);\r\n }\r\n if (listenSpec.onComplete) {\r\n listenSpec.onComplete(status, payload);\r\n }\r\n }\r\n });\r\n };\r\n /**\r\n * @param {*} payload\r\n * @param {!Query} query\r\n * @private\r\n */\r\n PersistentConnection.warnOnListenWarnings_ = function (payload, query) {\r\n if (payload && typeof payload === 'object' && util.contains(payload, 'w')) {\r\n var warnings = util.safeGet(payload, 'w');\r\n if (Array.isArray(warnings) && ~warnings.indexOf('no_index')) {\r\n var indexSpec = '\".indexOn\": \"' +\r\n query\r\n .getQueryParams()\r\n .getIndex()\r\n .toString() +\r\n '\"';\r\n var indexPath = query.path.toString();\r\n warn(\"Using an unspecified index. Your data will be downloaded and \" +\r\n (\"filtered on the client. Consider adding \" + indexSpec + \" at \") +\r\n (indexPath + \" to your security rules for better performance.\"));\r\n }\r\n }\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n PersistentConnection.prototype.refreshAuthToken = function (token) {\r\n this.authToken_ = token;\r\n this.log_('Auth token refreshed');\r\n if (this.authToken_) {\r\n this.tryAuth();\r\n }\r\n else {\r\n //If we're connected we want to let the server know to unauthenticate us. If we're not connected, simply delete\r\n //the credential so we dont become authenticated next time we connect.\r\n if (this.connected_) {\r\n this.sendRequest('unauth', {}, function () { });\r\n }\r\n }\r\n this.reduceReconnectDelayIfAdminCredential_(token);\r\n };\r\n /**\r\n * @param {!string} credential\r\n * @private\r\n */\r\n PersistentConnection.prototype.reduceReconnectDelayIfAdminCredential_ = function (credential) {\r\n // NOTE: This isn't intended to be bulletproof (a malicious developer can always just modify the client).\r\n // Additionally, we don't bother resetting the max delay back to the default if auth fails / expires.\r\n var isFirebaseSecret = credential && credential.length === 40;\r\n if (isFirebaseSecret || util.isAdmin(credential)) {\r\n this.log_('Admin auth credential detected. Reducing max reconnect time.');\r\n this.maxReconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n }\r\n };\r\n /**\r\n * Attempts to authenticate with the given credentials. If the authentication attempt fails, it's triggered like\r\n * a auth revoked (the connection is closed).\r\n */\r\n PersistentConnection.prototype.tryAuth = function () {\r\n var _this = this;\r\n if (this.connected_ && this.authToken_) {\r\n var token_1 = this.authToken_;\r\n var authMethod = util.isValidFormat(token_1) ? 'auth' : 'gauth';\r\n var requestData = { cred: token_1 };\r\n if (this.authOverride_ === null) {\r\n requestData['noauth'] = true;\r\n }\r\n else if (typeof this.authOverride_ === 'object') {\r\n requestData['authvar'] = this.authOverride_;\r\n }\r\n this.sendRequest(authMethod, requestData, function (res) {\r\n var status = res[ /*status*/'s'];\r\n var data = res[ /*data*/'d'] || 'error';\r\n if (_this.authToken_ === token_1) {\r\n if (status === 'ok') {\r\n _this.invalidAuthTokenCount_ = 0;\r\n }\r\n else {\r\n // Triggers reconnect and force refresh for auth token\r\n _this.onAuthRevoked_(status, data);\r\n }\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n PersistentConnection.prototype.unlisten = function (query, tag) {\r\n var pathString = query.path.toString();\r\n var queryId = query.queryIdentifier();\r\n this.log_('Unlisten called for ' + pathString + ' ' + queryId);\r\n util.assert(query.getQueryParams().isDefault() ||\r\n !query.getQueryParams().loadsAllData(), 'unlisten() called for non-default but complete query');\r\n var listen = this.removeListen_(pathString, queryId);\r\n if (listen && this.connected_) {\r\n this.sendUnlisten_(pathString, queryId, query.queryObject(), tag);\r\n }\r\n };\r\n PersistentConnection.prototype.sendUnlisten_ = function (pathString, queryId, queryObj, tag) {\r\n this.log_('Unlisten on ' + pathString + ' for ' + queryId);\r\n var req = { /*path*/ p: pathString };\r\n var action = 'n';\r\n // Only bother sending queryId if it's non-default.\r\n if (tag) {\r\n req['q'] = queryObj;\r\n req['t'] = tag;\r\n }\r\n this.sendRequest(action, req);\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n PersistentConnection.prototype.onDisconnectPut = function (pathString, data, onComplete) {\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('o', pathString, data, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString: pathString,\r\n action: 'o',\r\n data: data,\r\n onComplete: onComplete\r\n });\r\n }\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n PersistentConnection.prototype.onDisconnectMerge = function (pathString, data, onComplete) {\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('om', pathString, data, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString: pathString,\r\n action: 'om',\r\n data: data,\r\n onComplete: onComplete\r\n });\r\n }\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n PersistentConnection.prototype.onDisconnectCancel = function (pathString, onComplete) {\r\n if (this.connected_) {\r\n this.sendOnDisconnect_('oc', pathString, null, onComplete);\r\n }\r\n else {\r\n this.onDisconnectRequestQueue_.push({\r\n pathString: pathString,\r\n action: 'oc',\r\n data: null,\r\n onComplete: onComplete\r\n });\r\n }\r\n };\r\n PersistentConnection.prototype.sendOnDisconnect_ = function (action, pathString, data, onComplete) {\r\n var request = { /*path*/ p: pathString, /*data*/ d: data };\r\n this.log_('onDisconnect ' + action, request);\r\n this.sendRequest(action, request, function (response) {\r\n if (onComplete) {\r\n setTimeout(function () {\r\n onComplete(response[ /*status*/'s'], response[ /* data */'d']);\r\n }, Math.floor(0));\r\n }\r\n });\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n PersistentConnection.prototype.put = function (pathString, data, onComplete, hash) {\r\n this.putInternal('p', pathString, data, onComplete, hash);\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n PersistentConnection.prototype.merge = function (pathString, data, onComplete, hash) {\r\n this.putInternal('m', pathString, data, onComplete, hash);\r\n };\r\n PersistentConnection.prototype.putInternal = function (action, pathString, data, onComplete, hash) {\r\n var request = {\r\n /*path*/ p: pathString,\r\n /*data*/ d: data\r\n };\r\n if (hash !== undefined)\r\n request[ /*hash*/'h'] = hash;\r\n // TODO: Only keep track of the most recent put for a given path?\r\n this.outstandingPuts_.push({\r\n action: action,\r\n request: request,\r\n onComplete: onComplete\r\n });\r\n this.outstandingPutCount_++;\r\n var index = this.outstandingPuts_.length - 1;\r\n if (this.connected_) {\r\n this.sendPut_(index);\r\n }\r\n else {\r\n this.log_('Buffering put: ' + pathString);\r\n }\r\n };\r\n PersistentConnection.prototype.sendPut_ = function (index) {\r\n var _this = this;\r\n var action = this.outstandingPuts_[index].action;\r\n var request = this.outstandingPuts_[index].request;\r\n var onComplete = this.outstandingPuts_[index].onComplete;\r\n this.outstandingPuts_[index].queued = this.connected_;\r\n this.sendRequest(action, request, function (message) {\r\n _this.log_(action + ' response', message);\r\n delete _this.outstandingPuts_[index];\r\n _this.outstandingPutCount_--;\r\n // Clean up array occasionally.\r\n if (_this.outstandingPutCount_ === 0) {\r\n _this.outstandingPuts_ = [];\r\n }\r\n if (onComplete)\r\n onComplete(message[ /*status*/'s'], message[ /* data */'d']);\r\n });\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n PersistentConnection.prototype.reportStats = function (stats) {\r\n var _this = this;\r\n // If we're not connected, we just drop the stats.\r\n if (this.connected_) {\r\n var request = { /*counters*/ c: stats };\r\n this.log_('reportStats', request);\r\n this.sendRequest(/*stats*/ 's', request, function (result) {\r\n var status = result[ /*status*/'s'];\r\n if (status !== 'ok') {\r\n var errorReason = result[ /* data */'d'];\r\n _this.log_('reportStats', 'Error sending stats: ' + errorReason);\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * @param {*} message\r\n * @private\r\n */\r\n PersistentConnection.prototype.onDataMessage_ = function (message) {\r\n if ('r' in message) {\r\n // this is a response\r\n this.log_('from server: ' + util.stringify(message));\r\n var reqNum = message['r'];\r\n var onResponse = this.requestCBHash_[reqNum];\r\n if (onResponse) {\r\n delete this.requestCBHash_[reqNum];\r\n onResponse(message[ /*body*/'b']);\r\n }\r\n }\r\n else if ('error' in message) {\r\n throw 'A server-side error has occurred: ' + message['error'];\r\n }\r\n else if ('a' in message) {\r\n // a and b are action and body, respectively\r\n this.onDataPush_(message['a'], message['b']);\r\n }\r\n };\r\n PersistentConnection.prototype.onDataPush_ = function (action, body) {\r\n this.log_('handleServerMessage', action, body);\r\n if (action === 'd')\r\n this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n /*isMerge*/ false, body['t']);\r\n else if (action === 'm')\r\n this.onDataUpdate_(body[ /*path*/'p'], body[ /*data*/'d'], \r\n /*isMerge=*/ true, body['t']);\r\n else if (action === 'c')\r\n this.onListenRevoked_(body[ /*path*/'p'], body[ /*query*/'q']);\r\n else if (action === 'ac')\r\n this.onAuthRevoked_(body[ /*status code*/'s'], body[ /* explanation */'d']);\r\n else if (action === 'sd')\r\n this.onSecurityDebugPacket_(body);\r\n else\r\n error('Unrecognized action received from server: ' +\r\n util.stringify(action) +\r\n '\\nAre you using the latest client?');\r\n };\r\n PersistentConnection.prototype.onReady_ = function (timestamp, sessionId) {\r\n this.log_('connection ready');\r\n this.connected_ = true;\r\n this.lastConnectionEstablishedTime_ = new Date().getTime();\r\n this.handleTimestamp_(timestamp);\r\n this.lastSessionId = sessionId;\r\n if (this.firstConnection_) {\r\n this.sendConnectStats_();\r\n }\r\n this.restoreState_();\r\n this.firstConnection_ = false;\r\n this.onConnectStatus_(true);\r\n };\r\n PersistentConnection.prototype.scheduleConnect_ = function (timeout) {\r\n var _this = this;\r\n util.assert(!this.realtime_, \"Scheduling a connect when we're already connected/ing?\");\r\n if (this.establishConnectionTimer_) {\r\n clearTimeout(this.establishConnectionTimer_);\r\n }\r\n // NOTE: Even when timeout is 0, it's important to do a setTimeout to work around an infuriating \"Security Error\" in\r\n // Firefox when trying to write to our long-polling iframe in some scenarios (e.g. Forge or our unit tests).\r\n this.establishConnectionTimer_ = setTimeout(function () {\r\n _this.establishConnectionTimer_ = null;\r\n _this.establishConnection_();\r\n }, Math.floor(timeout));\r\n };\r\n /**\r\n * @param {boolean} visible\r\n * @private\r\n */\r\n PersistentConnection.prototype.onVisible_ = function (visible) {\r\n // NOTE: Tabbing away and back to a window will defeat our reconnect backoff, but I think that's fine.\r\n if (visible &&\r\n !this.visible_ &&\r\n this.reconnectDelay_ === this.maxReconnectDelay_) {\r\n this.log_('Window became visible. Reducing delay.');\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n this.visible_ = visible;\r\n };\r\n PersistentConnection.prototype.onOnline_ = function (online) {\r\n if (online) {\r\n this.log_('Browser went online.');\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n else {\r\n this.log_('Browser went offline. Killing connection.');\r\n if (this.realtime_) {\r\n this.realtime_.close();\r\n }\r\n }\r\n };\r\n PersistentConnection.prototype.onRealtimeDisconnect_ = function () {\r\n this.log_('data client disconnected');\r\n this.connected_ = false;\r\n this.realtime_ = null;\r\n // Since we don't know if our sent transactions succeeded or not, we need to cancel them.\r\n this.cancelSentTransactions_();\r\n // Clear out the pending requests.\r\n this.requestCBHash_ = {};\r\n if (this.shouldReconnect_()) {\r\n if (!this.visible_) {\r\n this.log_(\"Window isn't visible. Delaying reconnect.\");\r\n this.reconnectDelay_ = this.maxReconnectDelay_;\r\n this.lastConnectionAttemptTime_ = new Date().getTime();\r\n }\r\n else if (this.lastConnectionEstablishedTime_) {\r\n // If we've been connected long enough, reset reconnect delay to minimum.\r\n var timeSinceLastConnectSucceeded = new Date().getTime() - this.lastConnectionEstablishedTime_;\r\n if (timeSinceLastConnectSucceeded > RECONNECT_DELAY_RESET_TIMEOUT)\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n this.lastConnectionEstablishedTime_ = null;\r\n }\r\n var timeSinceLastConnectAttempt = new Date().getTime() - this.lastConnectionAttemptTime_;\r\n var reconnectDelay = Math.max(0, this.reconnectDelay_ - timeSinceLastConnectAttempt);\r\n reconnectDelay = Math.random() * reconnectDelay;\r\n this.log_('Trying to reconnect in ' + reconnectDelay + 'ms');\r\n this.scheduleConnect_(reconnectDelay);\r\n // Adjust reconnect delay for next time.\r\n this.reconnectDelay_ = Math.min(this.maxReconnectDelay_, this.reconnectDelay_ * RECONNECT_DELAY_MULTIPLIER);\r\n }\r\n this.onConnectStatus_(false);\r\n };\r\n PersistentConnection.prototype.establishConnection_ = function () {\r\n if (this.shouldReconnect_()) {\r\n this.log_('Making a connection attempt');\r\n this.lastConnectionAttemptTime_ = new Date().getTime();\r\n this.lastConnectionEstablishedTime_ = null;\r\n var onDataMessage_1 = this.onDataMessage_.bind(this);\r\n var onReady_1 = this.onReady_.bind(this);\r\n var onDisconnect_1 = this.onRealtimeDisconnect_.bind(this);\r\n var connId_1 = this.id + ':' + PersistentConnection.nextConnectionId_++;\r\n var self_1 = this;\r\n var lastSessionId_1 = this.lastSessionId;\r\n var canceled_1 = false;\r\n var connection_1 = null;\r\n var closeFn_1 = function () {\r\n if (connection_1) {\r\n connection_1.close();\r\n }\r\n else {\r\n canceled_1 = true;\r\n onDisconnect_1();\r\n }\r\n };\r\n var sendRequestFn = function (msg) {\r\n util.assert(connection_1, \"sendRequest call when we're not connected not allowed.\");\r\n connection_1.sendRequest(msg);\r\n };\r\n this.realtime_ = {\r\n close: closeFn_1,\r\n sendRequest: sendRequestFn\r\n };\r\n var forceRefresh = this.forceTokenRefresh_;\r\n this.forceTokenRefresh_ = false;\r\n // First fetch auth token, and establish connection after fetching the token was successful\r\n this.authTokenProvider_\r\n .getToken(forceRefresh)\r\n .then(function (result) {\r\n if (!canceled_1) {\r\n log('getToken() completed. Creating connection.');\r\n self_1.authToken_ = result && result.accessToken;\r\n connection_1 = new Connection(connId_1, self_1.repoInfo_, onDataMessage_1, onReady_1, onDisconnect_1, \r\n /* onKill= */ function (reason) {\r\n warn(reason + ' (' + self_1.repoInfo_.toString() + ')');\r\n self_1.interrupt(SERVER_KILL_INTERRUPT_REASON);\r\n }, lastSessionId_1);\r\n }\r\n else {\r\n log('getToken() completed but was canceled');\r\n }\r\n })\r\n .then(null, function (error$$1) {\r\n self_1.log_('Failed to get token: ' + error$$1);\r\n if (!canceled_1) {\r\n if (util.CONSTANTS.NODE_ADMIN) {\r\n // This may be a critical error for the Admin Node.js SDK, so log a warning.\r\n // But getToken() may also just have temporarily failed, so we still want to\r\n // continue retrying.\r\n warn(error$$1);\r\n }\r\n closeFn_1();\r\n }\r\n });\r\n }\r\n };\r\n /**\r\n * @param {string} reason\r\n */\r\n PersistentConnection.prototype.interrupt = function (reason) {\r\n log('Interrupting connection for reason: ' + reason);\r\n this.interruptReasons_[reason] = true;\r\n if (this.realtime_) {\r\n this.realtime_.close();\r\n }\r\n else {\r\n if (this.establishConnectionTimer_) {\r\n clearTimeout(this.establishConnectionTimer_);\r\n this.establishConnectionTimer_ = null;\r\n }\r\n if (this.connected_) {\r\n this.onRealtimeDisconnect_();\r\n }\r\n }\r\n };\r\n /**\r\n * @param {string} reason\r\n */\r\n PersistentConnection.prototype.resume = function (reason) {\r\n log('Resuming connection for reason: ' + reason);\r\n delete this.interruptReasons_[reason];\r\n if (util.isEmpty(this.interruptReasons_)) {\r\n this.reconnectDelay_ = RECONNECT_MIN_DELAY;\r\n if (!this.realtime_) {\r\n this.scheduleConnect_(0);\r\n }\r\n }\r\n };\r\n PersistentConnection.prototype.handleTimestamp_ = function (timestamp) {\r\n var delta = timestamp - new Date().getTime();\r\n this.onServerInfoUpdate_({ serverTimeOffset: delta });\r\n };\r\n PersistentConnection.prototype.cancelSentTransactions_ = function () {\r\n for (var i = 0; i < this.outstandingPuts_.length; i++) {\r\n var put = this.outstandingPuts_[i];\r\n if (put && /*hash*/ 'h' in put.request && put.queued) {\r\n if (put.onComplete)\r\n put.onComplete('disconnect');\r\n delete this.outstandingPuts_[i];\r\n this.outstandingPutCount_--;\r\n }\r\n }\r\n // Clean up array occasionally.\r\n if (this.outstandingPutCount_ === 0)\r\n this.outstandingPuts_ = [];\r\n };\r\n /**\r\n * @param {!string} pathString\r\n * @param {Array.<*>=} query\r\n * @private\r\n */\r\n PersistentConnection.prototype.onListenRevoked_ = function (pathString, query) {\r\n // Remove the listen and manufacture a \"permission_denied\" error for the failed listen.\r\n var queryId;\r\n if (!query) {\r\n queryId = 'default';\r\n }\r\n else {\r\n queryId = query.map(function (q) { return ObjectToUniqueKey(q); }).join('$');\r\n }\r\n var listen = this.removeListen_(pathString, queryId);\r\n if (listen && listen.onComplete)\r\n listen.onComplete('permission_denied');\r\n };\r\n /**\r\n * @param {!string} pathString\r\n * @param {!string} queryId\r\n * @return {{queries:Array., onComplete:function(string)}}\r\n * @private\r\n */\r\n PersistentConnection.prototype.removeListen_ = function (pathString, queryId) {\r\n var normalizedPathString = new Path(pathString).toString(); // normalize path.\r\n var listen;\r\n if (this.listens_[normalizedPathString] !== undefined) {\r\n listen = this.listens_[normalizedPathString][queryId];\r\n delete this.listens_[normalizedPathString][queryId];\r\n if (util.getCount(this.listens_[normalizedPathString]) === 0) {\r\n delete this.listens_[normalizedPathString];\r\n }\r\n }\r\n else {\r\n // all listens for this path has already been removed\r\n listen = undefined;\r\n }\r\n return listen;\r\n };\r\n PersistentConnection.prototype.onAuthRevoked_ = function (statusCode, explanation) {\r\n log('Auth token revoked: ' + statusCode + '/' + explanation);\r\n this.authToken_ = null;\r\n this.forceTokenRefresh_ = true;\r\n this.realtime_.close();\r\n if (statusCode === 'invalid_token' || statusCode === 'permission_denied') {\r\n // We'll wait a couple times before logging the warning / increasing the\r\n // retry period since oauth tokens will report as \"invalid\" if they're\r\n // just expired. Plus there may be transient issues that resolve themselves.\r\n this.invalidAuthTokenCount_++;\r\n if (this.invalidAuthTokenCount_ >= INVALID_AUTH_TOKEN_THRESHOLD) {\r\n // Set a long reconnect delay because recovery is unlikely\r\n this.reconnectDelay_ = RECONNECT_MAX_DELAY_FOR_ADMINS;\r\n // Notify the auth token provider that the token is invalid, which will log\r\n // a warning\r\n this.authTokenProvider_.notifyForInvalidToken();\r\n }\r\n }\r\n };\r\n PersistentConnection.prototype.onSecurityDebugPacket_ = function (body) {\r\n if (this.securityDebugCallback_) {\r\n this.securityDebugCallback_(body);\r\n }\r\n else {\r\n if ('msg' in body) {\r\n console.log('FIREBASE: ' + body['msg'].replace('\\n', '\\nFIREBASE: '));\r\n }\r\n }\r\n };\r\n PersistentConnection.prototype.restoreState_ = function () {\r\n var _this = this;\r\n //Re-authenticate ourselves if we have a credential stored.\r\n this.tryAuth();\r\n // Puts depend on having received the corresponding data update from the server before they complete, so we must\r\n // make sure to send listens before puts.\r\n util.forEach(this.listens_, function (pathString, queries) {\r\n util.forEach(queries, function (key, listenSpec) {\r\n _this.sendListen_(listenSpec);\r\n });\r\n });\r\n for (var i = 0; i < this.outstandingPuts_.length; i++) {\r\n if (this.outstandingPuts_[i])\r\n this.sendPut_(i);\r\n }\r\n while (this.onDisconnectRequestQueue_.length) {\r\n var request = this.onDisconnectRequestQueue_.shift();\r\n this.sendOnDisconnect_(request.action, request.pathString, request.data, request.onComplete);\r\n }\r\n };\r\n /**\r\n * Sends client stats for first connection\r\n * @private\r\n */\r\n PersistentConnection.prototype.sendConnectStats_ = function () {\r\n var stats = {};\r\n var clientName = 'js';\r\n if (util.CONSTANTS.NODE_ADMIN) {\r\n clientName = 'admin_node';\r\n }\r\n else if (util.CONSTANTS.NODE_CLIENT) {\r\n clientName = 'node';\r\n }\r\n stats['sdk.' + clientName + '.' + firebase.SDK_VERSION.replace(/\\./g, '-')] = 1;\r\n if (util.isMobileCordova()) {\r\n stats['framework.cordova'] = 1;\r\n }\r\n else if (util.isReactNative()) {\r\n stats['framework.reactnative'] = 1;\r\n }\r\n this.reportStats(stats);\r\n };\r\n /**\r\n * @return {boolean}\r\n * @private\r\n */\r\n PersistentConnection.prototype.shouldReconnect_ = function () {\r\n var online = OnlineMonitor.getInstance().currentlyOnline();\r\n return util.isEmpty(this.interruptReasons_) && online;\r\n };\r\n /**\r\n * @private\r\n */\r\n PersistentConnection.nextPersistentConnectionId_ = 0;\r\n /**\r\n * Counter for number of connections created. Mainly used for tagging in the logs\r\n * @type {number}\r\n * @private\r\n */\r\n PersistentConnection.nextConnectionId_ = 0;\r\n return PersistentConnection;\r\n}(ServerActions));\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * An implementation of ServerActions that communicates with the server via REST requests.\r\n * This is mostly useful for compatibility with crawlers, where we don't want to spin up a full\r\n * persistent connection (using WebSockets or long-polling)\r\n */\r\nvar ReadonlyRestClient = /** @class */ (function (_super) {\r\n tslib_1.__extends(ReadonlyRestClient, _super);\r\n /**\r\n * @param {!RepoInfo} repoInfo_ Data about the namespace we are connecting to\r\n * @param {function(string, *, boolean, ?number)} onDataUpdate_ A callback for new data from the server\r\n * @param {AuthTokenProvider} authTokenProvider_\r\n * @implements {ServerActions}\r\n */\r\n function ReadonlyRestClient(repoInfo_, onDataUpdate_, authTokenProvider_) {\r\n var _this = _super.call(this) || this;\r\n _this.repoInfo_ = repoInfo_;\r\n _this.onDataUpdate_ = onDataUpdate_;\r\n _this.authTokenProvider_ = authTokenProvider_;\r\n /** @private {function(...[*])} */\r\n _this.log_ = logWrapper('p:rest:');\r\n /**\r\n * We don't actually need to track listens, except to prevent us calling an onComplete for a listen\r\n * that's been removed. :-/\r\n *\r\n * @private {!Object.}\r\n */\r\n _this.listens_ = {};\r\n return _this;\r\n }\r\n ReadonlyRestClient.prototype.reportStats = function (stats) {\r\n throw new Error('Method not implemented.');\r\n };\r\n /**\r\n * @param {!Query} query\r\n * @param {?number=} tag\r\n * @return {string}\r\n * @private\r\n */\r\n ReadonlyRestClient.getListenId_ = function (query, tag) {\r\n if (tag !== undefined) {\r\n return 'tag$' + tag;\r\n }\r\n else {\r\n util.assert(query.getQueryParams().isDefault(), \"should have a tag if it's not a default query.\");\r\n return query.path.toString();\r\n }\r\n };\r\n /** @inheritDoc */\r\n ReadonlyRestClient.prototype.listen = function (query, currentHashFn, tag, onComplete) {\r\n var _this = this;\r\n var pathString = query.path.toString();\r\n this.log_('Listen called for ' + pathString + ' ' + query.queryIdentifier());\r\n // Mark this listener so we can tell if it's removed.\r\n var listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n var thisListen = {};\r\n this.listens_[listenId] = thisListen;\r\n var queryStringParamaters = query\r\n .getQueryParams()\r\n .toRestQueryStringParameters();\r\n this.restRequest_(pathString + '.json', queryStringParamaters, function (error$$1, result) {\r\n var data = result;\r\n if (error$$1 === 404) {\r\n data = null;\r\n error$$1 = null;\r\n }\r\n if (error$$1 === null) {\r\n _this.onDataUpdate_(pathString, data, /*isMerge=*/ false, tag);\r\n }\r\n if (util.safeGet(_this.listens_, listenId) === thisListen) {\r\n var status_1;\r\n if (!error$$1) {\r\n status_1 = 'ok';\r\n }\r\n else if (error$$1 == 401) {\r\n status_1 = 'permission_denied';\r\n }\r\n else {\r\n status_1 = 'rest_error:' + error$$1;\r\n }\r\n onComplete(status_1, null);\r\n }\r\n });\r\n };\r\n /** @inheritDoc */\r\n ReadonlyRestClient.prototype.unlisten = function (query, tag) {\r\n var listenId = ReadonlyRestClient.getListenId_(query, tag);\r\n delete this.listens_[listenId];\r\n };\r\n /** @inheritDoc */\r\n ReadonlyRestClient.prototype.refreshAuthToken = function (token) {\r\n // no-op since we just always call getToken.\r\n };\r\n /**\r\n * Performs a REST request to the given path, with the provided query string parameters,\r\n * and any auth credentials we have.\r\n *\r\n * @param {!string} pathString\r\n * @param {!Object.} queryStringParameters\r\n * @param {?function(?number, *=)} callback\r\n * @private\r\n */\r\n ReadonlyRestClient.prototype.restRequest_ = function (pathString, queryStringParameters, callback) {\r\n var _this = this;\r\n if (queryStringParameters === void 0) { queryStringParameters = {}; }\r\n queryStringParameters['format'] = 'export';\r\n this.authTokenProvider_\r\n .getToken(/*forceRefresh=*/ false)\r\n .then(function (authTokenData) {\r\n var authToken = authTokenData && authTokenData.accessToken;\r\n if (authToken) {\r\n queryStringParameters['auth'] = authToken;\r\n }\r\n var url = (_this.repoInfo_.secure ? 'https://' : 'http://') +\r\n _this.repoInfo_.host +\r\n pathString +\r\n '?' +\r\n util.querystring(queryStringParameters);\r\n _this.log_('Sending REST request for ' + url);\r\n var xhr = new XMLHttpRequest();\r\n xhr.onreadystatechange = function () {\r\n if (callback && xhr.readyState === 4) {\r\n _this.log_('REST Response for ' + url + ' received. status:', xhr.status, 'response:', xhr.responseText);\r\n var res = null;\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n try {\r\n res = util.jsonEval(xhr.responseText);\r\n }\r\n catch (e) {\r\n warn('Failed to parse JSON response for ' +\r\n url +\r\n ': ' +\r\n xhr.responseText);\r\n }\r\n callback(null, res);\r\n }\r\n else {\r\n // 401 and 404 are expected.\r\n if (xhr.status !== 401 && xhr.status !== 404) {\r\n warn('Got unsuccessful REST response for ' +\r\n url +\r\n ' Status: ' +\r\n xhr.status);\r\n }\r\n callback(xhr.status);\r\n }\r\n callback = null;\r\n }\r\n };\r\n xhr.open('GET', url, /*asynchronous=*/ true);\r\n xhr.send();\r\n });\r\n };\r\n return ReadonlyRestClient;\r\n}(ServerActions));\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar INTERRUPT_REASON = 'repo_interrupt';\r\n/**\r\n * A connection to a single data repository.\r\n */\r\nvar Repo = /** @class */ (function () {\r\n /**\r\n * @param {!RepoInfo} repoInfo_\r\n * @param {boolean} forceRestClient\r\n * @param {!FirebaseApp} app\r\n */\r\n function Repo(repoInfo_, forceRestClient, app) {\r\n var _this = this;\r\n this.repoInfo_ = repoInfo_;\r\n this.app = app;\r\n this.dataUpdateCount = 0;\r\n this.statsListener_ = null;\r\n this.eventQueue_ = new EventQueue();\r\n this.nextWriteId_ = 1;\r\n this.interceptServerDataCallback_ = null;\r\n // A list of data pieces and paths to be set when this client disconnects.\r\n this.onDisconnect_ = new SparseSnapshotTree();\r\n /**\r\n * TODO: This should be @private but it's used by test_access.js and internal.js\r\n * @type {?PersistentConnection}\r\n */\r\n this.persistentConnection_ = null;\r\n /** @type {!AuthTokenProvider} */\r\n var authTokenProvider = new AuthTokenProvider(app);\r\n this.stats_ = StatsManager.getCollection(repoInfo_);\r\n if (forceRestClient || beingCrawled()) {\r\n this.server_ = new ReadonlyRestClient(this.repoInfo_, this.onDataUpdate_.bind(this), authTokenProvider);\r\n // Minor hack: Fire onConnect immediately, since there's no actual connection.\r\n setTimeout(this.onConnectStatus_.bind(this, true), 0);\r\n }\r\n else {\r\n var authOverride = app.options['databaseAuthVariableOverride'];\r\n // Validate authOverride\r\n if (typeof authOverride !== 'undefined' && authOverride !== null) {\r\n if (typeof authOverride !== 'object') {\r\n throw new Error('Only objects are supported for option databaseAuthVariableOverride');\r\n }\r\n try {\r\n util.stringify(authOverride);\r\n }\r\n catch (e) {\r\n throw new Error('Invalid authOverride provided: ' + e);\r\n }\r\n }\r\n this.persistentConnection_ = new PersistentConnection(this.repoInfo_, this.onDataUpdate_.bind(this), this.onConnectStatus_.bind(this), this.onServerInfoUpdate_.bind(this), authTokenProvider, authOverride);\r\n this.server_ = this.persistentConnection_;\r\n }\r\n authTokenProvider.addTokenChangeListener(function (token) {\r\n _this.server_.refreshAuthToken(token);\r\n });\r\n // In the case of multiple Repos for the same repoInfo (i.e. there are multiple Firebase.Contexts being used),\r\n // we only want to create one StatsReporter. As such, we'll report stats over the first Repo created.\r\n this.statsReporter_ = StatsManager.getOrCreateReporter(repoInfo_, function () { return new StatsReporter(_this.stats_, _this.server_); });\r\n this.transactions_init_();\r\n // Used for .info.\r\n this.infoData_ = new SnapshotHolder();\r\n this.infoSyncTree_ = new SyncTree({\r\n startListening: function (query, tag, currentHashFn, onComplete) {\r\n var infoEvents = [];\r\n var node = _this.infoData_.getNode(query.path);\r\n // This is possibly a hack, but we have different semantics for .info endpoints. We don't raise null events\r\n // on initial data...\r\n if (!node.isEmpty()) {\r\n infoEvents = _this.infoSyncTree_.applyServerOverwrite(query.path, node);\r\n setTimeout(function () {\r\n onComplete('ok');\r\n }, 0);\r\n }\r\n return infoEvents;\r\n },\r\n stopListening: function () { }\r\n });\r\n this.updateInfo_('connected', false);\r\n this.serverSyncTree_ = new SyncTree({\r\n startListening: function (query, tag, currentHashFn, onComplete) {\r\n _this.server_.listen(query, currentHashFn, tag, function (status, data) {\r\n var events = onComplete(status, data);\r\n _this.eventQueue_.raiseEventsForChangedPath(query.path, events);\r\n });\r\n // No synchronous events for network-backed sync trees\r\n return [];\r\n },\r\n stopListening: function (query, tag) {\r\n _this.server_.unlisten(query, tag);\r\n }\r\n });\r\n }\r\n /**\r\n * @return {string} The URL corresponding to the root of this Firebase.\r\n */\r\n Repo.prototype.toString = function () {\r\n return ((this.repoInfo_.secure ? 'https://' : 'http://') + this.repoInfo_.host);\r\n };\r\n /**\r\n * @return {!string} The namespace represented by the repo.\r\n */\r\n Repo.prototype.name = function () {\r\n return this.repoInfo_.namespace;\r\n };\r\n /**\r\n * @return {!number} The time in milliseconds, taking the server offset into account if we have one.\r\n */\r\n Repo.prototype.serverTime = function () {\r\n var offsetNode = this.infoData_.getNode(new Path('.info/serverTimeOffset'));\r\n var offset = offsetNode.val() || 0;\r\n return new Date().getTime() + offset;\r\n };\r\n /**\r\n * Generate ServerValues using some variables from the repo object.\r\n * @return {!Object}\r\n */\r\n Repo.prototype.generateServerValues = function () {\r\n return generateWithValues({\r\n timestamp: this.serverTime()\r\n });\r\n };\r\n /**\r\n * Called by realtime when we get new messages from the server.\r\n *\r\n * @private\r\n * @param {string} pathString\r\n * @param {*} data\r\n * @param {boolean} isMerge\r\n * @param {?number} tag\r\n */\r\n Repo.prototype.onDataUpdate_ = function (pathString, data, isMerge, tag) {\r\n // For testing.\r\n this.dataUpdateCount++;\r\n var path = new Path(pathString);\r\n data = this.interceptServerDataCallback_\r\n ? this.interceptServerDataCallback_(pathString, data)\r\n : data;\r\n var events = [];\r\n if (tag) {\r\n if (isMerge) {\r\n var taggedChildren = util.map(data, function (raw) {\r\n return nodeFromJSON$1(raw);\r\n });\r\n events = this.serverSyncTree_.applyTaggedQueryMerge(path, taggedChildren, tag);\r\n }\r\n else {\r\n var taggedSnap = nodeFromJSON$1(data);\r\n events = this.serverSyncTree_.applyTaggedQueryOverwrite(path, taggedSnap, tag);\r\n }\r\n }\r\n else if (isMerge) {\r\n var changedChildren = util.map(data, function (raw) {\r\n return nodeFromJSON$1(raw);\r\n });\r\n events = this.serverSyncTree_.applyServerMerge(path, changedChildren);\r\n }\r\n else {\r\n var snap = nodeFromJSON$1(data);\r\n events = this.serverSyncTree_.applyServerOverwrite(path, snap);\r\n }\r\n var affectedPath = path;\r\n if (events.length > 0) {\r\n // Since we have a listener outstanding for each transaction, receiving any events\r\n // is a proxy for some change having occurred.\r\n affectedPath = this.rerunTransactions_(path);\r\n }\r\n this.eventQueue_.raiseEventsForChangedPath(affectedPath, events);\r\n };\r\n /**\r\n * TODO: This should be @private but it's used by test_access.js and internal.js\r\n * @param {?function(!string, *):*} callback\r\n * @private\r\n */\r\n Repo.prototype.interceptServerData_ = function (callback) {\r\n this.interceptServerDataCallback_ = callback;\r\n };\r\n /**\r\n * @param {!boolean} connectStatus\r\n * @private\r\n */\r\n Repo.prototype.onConnectStatus_ = function (connectStatus) {\r\n this.updateInfo_('connected', connectStatus);\r\n if (connectStatus === false) {\r\n this.runOnDisconnectEvents_();\r\n }\r\n };\r\n /**\r\n * @param {!Object} updates\r\n * @private\r\n */\r\n Repo.prototype.onServerInfoUpdate_ = function (updates) {\r\n var _this = this;\r\n each(updates, function (value, key) {\r\n _this.updateInfo_(key, value);\r\n });\r\n };\r\n /**\r\n *\r\n * @param {!string} pathString\r\n * @param {*} value\r\n * @private\r\n */\r\n Repo.prototype.updateInfo_ = function (pathString, value) {\r\n var path = new Path('/.info/' + pathString);\r\n var newNode = nodeFromJSON$1(value);\r\n this.infoData_.updateSnapshot(path, newNode);\r\n var events = this.infoSyncTree_.applyServerOverwrite(path, newNode);\r\n this.eventQueue_.raiseEventsForChangedPath(path, events);\r\n };\r\n /**\r\n * @return {!number}\r\n * @private\r\n */\r\n Repo.prototype.getNextWriteId_ = function () {\r\n return this.nextWriteId_++;\r\n };\r\n /**\r\n * @param {!Path} path\r\n * @param {*} newVal\r\n * @param {number|string|null} newPriority\r\n * @param {?function(?Error, *=)} onComplete\r\n */\r\n Repo.prototype.setWithPriority = function (path, newVal, newPriority, onComplete) {\r\n var _this = this;\r\n this.log_('set', {\r\n path: path.toString(),\r\n value: newVal,\r\n priority: newPriority\r\n });\r\n // TODO: Optimize this behavior to either (a) store flag to skip resolving where possible and / or\r\n // (b) store unresolved paths on JSON parse\r\n var serverValues = this.generateServerValues();\r\n var newNodeUnresolved = nodeFromJSON$1(newVal, newPriority);\r\n var newNode = resolveDeferredValueSnapshot(newNodeUnresolved, serverValues);\r\n var writeId = this.getNextWriteId_();\r\n var events = this.serverSyncTree_.applyUserOverwrite(path, newNode, writeId, true);\r\n this.eventQueue_.queueEvents(events);\r\n this.server_.put(path.toString(), newNodeUnresolved.val(/*export=*/ true), function (status, errorReason) {\r\n var success = status === 'ok';\r\n if (!success) {\r\n warn('set at ' + path + ' failed: ' + status);\r\n }\r\n var clearEvents = _this.serverSyncTree_.ackUserWrite(writeId, !success);\r\n _this.eventQueue_.raiseEventsForChangedPath(path, clearEvents);\r\n _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n });\r\n var affectedPath = this.abortTransactions_(path);\r\n this.rerunTransactions_(affectedPath);\r\n // We queued the events above, so just flush the queue here\r\n this.eventQueue_.raiseEventsForChangedPath(affectedPath, []);\r\n };\r\n /**\r\n * @param {!Path} path\r\n * @param {!Object} childrenToMerge\r\n * @param {?function(?Error, *=)} onComplete\r\n */\r\n Repo.prototype.update = function (path, childrenToMerge, onComplete) {\r\n var _this = this;\r\n this.log_('update', { path: path.toString(), value: childrenToMerge });\r\n // Start with our existing data and merge each child into it.\r\n var empty = true;\r\n var serverValues = this.generateServerValues();\r\n var changedChildren = {};\r\n util.forEach(childrenToMerge, function (changedKey, changedValue) {\r\n empty = false;\r\n var newNodeUnresolved = nodeFromJSON$1(changedValue);\r\n changedChildren[changedKey] = resolveDeferredValueSnapshot(newNodeUnresolved, serverValues);\r\n });\r\n if (!empty) {\r\n var writeId_1 = this.getNextWriteId_();\r\n var events = this.serverSyncTree_.applyUserMerge(path, changedChildren, writeId_1);\r\n this.eventQueue_.queueEvents(events);\r\n this.server_.merge(path.toString(), childrenToMerge, function (status, errorReason) {\r\n var success = status === 'ok';\r\n if (!success) {\r\n warn('update at ' + path + ' failed: ' + status);\r\n }\r\n var clearEvents = _this.serverSyncTree_.ackUserWrite(writeId_1, !success);\r\n var affectedPath = clearEvents.length > 0 ? _this.rerunTransactions_(path) : path;\r\n _this.eventQueue_.raiseEventsForChangedPath(affectedPath, clearEvents);\r\n _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n });\r\n util.forEach(childrenToMerge, function (changedPath) {\r\n var affectedPath = _this.abortTransactions_(path.child(changedPath));\r\n _this.rerunTransactions_(affectedPath);\r\n });\r\n // We queued the events above, so just flush the queue here\r\n this.eventQueue_.raiseEventsForChangedPath(path, []);\r\n }\r\n else {\r\n log(\"update() called with empty data. Don't do anything.\");\r\n this.callOnCompleteCallback(onComplete, 'ok');\r\n }\r\n };\r\n /**\r\n * Applies all of the changes stored up in the onDisconnect_ tree.\r\n * @private\r\n */\r\n Repo.prototype.runOnDisconnectEvents_ = function () {\r\n var _this = this;\r\n this.log_('onDisconnectEvents');\r\n var serverValues = this.generateServerValues();\r\n var resolvedOnDisconnectTree = resolveDeferredValueTree(this.onDisconnect_, serverValues);\r\n var events = [];\r\n resolvedOnDisconnectTree.forEachTree(Path.Empty, function (path, snap) {\r\n events = events.concat(_this.serverSyncTree_.applyServerOverwrite(path, snap));\r\n var affectedPath = _this.abortTransactions_(path);\r\n _this.rerunTransactions_(affectedPath);\r\n });\r\n this.onDisconnect_ = new SparseSnapshotTree();\r\n this.eventQueue_.raiseEventsForChangedPath(Path.Empty, events);\r\n };\r\n /**\r\n * @param {!Path} path\r\n * @param {?function(?Error, *=)} onComplete\r\n */\r\n Repo.prototype.onDisconnectCancel = function (path, onComplete) {\r\n var _this = this;\r\n this.server_.onDisconnectCancel(path.toString(), function (status, errorReason) {\r\n if (status === 'ok') {\r\n _this.onDisconnect_.forget(path);\r\n }\r\n _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n });\r\n };\r\n /**\r\n * @param {!Path} path\r\n * @param {*} value\r\n * @param {?function(?Error, *=)} onComplete\r\n */\r\n Repo.prototype.onDisconnectSet = function (path, value, onComplete) {\r\n var _this = this;\r\n var newNode = nodeFromJSON$1(value);\r\n this.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), function (status, errorReason) {\r\n if (status === 'ok') {\r\n _this.onDisconnect_.remember(path, newNode);\r\n }\r\n _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n });\r\n };\r\n /**\r\n * @param {!Path} path\r\n * @param {*} value\r\n * @param {*} priority\r\n * @param {?function(?Error, *=)} onComplete\r\n */\r\n Repo.prototype.onDisconnectSetWithPriority = function (path, value, priority, onComplete) {\r\n var _this = this;\r\n var newNode = nodeFromJSON$1(value, priority);\r\n this.server_.onDisconnectPut(path.toString(), newNode.val(/*export=*/ true), function (status, errorReason) {\r\n if (status === 'ok') {\r\n _this.onDisconnect_.remember(path, newNode);\r\n }\r\n _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n });\r\n };\r\n /**\r\n * @param {!Path} path\r\n * @param {*} childrenToMerge\r\n * @param {?function(?Error, *=)} onComplete\r\n */\r\n Repo.prototype.onDisconnectUpdate = function (path, childrenToMerge, onComplete) {\r\n var _this = this;\r\n if (util.isEmpty(childrenToMerge)) {\r\n log(\"onDisconnect().update() called with empty data. Don't do anything.\");\r\n this.callOnCompleteCallback(onComplete, 'ok');\r\n return;\r\n }\r\n this.server_.onDisconnectMerge(path.toString(), childrenToMerge, function (status, errorReason) {\r\n if (status === 'ok') {\r\n util.forEach(childrenToMerge, function (childName, childNode) {\r\n var newChildNode = nodeFromJSON$1(childNode);\r\n _this.onDisconnect_.remember(path.child(childName), newChildNode);\r\n });\r\n }\r\n _this.callOnCompleteCallback(onComplete, status, errorReason);\r\n });\r\n };\r\n /**\r\n * @param {!Query} query\r\n * @param {!EventRegistration} eventRegistration\r\n */\r\n Repo.prototype.addEventCallbackForQuery = function (query, eventRegistration) {\r\n var events;\r\n if (query.path.getFront() === '.info') {\r\n events = this.infoSyncTree_.addEventRegistration(query, eventRegistration);\r\n }\r\n else {\r\n events = this.serverSyncTree_.addEventRegistration(query, eventRegistration);\r\n }\r\n this.eventQueue_.raiseEventsAtPath(query.path, events);\r\n };\r\n /**\r\n * @param {!Query} query\r\n * @param {?EventRegistration} eventRegistration\r\n */\r\n Repo.prototype.removeEventCallbackForQuery = function (query, eventRegistration) {\r\n // These are guaranteed not to raise events, since we're not passing in a cancelError. However, we can future-proof\r\n // a little bit by handling the return values anyways.\r\n var events;\r\n if (query.path.getFront() === '.info') {\r\n events = this.infoSyncTree_.removeEventRegistration(query, eventRegistration);\r\n }\r\n else {\r\n events = this.serverSyncTree_.removeEventRegistration(query, eventRegistration);\r\n }\r\n this.eventQueue_.raiseEventsAtPath(query.path, events);\r\n };\r\n Repo.prototype.interrupt = function () {\r\n if (this.persistentConnection_) {\r\n this.persistentConnection_.interrupt(INTERRUPT_REASON);\r\n }\r\n };\r\n Repo.prototype.resume = function () {\r\n if (this.persistentConnection_) {\r\n this.persistentConnection_.resume(INTERRUPT_REASON);\r\n }\r\n };\r\n Repo.prototype.stats = function (showDelta) {\r\n if (showDelta === void 0) { showDelta = false; }\r\n if (typeof console === 'undefined')\r\n return;\r\n var stats;\r\n if (showDelta) {\r\n if (!this.statsListener_)\r\n this.statsListener_ = new StatsListener(this.stats_);\r\n stats = this.statsListener_.get();\r\n }\r\n else {\r\n stats = this.stats_.get();\r\n }\r\n var longestName = Object.keys(stats).reduce(function (previousValue, currentValue) {\r\n return Math.max(currentValue.length, previousValue);\r\n }, 0);\r\n util.forEach(stats, function (stat, value) {\r\n // pad stat names to be the same length (plus 2 extra spaces).\r\n for (var i = stat.length; i < longestName + 2; i++)\r\n stat += ' ';\r\n console.log(stat + value);\r\n });\r\n };\r\n Repo.prototype.statsIncrementCounter = function (metric) {\r\n this.stats_.incrementCounter(metric);\r\n this.statsReporter_.includeStat(metric);\r\n };\r\n /**\r\n * @param {...*} var_args\r\n * @private\r\n */\r\n Repo.prototype.log_ = function () {\r\n var var_args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n var_args[_i] = arguments[_i];\r\n }\r\n var prefix = '';\r\n if (this.persistentConnection_) {\r\n prefix = this.persistentConnection_.id + ':';\r\n }\r\n log.apply(void 0, [prefix].concat(var_args));\r\n };\r\n /**\r\n * @param {?function(?Error, *=)} callback\r\n * @param {!string} status\r\n * @param {?string=} errorReason\r\n */\r\n Repo.prototype.callOnCompleteCallback = function (callback, status, errorReason) {\r\n if (callback) {\r\n exceptionGuard(function () {\r\n if (status == 'ok') {\r\n callback(null);\r\n }\r\n else {\r\n var code = (status || 'error').toUpperCase();\r\n var message = code;\r\n if (errorReason)\r\n message += ': ' + errorReason;\r\n var error$$1 = new Error(message);\r\n error$$1.code = code;\r\n callback(error$$1);\r\n }\r\n });\r\n }\r\n };\r\n Object.defineProperty(Repo.prototype, \"database\", {\r\n get: function () {\r\n return this.__database || (this.__database = new Database(this));\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Repo;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Filters nodes by range and uses an IndexFilter to track any changes after filtering the node\r\n *\r\n * @constructor\r\n * @implements {NodeFilter}\r\n */\r\nvar RangedFilter = /** @class */ (function () {\r\n /**\r\n * @param {!QueryParams} params\r\n */\r\n function RangedFilter(params) {\r\n this.indexedFilter_ = new IndexedFilter(params.getIndex());\r\n this.index_ = params.getIndex();\r\n this.startPost_ = RangedFilter.getStartPost_(params);\r\n this.endPost_ = RangedFilter.getEndPost_(params);\r\n }\r\n /**\r\n * @return {!NamedNode}\r\n */\r\n RangedFilter.prototype.getStartPost = function () {\r\n return this.startPost_;\r\n };\r\n /**\r\n * @return {!NamedNode}\r\n */\r\n RangedFilter.prototype.getEndPost = function () {\r\n return this.endPost_;\r\n };\r\n /**\r\n * @param {!NamedNode} node\r\n * @return {boolean}\r\n */\r\n RangedFilter.prototype.matches = function (node) {\r\n return (this.index_.compare(this.getStartPost(), node) <= 0 &&\r\n this.index_.compare(node, this.getEndPost()) <= 0);\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n RangedFilter.prototype.updateChild = function (snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n if (!this.matches(new NamedNode(key, newChild))) {\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n return this.indexedFilter_.updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n RangedFilter.prototype.updateFullNode = function (oldSnap, newSnap, optChangeAccumulator) {\r\n if (newSnap.isLeafNode()) {\r\n // Make sure we have a children node with the correct index, not a leaf node;\r\n newSnap = ChildrenNode.EMPTY_NODE;\r\n }\r\n var filtered = newSnap.withIndex(this.index_);\r\n // Don't support priorities on queries\r\n filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n var self = this;\r\n newSnap.forEachChild(PRIORITY_INDEX, function (key, childNode) {\r\n if (!self.matches(new NamedNode(key, childNode))) {\r\n filtered = filtered.updateImmediateChild(key, ChildrenNode.EMPTY_NODE);\r\n }\r\n });\r\n return this.indexedFilter_.updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n RangedFilter.prototype.updatePriority = function (oldSnap, newPriority) {\r\n // Don't support priorities on queries\r\n return oldSnap;\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n RangedFilter.prototype.filtersNodes = function () {\r\n return true;\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n RangedFilter.prototype.getIndexedFilter = function () {\r\n return this.indexedFilter_;\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n RangedFilter.prototype.getIndex = function () {\r\n return this.index_;\r\n };\r\n /**\r\n * @param {!QueryParams} params\r\n * @return {!NamedNode}\r\n * @private\r\n */\r\n RangedFilter.getStartPost_ = function (params) {\r\n if (params.hasStart()) {\r\n var startName = params.getIndexStartName();\r\n return params.getIndex().makePost(params.getIndexStartValue(), startName);\r\n }\r\n else {\r\n return params.getIndex().minPost();\r\n }\r\n };\r\n /**\r\n * @param {!QueryParams} params\r\n * @return {!NamedNode}\r\n * @private\r\n */\r\n RangedFilter.getEndPost_ = function (params) {\r\n if (params.hasEnd()) {\r\n var endName = params.getIndexEndName();\r\n return params.getIndex().makePost(params.getIndexEndValue(), endName);\r\n }\r\n else {\r\n return params.getIndex().maxPost();\r\n }\r\n };\r\n return RangedFilter;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Applies a limit and a range to a node and uses RangedFilter to do the heavy lifting where possible\r\n *\r\n * @constructor\r\n * @implements {NodeFilter}\r\n */\r\nvar LimitedFilter = /** @class */ (function () {\r\n /**\r\n * @param {!QueryParams} params\r\n */\r\n function LimitedFilter(params) {\r\n this.rangedFilter_ = new RangedFilter(params);\r\n this.index_ = params.getIndex();\r\n this.limit_ = params.getLimit();\r\n this.reverse_ = !params.isViewFromLeft();\r\n }\r\n /**\r\n * @inheritDoc\r\n */\r\n LimitedFilter.prototype.updateChild = function (snap, key, newChild, affectedPath, source, optChangeAccumulator) {\r\n if (!this.rangedFilter_.matches(new NamedNode(key, newChild))) {\r\n newChild = ChildrenNode.EMPTY_NODE;\r\n }\r\n if (snap.getImmediateChild(key).equals(newChild)) {\r\n // No change\r\n return snap;\r\n }\r\n else if (snap.numChildren() < this.limit_) {\r\n return this.rangedFilter_\r\n .getIndexedFilter()\r\n .updateChild(snap, key, newChild, affectedPath, source, optChangeAccumulator);\r\n }\r\n else {\r\n return this.fullLimitUpdateChild_(snap, key, newChild, source, optChangeAccumulator);\r\n }\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n LimitedFilter.prototype.updateFullNode = function (oldSnap, newSnap, optChangeAccumulator) {\r\n var filtered;\r\n if (newSnap.isLeafNode() || newSnap.isEmpty()) {\r\n // Make sure we have a children node with the correct index, not a leaf node;\r\n filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n }\r\n else {\r\n if (this.limit_ * 2 < newSnap.numChildren() &&\r\n newSnap.isIndexed(this.index_)) {\r\n // Easier to build up a snapshot, since what we're given has more than twice the elements we want\r\n filtered = ChildrenNode.EMPTY_NODE.withIndex(this.index_);\r\n // anchor to the startPost, endPost, or last element as appropriate\r\n var iterator = void 0;\r\n if (this.reverse_) {\r\n iterator = newSnap.getReverseIteratorFrom(this.rangedFilter_.getEndPost(), this.index_);\r\n }\r\n else {\r\n iterator = newSnap.getIteratorFrom(this.rangedFilter_.getStartPost(), this.index_);\r\n }\r\n var count = 0;\r\n while (iterator.hasNext() && count < this.limit_) {\r\n var next = iterator.getNext();\r\n var inRange = void 0;\r\n if (this.reverse_) {\r\n inRange =\r\n this.index_.compare(this.rangedFilter_.getStartPost(), next) <= 0;\r\n }\r\n else {\r\n inRange =\r\n this.index_.compare(next, this.rangedFilter_.getEndPost()) <= 0;\r\n }\r\n if (inRange) {\r\n filtered = filtered.updateImmediateChild(next.name, next.node);\r\n count++;\r\n }\r\n else {\r\n // if we have reached the end post, we cannot keep adding elemments\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n // The snap contains less than twice the limit. Faster to delete from the snap than build up a new one\r\n filtered = newSnap.withIndex(this.index_);\r\n // Don't support priorities on queries\r\n filtered = filtered.updatePriority(ChildrenNode.EMPTY_NODE);\r\n var startPost = void 0;\r\n var endPost = void 0;\r\n var cmp = void 0;\r\n var iterator = void 0;\r\n if (this.reverse_) {\r\n iterator = filtered.getReverseIterator(this.index_);\r\n startPost = this.rangedFilter_.getEndPost();\r\n endPost = this.rangedFilter_.getStartPost();\r\n var indexCompare_1 = this.index_.getCompare();\r\n cmp = function (a, b) { return indexCompare_1(b, a); };\r\n }\r\n else {\r\n iterator = filtered.getIterator(this.index_);\r\n startPost = this.rangedFilter_.getStartPost();\r\n endPost = this.rangedFilter_.getEndPost();\r\n cmp = this.index_.getCompare();\r\n }\r\n var count = 0;\r\n var foundStartPost = false;\r\n while (iterator.hasNext()) {\r\n var next = iterator.getNext();\r\n if (!foundStartPost && cmp(startPost, next) <= 0) {\r\n // start adding\r\n foundStartPost = true;\r\n }\r\n var inRange = foundStartPost && count < this.limit_ && cmp(next, endPost) <= 0;\r\n if (inRange) {\r\n count++;\r\n }\r\n else {\r\n filtered = filtered.updateImmediateChild(next.name, ChildrenNode.EMPTY_NODE);\r\n }\r\n }\r\n }\r\n }\r\n return this.rangedFilter_\r\n .getIndexedFilter()\r\n .updateFullNode(oldSnap, filtered, optChangeAccumulator);\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n LimitedFilter.prototype.updatePriority = function (oldSnap, newPriority) {\r\n // Don't support priorities on queries\r\n return oldSnap;\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n LimitedFilter.prototype.filtersNodes = function () {\r\n return true;\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n LimitedFilter.prototype.getIndexedFilter = function () {\r\n return this.rangedFilter_.getIndexedFilter();\r\n };\r\n /**\r\n * @inheritDoc\r\n */\r\n LimitedFilter.prototype.getIndex = function () {\r\n return this.index_;\r\n };\r\n /**\r\n * @param {!Node} snap\r\n * @param {string} childKey\r\n * @param {!Node} childSnap\r\n * @param {!CompleteChildSource} source\r\n * @param {?ChildChangeAccumulator} changeAccumulator\r\n * @return {!Node}\r\n * @private\r\n */\r\n LimitedFilter.prototype.fullLimitUpdateChild_ = function (snap, childKey, childSnap, source, changeAccumulator) {\r\n // TODO: rename all cache stuff etc to general snap terminology\r\n var cmp;\r\n if (this.reverse_) {\r\n var indexCmp_1 = this.index_.getCompare();\r\n cmp = function (a, b) { return indexCmp_1(b, a); };\r\n }\r\n else {\r\n cmp = this.index_.getCompare();\r\n }\r\n var oldEventCache = snap;\r\n util.assert(oldEventCache.numChildren() == this.limit_, '');\r\n var newChildNamedNode = new NamedNode(childKey, childSnap);\r\n var windowBoundary = this.reverse_\r\n ? oldEventCache.getFirstChild(this.index_)\r\n : oldEventCache.getLastChild(this.index_);\r\n var inRange = this.rangedFilter_.matches(newChildNamedNode);\r\n if (oldEventCache.hasChild(childKey)) {\r\n var oldChildSnap = oldEventCache.getImmediateChild(childKey);\r\n var nextChild = source.getChildAfterChild(this.index_, windowBoundary, this.reverse_);\r\n while (nextChild != null &&\r\n (nextChild.name == childKey || oldEventCache.hasChild(nextChild.name))) {\r\n // There is a weird edge case where a node is updated as part of a merge in the write tree, but hasn't\r\n // been applied to the limited filter yet. Ignore this next child which will be updated later in\r\n // the limited filter...\r\n nextChild = source.getChildAfterChild(this.index_, nextChild, this.reverse_);\r\n }\r\n var compareNext = nextChild == null ? 1 : cmp(nextChild, newChildNamedNode);\r\n var remainsInWindow = inRange && !childSnap.isEmpty() && compareNext >= 0;\r\n if (remainsInWindow) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(Change.childChangedChange(childKey, childSnap, oldChildSnap));\r\n }\r\n return oldEventCache.updateImmediateChild(childKey, childSnap);\r\n }\r\n else {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(Change.childRemovedChange(childKey, oldChildSnap));\r\n }\r\n var newEventCache = oldEventCache.updateImmediateChild(childKey, ChildrenNode.EMPTY_NODE);\r\n var nextChildInRange = nextChild != null && this.rangedFilter_.matches(nextChild);\r\n if (nextChildInRange) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(Change.childAddedChange(nextChild.name, nextChild.node));\r\n }\r\n return newEventCache.updateImmediateChild(nextChild.name, nextChild.node);\r\n }\r\n else {\r\n return newEventCache;\r\n }\r\n }\r\n }\r\n else if (childSnap.isEmpty()) {\r\n // we're deleting a node, but it was not in the window, so ignore it\r\n return snap;\r\n }\r\n else if (inRange) {\r\n if (cmp(windowBoundary, newChildNamedNode) >= 0) {\r\n if (changeAccumulator != null) {\r\n changeAccumulator.trackChildChange(Change.childRemovedChange(windowBoundary.name, windowBoundary.node));\r\n changeAccumulator.trackChildChange(Change.childAddedChange(childKey, childSnap));\r\n }\r\n return oldEventCache\r\n .updateImmediateChild(childKey, childSnap)\r\n .updateImmediateChild(windowBoundary.name, ChildrenNode.EMPTY_NODE);\r\n }\r\n else {\r\n return snap;\r\n }\r\n }\r\n else {\r\n return snap;\r\n }\r\n };\r\n return LimitedFilter;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * This class is an immutable-from-the-public-api struct containing a set of query parameters defining a\r\n * range to be returned for a particular location. It is assumed that validation of parameters is done at the\r\n * user-facing API level, so it is not done here.\r\n * @constructor\r\n */\r\nvar QueryParams = /** @class */ (function () {\r\n function QueryParams() {\r\n this.limitSet_ = false;\r\n this.startSet_ = false;\r\n this.startNameSet_ = false;\r\n this.endSet_ = false;\r\n this.endNameSet_ = false;\r\n this.limit_ = 0;\r\n this.viewFrom_ = '';\r\n this.indexStartValue_ = null;\r\n this.indexStartName_ = '';\r\n this.indexEndValue_ = null;\r\n this.indexEndName_ = '';\r\n this.index_ = PRIORITY_INDEX;\r\n }\r\n /**\r\n * @return {boolean}\r\n */\r\n QueryParams.prototype.hasStart = function () {\r\n return this.startSet_;\r\n };\r\n /**\r\n * @return {boolean} True if it would return from left.\r\n */\r\n QueryParams.prototype.isViewFromLeft = function () {\r\n if (this.viewFrom_ === '') {\r\n // limit(), rather than limitToFirst or limitToLast was called.\r\n // This means that only one of startSet_ and endSet_ is true. Use them\r\n // to calculate which side of the view to anchor to. If neither is set,\r\n // anchor to the end.\r\n return this.startSet_;\r\n }\r\n else {\r\n return (this.viewFrom_ === QueryParams.WIRE_PROTOCOL_CONSTANTS_.VIEW_FROM_LEFT);\r\n }\r\n };\r\n /**\r\n * Only valid to call if hasStart() returns true\r\n * @return {*}\r\n */\r\n QueryParams.prototype.getIndexStartValue = function () {\r\n util.assert(this.startSet_, 'Only valid if start has been set');\r\n return this.indexStartValue_;\r\n };\r\n /**\r\n * Only valid to call if hasStart() returns true.\r\n * Returns the starting key name for the range defined by these query parameters\r\n * @return {!string}\r\n */\r\n QueryParams.prototype.getIndexStartName = function () {\r\n util.assert(this.startSet_, 'Only valid if start has been set');\r\n if (this.startNameSet_) {\r\n return this.indexStartName_;\r\n }\r\n else {\r\n return MIN_NAME;\r\n }\r\n };\r\n /**\r\n * @return {boolean}\r\n */\r\n QueryParams.prototype.hasEnd = function () {\r\n return this.endSet_;\r\n };\r\n /**\r\n * Only valid to call if hasEnd() returns true.\r\n * @return {*}\r\n */\r\n QueryParams.prototype.getIndexEndValue = function () {\r\n util.assert(this.endSet_, 'Only valid if end has been set');\r\n return this.indexEndValue_;\r\n };\r\n /**\r\n * Only valid to call if hasEnd() returns true.\r\n * Returns the end key name for the range defined by these query parameters\r\n * @return {!string}\r\n */\r\n QueryParams.prototype.getIndexEndName = function () {\r\n util.assert(this.endSet_, 'Only valid if end has been set');\r\n if (this.endNameSet_) {\r\n return this.indexEndName_;\r\n }\r\n else {\r\n return MAX_NAME;\r\n }\r\n };\r\n /**\r\n * @return {boolean}\r\n */\r\n QueryParams.prototype.hasLimit = function () {\r\n return this.limitSet_;\r\n };\r\n /**\r\n * @return {boolean} True if a limit has been set and it has been explicitly anchored\r\n */\r\n QueryParams.prototype.hasAnchoredLimit = function () {\r\n return this.limitSet_ && this.viewFrom_ !== '';\r\n };\r\n /**\r\n * Only valid to call if hasLimit() returns true\r\n * @return {!number}\r\n */\r\n QueryParams.prototype.getLimit = function () {\r\n util.assert(this.limitSet_, 'Only valid if limit has been set');\r\n return this.limit_;\r\n };\r\n /**\r\n * @return {!Index}\r\n */\r\n QueryParams.prototype.getIndex = function () {\r\n return this.index_;\r\n };\r\n /**\r\n * @return {!QueryParams}\r\n * @private\r\n */\r\n QueryParams.prototype.copy_ = function () {\r\n var copy = new QueryParams();\r\n copy.limitSet_ = this.limitSet_;\r\n copy.limit_ = this.limit_;\r\n copy.startSet_ = this.startSet_;\r\n copy.indexStartValue_ = this.indexStartValue_;\r\n copy.startNameSet_ = this.startNameSet_;\r\n copy.indexStartName_ = this.indexStartName_;\r\n copy.endSet_ = this.endSet_;\r\n copy.indexEndValue_ = this.indexEndValue_;\r\n copy.endNameSet_ = this.endNameSet_;\r\n copy.indexEndName_ = this.indexEndName_;\r\n copy.index_ = this.index_;\r\n copy.viewFrom_ = this.viewFrom_;\r\n return copy;\r\n };\r\n /**\r\n * @param {!number} newLimit\r\n * @return {!QueryParams}\r\n */\r\n QueryParams.prototype.limit = function (newLimit) {\r\n var newParams = this.copy_();\r\n newParams.limitSet_ = true;\r\n newParams.limit_ = newLimit;\r\n newParams.viewFrom_ = '';\r\n return newParams;\r\n };\r\n /**\r\n * @param {!number} newLimit\r\n * @return {!QueryParams}\r\n */\r\n QueryParams.prototype.limitToFirst = function (newLimit) {\r\n var newParams = this.copy_();\r\n newParams.limitSet_ = true;\r\n newParams.limit_ = newLimit;\r\n newParams.viewFrom_ = QueryParams.WIRE_PROTOCOL_CONSTANTS_.VIEW_FROM_LEFT;\r\n return newParams;\r\n };\r\n /**\r\n * @param {!number} newLimit\r\n * @return {!QueryParams}\r\n */\r\n QueryParams.prototype.limitToLast = function (newLimit) {\r\n var newParams = this.copy_();\r\n newParams.limitSet_ = true;\r\n newParams.limit_ = newLimit;\r\n newParams.viewFrom_ = QueryParams.WIRE_PROTOCOL_CONSTANTS_.VIEW_FROM_RIGHT;\r\n return newParams;\r\n };\r\n /**\r\n * @param {*} indexValue\r\n * @param {?string=} key\r\n * @return {!QueryParams}\r\n */\r\n QueryParams.prototype.startAt = function (indexValue, key) {\r\n var newParams = this.copy_();\r\n newParams.startSet_ = true;\r\n if (!(indexValue !== undefined)) {\r\n indexValue = null;\r\n }\r\n newParams.indexStartValue_ = indexValue;\r\n if (key != null) {\r\n newParams.startNameSet_ = true;\r\n newParams.indexStartName_ = key;\r\n }\r\n else {\r\n newParams.startNameSet_ = false;\r\n newParams.indexStartName_ = '';\r\n }\r\n return newParams;\r\n };\r\n /**\r\n * @param {*} indexValue\r\n * @param {?string=} key\r\n * @return {!QueryParams}\r\n */\r\n QueryParams.prototype.endAt = function (indexValue, key) {\r\n var newParams = this.copy_();\r\n newParams.endSet_ = true;\r\n if (!(indexValue !== undefined)) {\r\n indexValue = null;\r\n }\r\n newParams.indexEndValue_ = indexValue;\r\n if (key !== undefined) {\r\n newParams.endNameSet_ = true;\r\n newParams.indexEndName_ = key;\r\n }\r\n else {\r\n newParams.endNameSet_ = false;\r\n newParams.indexEndName_ = '';\r\n }\r\n return newParams;\r\n };\r\n /**\r\n * @param {!Index} index\r\n * @return {!QueryParams}\r\n */\r\n QueryParams.prototype.orderBy = function (index) {\r\n var newParams = this.copy_();\r\n newParams.index_ = index;\r\n return newParams;\r\n };\r\n /**\r\n * @return {!Object}\r\n */\r\n QueryParams.prototype.getQueryObject = function () {\r\n var WIRE_PROTOCOL_CONSTANTS = QueryParams.WIRE_PROTOCOL_CONSTANTS_;\r\n var obj = {};\r\n if (this.startSet_) {\r\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_START_VALUE] = this.indexStartValue_;\r\n if (this.startNameSet_) {\r\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_START_NAME] = this.indexStartName_;\r\n }\r\n }\r\n if (this.endSet_) {\r\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_END_VALUE] = this.indexEndValue_;\r\n if (this.endNameSet_) {\r\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX_END_NAME] = this.indexEndName_;\r\n }\r\n }\r\n if (this.limitSet_) {\r\n obj[WIRE_PROTOCOL_CONSTANTS.LIMIT] = this.limit_;\r\n var viewFrom = this.viewFrom_;\r\n if (viewFrom === '') {\r\n if (this.isViewFromLeft()) {\r\n viewFrom = WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_LEFT;\r\n }\r\n else {\r\n viewFrom = WIRE_PROTOCOL_CONSTANTS.VIEW_FROM_RIGHT;\r\n }\r\n }\r\n obj[WIRE_PROTOCOL_CONSTANTS.VIEW_FROM] = viewFrom;\r\n }\r\n // For now, priority index is the default, so we only specify if it's some other index\r\n if (this.index_ !== PRIORITY_INDEX) {\r\n obj[WIRE_PROTOCOL_CONSTANTS.INDEX] = this.index_.toString();\r\n }\r\n return obj;\r\n };\r\n /**\r\n * @return {boolean}\r\n */\r\n QueryParams.prototype.loadsAllData = function () {\r\n return !(this.startSet_ || this.endSet_ || this.limitSet_);\r\n };\r\n /**\r\n * @return {boolean}\r\n */\r\n QueryParams.prototype.isDefault = function () {\r\n return this.loadsAllData() && this.index_ == PRIORITY_INDEX;\r\n };\r\n /**\r\n * @return {!NodeFilter}\r\n */\r\n QueryParams.prototype.getNodeFilter = function () {\r\n if (this.loadsAllData()) {\r\n return new IndexedFilter(this.getIndex());\r\n }\r\n else if (this.hasLimit()) {\r\n return new LimitedFilter(this);\r\n }\r\n else {\r\n return new RangedFilter(this);\r\n }\r\n };\r\n /**\r\n * Returns a set of REST query string parameters representing this query.\r\n *\r\n * @return {!Object.} query string parameters\r\n */\r\n QueryParams.prototype.toRestQueryStringParameters = function () {\r\n var REST_CONSTANTS = QueryParams.REST_QUERY_CONSTANTS_;\r\n var qs = {};\r\n if (this.isDefault()) {\r\n return qs;\r\n }\r\n var orderBy;\r\n if (this.index_ === PRIORITY_INDEX) {\r\n orderBy = REST_CONSTANTS.PRIORITY_INDEX;\r\n }\r\n else if (this.index_ === VALUE_INDEX) {\r\n orderBy = REST_CONSTANTS.VALUE_INDEX;\r\n }\r\n else if (this.index_ === KEY_INDEX) {\r\n orderBy = REST_CONSTANTS.KEY_INDEX;\r\n }\r\n else {\r\n util.assert(this.index_ instanceof PathIndex, 'Unrecognized index type!');\r\n orderBy = this.index_.toString();\r\n }\r\n qs[REST_CONSTANTS.ORDER_BY] = util.stringify(orderBy);\r\n if (this.startSet_) {\r\n qs[REST_CONSTANTS.START_AT] = util.stringify(this.indexStartValue_);\r\n if (this.startNameSet_) {\r\n qs[REST_CONSTANTS.START_AT] += ',' + util.stringify(this.indexStartName_);\r\n }\r\n }\r\n if (this.endSet_) {\r\n qs[REST_CONSTANTS.END_AT] = util.stringify(this.indexEndValue_);\r\n if (this.endNameSet_) {\r\n qs[REST_CONSTANTS.END_AT] += ',' + util.stringify(this.indexEndName_);\r\n }\r\n }\r\n if (this.limitSet_) {\r\n if (this.isViewFromLeft()) {\r\n qs[REST_CONSTANTS.LIMIT_TO_FIRST] = this.limit_;\r\n }\r\n else {\r\n qs[REST_CONSTANTS.LIMIT_TO_LAST] = this.limit_;\r\n }\r\n }\r\n return qs;\r\n };\r\n /**\r\n * Wire Protocol Constants\r\n * @const\r\n * @enum {string}\r\n * @private\r\n */\r\n QueryParams.WIRE_PROTOCOL_CONSTANTS_ = {\r\n INDEX_START_VALUE: 'sp',\r\n INDEX_START_NAME: 'sn',\r\n INDEX_END_VALUE: 'ep',\r\n INDEX_END_NAME: 'en',\r\n LIMIT: 'l',\r\n VIEW_FROM: 'vf',\r\n VIEW_FROM_LEFT: 'l',\r\n VIEW_FROM_RIGHT: 'r',\r\n INDEX: 'i'\r\n };\r\n /**\r\n * REST Query Constants\r\n * @const\r\n * @enum {string}\r\n * @private\r\n */\r\n QueryParams.REST_QUERY_CONSTANTS_ = {\r\n ORDER_BY: 'orderBy',\r\n PRIORITY_INDEX: '$priority',\r\n VALUE_INDEX: '$value',\r\n KEY_INDEX: '$key',\r\n START_AT: 'startAt',\r\n END_AT: 'endAt',\r\n LIMIT_TO_FIRST: 'limitToFirst',\r\n LIMIT_TO_LAST: 'limitToLast'\r\n };\r\n /**\r\n * Default, empty query parameters\r\n * @type {!QueryParams}\r\n * @const\r\n */\r\n QueryParams.DEFAULT = new QueryParams();\r\n return QueryParams;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar Reference = /** @class */ (function (_super) {\r\n tslib_1.__extends(Reference, _super);\r\n /**\r\n * Call options:\r\n * new Reference(Repo, Path) or\r\n * new Reference(url: string, string|RepoManager)\r\n *\r\n * Externally - this is the firebase.database.Reference type.\r\n *\r\n * @param {!Repo} repo\r\n * @param {(!Path)} path\r\n * @extends {Query}\r\n */\r\n function Reference(repo, path) {\r\n var _this = this;\r\n if (!(repo instanceof Repo)) {\r\n throw new Error('new Reference() no longer supported - use app.database().');\r\n }\r\n // call Query's constructor, passing in the repo and path.\r\n _this = _super.call(this, repo, path, QueryParams.DEFAULT, false) || this;\r\n return _this;\r\n }\r\n /** @return {?string} */\r\n Reference.prototype.getKey = function () {\r\n util.validateArgCount('Reference.key', 0, 0, arguments.length);\r\n if (this.path.isEmpty())\r\n return null;\r\n else\r\n return this.path.getBack();\r\n };\r\n /**\r\n * @param {!(string|Path)} pathString\r\n * @return {!Reference}\r\n */\r\n Reference.prototype.child = function (pathString) {\r\n util.validateArgCount('Reference.child', 1, 1, arguments.length);\r\n if (typeof pathString === 'number') {\r\n pathString = String(pathString);\r\n }\r\n else if (!(pathString instanceof Path)) {\r\n if (this.path.getFront() === null)\r\n validateRootPathString('Reference.child', 1, pathString, false);\r\n else\r\n validatePathString('Reference.child', 1, pathString, false);\r\n }\r\n return new Reference(this.repo, this.path.child(pathString));\r\n };\r\n /** @return {?Reference} */\r\n Reference.prototype.getParent = function () {\r\n util.validateArgCount('Reference.parent', 0, 0, arguments.length);\r\n var parentPath = this.path.parent();\r\n return parentPath === null ? null : new Reference(this.repo, parentPath);\r\n };\r\n /** @return {!Reference} */\r\n Reference.prototype.getRoot = function () {\r\n util.validateArgCount('Reference.root', 0, 0, arguments.length);\r\n var ref = this;\r\n while (ref.getParent() !== null) {\r\n ref = ref.getParent();\r\n }\r\n return ref;\r\n };\r\n /** @return {!Database} */\r\n Reference.prototype.databaseProp = function () {\r\n return this.repo.database;\r\n };\r\n /**\r\n * @param {*} newVal\r\n * @param {function(?Error)=} onComplete\r\n * @return {!Promise}\r\n */\r\n Reference.prototype.set = function (newVal, onComplete) {\r\n util.validateArgCount('Reference.set', 1, 2, arguments.length);\r\n validateWritablePath('Reference.set', this.path);\r\n validateFirebaseDataArg('Reference.set', 1, newVal, this.path, false);\r\n util.validateCallback('Reference.set', 2, onComplete, true);\r\n var deferred = new util.Deferred();\r\n this.repo.setWithPriority(this.path, newVal, \r\n /*priority=*/ null, deferred.wrapCallback(onComplete));\r\n return deferred.promise;\r\n };\r\n /**\r\n * @param {!Object} objectToMerge\r\n * @param {function(?Error)=} onComplete\r\n * @return {!Promise}\r\n */\r\n Reference.prototype.update = function (objectToMerge, onComplete) {\r\n util.validateArgCount('Reference.update', 1, 2, arguments.length);\r\n validateWritablePath('Reference.update', this.path);\r\n if (Array.isArray(objectToMerge)) {\r\n var newObjectToMerge = {};\r\n for (var i = 0; i < objectToMerge.length; ++i) {\r\n newObjectToMerge['' + i] = objectToMerge[i];\r\n }\r\n objectToMerge = newObjectToMerge;\r\n warn('Passing an Array to Firebase.update() is deprecated. ' +\r\n 'Use set() if you want to overwrite the existing data, or ' +\r\n 'an Object with integer keys if you really do want to ' +\r\n 'only update some of the children.');\r\n }\r\n validateFirebaseMergeDataArg('Reference.update', 1, objectToMerge, this.path, false);\r\n util.validateCallback('Reference.update', 2, onComplete, true);\r\n var deferred = new util.Deferred();\r\n this.repo.update(this.path, objectToMerge, deferred.wrapCallback(onComplete));\r\n return deferred.promise;\r\n };\r\n /**\r\n * @param {*} newVal\r\n * @param {string|number|null} newPriority\r\n * @param {function(?Error)=} onComplete\r\n * @return {!Promise}\r\n */\r\n Reference.prototype.setWithPriority = function (newVal, newPriority, onComplete) {\r\n util.validateArgCount('Reference.setWithPriority', 2, 3, arguments.length);\r\n validateWritablePath('Reference.setWithPriority', this.path);\r\n validateFirebaseDataArg('Reference.setWithPriority', 1, newVal, this.path, false);\r\n validatePriority('Reference.setWithPriority', 2, newPriority, false);\r\n util.validateCallback('Reference.setWithPriority', 3, onComplete, true);\r\n if (this.getKey() === '.length' || this.getKey() === '.keys')\r\n throw 'Reference.setWithPriority failed: ' +\r\n this.getKey() +\r\n ' is a read-only object.';\r\n var deferred = new util.Deferred();\r\n this.repo.setWithPriority(this.path, newVal, newPriority, deferred.wrapCallback(onComplete));\r\n return deferred.promise;\r\n };\r\n /**\r\n * @param {function(?Error)=} onComplete\r\n * @return {!Promise}\r\n */\r\n Reference.prototype.remove = function (onComplete) {\r\n util.validateArgCount('Reference.remove', 0, 1, arguments.length);\r\n validateWritablePath('Reference.remove', this.path);\r\n util.validateCallback('Reference.remove', 1, onComplete, true);\r\n return this.set(null, onComplete);\r\n };\r\n /**\r\n * @param {function(*):*} transactionUpdate\r\n * @param {(function(?Error, boolean, ?DataSnapshot))=} onComplete\r\n * @param {boolean=} applyLocally\r\n * @return {!Promise}\r\n */\r\n Reference.prototype.transaction = function (transactionUpdate, onComplete, applyLocally) {\r\n util.validateArgCount('Reference.transaction', 1, 3, arguments.length);\r\n validateWritablePath('Reference.transaction', this.path);\r\n util.validateCallback('Reference.transaction', 1, transactionUpdate, false);\r\n util.validateCallback('Reference.transaction', 2, onComplete, true);\r\n // NOTE: applyLocally is an internal-only option for now. We need to decide if we want to keep it and how\r\n // to expose it.\r\n validateBoolean('Reference.transaction', 3, applyLocally, true);\r\n if (this.getKey() === '.length' || this.getKey() === '.keys')\r\n throw 'Reference.transaction failed: ' +\r\n this.getKey() +\r\n ' is a read-only object.';\r\n if (applyLocally === undefined)\r\n applyLocally = true;\r\n var deferred = new util.Deferred();\r\n if (typeof onComplete === 'function') {\r\n deferred.promise.catch(function () { });\r\n }\r\n var promiseComplete = function (error$$1, committed, snapshot) {\r\n if (error$$1) {\r\n deferred.reject(error$$1);\r\n }\r\n else {\r\n deferred.resolve(new TransactionResult(committed, snapshot));\r\n }\r\n if (typeof onComplete === 'function') {\r\n onComplete(error$$1, committed, snapshot);\r\n }\r\n };\r\n this.repo.startTransaction(this.path, transactionUpdate, promiseComplete, applyLocally);\r\n return deferred.promise;\r\n };\r\n /**\r\n * @param {string|number|null} priority\r\n * @param {function(?Error)=} onComplete\r\n * @return {!Promise}\r\n */\r\n Reference.prototype.setPriority = function (priority, onComplete) {\r\n util.validateArgCount('Reference.setPriority', 1, 2, arguments.length);\r\n validateWritablePath('Reference.setPriority', this.path);\r\n validatePriority('Reference.setPriority', 1, priority, false);\r\n util.validateCallback('Reference.setPriority', 2, onComplete, true);\r\n var deferred = new util.Deferred();\r\n this.repo.setWithPriority(this.path.child('.priority'), priority, null, deferred.wrapCallback(onComplete));\r\n return deferred.promise;\r\n };\r\n /**\r\n * @param {*=} value\r\n * @param {function(?Error)=} onComplete\r\n * @return {!Reference}\r\n */\r\n Reference.prototype.push = function (value, onComplete) {\r\n util.validateArgCount('Reference.push', 0, 2, arguments.length);\r\n validateWritablePath('Reference.push', this.path);\r\n validateFirebaseDataArg('Reference.push', 1, value, this.path, true);\r\n util.validateCallback('Reference.push', 2, onComplete, true);\r\n var now = this.repo.serverTime();\r\n var name = nextPushId(now);\r\n // push() returns a ThennableReference whose promise is fulfilled with a regular Reference.\r\n // We use child() to create handles to two different references. The first is turned into a\r\n // ThennableReference below by adding then() and catch() methods and is used as the\r\n // return value of push(). The second remains a regular Reference and is used as the fulfilled\r\n // value of the first ThennableReference.\r\n var thennablePushRef = this.child(name);\r\n var pushRef = this.child(name);\r\n var promise;\r\n if (value != null) {\r\n promise = thennablePushRef.set(value, onComplete).then(function () { return pushRef; });\r\n }\r\n else {\r\n promise = Promise.resolve(pushRef);\r\n }\r\n thennablePushRef.then = promise.then.bind(promise);\r\n thennablePushRef.catch = promise.then.bind(promise, undefined);\r\n if (typeof onComplete === 'function') {\r\n promise.catch(function () { });\r\n }\r\n return thennablePushRef;\r\n };\r\n /**\r\n * @return {!OnDisconnect}\r\n */\r\n Reference.prototype.onDisconnect = function () {\r\n validateWritablePath('Reference.onDisconnect', this.path);\r\n return new OnDisconnect(this.repo, this.path);\r\n };\r\n Object.defineProperty(Reference.prototype, \"database\", {\r\n get: function () {\r\n return this.databaseProp();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"key\", {\r\n get: function () {\r\n return this.getKey();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"parent\", {\r\n get: function () {\r\n return this.getParent();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"root\", {\r\n get: function () {\r\n return this.getRoot();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Reference;\r\n}(Query));\r\n/**\r\n * Define reference constructor in various modules\r\n *\r\n * We are doing this here to avoid several circular\r\n * dependency issues\r\n */\r\nQuery.__referenceConstructor = Reference;\r\nSyncPoint.__referenceConstructor = Reference;\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Node in a Tree.\r\n */\r\nvar TreeNode = /** @class */ (function () {\r\n function TreeNode() {\r\n // TODO: Consider making accessors that create children and value lazily or\r\n // separate Internal / Leaf 'types'.\r\n this.children = {};\r\n this.childCount = 0;\r\n this.value = null;\r\n }\r\n return TreeNode;\r\n}());\r\n/**\r\n * A light-weight tree, traversable by path. Nodes can have both values and children.\r\n * Nodes are not enumerated (by forEachChild) unless they have a value or non-empty\r\n * children.\r\n */\r\nvar Tree = /** @class */ (function () {\r\n /**\r\n * @template T\r\n * @param {string=} name_ Optional name of the node.\r\n * @param {Tree=} parent_ Optional parent node.\r\n * @param {TreeNode=} node_ Optional node to wrap.\r\n */\r\n function Tree(name_, parent_, node_) {\r\n if (name_ === void 0) { name_ = ''; }\r\n if (parent_ === void 0) { parent_ = null; }\r\n if (node_ === void 0) { node_ = new TreeNode(); }\r\n this.name_ = name_;\r\n this.parent_ = parent_;\r\n this.node_ = node_;\r\n }\r\n /**\r\n * Returns a sub-Tree for the given path.\r\n *\r\n * @param {!(string|Path)} pathObj Path to look up.\r\n * @return {!Tree.} Tree for path.\r\n */\r\n Tree.prototype.subTree = function (pathObj) {\r\n // TODO: Require pathObj to be Path?\r\n var path = pathObj instanceof Path ? pathObj : new Path(pathObj);\r\n var child = this, next;\r\n while ((next = path.getFront()) !== null) {\r\n var childNode = util.safeGet(child.node_.children, next) || new TreeNode();\r\n child = new Tree(next, child, childNode);\r\n path = path.popFront();\r\n }\r\n return child;\r\n };\r\n /**\r\n * Returns the data associated with this tree node.\r\n *\r\n * @return {?T} The data or null if no data exists.\r\n */\r\n Tree.prototype.getValue = function () {\r\n return this.node_.value;\r\n };\r\n /**\r\n * Sets data to this tree node.\r\n *\r\n * @param {!T} value Value to set.\r\n */\r\n Tree.prototype.setValue = function (value) {\r\n util.assert(typeof value !== 'undefined', 'Cannot set value to undefined');\r\n this.node_.value = value;\r\n this.updateParents_();\r\n };\r\n /**\r\n * Clears the contents of the tree node (its value and all children).\r\n */\r\n Tree.prototype.clear = function () {\r\n this.node_.value = null;\r\n this.node_.children = {};\r\n this.node_.childCount = 0;\r\n this.updateParents_();\r\n };\r\n /**\r\n * @return {boolean} Whether the tree has any children.\r\n */\r\n Tree.prototype.hasChildren = function () {\r\n return this.node_.childCount > 0;\r\n };\r\n /**\r\n * @return {boolean} Whether the tree is empty (no value or children).\r\n */\r\n Tree.prototype.isEmpty = function () {\r\n return this.getValue() === null && !this.hasChildren();\r\n };\r\n /**\r\n * Calls action for each child of this tree node.\r\n *\r\n * @param {function(!Tree.)} action Action to be called for each child.\r\n */\r\n Tree.prototype.forEachChild = function (action) {\r\n var _this = this;\r\n util.forEach(this.node_.children, function (child, childTree) {\r\n action(new Tree(child, _this, childTree));\r\n });\r\n };\r\n /**\r\n * Does a depth-first traversal of this node's descendants, calling action for each one.\r\n *\r\n * @param {function(!Tree.)} action Action to be called for each child.\r\n * @param {boolean=} includeSelf Whether to call action on this node as well. Defaults to\r\n * false.\r\n * @param {boolean=} childrenFirst Whether to call action on children before calling it on\r\n * parent.\r\n */\r\n Tree.prototype.forEachDescendant = function (action, includeSelf, childrenFirst) {\r\n if (includeSelf && !childrenFirst)\r\n action(this);\r\n this.forEachChild(function (child) {\r\n child.forEachDescendant(action, /*includeSelf=*/ true, childrenFirst);\r\n });\r\n if (includeSelf && childrenFirst)\r\n action(this);\r\n };\r\n /**\r\n * Calls action on each ancestor node.\r\n *\r\n * @param {function(!Tree.)} action Action to be called on each parent; return\r\n * true to abort.\r\n * @param {boolean=} includeSelf Whether to call action on this node as well.\r\n * @return {boolean} true if the action callback returned true.\r\n */\r\n Tree.prototype.forEachAncestor = function (action, includeSelf) {\r\n var node = includeSelf ? this : this.parent();\r\n while (node !== null) {\r\n if (action(node)) {\r\n return true;\r\n }\r\n node = node.parent();\r\n }\r\n return false;\r\n };\r\n /**\r\n * Does a depth-first traversal of this node's descendants. When a descendant with a value\r\n * is found, action is called on it and traversal does not continue inside the node.\r\n * Action is *not* called on this node.\r\n *\r\n * @param {function(!Tree.)} action Action to be called for each child.\r\n */\r\n Tree.prototype.forEachImmediateDescendantWithValue = function (action) {\r\n this.forEachChild(function (child) {\r\n if (child.getValue() !== null)\r\n action(child);\r\n else\r\n child.forEachImmediateDescendantWithValue(action);\r\n });\r\n };\r\n /**\r\n * @return {!Path} The path of this tree node, as a Path.\r\n */\r\n Tree.prototype.path = function () {\r\n return new Path(this.parent_ === null\r\n ? this.name_\r\n : this.parent_.path() + '/' + this.name_);\r\n };\r\n /**\r\n * @return {string} The name of the tree node.\r\n */\r\n Tree.prototype.name = function () {\r\n return this.name_;\r\n };\r\n /**\r\n * @return {?Tree} The parent tree node, or null if this is the root of the tree.\r\n */\r\n Tree.prototype.parent = function () {\r\n return this.parent_;\r\n };\r\n /**\r\n * Adds or removes this child from its parent based on whether it's empty or not.\r\n *\r\n * @private\r\n */\r\n Tree.prototype.updateParents_ = function () {\r\n if (this.parent_ !== null)\r\n this.parent_.updateChild_(this.name_, this);\r\n };\r\n /**\r\n * Adds or removes the passed child to this tree node, depending on whether it's empty.\r\n *\r\n * @param {string} childName The name of the child to update.\r\n * @param {!Tree.} child The child to update.\r\n * @private\r\n */\r\n Tree.prototype.updateChild_ = function (childName, child) {\r\n var childEmpty = child.isEmpty();\r\n var childExists = util.contains(this.node_.children, childName);\r\n if (childEmpty && childExists) {\r\n delete this.node_.children[childName];\r\n this.node_.childCount--;\r\n this.updateParents_();\r\n }\r\n else if (!childEmpty && !childExists) {\r\n this.node_.children[childName] = child.node_;\r\n this.node_.childCount++;\r\n this.updateParents_();\r\n }\r\n };\r\n return Tree;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// TODO: This is pretty messy. Ideally, a lot of this would move into FirebaseData, or a transaction-specific\r\n// component used by FirebaseData, but it has ties to user callbacks (transaction update and onComplete) as well\r\n// as the realtime connection (to send transactions to the server). So that all needs to be decoupled first.\r\n// For now it's part of Repo, but in its own file.\r\n/**\r\n * @enum {number}\r\n */\r\nvar TransactionStatus;\r\n(function (TransactionStatus) {\r\n // We've run the transaction and updated transactionResultData_ with the result, but it isn't currently sent to the\r\n // server. A transaction will go from RUN -> SENT -> RUN if it comes back from the server as rejected due to\r\n // mismatched hash.\r\n TransactionStatus[TransactionStatus[\"RUN\"] = 0] = \"RUN\";\r\n // We've run the transaction and sent it to the server and it's currently outstanding (hasn't come back as accepted\r\n // or rejected yet).\r\n TransactionStatus[TransactionStatus[\"SENT\"] = 1] = \"SENT\";\r\n // Temporary state used to mark completed transactions (whether successful or aborted). The transaction will be\r\n // removed when we get a chance to prune completed ones.\r\n TransactionStatus[TransactionStatus[\"COMPLETED\"] = 2] = \"COMPLETED\";\r\n // Used when an already-sent transaction needs to be aborted (e.g. due to a conflicting set() call that was made).\r\n // If it comes back as unsuccessful, we'll abort it.\r\n TransactionStatus[TransactionStatus[\"SENT_NEEDS_ABORT\"] = 3] = \"SENT_NEEDS_ABORT\";\r\n // Temporary state used to mark transactions that need to be aborted.\r\n TransactionStatus[TransactionStatus[\"NEEDS_ABORT\"] = 4] = \"NEEDS_ABORT\";\r\n})(TransactionStatus || (TransactionStatus = {}));\r\n/**\r\n * If a transaction does not succeed after 25 retries, we abort it. Among other things this ensure that if there's\r\n * ever a bug causing a mismatch between client / server hashes for some data, we won't retry indefinitely.\r\n * @type {number}\r\n * @const\r\n * @private\r\n */\r\nRepo.MAX_TRANSACTION_RETRIES_ = 25;\r\n/**\r\n * Setup the transaction data structures\r\n * @private\r\n */\r\nRepo.prototype.transactions_init_ = function () {\r\n /**\r\n * Stores queues of outstanding transactions for Firebase locations.\r\n *\r\n * @type {!Tree.>}\r\n * @private\r\n */\r\n this.transactionQueueTree_ = new Tree();\r\n};\r\n/**\r\n * Creates a new transaction, adds it to the transactions we're tracking, and sends it to the server if possible.\r\n *\r\n * @param {!Path} path Path at which to do transaction.\r\n * @param {function(*):*} transactionUpdate Update callback.\r\n * @param {?function(?Error, boolean, ?DataSnapshot)} onComplete Completion callback.\r\n * @param {boolean} applyLocally Whether or not to make intermediate results visible\r\n */\r\nRepo.prototype.startTransaction = function (path, transactionUpdate, onComplete, applyLocally) {\r\n this.log_('transaction on ' + path);\r\n // Add a watch to make sure we get server updates.\r\n var valueCallback = function () { };\r\n var watchRef = new Reference(this, path);\r\n watchRef.on('value', valueCallback);\r\n var unwatcher = function () {\r\n watchRef.off('value', valueCallback);\r\n };\r\n // Initialize transaction.\r\n var transaction = {\r\n path: path,\r\n update: transactionUpdate,\r\n onComplete: onComplete,\r\n // One of TransactionStatus enums.\r\n status: null,\r\n // Used when combining transactions at different locations to figure out which one goes first.\r\n order: LUIDGenerator(),\r\n // Whether to raise local events for this transaction.\r\n applyLocally: applyLocally,\r\n // Count of how many times we've retried the transaction.\r\n retryCount: 0,\r\n // Function to call to clean up our .on() listener.\r\n unwatcher: unwatcher,\r\n // Stores why a transaction was aborted.\r\n abortReason: null,\r\n currentWriteId: null,\r\n currentInputSnapshot: null,\r\n currentOutputSnapshotRaw: null,\r\n currentOutputSnapshotResolved: null\r\n };\r\n // Run transaction initially.\r\n var currentState = this.getLatestState_(path);\r\n transaction.currentInputSnapshot = currentState;\r\n var newVal = transaction.update(currentState.val());\r\n if (newVal === undefined) {\r\n // Abort transaction.\r\n transaction.unwatcher();\r\n transaction.currentOutputSnapshotRaw = null;\r\n transaction.currentOutputSnapshotResolved = null;\r\n if (transaction.onComplete) {\r\n // We just set the input snapshot, so this cast should be safe\r\n var snapshot = new DataSnapshot(transaction.currentInputSnapshot, new Reference(this, transaction.path), PRIORITY_INDEX);\r\n transaction.onComplete(null, false, snapshot);\r\n }\r\n }\r\n else {\r\n validateFirebaseData('transaction failed: Data returned ', newVal, transaction.path);\r\n // Mark as run and add to our queue.\r\n transaction.status = TransactionStatus.RUN;\r\n var queueNode = this.transactionQueueTree_.subTree(path);\r\n var nodeQueue = queueNode.getValue() || [];\r\n nodeQueue.push(transaction);\r\n queueNode.setValue(nodeQueue);\r\n // Update visibleData and raise events\r\n // Note: We intentionally raise events after updating all of our transaction state, since the user could\r\n // start new transactions from the event callbacks.\r\n var priorityForNode = void 0;\r\n if (typeof newVal === 'object' &&\r\n newVal !== null &&\r\n util.contains(newVal, '.priority')) {\r\n priorityForNode = util.safeGet(newVal, '.priority');\r\n util.assert(isValidPriority(priorityForNode), 'Invalid priority returned by transaction. ' +\r\n 'Priority must be a valid string, finite number, server value, or null.');\r\n }\r\n else {\r\n var currentNode = this.serverSyncTree_.calcCompleteEventCache(path) ||\r\n ChildrenNode.EMPTY_NODE;\r\n priorityForNode = currentNode.getPriority().val();\r\n }\r\n priorityForNode /** @type {null|number|string} */ = priorityForNode;\r\n var serverValues = this.generateServerValues();\r\n var newNodeUnresolved = nodeFromJSON$1(newVal, priorityForNode);\r\n var newNode = resolveDeferredValueSnapshot(newNodeUnresolved, serverValues);\r\n transaction.currentOutputSnapshotRaw = newNodeUnresolved;\r\n transaction.currentOutputSnapshotResolved = newNode;\r\n transaction.currentWriteId = this.getNextWriteId_();\r\n var events = this.serverSyncTree_.applyUserOverwrite(path, newNode, transaction.currentWriteId, transaction.applyLocally);\r\n this.eventQueue_.raiseEventsForChangedPath(path, events);\r\n this.sendReadyTransactions_();\r\n }\r\n};\r\n/**\r\n * @param {!Path} path\r\n * @param {Array.=} excludeSets A specific set to exclude\r\n * @return {Node}\r\n * @private\r\n */\r\nRepo.prototype.getLatestState_ = function (path, excludeSets) {\r\n return (this.serverSyncTree_.calcCompleteEventCache(path, excludeSets) ||\r\n ChildrenNode.EMPTY_NODE);\r\n};\r\n/**\r\n * Sends any already-run transactions that aren't waiting for outstanding transactions to\r\n * complete.\r\n *\r\n * Externally it's called with no arguments, but it calls itself recursively with a particular\r\n * transactionQueueTree node to recurse through the tree.\r\n *\r\n * @param {Tree.>=} node transactionQueueTree node to start at.\r\n * @private\r\n */\r\nRepo.prototype.sendReadyTransactions_ = function (node) {\r\n var _this = this;\r\n if (node === void 0) { node = this.transactionQueueTree_; }\r\n // Before recursing, make sure any completed transactions are removed.\r\n if (!node) {\r\n this.pruneCompletedTransactionsBelowNode_(node);\r\n }\r\n if (node.getValue() !== null) {\r\n var queue = this.buildTransactionQueue_(node);\r\n util.assert(queue.length > 0, 'Sending zero length transaction queue');\r\n var allRun = queue.every(function (transaction) { return transaction.status === TransactionStatus.RUN; });\r\n // If they're all run (and not sent), we can send them. Else, we must wait.\r\n if (allRun) {\r\n this.sendTransactionQueue_(node.path(), queue);\r\n }\r\n }\r\n else if (node.hasChildren()) {\r\n node.forEachChild(function (childNode) {\r\n _this.sendReadyTransactions_(childNode);\r\n });\r\n }\r\n};\r\n/**\r\n * Given a list of run transactions, send them to the server and then handle the result (success or failure).\r\n *\r\n * @param {!Path} path The location of the queue.\r\n * @param {!Array.} queue Queue of transactions under the specified location.\r\n * @private\r\n */\r\nRepo.prototype.sendTransactionQueue_ = function (path, queue) {\r\n var _this = this;\r\n // Mark transactions as sent and increment retry count!\r\n var setsToIgnore = queue.map(function (txn) {\r\n return txn.currentWriteId;\r\n });\r\n var latestState = this.getLatestState_(path, setsToIgnore);\r\n var snapToSend = latestState;\r\n var latestHash = latestState.hash();\r\n for (var i = 0; i < queue.length; i++) {\r\n var txn = queue[i];\r\n util.assert(txn.status === TransactionStatus.RUN, 'tryToSendTransactionQueue_: items in queue should all be run.');\r\n txn.status = TransactionStatus.SENT;\r\n txn.retryCount++;\r\n var relativePath = Path.relativePath(path, txn.path);\r\n // If we've gotten to this point, the output snapshot must be defined.\r\n snapToSend = snapToSend.updateChild(relativePath /**@type {!Node} */, txn.currentOutputSnapshotRaw);\r\n }\r\n var dataToSend = snapToSend.val(true);\r\n var pathToSend = path;\r\n // Send the put.\r\n this.server_.put(pathToSend.toString(), dataToSend, function (status) {\r\n _this.log_('transaction put response', {\r\n path: pathToSend.toString(),\r\n status: status\r\n });\r\n var events = [];\r\n if (status === 'ok') {\r\n // Queue up the callbacks and fire them after cleaning up all of our transaction state, since\r\n // the callback could trigger more transactions or sets.\r\n var callbacks = [];\r\n for (var i = 0; i < queue.length; i++) {\r\n queue[i].status = TransactionStatus.COMPLETED;\r\n events = events.concat(_this.serverSyncTree_.ackUserWrite(queue[i].currentWriteId));\r\n if (queue[i].onComplete) {\r\n // We never unset the output snapshot, and given that this transaction is complete, it should be set\r\n var node = queue[i].currentOutputSnapshotResolved;\r\n var ref = new Reference(_this, queue[i].path);\r\n var snapshot = new DataSnapshot(node, ref, PRIORITY_INDEX);\r\n callbacks.push(queue[i].onComplete.bind(null, null, true, snapshot));\r\n }\r\n queue[i].unwatcher();\r\n }\r\n // Now remove the completed transactions.\r\n _this.pruneCompletedTransactionsBelowNode_(_this.transactionQueueTree_.subTree(path));\r\n // There may be pending transactions that we can now send.\r\n _this.sendReadyTransactions_();\r\n _this.eventQueue_.raiseEventsForChangedPath(path, events);\r\n // Finally, trigger onComplete callbacks.\r\n for (var i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n }\r\n else {\r\n // transactions are no longer sent. Update their status appropriately.\r\n if (status === 'datastale') {\r\n for (var i = 0; i < queue.length; i++) {\r\n if (queue[i].status === TransactionStatus.SENT_NEEDS_ABORT)\r\n queue[i].status = TransactionStatus.NEEDS_ABORT;\r\n else\r\n queue[i].status = TransactionStatus.RUN;\r\n }\r\n }\r\n else {\r\n warn('transaction at ' + pathToSend.toString() + ' failed: ' + status);\r\n for (var i = 0; i < queue.length; i++) {\r\n queue[i].status = TransactionStatus.NEEDS_ABORT;\r\n queue[i].abortReason = status;\r\n }\r\n }\r\n _this.rerunTransactions_(path);\r\n }\r\n }, latestHash);\r\n};\r\n/**\r\n * Finds all transactions dependent on the data at changedPath and reruns them.\r\n *\r\n * Should be called any time cached data changes.\r\n *\r\n * Return the highest path that was affected by rerunning transactions. This is the path at which events need to\r\n * be raised for.\r\n *\r\n * @param {!Path} changedPath The path in mergedData that changed.\r\n * @return {!Path} The rootmost path that was affected by rerunning transactions.\r\n * @private\r\n */\r\nRepo.prototype.rerunTransactions_ = function (changedPath) {\r\n var rootMostTransactionNode = this.getAncestorTransactionNode_(changedPath);\r\n var path = rootMostTransactionNode.path();\r\n var queue = this.buildTransactionQueue_(rootMostTransactionNode);\r\n this.rerunTransactionQueue_(queue, path);\r\n return path;\r\n};\r\n/**\r\n * Does all the work of rerunning transactions (as well as cleans up aborted transactions and whatnot).\r\n *\r\n * @param {Array.} queue The queue of transactions to run.\r\n * @param {!Path} path The path the queue is for.\r\n * @private\r\n */\r\nRepo.prototype.rerunTransactionQueue_ = function (queue, path) {\r\n if (queue.length === 0) {\r\n return; // Nothing to do!\r\n }\r\n // Queue up the callbacks and fire them after cleaning up all of our transaction state, since\r\n // the callback could trigger more transactions or sets.\r\n var callbacks = [];\r\n var events = [];\r\n // Ignore all of the sets we're going to re-run.\r\n var txnsToRerun = queue.filter(function (q) {\r\n return q.status === TransactionStatus.RUN;\r\n });\r\n var setsToIgnore = txnsToRerun.map(function (q) {\r\n return q.currentWriteId;\r\n });\r\n for (var i = 0; i < queue.length; i++) {\r\n var transaction = queue[i];\r\n var relativePath = Path.relativePath(path, transaction.path);\r\n var abortTransaction = false, abortReason = void 0;\r\n util.assert(relativePath !== null, 'rerunTransactionsUnderNode_: relativePath should not be null.');\r\n if (transaction.status === TransactionStatus.NEEDS_ABORT) {\r\n abortTransaction = true;\r\n abortReason = transaction.abortReason;\r\n events = events.concat(this.serverSyncTree_.ackUserWrite(transaction.currentWriteId, true));\r\n }\r\n else if (transaction.status === TransactionStatus.RUN) {\r\n if (transaction.retryCount >= Repo.MAX_TRANSACTION_RETRIES_) {\r\n abortTransaction = true;\r\n abortReason = 'maxretry';\r\n events = events.concat(this.serverSyncTree_.ackUserWrite(transaction.currentWriteId, true));\r\n }\r\n else {\r\n // This code reruns a transaction\r\n var currentNode = this.getLatestState_(transaction.path, setsToIgnore);\r\n transaction.currentInputSnapshot = currentNode;\r\n var newData = queue[i].update(currentNode.val());\r\n if (newData !== undefined) {\r\n validateFirebaseData('transaction failed: Data returned ', newData, transaction.path);\r\n var newDataNode = nodeFromJSON$1(newData);\r\n var hasExplicitPriority = typeof newData === 'object' &&\r\n newData != null &&\r\n util.contains(newData, '.priority');\r\n if (!hasExplicitPriority) {\r\n // Keep the old priority if there wasn't a priority explicitly specified.\r\n newDataNode = newDataNode.updatePriority(currentNode.getPriority());\r\n }\r\n var oldWriteId = transaction.currentWriteId;\r\n var serverValues = this.generateServerValues();\r\n var newNodeResolved = resolveDeferredValueSnapshot(newDataNode, serverValues);\r\n transaction.currentOutputSnapshotRaw = newDataNode;\r\n transaction.currentOutputSnapshotResolved = newNodeResolved;\r\n transaction.currentWriteId = this.getNextWriteId_();\r\n // Mutates setsToIgnore in place\r\n setsToIgnore.splice(setsToIgnore.indexOf(oldWriteId), 1);\r\n events = events.concat(this.serverSyncTree_.applyUserOverwrite(transaction.path, newNodeResolved, transaction.currentWriteId, transaction.applyLocally));\r\n events = events.concat(this.serverSyncTree_.ackUserWrite(oldWriteId, true));\r\n }\r\n else {\r\n abortTransaction = true;\r\n abortReason = 'nodata';\r\n events = events.concat(this.serverSyncTree_.ackUserWrite(transaction.currentWriteId, true));\r\n }\r\n }\r\n }\r\n this.eventQueue_.raiseEventsForChangedPath(path, events);\r\n events = [];\r\n if (abortTransaction) {\r\n // Abort.\r\n queue[i].status = TransactionStatus.COMPLETED;\r\n // Removing a listener can trigger pruning which can muck with mergedData/visibleData (as it prunes data).\r\n // So defer the unwatcher until we're done.\r\n (function (unwatcher) {\r\n setTimeout(unwatcher, Math.floor(0));\r\n })(queue[i].unwatcher);\r\n if (queue[i].onComplete) {\r\n if (abortReason === 'nodata') {\r\n var ref = new Reference(this, queue[i].path);\r\n // We set this field immediately, so it's safe to cast to an actual snapshot\r\n var lastInput /** @type {!Node} */ = queue[i].currentInputSnapshot;\r\n var snapshot = new DataSnapshot(lastInput, ref, PRIORITY_INDEX);\r\n callbacks.push(queue[i].onComplete.bind(null, null, false, snapshot));\r\n }\r\n else {\r\n callbacks.push(queue[i].onComplete.bind(null, new Error(abortReason), false, null));\r\n }\r\n }\r\n }\r\n }\r\n // Clean up completed transactions.\r\n this.pruneCompletedTransactionsBelowNode_(this.transactionQueueTree_);\r\n // Now fire callbacks, now that we're in a good, known state.\r\n for (var i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n // Try to send the transaction result to the server.\r\n this.sendReadyTransactions_();\r\n};\r\n/**\r\n * Returns the rootmost ancestor node of the specified path that has a pending transaction on it, or just returns\r\n * the node for the given path if there are no pending transactions on any ancestor.\r\n *\r\n * @param {!Path} path The location to start at.\r\n * @return {!Tree.>} The rootmost node with a transaction.\r\n * @private\r\n */\r\nRepo.prototype.getAncestorTransactionNode_ = function (path) {\r\n var front;\r\n // Start at the root and walk deeper into the tree towards path until we find a node with pending transactions.\r\n var transactionNode = this.transactionQueueTree_;\r\n while ((front = path.getFront()) !== null &&\r\n transactionNode.getValue() === null) {\r\n transactionNode = transactionNode.subTree(front);\r\n path = path.popFront();\r\n }\r\n return transactionNode;\r\n};\r\n/**\r\n * Builds the queue of all transactions at or below the specified transactionNode.\r\n *\r\n * @param {!Tree.>} transactionNode\r\n * @return {Array.} The generated queue.\r\n * @private\r\n */\r\nRepo.prototype.buildTransactionQueue_ = function (transactionNode) {\r\n // Walk any child transaction queues and aggregate them into a single queue.\r\n var transactionQueue = [];\r\n this.aggregateTransactionQueuesForNode_(transactionNode, transactionQueue);\r\n // Sort them by the order the transactions were created.\r\n transactionQueue.sort(function (a, b) {\r\n return a.order - b.order;\r\n });\r\n return transactionQueue;\r\n};\r\n/**\r\n * @param {!Tree.>} node\r\n * @param {Array.} queue\r\n * @private\r\n */\r\nRepo.prototype.aggregateTransactionQueuesForNode_ = function (node, queue) {\r\n var _this = this;\r\n var nodeQueue = node.getValue();\r\n if (nodeQueue !== null) {\r\n for (var i = 0; i < nodeQueue.length; i++) {\r\n queue.push(nodeQueue[i]);\r\n }\r\n }\r\n node.forEachChild(function (child) {\r\n _this.aggregateTransactionQueuesForNode_(child, queue);\r\n });\r\n};\r\n/**\r\n * Remove COMPLETED transactions at or below this node in the transactionQueueTree_.\r\n *\r\n * @param {!Tree.>} node\r\n * @private\r\n */\r\nRepo.prototype.pruneCompletedTransactionsBelowNode_ = function (node) {\r\n var _this = this;\r\n var queue = node.getValue();\r\n if (queue) {\r\n var to = 0;\r\n for (var from = 0; from < queue.length; from++) {\r\n if (queue[from].status !== TransactionStatus.COMPLETED) {\r\n queue[to] = queue[from];\r\n to++;\r\n }\r\n }\r\n queue.length = to;\r\n node.setValue(queue.length > 0 ? queue : null);\r\n }\r\n node.forEachChild(function (childNode) {\r\n _this.pruneCompletedTransactionsBelowNode_(childNode);\r\n });\r\n};\r\n/**\r\n * Aborts all transactions on ancestors or descendants of the specified path. Called when doing a set() or update()\r\n * since we consider them incompatible with transactions.\r\n *\r\n * @param {!Path} path Path for which we want to abort related transactions.\r\n * @return {!Path}\r\n * @private\r\n */\r\nRepo.prototype.abortTransactions_ = function (path) {\r\n var _this = this;\r\n var affectedPath = this.getAncestorTransactionNode_(path).path();\r\n var transactionNode = this.transactionQueueTree_.subTree(path);\r\n transactionNode.forEachAncestor(function (node) {\r\n _this.abortTransactionsOnNode_(node);\r\n });\r\n this.abortTransactionsOnNode_(transactionNode);\r\n transactionNode.forEachDescendant(function (node) {\r\n _this.abortTransactionsOnNode_(node);\r\n });\r\n return affectedPath;\r\n};\r\n/**\r\n * Abort transactions stored in this transaction queue node.\r\n *\r\n * @param {!Tree.>} node Node to abort transactions for.\r\n * @private\r\n */\r\nRepo.prototype.abortTransactionsOnNode_ = function (node) {\r\n var queue = node.getValue();\r\n if (queue !== null) {\r\n // Queue up the callbacks and fire them after cleaning up all of our transaction state, since\r\n // the callback could trigger more transactions or sets.\r\n var callbacks = [];\r\n // Go through queue. Any already-sent transactions must be marked for abort, while the unsent ones\r\n // can be immediately aborted and removed.\r\n var events = [];\r\n var lastSent = -1;\r\n for (var i = 0; i < queue.length; i++) {\r\n if (queue[i].status === TransactionStatus.SENT_NEEDS_ABORT) {\r\n // Already marked. No action needed.\r\n }\r\n else if (queue[i].status === TransactionStatus.SENT) {\r\n util.assert(lastSent === i - 1, 'All SENT items should be at beginning of queue.');\r\n lastSent = i;\r\n // Mark transaction for abort when it comes back.\r\n queue[i].status = TransactionStatus.SENT_NEEDS_ABORT;\r\n queue[i].abortReason = 'set';\r\n }\r\n else {\r\n util.assert(queue[i].status === TransactionStatus.RUN, 'Unexpected transaction status in abort');\r\n // We can abort it immediately.\r\n queue[i].unwatcher();\r\n events = events.concat(this.serverSyncTree_.ackUserWrite(queue[i].currentWriteId, true));\r\n if (queue[i].onComplete) {\r\n var snapshot = null;\r\n callbacks.push(queue[i].onComplete.bind(null, new Error('set'), false, snapshot));\r\n }\r\n }\r\n }\r\n if (lastSent === -1) {\r\n // We're not waiting for any sent transactions. We can clear the queue.\r\n node.setValue(null);\r\n }\r\n else {\r\n // Remove the transactions we aborted.\r\n queue.length = lastSent + 1;\r\n }\r\n // Now fire the callbacks.\r\n this.eventQueue_.raiseEventsForChangedPath(node.path(), events);\r\n for (var i = 0; i < callbacks.length; i++) {\r\n exceptionGuard(callbacks[i]);\r\n }\r\n }\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/** @const {string} */\r\nvar DATABASE_URL_OPTION = 'databaseURL';\r\nvar _staticInstance;\r\n/**\r\n * Creates and caches Repo instances.\r\n */\r\nvar RepoManager = /** @class */ (function () {\r\n function RepoManager() {\r\n /**\r\n * @private {!Object.>}\r\n */\r\n this.repos_ = {};\r\n /**\r\n * If true, new Repos will be created to use ReadonlyRestClient (for testing purposes).\r\n * @private {boolean}\r\n */\r\n this.useRestClient_ = false;\r\n }\r\n RepoManager.getInstance = function () {\r\n if (!_staticInstance) {\r\n _staticInstance = new RepoManager();\r\n }\r\n return _staticInstance;\r\n };\r\n // TODO(koss): Remove these functions unless used in tests?\r\n RepoManager.prototype.interrupt = function () {\r\n for (var appName in this.repos_) {\r\n for (var dbUrl in this.repos_[appName]) {\r\n this.repos_[appName][dbUrl].interrupt();\r\n }\r\n }\r\n };\r\n RepoManager.prototype.resume = function () {\r\n for (var appName in this.repos_) {\r\n for (var dbUrl in this.repos_[appName]) {\r\n this.repos_[appName][dbUrl].resume();\r\n }\r\n }\r\n };\r\n /**\r\n * This function should only ever be called to CREATE a new database instance.\r\n *\r\n * @param {!FirebaseApp} app\r\n * @return {!Database}\r\n */\r\n RepoManager.prototype.databaseFromApp = function (app, url) {\r\n var dbUrl = url || app.options[DATABASE_URL_OPTION];\r\n if (dbUrl === undefined) {\r\n fatal(\"Can't determine Firebase Database URL. Be sure to include \" +\r\n DATABASE_URL_OPTION +\r\n ' option when calling firebase.initializeApp().');\r\n }\r\n var parsedUrl = parseRepoInfo(dbUrl);\r\n var repoInfo = parsedUrl.repoInfo;\r\n validateUrl('Invalid Firebase Database URL', 1, parsedUrl);\r\n if (!parsedUrl.path.isEmpty()) {\r\n fatal('Database URL must point to the root of a Firebase Database ' +\r\n '(not including a child path).');\r\n }\r\n var repo = this.createRepo(repoInfo, app);\r\n return repo.database;\r\n };\r\n /**\r\n * Remove the repo and make sure it is disconnected.\r\n *\r\n * @param {!Repo} repo\r\n */\r\n RepoManager.prototype.deleteRepo = function (repo) {\r\n var appRepos = util.safeGet(this.repos_, repo.app.name);\r\n // This should never happen...\r\n if (!appRepos || util.safeGet(appRepos, repo.repoInfo_.toURLString()) !== repo) {\r\n fatal(\"Database \" + repo.app.name + \"(\" + repo.repoInfo_ + \") has already been deleted.\");\r\n }\r\n repo.interrupt();\r\n delete appRepos[repo.repoInfo_.toURLString()];\r\n };\r\n /**\r\n * Ensures a repo doesn't already exist and then creates one using the\r\n * provided app.\r\n *\r\n * @param {!RepoInfo} repoInfo The metadata about the Repo\r\n * @param {!FirebaseApp} app\r\n * @return {!Repo} The Repo object for the specified server / repoName.\r\n */\r\n RepoManager.prototype.createRepo = function (repoInfo, app) {\r\n var appRepos = util.safeGet(this.repos_, app.name);\r\n if (!appRepos) {\r\n appRepos = {};\r\n this.repos_[app.name] = appRepos;\r\n }\r\n var repo = util.safeGet(appRepos, repoInfo.toURLString());\r\n if (repo) {\r\n fatal('Database initialized multiple times. Please make sure the format of the database URL matches with each database() call.');\r\n }\r\n repo = new Repo(repoInfo, this.useRestClient_, app);\r\n appRepos[repoInfo.toURLString()] = repo;\r\n return repo;\r\n };\r\n /**\r\n * Forces us to use ReadonlyRestClient instead of PersistentConnection for new Repos.\r\n * @param {boolean} forceRestClient\r\n */\r\n RepoManager.prototype.forceRestClient = function (forceRestClient) {\r\n this.useRestClient_ = forceRestClient;\r\n };\r\n return RepoManager;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Class representing a firebase database.\r\n * @implements {FirebaseService}\r\n */\r\nvar Database = /** @class */ (function () {\r\n /**\r\n * The constructor should not be called by users of our public API.\r\n * @param {!Repo} repo_\r\n */\r\n function Database(repo_) {\r\n this.repo_ = repo_;\r\n if (!(repo_ instanceof Repo)) {\r\n fatal(\"Don't call new Database() directly - please use firebase.database().\");\r\n }\r\n /** @type {Reference} */\r\n this.root_ = new Reference(repo_, Path.Empty);\r\n this.INTERNAL = new DatabaseInternals(this);\r\n }\r\n Object.defineProperty(Database.prototype, \"app\", {\r\n get: function () {\r\n return this.repo_.app;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Database.prototype.ref = function (path) {\r\n this.checkDeleted_('ref');\r\n util.validateArgCount('database.ref', 0, 1, arguments.length);\r\n if (path instanceof Reference) {\r\n return this.refFromURL(path.toString());\r\n }\r\n return path !== undefined ? this.root_.child(path) : this.root_;\r\n };\r\n /**\r\n * Returns a reference to the root or the path specified in url.\r\n * We throw a exception if the url is not in the same domain as the\r\n * current repo.\r\n * @param {string} url\r\n * @return {!Reference} Firebase reference.\r\n */\r\n Database.prototype.refFromURL = function (url) {\r\n /** @const {string} */\r\n var apiName = 'database.refFromURL';\r\n this.checkDeleted_(apiName);\r\n util.validateArgCount(apiName, 1, 1, arguments.length);\r\n var parsedURL = parseRepoInfo(url);\r\n validateUrl(apiName, 1, parsedURL);\r\n var repoInfo = parsedURL.repoInfo;\r\n if (repoInfo.host !== this.repo_.repoInfo_.host) {\r\n fatal(apiName +\r\n ': Host name does not match the current database: ' +\r\n '(found ' +\r\n repoInfo.host +\r\n ' but expected ' +\r\n this.repo_.repoInfo_.host +\r\n ')');\r\n }\r\n return this.ref(parsedURL.path.toString());\r\n };\r\n /**\r\n * @param {string} apiName\r\n */\r\n Database.prototype.checkDeleted_ = function (apiName) {\r\n if (this.repo_ === null) {\r\n fatal('Cannot call ' + apiName + ' on a deleted database.');\r\n }\r\n };\r\n // Make individual repo go offline.\r\n Database.prototype.goOffline = function () {\r\n util.validateArgCount('database.goOffline', 0, 0, arguments.length);\r\n this.checkDeleted_('goOffline');\r\n this.repo_.interrupt();\r\n };\r\n Database.prototype.goOnline = function () {\r\n util.validateArgCount('database.goOnline', 0, 0, arguments.length);\r\n this.checkDeleted_('goOnline');\r\n this.repo_.resume();\r\n };\r\n Database.ServerValue = {\r\n TIMESTAMP: {\r\n '.sv': 'timestamp'\r\n }\r\n };\r\n return Database;\r\n}());\r\nvar DatabaseInternals = /** @class */ (function () {\r\n /** @param {!Database} database */\r\n function DatabaseInternals(database) {\r\n this.database = database;\r\n }\r\n /** @return {Promise} */\r\n DatabaseInternals.prototype.delete = function () {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n return tslib_1.__generator(this, function (_a) {\r\n this.database.checkDeleted_('delete');\r\n RepoManager.getInstance().deleteRepo(this.database.repo_);\r\n this.database.repo_ = null;\r\n this.database.root_ = null;\r\n this.database.INTERNAL = null;\r\n this.database = null;\r\n return [2 /*return*/];\r\n });\r\n });\r\n };\r\n return DatabaseInternals;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * INTERNAL methods for internal-use only (tests, etc.).\r\n *\r\n * Customers shouldn't use these or else should be aware that they could break at any time.\r\n *\r\n * @const\r\n */\r\nvar forceLongPolling = function () {\r\n WebSocketConnection.forceDisallow();\r\n BrowserPollConnection.forceAllow();\r\n};\r\nvar forceWebSockets = function () {\r\n BrowserPollConnection.forceDisallow();\r\n};\r\n/* Used by App Manager */\r\nvar isWebSocketsAvailable = function () {\r\n return WebSocketConnection['isAvailable']();\r\n};\r\nvar setSecurityDebugCallback = function (ref, callback) {\r\n ref.repo.persistentConnection_.securityDebugCallback_ = callback;\r\n};\r\nvar stats = function (ref, showDelta) {\r\n ref.repo.stats(showDelta);\r\n};\r\nvar statsIncrementCounter = function (ref, metric) {\r\n ref.repo.statsIncrementCounter(metric);\r\n};\r\nvar dataUpdateCount = function (ref) {\r\n return ref.repo.dataUpdateCount;\r\n};\r\nvar interceptServerData = function (ref, callback) {\r\n return ref.repo.interceptServerData_(callback);\r\n};\n\nvar INTERNAL = /*#__PURE__*/Object.freeze({\n forceLongPolling: forceLongPolling,\n forceWebSockets: forceWebSockets,\n isWebSocketsAvailable: isWebSocketsAvailable,\n setSecurityDebugCallback: setSecurityDebugCallback,\n stats: stats,\n statsIncrementCounter: statsIncrementCounter,\n dataUpdateCount: dataUpdateCount,\n interceptServerData: interceptServerData\n});\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar DataConnection = PersistentConnection;\r\n/**\r\n * @param {!string} pathString\r\n * @param {function(*)} onComplete\r\n */\r\nPersistentConnection.prototype.simpleListen = function (pathString, onComplete) {\r\n this.sendRequest('q', { p: pathString }, onComplete);\r\n};\r\n/**\r\n * @param {*} data\r\n * @param {function(*)} onEcho\r\n */\r\nPersistentConnection.prototype.echo = function (data, onEcho) {\r\n this.sendRequest('echo', { d: data }, onEcho);\r\n};\r\n// RealTimeConnection properties that we use in tests.\r\nvar RealTimeConnection = Connection;\r\n/**\r\n * @param {function(): string} newHash\r\n * @return {function()}\r\n */\r\nvar hijackHash = function (newHash) {\r\n var oldPut = PersistentConnection.prototype.put;\r\n PersistentConnection.prototype.put = function (pathString, data, opt_onComplete, opt_hash) {\r\n if (opt_hash !== undefined) {\r\n opt_hash = newHash();\r\n }\r\n oldPut.call(this, pathString, data, opt_onComplete, opt_hash);\r\n };\r\n return function () {\r\n PersistentConnection.prototype.put = oldPut;\r\n };\r\n};\r\n/**\r\n * @type {function(new:RepoInfo, !string, boolean, !string, boolean): undefined}\r\n */\r\nvar ConnectionTarget = RepoInfo;\r\n/**\r\n * @param {!Query} query\r\n * @return {!string}\r\n */\r\nvar queryIdentifier = function (query) {\r\n return query.queryIdentifier();\r\n};\r\n/**\r\n * @param {!Query} firebaseRef\r\n * @return {!Object}\r\n */\r\nvar listens = function (firebaseRef) {\r\n return firebaseRef.repo.persistentConnection_.listens_;\r\n};\r\n/**\r\n * Forces the RepoManager to create Repos that use ReadonlyRestClient instead of PersistentConnection.\r\n *\r\n * @param {boolean} forceRestClient\r\n */\r\nvar forceRestClient = function (forceRestClient) {\r\n RepoManager.getInstance().forceRestClient(forceRestClient);\r\n};\n\nvar TEST_ACCESS = /*#__PURE__*/Object.freeze({\n DataConnection: DataConnection,\n RealTimeConnection: RealTimeConnection,\n hijackHash: hijackHash,\n ConnectionTarget: ConnectionTarget,\n queryIdentifier: queryIdentifier,\n listens: listens,\n forceRestClient: forceRestClient\n});\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar ServerValue = Database.ServerValue;\r\nfunction registerDatabase(instance) {\r\n // Register the Database Service with the 'firebase' namespace.\r\n var namespace = instance.INTERNAL.registerService('database', function (app, unused, url) { return RepoManager.getInstance().databaseFromApp(app, url); }, \r\n // firebase.database namespace properties\r\n {\r\n Reference: Reference,\r\n Query: Query,\r\n Database: Database,\r\n enableLogging: enableLogging,\r\n INTERNAL: INTERNAL,\r\n ServerValue: ServerValue,\r\n TEST_ACCESS: TEST_ACCESS\r\n }, null, true);\r\n if (util.isNodeSdk()) {\r\n module.exports = namespace;\r\n }\r\n}\r\nregisterDatabase(firebase);\n\nexports.registerDatabase = registerDatabase;\nexports.Database = Database;\nexports.Query = Query;\nexports.Reference = Reference;\nexports.enableLogging = enableLogging;\nexports.ServerValue = ServerValue;\nexports.DataSnapshot = DataSnapshot;\nexports.OnDisconnect = OnDisconnect;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/@firebase/database/dist/index.cjs.js\n// module id = 439\n// module chunks = 64016405352682","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A container for all of the Logger instances\r\n */\r\nvar instances = [];\r\n(function (LogLevel) {\r\n LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\r\n LogLevel[LogLevel[\"VERBOSE\"] = 1] = \"VERBOSE\";\r\n LogLevel[LogLevel[\"INFO\"] = 2] = \"INFO\";\r\n LogLevel[LogLevel[\"WARN\"] = 3] = \"WARN\";\r\n LogLevel[LogLevel[\"ERROR\"] = 4] = \"ERROR\";\r\n LogLevel[LogLevel[\"SILENT\"] = 5] = \"SILENT\";\r\n})(exports.LogLevel || (exports.LogLevel = {}));\r\n/**\r\n * The default log level\r\n */\r\nvar defaultLogLevel = exports.LogLevel.INFO;\r\n/**\r\n * The default log handler will forward DEBUG, VERBOSE, INFO, WARN, and ERROR\r\n * messages on to their corresponding console counterparts (if the log method\r\n * is supported by the current log level)\r\n */\r\nvar defaultLogHandler = function (instance, logType) {\r\n var args = [];\r\n for (var _i = 2; _i < arguments.length; _i++) {\r\n args[_i - 2] = arguments[_i];\r\n }\r\n if (logType < instance.logLevel)\r\n return;\r\n var now = new Date().toISOString();\r\n switch (logType) {\r\n /**\r\n * By default, `console.debug` is not displayed in the developer console (in\r\n * chrome). To avoid forcing users to have to opt-in to these logs twice\r\n * (i.e. once for firebase, and once in the console), we are sending `DEBUG`\r\n * logs to the `console.log` function.\r\n */\r\n case exports.LogLevel.DEBUG:\r\n console.log.apply(console, [\"[\" + now + \"] \" + instance.name + \":\"].concat(args));\r\n break;\r\n case exports.LogLevel.VERBOSE:\r\n console.log.apply(console, [\"[\" + now + \"] \" + instance.name + \":\"].concat(args));\r\n break;\r\n case exports.LogLevel.INFO:\r\n console.info.apply(console, [\"[\" + now + \"] \" + instance.name + \":\"].concat(args));\r\n break;\r\n case exports.LogLevel.WARN:\r\n console.warn.apply(console, [\"[\" + now + \"] \" + instance.name + \":\"].concat(args));\r\n break;\r\n case exports.LogLevel.ERROR:\r\n console.error.apply(console, [\"[\" + now + \"] \" + instance.name + \":\"].concat(args));\r\n break;\r\n default:\r\n throw new Error(\"Attempted to log a message with an invalid logType (value: \" + logType + \")\");\r\n }\r\n};\r\nvar Logger = /** @class */ (function () {\r\n /**\r\n * Gives you an instance of a Logger to capture messages according to\r\n * Firebase's logging scheme.\r\n *\r\n * @param name The name that the logs will be associated with\r\n */\r\n function Logger(name) {\r\n this.name = name;\r\n /**\r\n * The log level of the given Logger instance.\r\n */\r\n this._logLevel = defaultLogLevel;\r\n /**\r\n * The log handler for the Logger instance.\r\n */\r\n this._logHandler = defaultLogHandler;\r\n /**\r\n * Capture the current instance for later use\r\n */\r\n instances.push(this);\r\n }\r\n Object.defineProperty(Logger.prototype, \"logLevel\", {\r\n get: function () {\r\n return this._logLevel;\r\n },\r\n set: function (val) {\r\n if (!(val in exports.LogLevel)) {\r\n throw new TypeError('Invalid value assigned to `logLevel`');\r\n }\r\n this._logLevel = val;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Logger.prototype, \"logHandler\", {\r\n get: function () {\r\n return this._logHandler;\r\n },\r\n set: function (val) {\r\n if (typeof val !== 'function') {\r\n throw new TypeError('Value assigned to `logHandler` must be a function');\r\n }\r\n this._logHandler = val;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * The functions below are all based on the `console` interface\r\n */\r\n Logger.prototype.debug = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n this._logHandler.apply(this, [this, exports.LogLevel.DEBUG].concat(args));\r\n };\r\n Logger.prototype.log = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n this._logHandler.apply(this, [this, exports.LogLevel.VERBOSE].concat(args));\r\n };\r\n Logger.prototype.info = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n this._logHandler.apply(this, [this, exports.LogLevel.INFO].concat(args));\r\n };\r\n Logger.prototype.warn = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n this._logHandler.apply(this, [this, exports.LogLevel.WARN].concat(args));\r\n };\r\n Logger.prototype.error = function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n this._logHandler.apply(this, [this, exports.LogLevel.ERROR].concat(args));\r\n };\r\n return Logger;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction setLogLevel(level) {\r\n instances.forEach(function (inst) {\r\n inst.logLevel = level;\r\n });\r\n}\n\nexports.setLogLevel = setLogLevel;\nexports.Logger = Logger;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/@firebase/logger/dist/index.cjs.js\n// module id = 440\n// module chunks = 64016405352682","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar util = require('@firebase/util');\nvar tslib_1 = require('tslib');\nvar firebase = _interopDefault(require('@firebase/app'));\n\n/**\r\n * Copyright 2018 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar ERROR_CODES = {\r\n AVAILABLE_IN_WINDOW: 'only-available-in-window',\r\n AVAILABLE_IN_SW: 'only-available-in-sw',\r\n SHOULD_BE_INHERITED: 'should-be-overriden',\r\n BAD_SENDER_ID: 'bad-sender-id',\r\n INCORRECT_GCM_SENDER_ID: 'incorrect-gcm-sender-id',\r\n PERMISSION_DEFAULT: 'permission-default',\r\n PERMISSION_BLOCKED: 'permission-blocked',\r\n UNSUPPORTED_BROWSER: 'unsupported-browser',\r\n NOTIFICATIONS_BLOCKED: 'notifications-blocked',\r\n FAILED_DEFAULT_REGISTRATION: 'failed-serviceworker-registration',\r\n SW_REGISTRATION_EXPECTED: 'sw-registration-expected',\r\n GET_SUBSCRIPTION_FAILED: 'get-subscription-failed',\r\n INVALID_SAVED_TOKEN: 'invalid-saved-token',\r\n SW_REG_REDUNDANT: 'sw-reg-redundant',\r\n TOKEN_SUBSCRIBE_FAILED: 'token-subscribe-failed',\r\n TOKEN_SUBSCRIBE_NO_TOKEN: 'token-subscribe-no-token',\r\n TOKEN_SUBSCRIBE_NO_PUSH_SET: 'token-subscribe-no-push-set',\r\n TOKEN_UNSUBSCRIBE_FAILED: 'token-unsubscribe-failed',\r\n TOKEN_UPDATE_FAILED: 'token-update-failed',\r\n TOKEN_UPDATE_NO_TOKEN: 'token-update-no-token',\r\n USE_SW_BEFORE_GET_TOKEN: 'use-sw-before-get-token',\r\n INVALID_DELETE_TOKEN: 'invalid-delete-token',\r\n DELETE_TOKEN_NOT_FOUND: 'delete-token-not-found',\r\n DELETE_SCOPE_NOT_FOUND: 'delete-scope-not-found',\r\n BG_HANDLER_FUNCTION_EXPECTED: 'bg-handler-function-expected',\r\n NO_WINDOW_CLIENT_TO_MSG: 'no-window-client-to-msg',\r\n UNABLE_TO_RESUBSCRIBE: 'unable-to-resubscribe',\r\n NO_FCM_TOKEN_FOR_RESUBSCRIBE: 'no-fcm-token-for-resubscribe',\r\n FAILED_TO_DELETE_TOKEN: 'failed-to-delete-token',\r\n NO_SW_IN_REG: 'no-sw-in-reg',\r\n BAD_SCOPE: 'bad-scope',\r\n BAD_VAPID_KEY: 'bad-vapid-key',\r\n BAD_SUBSCRIPTION: 'bad-subscription',\r\n BAD_TOKEN: 'bad-token',\r\n BAD_PUSH_SET: 'bad-push-set',\r\n FAILED_DELETE_VAPID_KEY: 'failed-delete-vapid-key',\r\n INVALID_PUBLIC_VAPID_KEY: 'invalid-public-vapid-key',\r\n USE_PUBLIC_KEY_BEFORE_GET_TOKEN: 'use-public-key-before-get-token',\r\n PUBLIC_KEY_DECRYPTION_FAILED: 'public-vapid-key-decryption-failed'\r\n};\r\nvar ERROR_MAP = (_a = {}, _a[ERROR_CODES.AVAILABLE_IN_WINDOW] = 'This method is available in a Window context.', _a[ERROR_CODES.AVAILABLE_IN_SW] = 'This method is available in a service worker ' + 'context.', _a[ERROR_CODES.SHOULD_BE_INHERITED] = 'This method should be overriden by ' + 'extended classes.', _a[ERROR_CODES.BAD_SENDER_ID] = \"Please ensure that 'messagingSenderId' is set \" +\r\n 'correctly in the options passed into firebase.initializeApp().', _a[ERROR_CODES.PERMISSION_DEFAULT] = 'The required permissions were not granted and ' + 'dismissed instead.', _a[ERROR_CODES.PERMISSION_BLOCKED] = 'The required permissions were not granted and ' + 'blocked instead.', _a[ERROR_CODES.UNSUPPORTED_BROWSER] = \"This browser doesn't support the API's \" +\r\n 'required to use the firebase SDK.', _a[ERROR_CODES.NOTIFICATIONS_BLOCKED] = 'Notifications have been blocked.', _a[ERROR_CODES.FAILED_DEFAULT_REGISTRATION] = 'We are unable to register the ' +\r\n 'default service worker. {$browserErrorMessage}', _a[ERROR_CODES.SW_REGISTRATION_EXPECTED] = 'A service worker registration was the ' + 'expected input.', _a[ERROR_CODES.GET_SUBSCRIPTION_FAILED] = 'There was an error when trying to get ' +\r\n 'any existing Push Subscriptions.', _a[ERROR_CODES.INVALID_SAVED_TOKEN] = 'Unable to access details of the saved token.', _a[ERROR_CODES.SW_REG_REDUNDANT] = 'The service worker being used for push was made ' + 'redundant.', _a[ERROR_CODES.TOKEN_SUBSCRIBE_FAILED] = 'A problem occured while subscribing the ' + 'user to FCM: {$message}', _a[ERROR_CODES.TOKEN_SUBSCRIBE_NO_TOKEN] = 'FCM returned no token when subscribing ' + 'the user to push.', _a[ERROR_CODES.TOKEN_SUBSCRIBE_NO_PUSH_SET] = 'FCM returned an invalid response ' + 'when getting an FCM token.', _a[ERROR_CODES.TOKEN_UNSUBSCRIBE_FAILED] = 'A problem occured while unsubscribing the ' + 'user from FCM: {$message}', _a[ERROR_CODES.TOKEN_UPDATE_FAILED] = 'A problem occured while updating the ' + 'user from FCM: {$message}', _a[ERROR_CODES.TOKEN_UPDATE_NO_TOKEN] = 'FCM returned no token when updating ' + 'the user to push.', _a[ERROR_CODES.USE_SW_BEFORE_GET_TOKEN] = 'The useServiceWorker() method may only be called once and must be ' +\r\n 'called before calling getToken() to ensure your service worker is used.', _a[ERROR_CODES.INVALID_DELETE_TOKEN] = 'You must pass a valid token into ' +\r\n 'deleteToken(), i.e. the token from getToken().', _a[ERROR_CODES.DELETE_TOKEN_NOT_FOUND] = 'The deletion attempt for token could not ' +\r\n 'be performed as the token was not found.', _a[ERROR_CODES.DELETE_SCOPE_NOT_FOUND] = 'The deletion attempt for service worker ' +\r\n 'scope could not be performed as the scope was not found.', _a[ERROR_CODES.BG_HANDLER_FUNCTION_EXPECTED] = 'The input to ' + 'setBackgroundMessageHandler() must be a function.', _a[ERROR_CODES.NO_WINDOW_CLIENT_TO_MSG] = 'An attempt was made to message a ' + 'non-existant window client.', _a[ERROR_CODES.UNABLE_TO_RESUBSCRIBE] = 'There was an error while re-subscribing ' +\r\n 'the FCM token for push messaging. Will have to resubscribe the ' +\r\n 'user on next visit. {$message}', _a[ERROR_CODES.NO_FCM_TOKEN_FOR_RESUBSCRIBE] = 'Could not find an FCM token ' +\r\n 'and as a result, unable to resubscribe. Will have to resubscribe the ' +\r\n 'user on next visit.', _a[ERROR_CODES.FAILED_TO_DELETE_TOKEN] = 'Unable to delete the currently saved token.', _a[ERROR_CODES.NO_SW_IN_REG] = 'Even though the service worker registration was ' +\r\n 'successful, there was a problem accessing the service worker itself.', _a[ERROR_CODES.INCORRECT_GCM_SENDER_ID] = \"Please change your web app manifest's \" +\r\n \"'gcm_sender_id' value to '103953800507' to use Firebase messaging.\", _a[ERROR_CODES.BAD_SCOPE] = 'The service worker scope must be a string with at ' +\r\n 'least one character.', _a[ERROR_CODES.BAD_VAPID_KEY] = 'The public VAPID key is not a Uint8Array with 65 bytes.', _a[ERROR_CODES.BAD_SUBSCRIPTION] = 'The subscription must be a valid ' + 'PushSubscription.', _a[ERROR_CODES.BAD_TOKEN] = 'The FCM Token used for storage / lookup was not ' +\r\n 'a valid token string.', _a[ERROR_CODES.BAD_PUSH_SET] = 'The FCM push set used for storage / lookup was not ' +\r\n 'not a valid push set string.', _a[ERROR_CODES.FAILED_DELETE_VAPID_KEY] = 'The VAPID key could not be deleted.', _a[ERROR_CODES.INVALID_PUBLIC_VAPID_KEY] = 'The public VAPID key must be a string.', _a[ERROR_CODES.PUBLIC_KEY_DECRYPTION_FAILED] = 'The public VAPID key did not equal ' + '65 bytes when decrypted.', _a);\r\nvar errorFactory = new util.ErrorFactory('messaging', 'Messaging', ERROR_MAP);\r\nvar _a;\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar DEFAULT_PUBLIC_VAPID_KEY = new Uint8Array([\r\n 0x04,\r\n 0x33,\r\n 0x94,\r\n 0xf7,\r\n 0xdf,\r\n 0xa1,\r\n 0xeb,\r\n 0xb1,\r\n 0xdc,\r\n 0x03,\r\n 0xa2,\r\n 0x5e,\r\n 0x15,\r\n 0x71,\r\n 0xdb,\r\n 0x48,\r\n 0xd3,\r\n 0x2e,\r\n 0xed,\r\n 0xed,\r\n 0xb2,\r\n 0x34,\r\n 0xdb,\r\n 0xb7,\r\n 0x47,\r\n 0x3a,\r\n 0x0c,\r\n 0x8f,\r\n 0xc4,\r\n 0xcc,\r\n 0xe1,\r\n 0x6f,\r\n 0x3c,\r\n 0x8c,\r\n 0x84,\r\n 0xdf,\r\n 0xab,\r\n 0xb6,\r\n 0x66,\r\n 0x3e,\r\n 0xf2,\r\n 0x0c,\r\n 0xd4,\r\n 0x8b,\r\n 0xfe,\r\n 0xe3,\r\n 0xf9,\r\n 0x76,\r\n 0x2f,\r\n 0x14,\r\n 0x1c,\r\n 0x63,\r\n 0x08,\r\n 0x6a,\r\n 0x6f,\r\n 0x2d,\r\n 0xb1,\r\n 0x1a,\r\n 0x95,\r\n 0xb0,\r\n 0xce,\r\n 0x37,\r\n 0xc0,\r\n 0x9c,\r\n 0x6e\r\n]);\r\nvar ENDPOINT = 'https://fcm.googleapis.com';\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar MessageParameter;\r\n(function (MessageParameter) {\r\n MessageParameter[\"TYPE_OF_MSG\"] = \"firebase-messaging-msg-type\";\r\n MessageParameter[\"DATA\"] = \"firebase-messaging-msg-data\";\r\n})(MessageParameter || (MessageParameter = {}));\r\nvar MessageType;\r\n(function (MessageType) {\r\n MessageType[\"PUSH_MSG_RECEIVED\"] = \"push-msg-received\";\r\n MessageType[\"NOTIFICATION_CLICKED\"] = \"notification-clicked\";\r\n})(MessageType || (MessageType = {}));\n\n/**\r\n * Copyright 2018 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction isArrayBufferEqual(a, b) {\r\n if (a == null || b == null) {\r\n return false;\r\n }\r\n if (a === b) {\r\n return true;\r\n }\r\n if (a.byteLength !== b.byteLength) {\r\n return false;\r\n }\r\n var viewA = new DataView(a);\r\n var viewB = new DataView(b);\r\n for (var i = 0; i < a.byteLength; i++) {\r\n if (viewA.getUint8(i) !== viewB.getUint8(i)) {\r\n return false;\r\n }\r\n }\r\n return true;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction toBase64(arrayBuffer) {\r\n var uint8Version = new Uint8Array(arrayBuffer);\r\n return btoa(String.fromCharCode.apply(null, uint8Version));\r\n}\r\nfunction arrayBufferToBase64(arrayBuffer) {\r\n var base64String = toBase64(arrayBuffer);\r\n return base64String\r\n .replace(/=/g, '')\r\n .replace(/\\+/g, '-')\r\n .replace(/\\//g, '_');\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar IIDModel = /** @class */ (function () {\r\n function IIDModel() {\r\n }\r\n IIDModel.prototype.getToken = function (senderId, subscription, publicVapidKey) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var p256dh, auth, fcmSubscribeBody, applicationPubKey, headers, subscribeOptions, responseData, response, err_1, message;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n p256dh = arrayBufferToBase64(subscription.getKey('p256dh'));\r\n auth = arrayBufferToBase64(subscription.getKey('auth'));\r\n fcmSubscribeBody = \"authorized_entity=\" + senderId + \"&\" +\r\n (\"endpoint=\" + subscription.endpoint + \"&\") +\r\n (\"encryption_key=\" + p256dh + \"&\") +\r\n (\"encryption_auth=\" + auth);\r\n if (publicVapidKey !== DEFAULT_PUBLIC_VAPID_KEY) {\r\n applicationPubKey = arrayBufferToBase64(publicVapidKey);\r\n fcmSubscribeBody += \"&application_pub_key=\" + applicationPubKey;\r\n }\r\n headers = new Headers();\r\n headers.append('Content-Type', 'application/x-www-form-urlencoded');\r\n subscribeOptions = {\r\n method: 'POST',\r\n headers: headers,\r\n body: fcmSubscribeBody\r\n };\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 4, , 5]);\r\n return [4 /*yield*/, fetch(ENDPOINT + '/fcm/connect/subscribe', subscribeOptions)];\r\n case 2:\r\n response = _a.sent();\r\n return [4 /*yield*/, response.json()];\r\n case 3:\r\n responseData = _a.sent();\r\n return [3 /*break*/, 5];\r\n case 4:\r\n err_1 = _a.sent();\r\n throw errorFactory.create(ERROR_CODES.TOKEN_SUBSCRIBE_FAILED);\r\n case 5:\r\n if (responseData.error) {\r\n message = responseData.error.message;\r\n throw errorFactory.create(ERROR_CODES.TOKEN_SUBSCRIBE_FAILED, {\r\n message: message\r\n });\r\n }\r\n if (!responseData.token) {\r\n throw errorFactory.create(ERROR_CODES.TOKEN_SUBSCRIBE_NO_TOKEN);\r\n }\r\n if (!responseData.pushSet) {\r\n throw errorFactory.create(ERROR_CODES.TOKEN_SUBSCRIBE_NO_PUSH_SET);\r\n }\r\n return [2 /*return*/, {\r\n token: responseData.token,\r\n pushSet: responseData.pushSet\r\n }];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * Update the underlying token details for fcmToken.\r\n */\r\n IIDModel.prototype.updateToken = function (senderId, fcmToken, fcmPushSet, subscription, publicVapidKey) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var p256dh, auth, fcmUpdateBody, applicationPubKey, headers, updateOptions, responseData, response, err_2, message;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n p256dh = arrayBufferToBase64(subscription.getKey('p256dh'));\r\n auth = arrayBufferToBase64(subscription.getKey('auth'));\r\n fcmUpdateBody = \"push_set=\" + fcmPushSet + \"&\" +\r\n (\"token=\" + fcmToken + \"&\") +\r\n (\"authorized_entity=\" + senderId + \"&\") +\r\n (\"endpoint=\" + subscription.endpoint + \"&\") +\r\n (\"encryption_key=\" + p256dh + \"&\") +\r\n (\"encryption_auth=\" + auth);\r\n if (publicVapidKey !== DEFAULT_PUBLIC_VAPID_KEY) {\r\n applicationPubKey = arrayBufferToBase64(publicVapidKey);\r\n fcmUpdateBody += \"&application_pub_key=\" + applicationPubKey;\r\n }\r\n headers = new Headers();\r\n headers.append('Content-Type', 'application/x-www-form-urlencoded');\r\n updateOptions = {\r\n method: 'POST',\r\n headers: headers,\r\n body: fcmUpdateBody\r\n };\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 4, , 5]);\r\n return [4 /*yield*/, fetch(ENDPOINT + '/fcm/connect/subscribe', updateOptions)];\r\n case 2:\r\n response = _a.sent();\r\n return [4 /*yield*/, response.json()];\r\n case 3:\r\n responseData = _a.sent();\r\n return [3 /*break*/, 5];\r\n case 4:\r\n err_2 = _a.sent();\r\n throw errorFactory.create(ERROR_CODES.TOKEN_UPDATE_FAILED);\r\n case 5:\r\n if (responseData.error) {\r\n message = responseData.error.message;\r\n throw errorFactory.create(ERROR_CODES.TOKEN_UPDATE_FAILED, {\r\n message: message\r\n });\r\n }\r\n if (!responseData.token) {\r\n throw errorFactory.create(ERROR_CODES.TOKEN_UPDATE_NO_TOKEN);\r\n }\r\n return [2 /*return*/, responseData.token];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * Given a fcmToken, pushSet and messagingSenderId, delete an FCM token.\r\n */\r\n IIDModel.prototype.deleteToken = function (senderId, fcmToken, fcmPushSet) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var fcmUnsubscribeBody, headers, unsubscribeOptions, response, responseData, message, err_3;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n fcmUnsubscribeBody = \"authorized_entity=\" + senderId + \"&\" +\r\n (\"token=\" + fcmToken + \"&\") +\r\n (\"pushSet=\" + fcmPushSet);\r\n headers = new Headers();\r\n headers.append('Content-Type', 'application/x-www-form-urlencoded');\r\n unsubscribeOptions = {\r\n method: 'POST',\r\n headers: headers,\r\n body: fcmUnsubscribeBody\r\n };\r\n _a.label = 1;\r\n case 1:\r\n _a.trys.push([1, 4, , 5]);\r\n return [4 /*yield*/, fetch(ENDPOINT + '/fcm/connect/unsubscribe', unsubscribeOptions)];\r\n case 2:\r\n response = _a.sent();\r\n return [4 /*yield*/, response.json()];\r\n case 3:\r\n responseData = _a.sent();\r\n if (responseData.error) {\r\n message = responseData.error.message;\r\n throw errorFactory.create(ERROR_CODES.TOKEN_UNSUBSCRIBE_FAILED, {\r\n message: message\r\n });\r\n }\r\n return [3 /*break*/, 5];\r\n case 4:\r\n err_3 = _a.sent();\r\n throw errorFactory.create(ERROR_CODES.TOKEN_UNSUBSCRIBE_FAILED);\r\n case 5: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n return IIDModel;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction base64ToArrayBuffer(base64String) {\r\n var padding = '='.repeat((4 - base64String.length % 4) % 4);\r\n var base64 = (base64String + padding)\r\n .replace(/\\-/g, '+')\r\n .replace(/_/g, '/');\r\n var rawData = window.atob(base64);\r\n var outputArray = new Uint8Array(rawData.length);\r\n for (var i = 0; i < rawData.length; ++i) {\r\n outputArray[i] = rawData.charCodeAt(i);\r\n }\r\n return outputArray;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar OLD_DB_NAME = 'undefined';\r\nvar OLD_OBJECT_STORE_NAME = 'fcm_token_object_Store';\r\nfunction handleDb(db) {\r\n if (!db.objectStoreNames.contains(OLD_OBJECT_STORE_NAME)) {\r\n // We found a database with the name 'undefined', but our expected object\r\n // store isn't defined.\r\n return;\r\n }\r\n var transaction = db.transaction(OLD_OBJECT_STORE_NAME);\r\n var objectStore = transaction.objectStore(OLD_OBJECT_STORE_NAME);\r\n var iidModel = new IIDModel();\r\n var openCursorRequest = objectStore.openCursor();\r\n openCursorRequest.onerror = function (event) {\r\n // NOOP - Nothing we can do.\r\n console.warn('Unable to cleanup old IDB.', event);\r\n };\r\n openCursorRequest.onsuccess = function () {\r\n var cursor = openCursorRequest.result;\r\n if (cursor) {\r\n // cursor.value contains the current record being iterated through\r\n // this is where you'd do something with the result\r\n var tokenDetails = cursor.value;\r\n iidModel.deleteToken(tokenDetails.fcmSenderId, tokenDetails.fcmToken, tokenDetails.fcmPushSet);\r\n cursor.continue();\r\n }\r\n else {\r\n db.close();\r\n indexedDB.deleteDatabase(OLD_DB_NAME);\r\n }\r\n };\r\n}\r\nfunction cleanV1() {\r\n var request = indexedDB.open(OLD_DB_NAME);\r\n request.onerror = function (event) {\r\n // NOOP - Nothing we can do.\r\n };\r\n request.onsuccess = function (event) {\r\n var db = request.result;\r\n handleDb(db);\r\n };\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar DBInterface = /** @class */ (function () {\r\n function DBInterface() {\r\n this.dbPromise = null;\r\n }\r\n /** Gets record(s) from the objectStore that match the given key. */\r\n DBInterface.prototype.get = function (key) {\r\n return this.createTransaction(function (objectStore) { return objectStore.get(key); });\r\n };\r\n /** Gets record(s) from the objectStore that match the given index. */\r\n DBInterface.prototype.getIndex = function (index, key) {\r\n function runRequest(objectStore) {\r\n var idbIndex = objectStore.index(index);\r\n return idbIndex.get(key);\r\n }\r\n return this.createTransaction(runRequest);\r\n };\r\n /** Assigns or overwrites the record for the given value. */\r\n // tslint:disable-next-line:no-any IndexedDB values are of type \"any\"\r\n DBInterface.prototype.put = function (value) {\r\n return this.createTransaction(function (objectStore) { return objectStore.put(value); }, 'readwrite');\r\n };\r\n /** Deletes record(s) from the objectStore that match the given key. */\r\n DBInterface.prototype.delete = function (key) {\r\n return this.createTransaction(function (objectStore) { return objectStore.delete(key); }, 'readwrite');\r\n };\r\n /**\r\n * Close the currently open database.\r\n */\r\n DBInterface.prototype.closeDatabase = function () {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var db;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!this.dbPromise) return [3 /*break*/, 2];\r\n return [4 /*yield*/, this.dbPromise];\r\n case 1:\r\n db = _a.sent();\r\n db.close();\r\n this.dbPromise = null;\r\n _a.label = 2;\r\n case 2: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * Creates an IndexedDB Transaction and passes its objectStore to the\r\n * runRequest function, which runs the database request.\r\n *\r\n * @return Promise that resolves with the result of the runRequest function\r\n */\r\n DBInterface.prototype.createTransaction = function (runRequest, mode) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var db, transaction, request, result;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.getDb()];\r\n case 1:\r\n db = _a.sent();\r\n transaction = db.transaction(this.objectStoreName, mode);\r\n request = transaction.objectStore(this.objectStoreName);\r\n return [4 /*yield*/, promisify(runRequest(request))];\r\n case 2:\r\n result = _a.sent();\r\n return [2 /*return*/, new Promise(function (resolve, reject) {\r\n transaction.oncomplete = function () {\r\n resolve(result);\r\n };\r\n transaction.onerror = function () {\r\n reject(transaction.error);\r\n };\r\n })];\r\n }\r\n });\r\n });\r\n };\r\n /** Gets the cached db connection or opens a new one. */\r\n DBInterface.prototype.getDb = function () {\r\n var _this = this;\r\n if (!this.dbPromise) {\r\n this.dbPromise = new Promise(function (resolve, reject) {\r\n var request = indexedDB.open(_this.dbName, _this.dbVersion);\r\n request.onsuccess = function () {\r\n resolve(request.result);\r\n };\r\n request.onerror = function () {\r\n _this.dbPromise = null;\r\n reject(request.error);\r\n };\r\n request.onupgradeneeded = function (event) { return _this.onDbUpgrade(request, event); };\r\n });\r\n }\r\n return this.dbPromise;\r\n };\r\n return DBInterface;\r\n}());\r\n/** Promisifies an IDBRequest. Resolves with the IDBRequest's result. */\r\nfunction promisify(request) {\r\n return new Promise(function (resolve, reject) {\r\n request.onsuccess = function () {\r\n resolve(request.result);\r\n };\r\n request.onerror = function () {\r\n reject(request.error);\r\n };\r\n });\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar TokenDetailsModel = /** @class */ (function (_super) {\r\n tslib_1.__extends(TokenDetailsModel, _super);\r\n function TokenDetailsModel() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.dbName = 'fcm_token_details_db';\r\n _this.dbVersion = 3;\r\n _this.objectStoreName = 'fcm_token_object_Store';\r\n return _this;\r\n }\r\n TokenDetailsModel.prototype.onDbUpgrade = function (request, event) {\r\n var db = request.result;\r\n // Lack of 'break' statements is intentional.\r\n switch (event.oldVersion) {\r\n case 0: {\r\n // New IDB instance\r\n var objectStore = db.createObjectStore(this.objectStoreName, {\r\n keyPath: 'swScope'\r\n });\r\n // Make sure the sender ID can be searched\r\n objectStore.createIndex('fcmSenderId', 'fcmSenderId', {\r\n unique: false\r\n });\r\n objectStore.createIndex('fcmToken', 'fcmToken', { unique: true });\r\n }\r\n case 1: {\r\n // Prior to version 2, we were using either 'fcm_token_details_db'\r\n // or 'undefined' as the database name due to bug in the SDK\r\n // So remove the old tokens and databases.\r\n cleanV1();\r\n }\r\n case 2: {\r\n var objectStore = request.transaction.objectStore(this.objectStoreName);\r\n var cursorRequest_1 = objectStore.openCursor();\r\n cursorRequest_1.onsuccess = function () {\r\n var cursor = cursorRequest_1.result;\r\n if (cursor) {\r\n var value = cursor.value;\r\n var newValue = tslib_1.__assign({}, value);\r\n if (!value.createTime) {\r\n newValue.createTime = Date.now();\r\n }\r\n if (typeof value.vapidKey === 'string') {\r\n newValue.vapidKey = base64ToArrayBuffer(value.vapidKey);\r\n }\r\n if (typeof value.auth === 'string') {\r\n newValue.auth = base64ToArrayBuffer(value.auth).buffer;\r\n }\r\n if (typeof value.auth === 'string') {\r\n newValue.p256dh = base64ToArrayBuffer(value.p256dh).buffer;\r\n }\r\n cursor.update(newValue);\r\n cursor.continue();\r\n }\r\n };\r\n }\r\n }\r\n };\r\n /**\r\n * Given a token, this method will look up the details in indexedDB.\r\n */\r\n TokenDetailsModel.prototype.getTokenDetailsFromToken = function (fcmToken) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n return tslib_1.__generator(this, function (_a) {\r\n if (!fcmToken) {\r\n throw errorFactory.create(ERROR_CODES.BAD_TOKEN);\r\n }\r\n validateInputs({ fcmToken: fcmToken });\r\n return [2 /*return*/, this.getIndex('fcmToken', fcmToken)];\r\n });\r\n });\r\n };\r\n /**\r\n * Given a service worker scope, this method will look up the details in\r\n * indexedDB.\r\n * @return The details associated with that token.\r\n */\r\n TokenDetailsModel.prototype.getTokenDetailsFromSWScope = function (swScope) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n return tslib_1.__generator(this, function (_a) {\r\n if (!swScope) {\r\n throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n }\r\n validateInputs({ swScope: swScope });\r\n return [2 /*return*/, this.get(swScope)];\r\n });\r\n });\r\n };\r\n /**\r\n * Save the details for the fcm token for re-use at a later date.\r\n * @param input A plain js object containing args to save.\r\n */\r\n TokenDetailsModel.prototype.saveTokenDetails = function (tokenDetails) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n return tslib_1.__generator(this, function (_a) {\r\n if (!tokenDetails.swScope) {\r\n throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n }\r\n if (!tokenDetails.vapidKey) {\r\n throw errorFactory.create(ERROR_CODES.BAD_VAPID_KEY);\r\n }\r\n if (!tokenDetails.endpoint || !tokenDetails.auth || !tokenDetails.p256dh) {\r\n throw errorFactory.create(ERROR_CODES.BAD_SUBSCRIPTION);\r\n }\r\n if (!tokenDetails.fcmSenderId) {\r\n throw errorFactory.create(ERROR_CODES.BAD_SENDER_ID);\r\n }\r\n if (!tokenDetails.fcmToken) {\r\n throw errorFactory.create(ERROR_CODES.BAD_TOKEN);\r\n }\r\n if (!tokenDetails.fcmPushSet) {\r\n throw errorFactory.create(ERROR_CODES.BAD_PUSH_SET);\r\n }\r\n validateInputs(tokenDetails);\r\n return [2 /*return*/, this.put(tokenDetails)];\r\n });\r\n });\r\n };\r\n /**\r\n * This method deletes details of the current FCM token.\r\n * It's returning a promise in case we need to move to an async\r\n * method for deleting at a later date.\r\n *\r\n * @return Resolves once the FCM token details have been deleted and returns\r\n * the deleted details.\r\n */\r\n TokenDetailsModel.prototype.deleteToken = function (token) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var details;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (typeof token !== 'string' || token.length === 0) {\r\n return [2 /*return*/, Promise.reject(errorFactory.create(ERROR_CODES.INVALID_DELETE_TOKEN))];\r\n }\r\n return [4 /*yield*/, this.getTokenDetailsFromToken(token)];\r\n case 1:\r\n details = _a.sent();\r\n if (!details) {\r\n throw errorFactory.create(ERROR_CODES.DELETE_TOKEN_NOT_FOUND);\r\n }\r\n return [4 /*yield*/, this.delete(details.swScope)];\r\n case 2:\r\n _a.sent();\r\n return [2 /*return*/, details];\r\n }\r\n });\r\n });\r\n };\r\n return TokenDetailsModel;\r\n}(DBInterface));\r\n/**\r\n * This method takes an object and will check for known arguments and\r\n * validate the input.\r\n * @return Promise that resolves if input is valid, rejects otherwise.\r\n */\r\nfunction validateInputs(input) {\r\n if (input.fcmToken) {\r\n if (typeof input.fcmToken !== 'string' || input.fcmToken.length === 0) {\r\n throw errorFactory.create(ERROR_CODES.BAD_TOKEN);\r\n }\r\n }\r\n if (input.swScope) {\r\n if (typeof input.swScope !== 'string' || input.swScope.length === 0) {\r\n throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n }\r\n }\r\n if (input.vapidKey) {\r\n if (!(input.vapidKey instanceof Uint8Array) ||\r\n input.vapidKey.length !== 65) {\r\n throw errorFactory.create(ERROR_CODES.BAD_VAPID_KEY);\r\n }\r\n }\r\n if (input.endpoint) {\r\n if (typeof input.endpoint !== 'string' || input.endpoint.length === 0) {\r\n throw errorFactory.create(ERROR_CODES.BAD_SUBSCRIPTION);\r\n }\r\n }\r\n if (input.auth) {\r\n if (!(input.auth instanceof ArrayBuffer)) {\r\n throw errorFactory.create(ERROR_CODES.BAD_SUBSCRIPTION);\r\n }\r\n }\r\n if (input.p256dh) {\r\n if (!(input.p256dh instanceof ArrayBuffer)) {\r\n throw errorFactory.create(ERROR_CODES.BAD_SUBSCRIPTION);\r\n }\r\n }\r\n if (input.fcmSenderId) {\r\n if (typeof input.fcmSenderId !== 'string' ||\r\n input.fcmSenderId.length === 0) {\r\n throw errorFactory.create(ERROR_CODES.BAD_SENDER_ID);\r\n }\r\n }\r\n if (input.fcmPushSet) {\r\n if (typeof input.fcmPushSet !== 'string' || input.fcmPushSet.length === 0) {\r\n throw errorFactory.create(ERROR_CODES.BAD_PUSH_SET);\r\n }\r\n }\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar UNCOMPRESSED_PUBLIC_KEY_SIZE = 65;\r\nvar VapidDetailsModel = /** @class */ (function (_super) {\r\n tslib_1.__extends(VapidDetailsModel, _super);\r\n function VapidDetailsModel() {\r\n var _this = _super !== null && _super.apply(this, arguments) || this;\r\n _this.dbName = 'fcm_vapid_details_db';\r\n _this.dbVersion = 1;\r\n _this.objectStoreName = 'fcm_vapid_object_Store';\r\n return _this;\r\n }\r\n VapidDetailsModel.prototype.onDbUpgrade = function (request) {\r\n var db = request.result;\r\n db.createObjectStore(this.objectStoreName, { keyPath: 'swScope' });\r\n };\r\n /**\r\n * Given a service worker scope, this method will look up the vapid key\r\n * in indexedDB.\r\n */\r\n VapidDetailsModel.prototype.getVapidFromSWScope = function (swScope) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var result;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (typeof swScope !== 'string' || swScope.length === 0) {\r\n throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n }\r\n return [4 /*yield*/, this.get(swScope)];\r\n case 1:\r\n result = _a.sent();\r\n return [2 /*return*/, result ? result.vapidKey : undefined];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * Save a vapid key against a swScope for later date.\r\n */\r\n VapidDetailsModel.prototype.saveVapidDetails = function (swScope, vapidKey) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var details;\r\n return tslib_1.__generator(this, function (_a) {\r\n if (typeof swScope !== 'string' || swScope.length === 0) {\r\n throw errorFactory.create(ERROR_CODES.BAD_SCOPE);\r\n }\r\n if (vapidKey === null || vapidKey.length !== UNCOMPRESSED_PUBLIC_KEY_SIZE) {\r\n throw errorFactory.create(ERROR_CODES.BAD_VAPID_KEY);\r\n }\r\n details = {\r\n swScope: swScope,\r\n vapidKey: vapidKey\r\n };\r\n return [2 /*return*/, this.put(details)];\r\n });\r\n });\r\n };\r\n /**\r\n * This method deletes details of the current FCM VAPID key for a SW scope.\r\n * Resolves once the scope/vapid details have been deleted and returns the\r\n * deleted vapid key.\r\n */\r\n VapidDetailsModel.prototype.deleteVapidDetails = function (swScope) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var vapidKey;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.getVapidFromSWScope(swScope)];\r\n case 1:\r\n vapidKey = _a.sent();\r\n if (!vapidKey) {\r\n throw errorFactory.create(ERROR_CODES.DELETE_SCOPE_NOT_FOUND);\r\n }\r\n return [4 /*yield*/, this.delete(swScope)];\r\n case 2:\r\n _a.sent();\r\n return [2 /*return*/, vapidKey];\r\n }\r\n });\r\n });\r\n };\r\n return VapidDetailsModel;\r\n}(DBInterface));\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar SENDER_ID_OPTION_NAME = 'messagingSenderId';\r\n// Database cache should be invalidated once a week.\r\nvar TOKEN_EXPIRATION_MILLIS = 7 * 24 * 60 * 60 * 1000; // 7 days\r\nvar ControllerInterface = /** @class */ (function () {\r\n /**\r\n * An interface of the Messaging Service API\r\n */\r\n function ControllerInterface(app) {\r\n var _this = this;\r\n if (!app.options[SENDER_ID_OPTION_NAME] ||\r\n typeof app.options[SENDER_ID_OPTION_NAME] !== 'string') {\r\n throw errorFactory.create(ERROR_CODES.BAD_SENDER_ID);\r\n }\r\n this.messagingSenderId = app.options[SENDER_ID_OPTION_NAME];\r\n this.tokenDetailsModel = new TokenDetailsModel();\r\n this.vapidDetailsModel = new VapidDetailsModel();\r\n this.iidModel = new IIDModel();\r\n this.app = app;\r\n this.INTERNAL = {\r\n delete: function () { return _this.delete(); }\r\n };\r\n }\r\n /**\r\n * @export\r\n */\r\n ControllerInterface.prototype.getToken = function () {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var currentPermission, swReg, publicVapidKey, pushSubscription, tokenDetails;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n currentPermission = this.getNotificationPermission_();\r\n if (currentPermission !== 'granted') {\r\n if (currentPermission === 'denied') {\r\n return [2 /*return*/, Promise.reject(errorFactory.create(ERROR_CODES.NOTIFICATIONS_BLOCKED))];\r\n }\r\n // We must wait for permission to be granted\r\n return [2 /*return*/, Promise.resolve(null)];\r\n }\r\n return [4 /*yield*/, this.getSWRegistration_()];\r\n case 1:\r\n swReg = _a.sent();\r\n return [4 /*yield*/, this.getPublicVapidKey_()];\r\n case 2:\r\n publicVapidKey = _a.sent();\r\n return [4 /*yield*/, this.getPushSubscription(swReg, publicVapidKey)];\r\n case 3:\r\n pushSubscription = _a.sent();\r\n return [4 /*yield*/, this.tokenDetailsModel.getTokenDetailsFromSWScope(swReg.scope)];\r\n case 4:\r\n tokenDetails = _a.sent();\r\n if (tokenDetails) {\r\n return [2 /*return*/, this.manageExistingToken(swReg, pushSubscription, publicVapidKey, tokenDetails)];\r\n }\r\n return [2 /*return*/, this.getNewToken(swReg, pushSubscription, publicVapidKey)];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * manageExistingToken is triggered if there's an existing FCM token in the\r\n * database and it can take 3 different actions:\r\n * 1) Retrieve the existing FCM token from the database.\r\n * 2) If VAPID details have changed: Delete the existing token and create a\r\n * new one with the new VAPID key.\r\n * 3) If the database cache is invalidated: Send a request to FCM to update\r\n * the token, and to check if the token is still valid on FCM-side.\r\n */\r\n ControllerInterface.prototype.manageExistingToken = function (swReg, pushSubscription, publicVapidKey, tokenDetails) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var isTokenValid, now;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n isTokenValid = isTokenStillValid(pushSubscription, publicVapidKey, tokenDetails);\r\n if (isTokenValid) {\r\n now = Date.now();\r\n if (now < tokenDetails.createTime + TOKEN_EXPIRATION_MILLIS) {\r\n return [2 /*return*/, tokenDetails.fcmToken];\r\n }\r\n else {\r\n return [2 /*return*/, this.updateToken(swReg, pushSubscription, publicVapidKey, tokenDetails)];\r\n }\r\n }\r\n // If the token is no longer valid (for example if the VAPID details\r\n // have changed), delete the existing token from the FCM client and server\r\n // database. No need to unsubscribe from the Service Worker as we have a\r\n // good push subscription that we'd like to use in getNewToken.\r\n return [4 /*yield*/, this.deleteTokenFromDB(tokenDetails.fcmToken)];\r\n case 1:\r\n // If the token is no longer valid (for example if the VAPID details\r\n // have changed), delete the existing token from the FCM client and server\r\n // database. No need to unsubscribe from the Service Worker as we have a\r\n // good push subscription that we'd like to use in getNewToken.\r\n _a.sent();\r\n return [2 /*return*/, this.getNewToken(swReg, pushSubscription, publicVapidKey)];\r\n }\r\n });\r\n });\r\n };\r\n ControllerInterface.prototype.updateToken = function (swReg, pushSubscription, publicVapidKey, tokenDetails) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var updatedToken, allDetails, e_1;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 4, , 6]);\r\n return [4 /*yield*/, this.iidModel.updateToken(this.messagingSenderId, tokenDetails.fcmToken, tokenDetails.fcmPushSet, pushSubscription, publicVapidKey)];\r\n case 1:\r\n updatedToken = _a.sent();\r\n allDetails = {\r\n swScope: swReg.scope,\r\n vapidKey: publicVapidKey,\r\n fcmSenderId: this.messagingSenderId,\r\n fcmToken: updatedToken,\r\n fcmPushSet: tokenDetails.fcmPushSet,\r\n createTime: Date.now(),\r\n endpoint: pushSubscription.endpoint,\r\n auth: pushSubscription.getKey('auth'),\r\n p256dh: pushSubscription.getKey('p256dh')\r\n };\r\n return [4 /*yield*/, this.tokenDetailsModel.saveTokenDetails(allDetails)];\r\n case 2:\r\n _a.sent();\r\n return [4 /*yield*/, this.vapidDetailsModel.saveVapidDetails(swReg.scope, publicVapidKey)];\r\n case 3:\r\n _a.sent();\r\n return [2 /*return*/, updatedToken];\r\n case 4:\r\n e_1 = _a.sent();\r\n return [4 /*yield*/, this.deleteToken(tokenDetails.fcmToken)];\r\n case 5:\r\n _a.sent();\r\n throw e_1;\r\n case 6: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n ControllerInterface.prototype.getNewToken = function (swReg, pushSubscription, publicVapidKey) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var tokenDetails, allDetails;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.iidModel.getToken(this.messagingSenderId, pushSubscription, publicVapidKey)];\r\n case 1:\r\n tokenDetails = _a.sent();\r\n allDetails = {\r\n swScope: swReg.scope,\r\n vapidKey: publicVapidKey,\r\n fcmSenderId: this.messagingSenderId,\r\n fcmToken: tokenDetails.token,\r\n fcmPushSet: tokenDetails.pushSet,\r\n createTime: Date.now(),\r\n endpoint: pushSubscription.endpoint,\r\n auth: pushSubscription.getKey('auth'),\r\n p256dh: pushSubscription.getKey('p256dh')\r\n };\r\n return [4 /*yield*/, this.tokenDetailsModel.saveTokenDetails(allDetails)];\r\n case 2:\r\n _a.sent();\r\n return [4 /*yield*/, this.vapidDetailsModel.saveVapidDetails(swReg.scope, publicVapidKey)];\r\n case 3:\r\n _a.sent();\r\n return [2 /*return*/, tokenDetails.token];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * This method deletes tokens that the token manager looks after,\r\n * unsubscribes the token from FCM and then unregisters the push\r\n * subscription if it exists. It returns a promise that indicates\r\n * whether or not the unsubscribe request was processed successfully.\r\n * @export\r\n */\r\n ControllerInterface.prototype.deleteToken = function (token) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var registration, pushSubscription;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: \r\n // Delete the token details from the database.\r\n return [4 /*yield*/, this.deleteTokenFromDB(token)];\r\n case 1:\r\n // Delete the token details from the database.\r\n _a.sent();\r\n return [4 /*yield*/, this.getSWRegistration_()];\r\n case 2:\r\n registration = _a.sent();\r\n if (!registration) return [3 /*break*/, 4];\r\n return [4 /*yield*/, registration.pushManager.getSubscription()];\r\n case 3:\r\n pushSubscription = _a.sent();\r\n if (pushSubscription) {\r\n return [2 /*return*/, pushSubscription.unsubscribe()];\r\n }\r\n _a.label = 4;\r\n case 4: \r\n // If there's no SW, consider it a success.\r\n return [2 /*return*/, true];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * This method will delete the token from the client database, and make a\r\n * call to FCM to remove it from the server DB. Does not temper with the\r\n * push subscription.\r\n */\r\n ControllerInterface.prototype.deleteTokenFromDB = function (token) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var details;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.tokenDetailsModel.deleteToken(token)];\r\n case 1:\r\n details = _a.sent();\r\n return [4 /*yield*/, this.iidModel.deleteToken(details.fcmSenderId, details.fcmToken, details.fcmPushSet)];\r\n case 2:\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * Gets a PushSubscription for the current user.\r\n */\r\n ControllerInterface.prototype.getPushSubscription = function (swRegistration, publicVapidKey) {\r\n return swRegistration.pushManager.getSubscription().then(function (subscription) {\r\n if (subscription) {\r\n return subscription;\r\n }\r\n return swRegistration.pushManager.subscribe({\r\n userVisibleOnly: true,\r\n applicationServerKey: publicVapidKey\r\n });\r\n });\r\n };\r\n //\r\n // The following methods should only be available in the window.\r\n //\r\n ControllerInterface.prototype.requestPermission = function () {\r\n throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n };\r\n ControllerInterface.prototype.useServiceWorker = function (registration) {\r\n throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n };\r\n ControllerInterface.prototype.usePublicVapidKey = function (b64PublicKey) {\r\n throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n };\r\n ControllerInterface.prototype.onMessage = function (nextOrObserver, error, completed) {\r\n throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n };\r\n ControllerInterface.prototype.onTokenRefresh = function (nextOrObserver, error, completed) {\r\n throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_WINDOW);\r\n };\r\n //\r\n // The following methods are used by the service worker only.\r\n //\r\n ControllerInterface.prototype.setBackgroundMessageHandler = function (callback) {\r\n throw errorFactory.create(ERROR_CODES.AVAILABLE_IN_SW);\r\n };\r\n //\r\n // The following methods are used by the service themselves and not exposed\r\n // publicly or not expected to be used by developers.\r\n //\r\n /**\r\n * This method is required to adhere to the Firebase interface.\r\n * It closes any currently open indexdb database connections.\r\n */\r\n ControllerInterface.prototype.delete = function () {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, Promise.all([\r\n this.tokenDetailsModel.closeDatabase(),\r\n this.vapidDetailsModel.closeDatabase()\r\n ])];\r\n case 1:\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * Returns the current Notification Permission state.\r\n */\r\n ControllerInterface.prototype.getNotificationPermission_ = function () {\r\n // TODO: Remove the cast when this issue is fixed:\r\n // https://github.com/Microsoft/TypeScript/issues/14701\r\n // tslint:disable-next-line no-any\r\n return Notification.permission;\r\n };\r\n ControllerInterface.prototype.getTokenDetailsModel = function () {\r\n return this.tokenDetailsModel;\r\n };\r\n ControllerInterface.prototype.getVapidDetailsModel = function () {\r\n return this.vapidDetailsModel;\r\n };\r\n // Visible for testing\r\n // TODO: make protected\r\n ControllerInterface.prototype.getIIDModel = function () {\r\n return this.iidModel;\r\n };\r\n return ControllerInterface;\r\n}());\r\n/**\r\n * Checks if the tokenDetails match the details provided in the clients.\r\n */\r\nfunction isTokenStillValid(pushSubscription, publicVapidKey, tokenDetails) {\r\n if (!isArrayBufferEqual(publicVapidKey.buffer, tokenDetails.vapidKey.buffer)) {\r\n return false;\r\n }\r\n var isEndpointEqual = pushSubscription.endpoint === tokenDetails.endpoint;\r\n var isAuthEqual = isArrayBufferEqual(pushSubscription.getKey('auth'), tokenDetails.auth);\r\n var isP256dhEqual = isArrayBufferEqual(pushSubscription.getKey('p256dh'), tokenDetails.p256dh);\r\n return isEndpointEqual && isAuthEqual && isP256dhEqual;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar FCM_MSG = 'FCM_MSG';\r\nvar SWController = /** @class */ (function (_super) {\r\n tslib_1.__extends(SWController, _super);\r\n function SWController(app) {\r\n var _this = _super.call(this, app) || this;\r\n _this.bgMessageHandler = null;\r\n self.addEventListener('push', function (e) {\r\n _this.onPush(e);\r\n });\r\n self.addEventListener('pushsubscriptionchange', function (e) {\r\n _this.onSubChange(e);\r\n });\r\n self.addEventListener('notificationclick', function (e) {\r\n _this.onNotificationClick(e);\r\n });\r\n return _this;\r\n }\r\n // Visible for testing\r\n // TODO: Make private\r\n SWController.prototype.onPush = function (event) {\r\n event.waitUntil(this.onPush_(event));\r\n };\r\n // Visible for testing\r\n // TODO: Make private\r\n SWController.prototype.onSubChange = function (event) {\r\n event.waitUntil(this.onSubChange_(event));\r\n };\r\n // Visible for testing\r\n // TODO: Make private\r\n SWController.prototype.onNotificationClick = function (event) {\r\n event.waitUntil(this.onNotificationClick_(event));\r\n };\r\n /**\r\n * A handler for push events that shows notifications based on the content of\r\n * the payload.\r\n *\r\n * The payload must be a JSON-encoded Object with a `notification` key. The\r\n * value of the `notification` property will be used as the NotificationOptions\r\n * object passed to showNotification. Additionally, the `title` property of the\r\n * notification object will be used as the title.\r\n *\r\n * If there is no notification data in the payload then no notification will be\r\n * shown.\r\n */\r\n SWController.prototype.onPush_ = function (event) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var msgPayload, hasVisibleClients, notificationDetails, notificationTitle, reg;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!event.data) {\r\n return [2 /*return*/];\r\n }\r\n try {\r\n msgPayload = event.data.json();\r\n }\r\n catch (err) {\r\n // Not JSON so not an FCM message\r\n return [2 /*return*/];\r\n }\r\n return [4 /*yield*/, this.hasVisibleClients_()];\r\n case 1:\r\n hasVisibleClients = _a.sent();\r\n if (hasVisibleClients) {\r\n // Do not need to show a notification.\r\n if (msgPayload.notification || this.bgMessageHandler) {\r\n // Send to page\r\n return [2 /*return*/, this.sendMessageToWindowClients_(msgPayload)];\r\n }\r\n return [2 /*return*/];\r\n }\r\n notificationDetails = this.getNotificationData_(msgPayload);\r\n if (!notificationDetails) return [3 /*break*/, 3];\r\n notificationTitle = notificationDetails.title || '';\r\n return [4 /*yield*/, this.getSWRegistration_()];\r\n case 2:\r\n reg = _a.sent();\r\n return [2 /*return*/, reg.showNotification(notificationTitle, notificationDetails)];\r\n case 3:\r\n if (!this.bgMessageHandler) return [3 /*break*/, 5];\r\n return [4 /*yield*/, this.bgMessageHandler(msgPayload)];\r\n case 4:\r\n _a.sent();\r\n return [2 /*return*/];\r\n case 5: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n SWController.prototype.onSubChange_ = function (event) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var registration, err_1, err_2, tokenDetailsModel, tokenDetails;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n _a.trys.push([0, 2, , 3]);\r\n return [4 /*yield*/, this.getSWRegistration_()];\r\n case 1:\r\n registration = _a.sent();\r\n return [3 /*break*/, 3];\r\n case 2:\r\n err_1 = _a.sent();\r\n throw errorFactory.create(ERROR_CODES.UNABLE_TO_RESUBSCRIBE, {\r\n message: err_1\r\n });\r\n case 3:\r\n _a.trys.push([3, 5, , 8]);\r\n return [4 /*yield*/, registration.pushManager.getSubscription()];\r\n case 4:\r\n _a.sent();\r\n return [3 /*break*/, 8];\r\n case 5:\r\n err_2 = _a.sent();\r\n tokenDetailsModel = this.getTokenDetailsModel();\r\n return [4 /*yield*/, tokenDetailsModel.getTokenDetailsFromSWScope(registration.scope)];\r\n case 6:\r\n tokenDetails = _a.sent();\r\n if (!tokenDetails) {\r\n // This should rarely occure, but could if indexedDB\r\n // is corrupted or wiped\r\n throw err_2;\r\n }\r\n // Attempt to delete the token if we know it's bad\r\n return [4 /*yield*/, this.deleteToken(tokenDetails.fcmToken)];\r\n case 7:\r\n // Attempt to delete the token if we know it's bad\r\n _a.sent();\r\n throw err_2;\r\n case 8: return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n SWController.prototype.onNotificationClick_ = function (event) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var msgPayload, clickAction, windowClient, internalMsg;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n if (!event.notification ||\r\n !event.notification.data ||\r\n !event.notification.data[FCM_MSG]) {\r\n // Not an FCM notification, do nothing.\r\n return [2 /*return*/];\r\n }\r\n // Prevent other listeners from receiving the event\r\n event.stopImmediatePropagation();\r\n event.notification.close();\r\n msgPayload = event.notification.data[FCM_MSG];\r\n if (!msgPayload.notification) {\r\n // Nothing to do.\r\n return [2 /*return*/];\r\n }\r\n clickAction = msgPayload.notification.click_action;\r\n if (!clickAction) {\r\n // Nothing to do.\r\n return [2 /*return*/];\r\n }\r\n return [4 /*yield*/, this.getWindowClient_(clickAction)];\r\n case 1:\r\n windowClient = _a.sent();\r\n if (!!windowClient) return [3 /*break*/, 3];\r\n return [4 /*yield*/, self.clients.openWindow(clickAction)];\r\n case 2:\r\n // Unable to find window client so need to open one.\r\n windowClient = _a.sent();\r\n return [3 /*break*/, 5];\r\n case 3: return [4 /*yield*/, windowClient.focus()];\r\n case 4:\r\n windowClient = _a.sent();\r\n _a.label = 5;\r\n case 5:\r\n if (!windowClient) {\r\n // Window Client will not be returned if it's for a third party origin.\r\n return [2 /*return*/];\r\n }\r\n // Delete notification data from payload before sending to the page.\r\n delete msgPayload.notification;\r\n internalMsg = createNewMsg(MessageType.NOTIFICATION_CLICKED, msgPayload);\r\n // Attempt to send a message to the client to handle the data\r\n // Is affected by: https://github.com/slightlyoff/ServiceWorker/issues/728\r\n return [2 /*return*/, this.attemptToMessageClient_(windowClient, internalMsg)];\r\n }\r\n });\r\n });\r\n };\r\n // Visible for testing\r\n // TODO: Make private\r\n SWController.prototype.getNotificationData_ = function (msgPayload) {\r\n if (!msgPayload) {\r\n return;\r\n }\r\n if (typeof msgPayload.notification !== 'object') {\r\n return;\r\n }\r\n var notificationInformation = tslib_1.__assign({}, msgPayload.notification);\r\n // Put the message payload under FCM_MSG name so we can identify the\r\n // notification as being an FCM notification vs a notification from\r\n // somewhere else (i.e. normal web push or developer generated\r\n // notification).\r\n notificationInformation.data = (_a = {}, _a[FCM_MSG] = msgPayload, _a);\r\n return notificationInformation;\r\n var _a;\r\n };\r\n /**\r\n * Calling setBackgroundMessageHandler will opt in to some specific\r\n * behaviours.\r\n * 1.) If a notification doesn't need to be shown due to a window already\r\n * being visible, then push messages will be sent to the page.\r\n * 2.) If a notification needs to be shown, and the message contains no\r\n * notification data this method will be called\r\n * and the promise it returns will be passed to event.waitUntil.\r\n * If you do not set this callback then all push messages will let and the\r\n * developer can handle them in a their own 'push' event callback\r\n *\r\n * @param callback The callback to be called when a push message is received\r\n * and a notification must be shown. The callback will be given the data from\r\n * the push message.\r\n */\r\n SWController.prototype.setBackgroundMessageHandler = function (callback) {\r\n if (!callback || typeof callback !== 'function') {\r\n throw errorFactory.create(ERROR_CODES.BG_HANDLER_FUNCTION_EXPECTED);\r\n }\r\n this.bgMessageHandler = callback;\r\n };\r\n /**\r\n * @param url The URL to look for when focusing a client.\r\n * @return Returns an existing window client or a newly opened WindowClient.\r\n */\r\n // Visible for testing\r\n // TODO: Make private\r\n SWController.prototype.getWindowClient_ = function (url) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var parsedURL, clientList, suitableClient, i, parsedClientUrl;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0:\r\n parsedURL = new URL(url, self.location.href).href;\r\n return [4 /*yield*/, getClientList()];\r\n case 1:\r\n clientList = _a.sent();\r\n suitableClient = null;\r\n for (i = 0; i < clientList.length; i++) {\r\n parsedClientUrl = new URL(clientList[i].url, self.location.href)\r\n .href;\r\n if (parsedClientUrl === parsedURL) {\r\n suitableClient = clientList[i];\r\n break;\r\n }\r\n }\r\n return [2 /*return*/, suitableClient];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * This message will attempt to send the message to a window client.\r\n * @param client The WindowClient to send the message to.\r\n * @param message The message to send to the client.\r\n * @returns Returns a promise that resolves after sending the message. This\r\n * does not guarantee that the message was successfully received.\r\n */\r\n // Visible for testing\r\n // TODO: Make private\r\n SWController.prototype.attemptToMessageClient_ = function (client, message) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n return tslib_1.__generator(this, function (_a) {\r\n // NOTE: This returns a promise in case this API is abstracted later on to\r\n // do additional work\r\n if (!client) {\r\n throw errorFactory.create(ERROR_CODES.NO_WINDOW_CLIENT_TO_MSG);\r\n }\r\n client.postMessage(message);\r\n return [2 /*return*/];\r\n });\r\n });\r\n };\r\n /**\r\n * @returns If there is currently a visible WindowClient, this method will\r\n * resolve to true, otherwise false.\r\n */\r\n // Visible for testing\r\n // TODO: Make private\r\n SWController.prototype.hasVisibleClients_ = function () {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var clientList;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, getClientList()];\r\n case 1:\r\n clientList = _a.sent();\r\n return [2 /*return*/, clientList.some(function (client) { return client.visibilityState === 'visible'; })];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * @param msgPayload The data from the push event that should be sent to all\r\n * available pages.\r\n * @returns Returns a promise that resolves once the message has been sent to\r\n * all WindowClients.\r\n */\r\n // Visible for testing\r\n // TODO: Make private\r\n SWController.prototype.sendMessageToWindowClients_ = function (msgPayload) {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var _this = this;\r\n var clientList, internalMsg;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, getClientList()];\r\n case 1:\r\n clientList = _a.sent();\r\n internalMsg = createNewMsg(MessageType.PUSH_MSG_RECEIVED, msgPayload);\r\n return [4 /*yield*/, Promise.all(clientList.map(function (client) {\r\n return _this.attemptToMessageClient_(client, internalMsg);\r\n }))];\r\n case 2:\r\n _a.sent();\r\n return [2 /*return*/];\r\n }\r\n });\r\n });\r\n };\r\n /**\r\n * This will register the default service worker and return the registration.\r\n * @return he service worker registration to be used for the push service.\r\n */\r\n SWController.prototype.getSWRegistration_ = function () {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n return tslib_1.__generator(this, function (_a) {\r\n return [2 /*return*/, self.registration];\r\n });\r\n });\r\n };\r\n /**\r\n * This will return the default VAPID key or the uint8array version of the\r\n * public VAPID key provided by the developer.\r\n */\r\n SWController.prototype.getPublicVapidKey_ = function () {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n var swReg, vapidKeyFromDatabase;\r\n return tslib_1.__generator(this, function (_a) {\r\n switch (_a.label) {\r\n case 0: return [4 /*yield*/, this.getSWRegistration_()];\r\n case 1:\r\n swReg = _a.sent();\r\n if (!swReg) {\r\n throw errorFactory.create(ERROR_CODES.SW_REGISTRATION_EXPECTED);\r\n }\r\n return [4 /*yield*/, this.getVapidDetailsModel().getVapidFromSWScope(swReg.scope)];\r\n case 2:\r\n vapidKeyFromDatabase = _a.sent();\r\n if (vapidKeyFromDatabase == null) {\r\n return [2 /*return*/, DEFAULT_PUBLIC_VAPID_KEY];\r\n }\r\n return [2 /*return*/, vapidKeyFromDatabase];\r\n }\r\n });\r\n });\r\n };\r\n return SWController;\r\n}(ControllerInterface));\r\nfunction getClientList() {\r\n return self.clients.matchAll({\r\n type: 'window',\r\n includeUncontrolled: true\r\n // TS doesn't know that \"type: 'window'\" means it'll return WindowClient[]\r\n });\r\n}\r\nfunction createNewMsg(msgType, msgData) {\r\n return _a = {}, _a[MessageParameter.TYPE_OF_MSG] = msgType, _a[MessageParameter.DATA] = msgData, _a;\r\n var _a;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar DEFAULT_SW_PATH = '/firebase-messaging-sw.js';\r\nvar DEFAULT_SW_SCOPE = '/firebase-cloud-messaging-push-scope';\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar WindowController = /** @class */ (function (_super) {\r\n tslib_1.__extends(WindowController, _super);\r\n /**\r\n * A service that provides a MessagingService instance.\r\n */\r\n function WindowController(app) {\r\n var _this = _super.call(this, app) || this;\r\n _this.registrationToUse = null;\r\n _this.publicVapidKeyToUse = null;\r\n _this.manifestCheckPromise = null;\r\n _this.messageObserver = null;\r\n // @ts-ignore: Unused variable error, this is not implemented yet.\r\n _this.tokenRefreshObserver = null;\r\n _this.onMessageInternal = util.createSubscribe(function (observer) {\r\n _this.messageObserver = observer;\r\n });\r\n _this.onTokenRefreshInternal = util.createSubscribe(function (observer) {\r\n _this.tokenRefreshObserver = observer;\r\n });\r\n _this.setupSWMessageListener_();\r\n return _this;\r\n }\r\n /**\r\n * This method returns an FCM token if it can be generated.\r\n * The return promise will reject if the browser doesn't support\r\n * FCM, if permission is denied for notifications or it's not\r\n * possible to generate a token.\r\n *\r\n * @return Returns a promise that resolves to an FCM token or null if\r\n * permission isn't granted.\r\n */\r\n WindowController.prototype.getToken = function () {\r\n var _this = this;\r\n // Check that the required API's are available\r\n if (!this.isSupported_()) {\r\n return Promise.reject(errorFactory.create(ERROR_CODES.UNSUPPORTED_BROWSER));\r\n }\r\n return this.manifestCheck_().then(function () {\r\n return _super.prototype.getToken.call(_this);\r\n });\r\n };\r\n /**\r\n * The method checks that a manifest is defined and has the correct GCM\r\n * sender ID.\r\n * @return Returns a promise that resolves if the manifest matches\r\n * our required sender ID\r\n */\r\n // Visible for testing\r\n // TODO: make private\r\n WindowController.prototype.manifestCheck_ = function () {\r\n if (this.manifestCheckPromise) {\r\n return this.manifestCheckPromise;\r\n }\r\n var manifestTag = document.querySelector('link[rel=\"manifest\"]');\r\n if (!manifestTag) {\r\n this.manifestCheckPromise = Promise.resolve();\r\n }\r\n else {\r\n this.manifestCheckPromise = fetch(manifestTag.href)\r\n .then(function (response) {\r\n return response.json();\r\n })\r\n .catch(function () {\r\n // If the download or parsing fails allow check.\r\n // We only want to error if we KNOW that the gcm_sender_id is incorrect.\r\n })\r\n .then(function (manifestContent) {\r\n if (!manifestContent) {\r\n return;\r\n }\r\n if (!manifestContent['gcm_sender_id']) {\r\n return;\r\n }\r\n if (manifestContent['gcm_sender_id'] !== '103953800507') {\r\n throw errorFactory.create(ERROR_CODES.INCORRECT_GCM_SENDER_ID);\r\n }\r\n });\r\n }\r\n return this.manifestCheckPromise;\r\n };\r\n /**\r\n * Request permission if it is not currently granted\r\n *\r\n * @return Resolves if the permission was granted, otherwise rejects\r\n */\r\n WindowController.prototype.requestPermission = function () {\r\n return tslib_1.__awaiter(this, void 0, void 0, function () {\r\n return tslib_1.__generator(this, function (_a) {\r\n if (\r\n // TODO: Remove the cast when this issue is fixed:\r\n // https://github.com/Microsoft/TypeScript/issues/14701\r\n // tslint:disable-next-line no-any\r\n Notification.permission === 'granted') {\r\n return [2 /*return*/];\r\n }\r\n return [2 /*return*/, new Promise(function (resolve, reject) {\r\n var managePermissionResult = function (result) {\r\n if (result === 'granted') {\r\n return resolve();\r\n }\r\n else if (result === 'denied') {\r\n return reject(errorFactory.create(ERROR_CODES.PERMISSION_BLOCKED));\r\n }\r\n else {\r\n return reject(errorFactory.create(ERROR_CODES.PERMISSION_DEFAULT));\r\n }\r\n };\r\n // The Notification.requestPermission API was changed to\r\n // return a promise so now have to handle both in case\r\n // browsers stop support callbacks for promised version\r\n var permissionPromise = Notification.requestPermission(managePermissionResult);\r\n if (permissionPromise) {\r\n // Prefer the promise version as it's the future API.\r\n permissionPromise.then(managePermissionResult);\r\n }\r\n })];\r\n });\r\n });\r\n };\r\n /**\r\n * This method allows a developer to override the default service worker and\r\n * instead use a custom service worker.\r\n *\r\n * @param registration The service worker registration that should be used to\r\n * receive the push messages.\r\n */\r\n WindowController.prototype.useServiceWorker = function (registration) {\r\n if (!(registration instanceof ServiceWorkerRegistration)) {\r\n throw errorFactory.create(ERROR_CODES.SW_REGISTRATION_EXPECTED);\r\n }\r\n if (this.registrationToUse != null) {\r\n throw errorFactory.create(ERROR_CODES.USE_SW_BEFORE_GET_TOKEN);\r\n }\r\n this.registrationToUse = registration;\r\n };\r\n /**\r\n * This method allows a developer to override the default vapid key\r\n * and instead use a custom VAPID public key.\r\n *\r\n * @param publicKey A URL safe base64 encoded string.\r\n */\r\n WindowController.prototype.usePublicVapidKey = function (publicKey) {\r\n if (typeof publicKey !== 'string') {\r\n throw errorFactory.create(ERROR_CODES.INVALID_PUBLIC_VAPID_KEY);\r\n }\r\n if (this.publicVapidKeyToUse != null) {\r\n throw errorFactory.create(ERROR_CODES.USE_PUBLIC_KEY_BEFORE_GET_TOKEN);\r\n }\r\n var parsedKey = base64ToArrayBuffer(publicKey);\r\n if (parsedKey.length !== 65) {\r\n throw errorFactory.create(ERROR_CODES.PUBLIC_KEY_DECRYPTION_FAILED);\r\n }\r\n this.publicVapidKeyToUse = parsedKey;\r\n };\r\n /**\r\n * @export\r\n * @param nextOrObserver An observer object or a function triggered on\r\n * message.\r\n * @param error A function triggered on message error.\r\n * @param completed function triggered when the observer is removed.\r\n * @return The unsubscribe function for the observer.\r\n */\r\n WindowController.prototype.onMessage = function (nextOrObserver, error, completed) {\r\n if (typeof nextOrObserver === 'function') {\r\n return this.onMessageInternal(nextOrObserver, error, completed);\r\n }\r\n else {\r\n return this.onMessageInternal(nextOrObserver);\r\n }\r\n };\r\n /**\r\n * @param nextOrObserver An observer object or a function triggered on token\r\n * refresh.\r\n * @param error A function triggered on token refresh error.\r\n * @param completed function triggered when the observer is removed.\r\n * @return The unsubscribe function for the observer.\r\n */\r\n WindowController.prototype.onTokenRefresh = function (nextOrObserver, error, completed) {\r\n if (typeof nextOrObserver === 'function') {\r\n return this.onTokenRefreshInternal(nextOrObserver, error, completed);\r\n }\r\n else {\r\n return this.onTokenRefreshInternal(nextOrObserver);\r\n }\r\n };\r\n /**\r\n * Given a registration, wait for the service worker it relates to\r\n * become activer\r\n * @param registration Registration to wait for service worker to become active\r\n * @return Wait for service worker registration to become active\r\n */\r\n // Visible for testing\r\n // TODO: Make private\r\n WindowController.prototype.waitForRegistrationToActivate_ = function (registration) {\r\n var serviceWorker = registration.installing || registration.waiting || registration.active;\r\n return new Promise(function (resolve, reject) {\r\n if (!serviceWorker) {\r\n // This is a rare scenario but has occured in firefox\r\n reject(errorFactory.create(ERROR_CODES.NO_SW_IN_REG));\r\n return;\r\n }\r\n // Because the Promise function is called on next tick there is a\r\n // small chance that the worker became active or redundant already.\r\n if (serviceWorker.state === 'activated') {\r\n resolve(registration);\r\n return;\r\n }\r\n if (serviceWorker.state === 'redundant') {\r\n reject(errorFactory.create(ERROR_CODES.SW_REG_REDUNDANT));\r\n return;\r\n }\r\n var stateChangeListener = function () {\r\n if (serviceWorker.state === 'activated') {\r\n resolve(registration);\r\n }\r\n else if (serviceWorker.state === 'redundant') {\r\n reject(errorFactory.create(ERROR_CODES.SW_REG_REDUNDANT));\r\n }\r\n else {\r\n // Return early and wait to next state change\r\n return;\r\n }\r\n serviceWorker.removeEventListener('statechange', stateChangeListener);\r\n };\r\n serviceWorker.addEventListener('statechange', stateChangeListener);\r\n });\r\n };\r\n /**\r\n * This will register the default service worker and return the registration\r\n * @return The service worker registration to be used for the push service.\r\n */\r\n WindowController.prototype.getSWRegistration_ = function () {\r\n var _this = this;\r\n if (this.registrationToUse) {\r\n return this.waitForRegistrationToActivate_(this.registrationToUse);\r\n }\r\n // Make the registration null so we know useServiceWorker will not\r\n // use a new service worker as registrationToUse is no longer undefined\r\n this.registrationToUse = null;\r\n return navigator.serviceWorker\r\n .register(DEFAULT_SW_PATH, {\r\n scope: DEFAULT_SW_SCOPE\r\n })\r\n .catch(function (err) {\r\n throw errorFactory.create(ERROR_CODES.FAILED_DEFAULT_REGISTRATION, {\r\n browserErrorMessage: err.message\r\n });\r\n })\r\n .then(function (registration) {\r\n return _this.waitForRegistrationToActivate_(registration).then(function () {\r\n _this.registrationToUse = registration;\r\n // We update after activation due to an issue with Firefox v49 where\r\n // a race condition occassionally causes the service work to not\r\n // install\r\n registration.update();\r\n return registration;\r\n });\r\n });\r\n };\r\n /**\r\n * This will return the default VAPID key or the uint8array version of the public VAPID key\r\n * provided by the developer.\r\n */\r\n WindowController.prototype.getPublicVapidKey_ = function () {\r\n if (this.publicVapidKeyToUse) {\r\n return Promise.resolve(this.publicVapidKeyToUse);\r\n }\r\n return Promise.resolve(DEFAULT_PUBLIC_VAPID_KEY);\r\n };\r\n /**\r\n * This method will set up a message listener to handle\r\n * events from the service worker that should trigger\r\n * events in the page.\r\n */\r\n // Visible for testing\r\n // TODO: Make private\r\n WindowController.prototype.setupSWMessageListener_ = function () {\r\n var _this = this;\r\n if (!('serviceWorker' in navigator)) {\r\n return;\r\n }\r\n navigator.serviceWorker.addEventListener('message', function (event) {\r\n if (!event.data || !event.data[MessageParameter.TYPE_OF_MSG]) {\r\n // Not a message from FCM\r\n return;\r\n }\r\n var workerPageMessage = event.data;\r\n switch (workerPageMessage[MessageParameter.TYPE_OF_MSG]) {\r\n case MessageType.PUSH_MSG_RECEIVED:\r\n case MessageType.NOTIFICATION_CLICKED:\r\n var pushMessage = workerPageMessage[MessageParameter.DATA];\r\n if (_this.messageObserver) {\r\n _this.messageObserver.next(pushMessage);\r\n }\r\n break;\r\n default:\r\n // Noop.\r\n break;\r\n }\r\n }, false);\r\n };\r\n /**\r\n * Checks to see if the required API's are valid or not.\r\n * @return Returns true if the desired APIs are available.\r\n */\r\n // Visible for testing\r\n // TODO: Make private\r\n WindowController.prototype.isSupported_ = function () {\r\n return ('serviceWorker' in navigator &&\r\n 'PushManager' in window &&\r\n 'Notification' in window &&\r\n 'fetch' in window &&\r\n ServiceWorkerRegistration.prototype.hasOwnProperty('showNotification') &&\r\n PushSubscription.prototype.hasOwnProperty('getKey'));\r\n };\r\n return WindowController;\r\n}(ControllerInterface));\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction registerMessaging(instance) {\r\n var messagingName = 'messaging';\r\n var factoryMethod = function (app) {\r\n if (self && 'ServiceWorkerGlobalScope' in self) {\r\n return new SWController(app);\r\n }\r\n // Assume we are in the window context.\r\n return new WindowController(app);\r\n };\r\n var namespaceExports = {\r\n // no-inline\r\n Messaging: WindowController\r\n };\r\n instance.INTERNAL.registerService(messagingName, factoryMethod, namespaceExports);\r\n}\r\nregisterMessaging(firebase);\n\nexports.registerMessaging = registerMessaging;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/@firebase/messaging/dist/index.cjs.js\n// module id = 441\n// module chunks = 64016405352682","'use strict';\n\nrequire('whatwg-fetch');\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n return function() {\n fn.apply(thisArg, arguments);\n };\n}\n\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n this._state = 0;\n this._handled = false;\n this._value = undefined;\n this._deferreds = [];\n\n doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function() {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\n\nfunction resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\n\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\n\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\n\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(\n function(value) {\n if (done) return;\n done = true;\n resolve(self, value);\n },\n function(reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n }\n );\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n var prom = new this.constructor(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\n\nPromise.prototype['finally'] = function(callback) {\n var constructor = this.constructor;\n return this.then(\n function(value) {\n return constructor.resolve(callback()).then(function() {\n return value;\n });\n },\n function(reason) {\n return constructor.resolve(callback()).then(function() {\n return constructor.reject(reason);\n });\n }\n );\n};\n\nPromise.all = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!arr || typeof arr.length === 'undefined')\n throw new TypeError('Promise.all accepts an array');\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n reject\n );\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.resolve = function(value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function(resolve) {\n resolve(value);\n });\n};\n\nPromise.reject = function(value) {\n return new Promise(function(resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function(values) {\n return new Promise(function(resolve, reject) {\n for (var i = 0, len = values.length; i < len; i++) {\n values[i].then(resolve, reject);\n }\n });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n (typeof setImmediate === 'function' &&\n function(fn) {\n setImmediate(fn);\n }) ||\n function(fn) {\n setTimeoutFunc(fn, 0);\n };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n};\n\nvar globalNS = (function() {\n // the only reliable means to get the global object is\n // `Function('return this')()`\n // However, this causes CSP violations in Chrome apps.\n if (typeof self !== 'undefined') {\n return self;\n }\n if (typeof window !== 'undefined') {\n return window;\n }\n if (typeof global !== 'undefined') {\n return global;\n }\n throw new Error('unable to locate global object');\n})();\n\nif (!globalNS.Promise) {\n globalNS.Promise = Promise;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar _global = createCommonjsModule(function (module) {\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n});\n\nvar _core = createCommonjsModule(function (module) {\nvar core = module.exports = { version: '2.5.5' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n});\nvar _core_1 = _core.version;\n\nvar _isObject = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\nvar _anObject = function (it) {\n if (!_isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n\nvar _fails = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n\n// Thank's IE8 for his funny defineProperty\nvar _descriptors = !_fails(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\nvar document = _global.document;\n// typeof document.createElement is 'object' in old IE\nvar is = _isObject(document) && _isObject(document.createElement);\nvar _domCreate = function (it) {\n return is ? document.createElement(it) : {};\n};\n\nvar _ie8DomDefine = !_descriptors && !_fails(function () {\n return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\n\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nvar _toPrimitive = function (it, S) {\n if (!_isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\nvar dP = Object.defineProperty;\n\nvar f = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n _anObject(O);\n P = _toPrimitive(P, true);\n _anObject(Attributes);\n if (_ie8DomDefine) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\nvar _objectDp = {\n\tf: f\n};\n\nvar _propertyDesc = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\nvar _hide = _descriptors ? function (object, key, value) {\n return _objectDp.f(object, key, _propertyDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\nvar hasOwnProperty = {}.hasOwnProperty;\nvar _has = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\nvar id = 0;\nvar px = Math.random();\nvar _uid = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n\nvar _redefine = createCommonjsModule(function (module) {\nvar SRC = _uid('src');\nvar TO_STRING = 'toString';\nvar $toString = Function[TO_STRING];\nvar TPL = ('' + $toString).split(TO_STRING);\n\n_core.inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) _has(val, 'name') || _hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === _global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n _hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n _hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n});\n\nvar _aFunction = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n\n// optional / simple context binding\n\nvar _ctx = function (fn, that, length) {\n _aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out;\n // extend global\n if (target) _redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) _hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\n_global.core = _core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nvar _export = $export;\n\nvar toString = {}.toString;\n\nvar _cof = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\n\n// eslint-disable-next-line no-prototype-builtins\nvar _iobject = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return _cof(it) == 'String' ? it.split('') : Object(it);\n};\n\n// 7.2.1 RequireObjectCoercible(argument)\nvar _defined = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n// 7.1.13 ToObject(argument)\n\nvar _toObject = function (it) {\n return Object(_defined(it));\n};\n\n// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nvar _toInteger = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n\n// 7.1.15 ToLength\n\nvar min = Math.min;\nvar _toLength = function (it) {\n return it > 0 ? min(_toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n\n// 7.2.2 IsArray(argument)\n\nvar _isArray = Array.isArray || function isArray(arg) {\n return _cof(arg) == 'Array';\n};\n\nvar SHARED = '__core-js_shared__';\nvar store = _global[SHARED] || (_global[SHARED] = {});\nvar _shared = function (key) {\n return store[key] || (store[key] = {});\n};\n\nvar _wks = createCommonjsModule(function (module) {\nvar store = _shared('wks');\n\nvar Symbol = _global.Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : _uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n});\n\nvar SPECIES = _wks('species');\n\nvar _arraySpeciesConstructor = function (original) {\n var C;\n if (_isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || _isArray(C.prototype))) C = undefined;\n if (_isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n\n// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\n\n\nvar _arraySpeciesCreate = function (original, length) {\n return new (_arraySpeciesConstructor(original))(length);\n};\n\n// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\n\n\n\n\n\nvar _arrayMethods = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || _arraySpeciesCreate;\n return function ($this, callbackfn, that) {\n var O = _toObject($this);\n var self = _iobject(O);\n var f = _ctx(callbackfn, that, 3);\n var length = _toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n\n// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = _wks('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) _hide(ArrayProto, UNSCOPABLES, {});\nvar _addToUnscopables = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\n\nvar $find = _arrayMethods(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n_export(_export.P + _export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n_addToUnscopables(KEY);\n\nvar find = _core.Array.find;\n\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\n\nvar $find$1 = _arrayMethods(6);\nvar KEY$1 = 'findIndex';\nvar forced$1 = true;\n// Shouldn't skip holes\nif (KEY$1 in []) Array(1)[KEY$1](function () { forced$1 = false; });\n_export(_export.P + _export.F * forced$1, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n_addToUnscopables(KEY$1);\n\nvar findIndex = _core.Array.findIndex;\n\n// 7.2.8 IsRegExp(argument)\n\n\nvar MATCH = _wks('match');\nvar _isRegexp = function (it) {\n var isRegExp;\n return _isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : _cof(it) == 'RegExp');\n};\n\n// helper for String#{startsWith, endsWith, includes}\n\n\n\nvar _stringContext = function (that, searchString, NAME) {\n if (_isRegexp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(_defined(that));\n};\n\nvar MATCH$1 = _wks('match');\nvar _failsIsRegexp = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH$1] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n_export(_export.P + _export.F * _failsIsRegexp(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = _stringContext(this, searchString, STARTS_WITH);\n var index = _toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n\nvar startsWith = _core.String.startsWith;\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/@firebase/polyfill/dist/index.cjs.js\n// module id = 442\n// module chunks = 64016405352682","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nfunction _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }\n\nvar firebase = _interopDefault(require('@firebase/app'));\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Constants used in the Firebase Storage library.\r\n */\r\n/**\r\n * Domain and scheme for API calls.\r\n */\r\nvar domainBase = 'https://firebasestorage.googleapis.com';\r\n/**\r\n * Domain and scheme for object downloads.\r\n */\r\nvar downloadBase = 'https://firebasestorage.googleapis.com';\r\n/**\r\n * Base URL for non-upload calls to the API.\r\n */\r\nvar apiBaseUrl = '/v0';\r\n/**\r\n * Base URL for upload calls to the API.\r\n */\r\nvar apiUploadBaseUrl = '/v0';\r\nvar configOption = 'storageBucket';\r\n/**\r\n * 2 minutes\r\n */\r\nvar defaultMaxOperationRetryTime = 2 * 60 * 1000;\r\n/**\r\n * 10 minutes\r\n */\r\nvar defaultMaxUploadRetryTime = 10 * 60 * 100;\r\n/**\r\n * This is the value of Number.MIN_SAFE_INTEGER, which is not well supported\r\n * enough for us to use it directly.\r\n */\r\nvar minSafeInteger = -9007199254740991;\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar FirebaseStorageError = /** @class */ (function () {\r\n function FirebaseStorageError(code, message) {\r\n this.code_ = prependCode(code);\r\n this.message_ = 'Firebase Storage: ' + message;\r\n this.serverResponse_ = null;\r\n this.name_ = 'FirebaseError';\r\n }\r\n FirebaseStorageError.prototype.codeProp = function () {\r\n return this.code;\r\n };\r\n FirebaseStorageError.prototype.codeEquals = function (code) {\r\n return prependCode(code) === this.codeProp();\r\n };\r\n FirebaseStorageError.prototype.serverResponseProp = function () {\r\n return this.serverResponse_;\r\n };\r\n FirebaseStorageError.prototype.setServerResponseProp = function (serverResponse) {\r\n this.serverResponse_ = serverResponse;\r\n };\r\n Object.defineProperty(FirebaseStorageError.prototype, \"name\", {\r\n get: function () {\r\n return this.name_;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FirebaseStorageError.prototype, \"code\", {\r\n get: function () {\r\n return this.code_;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FirebaseStorageError.prototype, \"message\", {\r\n get: function () {\r\n return this.message_;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(FirebaseStorageError.prototype, \"serverResponse\", {\r\n get: function () {\r\n return this.serverResponse_;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return FirebaseStorageError;\r\n}());\r\nvar Code = {\r\n // Shared between all platforms\r\n UNKNOWN: 'unknown',\r\n OBJECT_NOT_FOUND: 'object-not-found',\r\n BUCKET_NOT_FOUND: 'bucket-not-found',\r\n PROJECT_NOT_FOUND: 'project-not-found',\r\n QUOTA_EXCEEDED: 'quota-exceeded',\r\n UNAUTHENTICATED: 'unauthenticated',\r\n UNAUTHORIZED: 'unauthorized',\r\n RETRY_LIMIT_EXCEEDED: 'retry-limit-exceeded',\r\n INVALID_CHECKSUM: 'invalid-checksum',\r\n CANCELED: 'canceled',\r\n // JS specific\r\n INVALID_EVENT_NAME: 'invalid-event-name',\r\n INVALID_URL: 'invalid-url',\r\n INVALID_DEFAULT_BUCKET: 'invalid-default-bucket',\r\n NO_DEFAULT_BUCKET: 'no-default-bucket',\r\n CANNOT_SLICE_BLOB: 'cannot-slice-blob',\r\n SERVER_FILE_WRONG_SIZE: 'server-file-wrong-size',\r\n NO_DOWNLOAD_URL: 'no-download-url',\r\n INVALID_ARGUMENT: 'invalid-argument',\r\n INVALID_ARGUMENT_COUNT: 'invalid-argument-count',\r\n APP_DELETED: 'app-deleted',\r\n INVALID_ROOT_OPERATION: 'invalid-root-operation',\r\n INVALID_FORMAT: 'invalid-format',\r\n INTERNAL_ERROR: 'internal-error'\r\n};\r\nfunction prependCode(code) {\r\n return 'storage/' + code;\r\n}\r\nfunction unknown() {\r\n var message = 'An unknown error occurred, please check the error payload for ' +\r\n 'server response.';\r\n return new FirebaseStorageError(Code.UNKNOWN, message);\r\n}\r\nfunction objectNotFound(path) {\r\n return new FirebaseStorageError(Code.OBJECT_NOT_FOUND, \"Object '\" + path + \"' does not exist.\");\r\n}\r\nfunction quotaExceeded(bucket) {\r\n return new FirebaseStorageError(Code.QUOTA_EXCEEDED, \"Quota for bucket '\" +\r\n bucket +\r\n \"' exceeded, please view quota on \" +\r\n 'https://firebase.google.com/pricing/.');\r\n}\r\nfunction unauthenticated() {\r\n var message = 'User is not authenticated, please authenticate using Firebase ' +\r\n 'Authentication and try again.';\r\n return new FirebaseStorageError(Code.UNAUTHENTICATED, message);\r\n}\r\nfunction unauthorized(path) {\r\n return new FirebaseStorageError(Code.UNAUTHORIZED, \"User does not have permission to access '\" + path + \"'.\");\r\n}\r\nfunction retryLimitExceeded() {\r\n return new FirebaseStorageError(Code.RETRY_LIMIT_EXCEEDED, 'Max retry time for operation exceeded, please try again.');\r\n}\r\nfunction canceled() {\r\n return new FirebaseStorageError(Code.CANCELED, 'User canceled the upload/download.');\r\n}\r\nfunction invalidUrl(url) {\r\n return new FirebaseStorageError(Code.INVALID_URL, \"Invalid URL '\" + url + \"'.\");\r\n}\r\nfunction invalidDefaultBucket(bucket) {\r\n return new FirebaseStorageError(Code.INVALID_DEFAULT_BUCKET, \"Invalid default bucket '\" + bucket + \"'.\");\r\n}\r\nfunction cannotSliceBlob() {\r\n return new FirebaseStorageError(Code.CANNOT_SLICE_BLOB, 'Cannot slice blob for upload. Please retry the upload.');\r\n}\r\nfunction serverFileWrongSize() {\r\n return new FirebaseStorageError(Code.SERVER_FILE_WRONG_SIZE, 'Server recorded incorrect upload file size, please retry the upload.');\r\n}\r\nfunction noDownloadURL() {\r\n return new FirebaseStorageError(Code.NO_DOWNLOAD_URL, 'The given file does not have any download URLs.');\r\n}\r\nfunction invalidArgument(index, fnName, message) {\r\n return new FirebaseStorageError(Code.INVALID_ARGUMENT, 'Invalid argument in `' + fnName + '` at index ' + index + ': ' + message);\r\n}\r\nfunction invalidArgumentCount(argMin, argMax, fnName, real) {\r\n var countPart;\r\n var plural;\r\n if (argMin === argMax) {\r\n countPart = argMin;\r\n plural = argMin === 1 ? 'argument' : 'arguments';\r\n }\r\n else {\r\n countPart = 'between ' + argMin + ' and ' + argMax;\r\n plural = 'arguments';\r\n }\r\n return new FirebaseStorageError(Code.INVALID_ARGUMENT_COUNT, 'Invalid argument count in `' +\r\n fnName +\r\n '`: Expected ' +\r\n countPart +\r\n ' ' +\r\n plural +\r\n ', received ' +\r\n real +\r\n '.');\r\n}\r\nfunction appDeleted() {\r\n return new FirebaseStorageError(Code.APP_DELETED, 'The Firebase app was deleted.');\r\n}\r\n/**\r\n * @param name The name of the operation that was invalid.\r\n */\r\nfunction invalidRootOperation(name) {\r\n return new FirebaseStorageError(Code.INVALID_ROOT_OPERATION, \"The operation '\" +\r\n name +\r\n \"' cannot be performed on a root reference, create a non-root \" +\r\n \"reference using child, such as .child('file.png').\");\r\n}\r\n/**\r\n * @param format The format that was not valid.\r\n * @param message A message describing the format violation.\r\n */\r\nfunction invalidFormat(format, message) {\r\n return new FirebaseStorageError(Code.INVALID_FORMAT, \"String does not match format '\" + format + \"': \" + message);\r\n}\r\n/**\r\n * @param message A message describing the internal error.\r\n */\r\nfunction internalError(message) {\r\n throw new FirebaseStorageError(Code.INTERNAL_ERROR, 'Internal error: ' + message);\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar StringFormat = {\r\n RAW: 'raw',\r\n BASE64: 'base64',\r\n BASE64URL: 'base64url',\r\n DATA_URL: 'data_url'\r\n};\r\nfunction formatValidator(stringFormat) {\r\n switch (stringFormat) {\r\n case StringFormat.RAW:\r\n case StringFormat.BASE64:\r\n case StringFormat.BASE64URL:\r\n case StringFormat.DATA_URL:\r\n return;\r\n default:\r\n throw 'Expected one of the event types: [' +\r\n StringFormat.RAW +\r\n ', ' +\r\n StringFormat.BASE64 +\r\n ', ' +\r\n StringFormat.BASE64URL +\r\n ', ' +\r\n StringFormat.DATA_URL +\r\n '].';\r\n }\r\n}\r\n/**\r\n * @struct\r\n */\r\nvar StringData = /** @class */ (function () {\r\n function StringData(data, opt_contentType) {\r\n this.data = data;\r\n this.contentType = opt_contentType || null;\r\n }\r\n return StringData;\r\n}());\r\nfunction dataFromString(format, string) {\r\n switch (format) {\r\n case StringFormat.RAW:\r\n return new StringData(utf8Bytes_(string));\r\n case StringFormat.BASE64:\r\n case StringFormat.BASE64URL:\r\n return new StringData(base64Bytes_(format, string));\r\n case StringFormat.DATA_URL:\r\n return new StringData(dataURLBytes_(string), dataURLContentType_(string));\r\n }\r\n // assert(false);\r\n throw unknown();\r\n}\r\nfunction utf8Bytes_(string) {\r\n var b = [];\r\n for (var i = 0; i < string.length; i++) {\r\n var c = string.charCodeAt(i);\r\n if (c <= 127) {\r\n b.push(c);\r\n }\r\n else {\r\n if (c <= 2047) {\r\n b.push(192 | (c >> 6), 128 | (c & 63));\r\n }\r\n else {\r\n if ((c & 64512) == 55296) {\r\n // The start of a surrogate pair.\r\n var valid = i < string.length - 1 &&\r\n (string.charCodeAt(i + 1) & 64512) == 56320;\r\n if (!valid) {\r\n // The second surrogate wasn't there.\r\n b.push(239, 191, 189);\r\n }\r\n else {\r\n var hi = c;\r\n var lo = string.charCodeAt(++i);\r\n c = 65536 | ((hi & 1023) << 10) | (lo & 1023);\r\n b.push(240 | (c >> 18), 128 | ((c >> 12) & 63), 128 | ((c >> 6) & 63), 128 | (c & 63));\r\n }\r\n }\r\n else {\r\n if ((c & 64512) == 56320) {\r\n // Invalid low surrogate.\r\n b.push(239, 191, 189);\r\n }\r\n else {\r\n b.push(224 | (c >> 12), 128 | ((c >> 6) & 63), 128 | (c & 63));\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return new Uint8Array(b);\r\n}\r\nfunction percentEncodedBytes_(string) {\r\n var decoded;\r\n try {\r\n decoded = decodeURIComponent(string);\r\n }\r\n catch (e) {\r\n throw invalidFormat(StringFormat.DATA_URL, 'Malformed data URL.');\r\n }\r\n return utf8Bytes_(decoded);\r\n}\r\nfunction base64Bytes_(format, string) {\r\n switch (format) {\r\n case StringFormat.BASE64: {\r\n var hasMinus = string.indexOf('-') !== -1;\r\n var hasUnder = string.indexOf('_') !== -1;\r\n if (hasMinus || hasUnder) {\r\n var invalidChar = hasMinus ? '-' : '_';\r\n throw invalidFormat(format, \"Invalid character '\" +\r\n invalidChar +\r\n \"' found: is it base64url encoded?\");\r\n }\r\n break;\r\n }\r\n case StringFormat.BASE64URL: {\r\n var hasPlus = string.indexOf('+') !== -1;\r\n var hasSlash = string.indexOf('/') !== -1;\r\n if (hasPlus || hasSlash) {\r\n var invalidChar = hasPlus ? '+' : '/';\r\n throw invalidFormat(format, \"Invalid character '\" + invalidChar + \"' found: is it base64 encoded?\");\r\n }\r\n string = string.replace(/-/g, '+').replace(/_/g, '/');\r\n break;\r\n }\r\n }\r\n var bytes;\r\n try {\r\n bytes = atob(string);\r\n }\r\n catch (e) {\r\n throw invalidFormat(format, 'Invalid character found');\r\n }\r\n var array = new Uint8Array(bytes.length);\r\n for (var i = 0; i < bytes.length; i++) {\r\n array[i] = bytes.charCodeAt(i);\r\n }\r\n return array;\r\n}\r\n/**\r\n * @struct\r\n */\r\nvar DataURLParts = /** @class */ (function () {\r\n function DataURLParts(dataURL) {\r\n this.base64 = false;\r\n this.contentType = null;\r\n var matches = dataURL.match(/^data:([^,]+)?,/);\r\n if (matches === null) {\r\n throw invalidFormat(StringFormat.DATA_URL, \"Must be formatted 'data:[][;base64],\");\r\n }\r\n var middle = matches[1] || null;\r\n if (middle != null) {\r\n this.base64 = endsWith(middle, ';base64');\r\n this.contentType = this.base64\r\n ? middle.substring(0, middle.length - ';base64'.length)\r\n : middle;\r\n }\r\n this.rest = dataURL.substring(dataURL.indexOf(',') + 1);\r\n }\r\n return DataURLParts;\r\n}());\r\nfunction dataURLBytes_(string) {\r\n var parts = new DataURLParts(string);\r\n if (parts.base64) {\r\n return base64Bytes_(StringFormat.BASE64, parts.rest);\r\n }\r\n else {\r\n return percentEncodedBytes_(parts.rest);\r\n }\r\n}\r\nfunction dataURLContentType_(string) {\r\n var parts = new DataURLParts(string);\r\n return parts.contentType;\r\n}\r\nfunction endsWith(s, end) {\r\n var longEnough = s.length >= end.length;\r\n if (!longEnough) {\r\n return false;\r\n }\r\n return s.substring(s.length - end.length) === end;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar TaskEvent = {\r\n /** Triggered whenever the task changes or progress is updated. */\r\n STATE_CHANGED: 'state_changed'\r\n};\r\nvar InternalTaskState = {\r\n RUNNING: 'running',\r\n PAUSING: 'pausing',\r\n PAUSED: 'paused',\r\n SUCCESS: 'success',\r\n CANCELING: 'canceling',\r\n CANCELED: 'canceled',\r\n ERROR: 'error'\r\n};\r\nvar TaskState = {\r\n /** The task is currently transferring data. */\r\n RUNNING: 'running',\r\n /** The task was paused by the user. */\r\n PAUSED: 'paused',\r\n /** The task completed successfully. */\r\n SUCCESS: 'success',\r\n /** The task was canceled. */\r\n CANCELED: 'canceled',\r\n /** The task failed with an error. */\r\n ERROR: 'error'\r\n};\r\nfunction taskStateFromInternalTaskState(state) {\r\n switch (state) {\r\n case InternalTaskState.RUNNING:\r\n case InternalTaskState.PAUSING:\r\n case InternalTaskState.CANCELING:\r\n return TaskState.RUNNING;\r\n case InternalTaskState.PAUSED:\r\n return TaskState.PAUSED;\r\n case InternalTaskState.SUCCESS:\r\n return TaskState.SUCCESS;\r\n case InternalTaskState.CANCELED:\r\n return TaskState.CANCELED;\r\n case InternalTaskState.ERROR:\r\n return TaskState.ERROR;\r\n default:\r\n // TODO(andysoto): assert(false);\r\n return TaskState.ERROR;\r\n }\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Contains methods for working with objects.\r\n */\r\nfunction contains(obj, prop) {\r\n return Object.prototype.hasOwnProperty.call(obj, prop);\r\n}\r\nfunction forEach(obj, f) {\r\n for (var key in obj) {\r\n if (contains(obj, key)) {\r\n f(key, obj[key]);\r\n }\r\n }\r\n}\r\nfunction clone(obj) {\r\n if (obj == null) {\r\n return {};\r\n }\r\n var c = {};\r\n forEach(obj, function (key, val) {\r\n c[key] = val;\r\n });\r\n return c;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Implements the promise abstraction interface for external\r\n * (public SDK) packaging, which just passes through to the firebase-app impl.\r\n */\r\n/**\r\n * @template T\r\n * @param {function((function(T): void),\r\n * (function(!Error): void))} resolver\r\n */\r\nfunction make(resolver) {\r\n return new Promise(resolver);\r\n}\r\n/**\r\n * @template T\r\n */\r\nfunction resolve(value) {\r\n return Promise.resolve(value);\r\n}\r\nfunction reject(error) {\r\n return Promise.reject(error);\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @return False if the object is undefined or null, true otherwise.\r\n */\r\nfunction isDef(p) {\r\n return p != null;\r\n}\r\nfunction isJustDef(p) {\r\n return p !== void 0;\r\n}\r\nfunction isFunction(p) {\r\n return typeof p === 'function';\r\n}\r\nfunction isObject(p) {\r\n return typeof p === 'object';\r\n}\r\nfunction isNonNullObject(p) {\r\n return isObject(p) && p !== null;\r\n}\r\nfunction isNonArrayObject(p) {\r\n return isObject(p) && !Array.isArray(p);\r\n}\r\nfunction isString(p) {\r\n return typeof p === 'string' || p instanceof String;\r\n}\r\nfunction isNumber(p) {\r\n return typeof p === 'number' || p instanceof Number;\r\n}\r\nfunction isNativeBlob(p) {\r\n return isNativeBlobDefined() && p instanceof Blob;\r\n}\r\nfunction isNativeBlobDefined() {\r\n return typeof Blob !== 'undefined';\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @enum{number}\r\n */\r\nvar ErrorCode;\r\n(function (ErrorCode) {\r\n ErrorCode[ErrorCode[\"NO_ERROR\"] = 0] = \"NO_ERROR\";\r\n ErrorCode[ErrorCode[\"NETWORK_ERROR\"] = 1] = \"NETWORK_ERROR\";\r\n ErrorCode[ErrorCode[\"ABORT\"] = 2] = \"ABORT\";\r\n})(ErrorCode || (ErrorCode = {}));\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * We use this instead of goog.net.XhrIo because goog.net.XhrIo is hyuuuuge and\r\n * doesn't work in React Native on Android.\r\n */\r\nvar NetworkXhrIo = /** @class */ (function () {\r\n function NetworkXhrIo() {\r\n var _this = this;\r\n this.sent_ = false;\r\n this.xhr_ = new XMLHttpRequest();\r\n this.errorCode_ = ErrorCode.NO_ERROR;\r\n this.sendPromise_ = make(function (resolve$$1, reject$$1) {\r\n _this.xhr_.addEventListener('abort', function (event) {\r\n _this.errorCode_ = ErrorCode.ABORT;\r\n resolve$$1(_this);\r\n });\r\n _this.xhr_.addEventListener('error', function (event) {\r\n _this.errorCode_ = ErrorCode.NETWORK_ERROR;\r\n resolve$$1(_this);\r\n });\r\n _this.xhr_.addEventListener('load', function (event) {\r\n resolve$$1(_this);\r\n });\r\n });\r\n }\r\n /**\r\n * @override\r\n */\r\n NetworkXhrIo.prototype.send = function (url, method, opt_body, opt_headers) {\r\n var _this = this;\r\n if (this.sent_) {\r\n throw internalError('cannot .send() more than once');\r\n }\r\n this.sent_ = true;\r\n this.xhr_.open(method, url, true);\r\n if (isDef(opt_headers)) {\r\n var headers = opt_headers;\r\n forEach(headers, function (key, val) {\r\n _this.xhr_.setRequestHeader(key, val.toString());\r\n });\r\n }\r\n if (isDef(opt_body)) {\r\n this.xhr_.send(opt_body);\r\n }\r\n else {\r\n this.xhr_.send();\r\n }\r\n return this.sendPromise_;\r\n };\r\n /**\r\n * @override\r\n */\r\n NetworkXhrIo.prototype.getErrorCode = function () {\r\n if (!this.sent_) {\r\n throw internalError('cannot .getErrorCode() before sending');\r\n }\r\n return this.errorCode_;\r\n };\r\n /**\r\n * @override\r\n */\r\n NetworkXhrIo.prototype.getStatus = function () {\r\n if (!this.sent_) {\r\n throw internalError('cannot .getStatus() before sending');\r\n }\r\n try {\r\n return this.xhr_.status;\r\n }\r\n catch (e) {\r\n return -1;\r\n }\r\n };\r\n /**\r\n * @override\r\n */\r\n NetworkXhrIo.prototype.getResponseText = function () {\r\n if (!this.sent_) {\r\n throw internalError('cannot .getResponseText() before sending');\r\n }\r\n return this.xhr_.responseText;\r\n };\r\n /**\r\n * Aborts the request.\r\n * @override\r\n */\r\n NetworkXhrIo.prototype.abort = function () {\r\n this.xhr_.abort();\r\n };\r\n /**\r\n * @override\r\n */\r\n NetworkXhrIo.prototype.getResponseHeader = function (header) {\r\n return this.xhr_.getResponseHeader(header);\r\n };\r\n /**\r\n * @override\r\n */\r\n NetworkXhrIo.prototype.addUploadProgressListener = function (listener) {\r\n if (isDef(this.xhr_.upload)) {\r\n this.xhr_.upload.addEventListener('progress', listener);\r\n }\r\n };\r\n /**\r\n * @override\r\n */\r\n NetworkXhrIo.prototype.removeUploadProgressListener = function (listener) {\r\n if (isDef(this.xhr_.upload)) {\r\n this.xhr_.upload.removeEventListener('progress', listener);\r\n }\r\n };\r\n return NetworkXhrIo;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Factory-like class for creating XhrIo instances.\r\n */\r\nvar XhrIoPool = /** @class */ (function () {\r\n function XhrIoPool() {\r\n }\r\n XhrIoPool.prototype.createXhrIo = function () {\r\n return new NetworkXhrIo();\r\n };\r\n return XhrIoPool;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns the Object resulting from parsing the given JSON, or null if the\r\n * given string does not represent a JSON object.\r\n */\r\nfunction jsonObjectOrNull(s) {\r\n var obj;\r\n try {\r\n obj = JSON.parse(s);\r\n }\r\n catch (e) {\r\n return null;\r\n }\r\n if (isNonArrayObject(obj)) {\r\n return obj;\r\n }\r\n else {\r\n return null;\r\n }\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @struct\r\n */\r\nvar Location = /** @class */ (function () {\r\n function Location(bucket, path) {\r\n this.bucket = bucket;\r\n this.path_ = path;\r\n }\r\n Object.defineProperty(Location.prototype, \"path\", {\r\n get: function () {\r\n return this.path_;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Location.prototype.fullServerUrl = function () {\r\n var encode = encodeURIComponent;\r\n return '/b/' + encode(this.bucket) + '/o/' + encode(this.path);\r\n };\r\n Location.prototype.bucketOnlyServerUrl = function () {\r\n var encode = encodeURIComponent;\r\n return '/b/' + encode(this.bucket) + '/o';\r\n };\r\n Location.makeFromBucketSpec = function (bucketString) {\r\n var bucketLocation;\r\n try {\r\n bucketLocation = Location.makeFromUrl(bucketString);\r\n }\r\n catch (e) {\r\n // Not valid URL, use as-is. This lets you put bare bucket names in\r\n // config.\r\n return new Location(bucketString, '');\r\n }\r\n if (bucketLocation.path === '') {\r\n return bucketLocation;\r\n }\r\n else {\r\n throw invalidDefaultBucket(bucketString);\r\n }\r\n };\r\n Location.makeFromUrl = function (url) {\r\n var location = null;\r\n var bucketDomain = '([A-Za-z0-9.\\\\-]+)';\r\n function gsModify(loc) {\r\n if (loc.path.charAt(loc.path.length - 1) === '/') {\r\n loc.path_ = loc.path_.slice(0, -1);\r\n }\r\n }\r\n var gsPath = '(/(.*))?$';\r\n var path = '(/([^?#]*).*)?$';\r\n var gsRegex = new RegExp('^gs://' + bucketDomain + gsPath, 'i');\r\n var gsIndices = { bucket: 1, path: 3 };\r\n function httpModify(loc) {\r\n loc.path_ = decodeURIComponent(loc.path);\r\n }\r\n var version = 'v[A-Za-z0-9_]+';\r\n var httpRegex = new RegExp('^https?://firebasestorage\\\\.googleapis\\\\.com/' +\r\n version +\r\n '/b/' +\r\n bucketDomain +\r\n '/o' +\r\n path, 'i');\r\n var httpIndices = { bucket: 1, path: 3 };\r\n var groups = [\r\n { regex: gsRegex, indices: gsIndices, postModify: gsModify },\r\n { regex: httpRegex, indices: httpIndices, postModify: httpModify }\r\n ];\r\n for (var i = 0; i < groups.length; i++) {\r\n var group = groups[i];\r\n var captures = group.regex.exec(url);\r\n if (captures) {\r\n var bucketValue = captures[group.indices.bucket];\r\n var pathValue = captures[group.indices.path];\r\n if (!pathValue) {\r\n pathValue = '';\r\n }\r\n location = new Location(bucketValue, pathValue);\r\n group.postModify(location);\r\n break;\r\n }\r\n }\r\n if (location == null) {\r\n throw invalidUrl(url);\r\n }\r\n return location;\r\n };\r\n return Location;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Contains helper methods for manipulating paths.\r\n */\r\n/**\r\n * @return Null if the path is already at the root.\r\n */\r\nfunction parent(path) {\r\n if (path.length == 0) {\r\n return null;\r\n }\r\n var index = path.lastIndexOf('/');\r\n if (index === -1) {\r\n return '';\r\n }\r\n var newPath = path.slice(0, index);\r\n return newPath;\r\n}\r\nfunction child(path, childPath) {\r\n var canonicalChildPath = childPath\r\n .split('/')\r\n .filter(function (component) {\r\n return component.length > 0;\r\n })\r\n .join('/');\r\n if (path.length === 0) {\r\n return canonicalChildPath;\r\n }\r\n else {\r\n return path + '/' + canonicalChildPath;\r\n }\r\n}\r\n/**\r\n * Returns the last component of a path.\r\n * '/foo/bar' -> 'bar'\r\n * '/foo/bar/baz/' -> 'baz/'\r\n * '/a' -> 'a'\r\n */\r\nfunction lastComponent(path) {\r\n var index = path.lastIndexOf('/', path.length - 2);\r\n if (index === -1) {\r\n return path;\r\n }\r\n else {\r\n return path.slice(index + 1);\r\n }\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction makeNormalUrl(urlPart) {\r\n return domainBase + apiBaseUrl + urlPart;\r\n}\r\nfunction makeDownloadUrl(urlPart) {\r\n return downloadBase + apiBaseUrl + urlPart;\r\n}\r\nfunction makeUploadUrl(urlPart) {\r\n return domainBase + apiUploadBaseUrl + urlPart;\r\n}\r\nfunction makeQueryString(params) {\r\n var encode = encodeURIComponent;\r\n var queryPart = '?';\r\n forEach(params, function (key, val) {\r\n var nextPart = encode(key) + '=' + encode(val);\r\n queryPart = queryPart + nextPart + '&';\r\n });\r\n // Chop off the extra '&' or '?' on the end\r\n queryPart = queryPart.slice(0, -1);\r\n return queryPart;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nfunction noXform_(metadata, value) {\r\n return value;\r\n}\r\n/**\r\n * @struct\r\n */\r\nvar Mapping = /** @class */ (function () {\r\n function Mapping(server, opt_local, opt_writable, opt_xform) {\r\n this.server = server;\r\n this.local = opt_local || server;\r\n this.writable = !!opt_writable;\r\n this.xform = opt_xform || noXform_;\r\n }\r\n return Mapping;\r\n}());\r\nvar mappings_ = null;\r\nfunction xformPath(fullPath) {\r\n var valid = isString(fullPath);\r\n if (!valid || fullPath.length < 2) {\r\n return fullPath;\r\n }\r\n else {\r\n fullPath = fullPath;\r\n return lastComponent(fullPath);\r\n }\r\n}\r\nfunction getMappings() {\r\n if (mappings_) {\r\n return mappings_;\r\n }\r\n var mappings = [];\r\n mappings.push(new Mapping('bucket'));\r\n mappings.push(new Mapping('generation'));\r\n mappings.push(new Mapping('metageneration'));\r\n mappings.push(new Mapping('name', 'fullPath', true));\r\n function mappingsXformPath(metadata, fullPath) {\r\n return xformPath(fullPath);\r\n }\r\n var nameMapping = new Mapping('name');\r\n nameMapping.xform = mappingsXformPath;\r\n mappings.push(nameMapping);\r\n /**\r\n * Coerces the second param to a number, if it is defined.\r\n */\r\n function xformSize(metadata, size) {\r\n if (isDef(size)) {\r\n return +size;\r\n }\r\n else {\r\n return size;\r\n }\r\n }\r\n var sizeMapping = new Mapping('size');\r\n sizeMapping.xform = xformSize;\r\n mappings.push(sizeMapping);\r\n mappings.push(new Mapping('timeCreated'));\r\n mappings.push(new Mapping('updated'));\r\n mappings.push(new Mapping('md5Hash', null, true));\r\n mappings.push(new Mapping('cacheControl', null, true));\r\n mappings.push(new Mapping('contentDisposition', null, true));\r\n mappings.push(new Mapping('contentEncoding', null, true));\r\n mappings.push(new Mapping('contentLanguage', null, true));\r\n mappings.push(new Mapping('contentType', null, true));\r\n mappings.push(new Mapping('metadata', 'customMetadata', true));\r\n /**\r\n * Transforms a comma-separated string of tokens into a list of download\r\n * URLs.\r\n */\r\n function xformTokens(metadata, tokens) {\r\n var valid = isString(tokens) && tokens.length > 0;\r\n if (!valid) {\r\n // This can happen if objects are uploaded through GCS and retrieved\r\n // through list, so we don't want to throw an Error.\r\n return [];\r\n }\r\n var encode = encodeURIComponent;\r\n var tokensList = tokens.split(',');\r\n var urls = tokensList.map(function (token) {\r\n var bucket = metadata['bucket'];\r\n var path = metadata['fullPath'];\r\n var urlPart = '/b/' + encode(bucket) + '/o/' + encode(path);\r\n var base = makeDownloadUrl(urlPart);\r\n var queryString = makeQueryString({\r\n alt: 'media',\r\n token: token\r\n });\r\n return base + queryString;\r\n });\r\n return urls;\r\n }\r\n mappings.push(new Mapping('downloadTokens', 'downloadURLs', false, xformTokens));\r\n mappings_ = mappings;\r\n return mappings_;\r\n}\r\nfunction addRef(metadata, authWrapper) {\r\n function generateRef() {\r\n var bucket = metadata['bucket'];\r\n var path = metadata['fullPath'];\r\n var loc = new Location(bucket, path);\r\n return authWrapper.makeStorageReference(loc);\r\n }\r\n Object.defineProperty(metadata, 'ref', { get: generateRef });\r\n}\r\nfunction fromResource(authWrapper, resource, mappings) {\r\n var metadata = {};\r\n metadata['type'] = 'file';\r\n var len = mappings.length;\r\n for (var i = 0; i < len; i++) {\r\n var mapping = mappings[i];\r\n metadata[mapping.local] = mapping.xform(metadata, resource[mapping.server]);\r\n }\r\n addRef(metadata, authWrapper);\r\n return metadata;\r\n}\r\nfunction fromResourceString(authWrapper, resourceString, mappings) {\r\n var obj = jsonObjectOrNull(resourceString);\r\n if (obj === null) {\r\n return null;\r\n }\r\n var resource = obj;\r\n return fromResource(authWrapper, resource, mappings);\r\n}\r\nfunction toResourceString(metadata, mappings) {\r\n var resource = {};\r\n var len = mappings.length;\r\n for (var i = 0; i < len; i++) {\r\n var mapping = mappings[i];\r\n if (mapping.writable) {\r\n resource[mapping.server] = metadata[mapping.local];\r\n }\r\n }\r\n return JSON.stringify(resource);\r\n}\r\nfunction metadataValidator(p) {\r\n var validType = p && isObject(p);\r\n if (!validType) {\r\n throw 'Expected Metadata object.';\r\n }\r\n for (var key in p) {\r\n var val = p[key];\r\n if (key === 'customMetadata') {\r\n if (!isObject(val)) {\r\n throw 'Expected object for \\'customMetadata\\' mapping.';\r\n }\r\n }\r\n else {\r\n if (isNonNullObject(val)) {\r\n throw \"Mapping for '\" + key + \"' cannot be an object.\";\r\n }\r\n }\r\n }\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @param name Name of the function.\r\n * @param specs Argument specs.\r\n * @param passed The actual arguments passed to the function.\r\n * @throws {fbs.Error} If the arguments are invalid.\r\n */\r\nfunction validate(name, specs, passed) {\r\n var minArgs = specs.length;\r\n var maxArgs = specs.length;\r\n for (var i = 0; i < specs.length; i++) {\r\n if (specs[i].optional) {\r\n minArgs = i;\r\n break;\r\n }\r\n }\r\n var validLength = minArgs <= passed.length && passed.length <= maxArgs;\r\n if (!validLength) {\r\n throw invalidArgumentCount(minArgs, maxArgs, name, passed.length);\r\n }\r\n for (var i = 0; i < passed.length; i++) {\r\n try {\r\n specs[i].validator(passed[i]);\r\n }\r\n catch (e) {\r\n if (e instanceof Error) {\r\n throw invalidArgument(i, name, e.message);\r\n }\r\n else {\r\n throw invalidArgument(i, name, e);\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * @struct\r\n */\r\nvar ArgSpec = /** @class */ (function () {\r\n function ArgSpec(validator, opt_optional) {\r\n var self = this;\r\n this.validator = function (p) {\r\n if (self.optional && !isJustDef(p)) {\r\n return;\r\n }\r\n validator(p);\r\n };\r\n this.optional = !!opt_optional;\r\n }\r\n return ArgSpec;\r\n}());\r\nfunction and_(v1, v2) {\r\n return function (p) {\r\n v1(p);\r\n v2(p);\r\n };\r\n}\r\nfunction stringSpec(opt_validator, opt_optional) {\r\n function stringValidator(p) {\r\n if (!isString(p)) {\r\n throw 'Expected string.';\r\n }\r\n }\r\n var validator;\r\n if (opt_validator) {\r\n validator = and_(stringValidator, opt_validator);\r\n }\r\n else {\r\n validator = stringValidator;\r\n }\r\n return new ArgSpec(validator, opt_optional);\r\n}\r\nfunction uploadDataSpec() {\r\n function validator(p) {\r\n var valid = p instanceof Uint8Array ||\r\n p instanceof ArrayBuffer ||\r\n (isNativeBlobDefined() && p instanceof Blob);\r\n if (!valid) {\r\n throw 'Expected Blob or File.';\r\n }\r\n }\r\n return new ArgSpec(validator);\r\n}\r\nfunction metadataSpec(opt_optional) {\r\n return new ArgSpec(metadataValidator, opt_optional);\r\n}\r\nfunction nonNegativeNumberSpec() {\r\n function validator(p) {\r\n var valid = isNumber(p) && p >= 0;\r\n if (!valid) {\r\n throw 'Expected a number 0 or greater.';\r\n }\r\n }\r\n return new ArgSpec(validator);\r\n}\r\nfunction looseObjectSpec(opt_validator, opt_optional) {\r\n function validator(p) {\r\n var isLooseObject = p === null || (isDef(p) && p instanceof Object);\r\n if (!isLooseObject) {\r\n throw 'Expected an Object.';\r\n }\r\n if (opt_validator !== undefined && opt_validator !== null) {\r\n opt_validator(p);\r\n }\r\n }\r\n return new ArgSpec(validator, opt_optional);\r\n}\r\nfunction nullFunctionSpec(opt_optional) {\r\n function validator(p) {\r\n var valid = p === null || isFunction(p);\r\n if (!valid) {\r\n throw 'Expected a Function.';\r\n }\r\n }\r\n return new ArgSpec(validator, opt_optional);\r\n}\n\nfunction getBlobBuilder() {\r\n if (typeof BlobBuilder !== 'undefined') {\r\n return BlobBuilder;\r\n }\r\n else if (typeof WebKitBlobBuilder !== 'undefined') {\r\n return WebKitBlobBuilder;\r\n }\r\n else {\r\n return undefined;\r\n }\r\n}\r\n/**\r\n * Concatenates one or more values together and converts them to a Blob.\r\n *\r\n * @param var_args The values that will make up the resulting blob.\r\n * @return The blob.\r\n */\r\nfunction getBlob() {\r\n var var_args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n var_args[_i] = arguments[_i];\r\n }\r\n var BlobBuilder = getBlobBuilder();\r\n if (BlobBuilder !== undefined) {\r\n var bb = new BlobBuilder();\r\n for (var i = 0; i < var_args.length; i++) {\r\n bb.append(var_args[i]);\r\n }\r\n return bb.getBlob();\r\n }\r\n else {\r\n if (isNativeBlobDefined()) {\r\n return new Blob(var_args);\r\n }\r\n else {\r\n throw Error(\"This browser doesn't seem to support creating Blobs\");\r\n }\r\n }\r\n}\r\n/**\r\n * Slices the blob. The returned blob contains data from the start byte\r\n * (inclusive) till the end byte (exclusive). Negative indices cannot be used.\r\n *\r\n * @param blob The blob to be sliced.\r\n * @param start Index of the starting byte.\r\n * @param end Index of the ending byte.\r\n * @return The blob slice or null if not supported.\r\n */\r\nfunction sliceBlob(blob, start, end) {\r\n if (blob.webkitSlice) {\r\n return blob.webkitSlice(start, end);\r\n }\r\n else if (blob.mozSlice) {\r\n return blob.mozSlice(start, end);\r\n }\r\n else if (blob.slice) {\r\n return blob.slice(start, end);\r\n }\r\n return null;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @param opt_elideCopy If true, doesn't copy mutable input data\r\n * (e.g. Uint8Arrays). Pass true only if you know the objects will not be\r\n * modified after this blob's construction.\r\n */\r\nvar FbsBlob = /** @class */ (function () {\r\n function FbsBlob(data, opt_elideCopy) {\r\n var size = 0;\r\n var blobType = '';\r\n if (isNativeBlob(data)) {\r\n this.data_ = data;\r\n size = data.size;\r\n blobType = data.type;\r\n }\r\n else if (data instanceof ArrayBuffer) {\r\n if (opt_elideCopy) {\r\n this.data_ = new Uint8Array(data);\r\n }\r\n else {\r\n this.data_ = new Uint8Array(data.byteLength);\r\n this.data_.set(new Uint8Array(data));\r\n }\r\n size = this.data_.length;\r\n }\r\n else if (data instanceof Uint8Array) {\r\n if (opt_elideCopy) {\r\n this.data_ = data;\r\n }\r\n else {\r\n this.data_ = new Uint8Array(data.length);\r\n this.data_.set(data);\r\n }\r\n size = data.length;\r\n }\r\n this.size_ = size;\r\n this.type_ = blobType;\r\n }\r\n FbsBlob.prototype.size = function () {\r\n return this.size_;\r\n };\r\n FbsBlob.prototype.type = function () {\r\n return this.type_;\r\n };\r\n FbsBlob.prototype.slice = function (startByte, endByte) {\r\n if (isNativeBlob(this.data_)) {\r\n var realBlob = this.data_;\r\n var sliced = sliceBlob(realBlob, startByte, endByte);\r\n if (sliced === null) {\r\n return null;\r\n }\r\n return new FbsBlob(sliced);\r\n }\r\n else {\r\n var slice = new Uint8Array(this.data_.buffer, startByte, endByte - startByte);\r\n return new FbsBlob(slice, true);\r\n }\r\n };\r\n FbsBlob.getBlob = function () {\r\n var var_args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n var_args[_i] = arguments[_i];\r\n }\r\n if (isNativeBlobDefined()) {\r\n var blobby = var_args.map(function (val) {\r\n if (val instanceof FbsBlob) {\r\n return val.data_;\r\n }\r\n else {\r\n return val;\r\n }\r\n });\r\n return new FbsBlob(getBlob.apply(null, blobby));\r\n }\r\n else {\r\n var uint8Arrays = var_args.map(function (val) {\r\n if (isString(val)) {\r\n return dataFromString(StringFormat.RAW, val).data;\r\n }\r\n else {\r\n // Blobs don't exist, so this has to be a Uint8Array.\r\n return val.data_;\r\n }\r\n });\r\n var finalLength_1 = 0;\r\n uint8Arrays.forEach(function (array) {\r\n finalLength_1 += array.byteLength;\r\n });\r\n var merged_1 = new Uint8Array(finalLength_1);\r\n var index_1 = 0;\r\n uint8Arrays.forEach(function (array) {\r\n for (var i = 0; i < array.length; i++) {\r\n merged_1[index_1++] = array[i];\r\n }\r\n });\r\n return new FbsBlob(merged_1, true);\r\n }\r\n };\r\n FbsBlob.prototype.uploadData = function () {\r\n return this.data_;\r\n };\r\n return FbsBlob;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns true if the object is contained in the array (compared with ===).\r\n * @template T\r\n */\r\nfunction contains$1(array, elem) {\r\n return array.indexOf(elem) !== -1;\r\n}\r\n/**\r\n * Returns a shallow copy of the array or array-like object (e.g. arguments).\r\n * @template T\r\n */\r\nfunction clone$1(arraylike) {\r\n return Array.prototype.slice.call(arraylike);\r\n}\r\n/**\r\n * Removes the given element from the given array, if it is contained.\r\n * Directly modifies the passed-in array.\r\n * @template T\r\n */\r\nfunction remove(array, elem) {\r\n var i = array.indexOf(elem);\r\n if (i !== -1) {\r\n array.splice(i, 1);\r\n }\r\n}\n\nvar RequestInfo = /** @class */ (function () {\r\n function RequestInfo(url, method, \r\n /**\r\n * Returns the value with which to resolve the request's promise. Only called\r\n * if the request is successful. Throw from this function to reject the\r\n * returned Request's promise with the thrown error.\r\n * Note: The XhrIo passed to this function may be reused after this callback\r\n * returns. Do not keep a reference to it in any way.\r\n */\r\n handler, timeout) {\r\n this.url = url;\r\n this.method = method;\r\n this.handler = handler;\r\n this.timeout = timeout;\r\n this.urlParams = {};\r\n this.headers = {};\r\n this.body = null;\r\n this.errorHandler = null;\r\n /**\r\n * Called with the current number of bytes uploaded and total size (-1 if not\r\n * computable) of the request body (i.e. used to report upload progress).\r\n */\r\n this.progressCallback = null;\r\n this.successCodes = [200];\r\n this.additionalRetryCodes = [];\r\n }\r\n return RequestInfo;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Throws the UNKNOWN FirebaseStorageError if cndn is false.\r\n */\r\nfunction handlerCheck(cndn) {\r\n if (!cndn) {\r\n throw unknown();\r\n }\r\n}\r\nfunction metadataHandler(authWrapper, mappings) {\r\n function handler(xhr, text) {\r\n var metadata = fromResourceString(authWrapper, text, mappings);\r\n handlerCheck(metadata !== null);\r\n return metadata;\r\n }\r\n return handler;\r\n}\r\nfunction sharedErrorHandler(location) {\r\n function errorHandler(xhr, err) {\r\n var newErr;\r\n if (xhr.getStatus() === 401) {\r\n newErr = unauthenticated();\r\n }\r\n else {\r\n if (xhr.getStatus() === 402) {\r\n newErr = quotaExceeded(location.bucket);\r\n }\r\n else {\r\n if (xhr.getStatus() === 403) {\r\n newErr = unauthorized(location.path);\r\n }\r\n else {\r\n newErr = err;\r\n }\r\n }\r\n }\r\n newErr.setServerResponseProp(err.serverResponseProp());\r\n return newErr;\r\n }\r\n return errorHandler;\r\n}\r\nfunction objectErrorHandler(location) {\r\n var shared = sharedErrorHandler(location);\r\n function errorHandler(xhr, err) {\r\n var newErr = shared(xhr, err);\r\n if (xhr.getStatus() === 404) {\r\n newErr = objectNotFound(location.path);\r\n }\r\n newErr.setServerResponseProp(err.serverResponseProp());\r\n return newErr;\r\n }\r\n return errorHandler;\r\n}\r\nfunction getMetadata(authWrapper, location, mappings) {\r\n var urlPart = location.fullServerUrl();\r\n var url = makeNormalUrl(urlPart);\r\n var method = 'GET';\r\n var timeout = authWrapper.maxOperationRetryTime();\r\n var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, mappings), timeout);\r\n requestInfo.errorHandler = objectErrorHandler(location);\r\n return requestInfo;\r\n}\r\nfunction updateMetadata(authWrapper, location, metadata, mappings) {\r\n var urlPart = location.fullServerUrl();\r\n var url = makeNormalUrl(urlPart);\r\n var method = 'PATCH';\r\n var body = toResourceString(metadata, mappings);\r\n var headers = { 'Content-Type': 'application/json; charset=utf-8' };\r\n var timeout = authWrapper.maxOperationRetryTime();\r\n var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, mappings), timeout);\r\n requestInfo.headers = headers;\r\n requestInfo.body = body;\r\n requestInfo.errorHandler = objectErrorHandler(location);\r\n return requestInfo;\r\n}\r\nfunction deleteObject(authWrapper, location) {\r\n var urlPart = location.fullServerUrl();\r\n var url = makeNormalUrl(urlPart);\r\n var method = 'DELETE';\r\n var timeout = authWrapper.maxOperationRetryTime();\r\n function handler(xhr, text) { }\r\n var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n requestInfo.successCodes = [200, 204];\r\n requestInfo.errorHandler = objectErrorHandler(location);\r\n return requestInfo;\r\n}\r\nfunction determineContentType_(metadata, blob) {\r\n return ((metadata && metadata['contentType']) ||\r\n (blob && blob.type()) ||\r\n 'application/octet-stream');\r\n}\r\nfunction metadataForUpload_(location, blob, opt_metadata) {\r\n var metadata = clone(opt_metadata);\r\n metadata['fullPath'] = location.path;\r\n metadata['size'] = blob.size();\r\n if (!metadata['contentType']) {\r\n metadata['contentType'] = determineContentType_(null, blob);\r\n }\r\n return metadata;\r\n}\r\nfunction multipartUpload(authWrapper, location, mappings, blob, opt_metadata) {\r\n var urlPart = location.bucketOnlyServerUrl();\r\n var headers = {\r\n 'X-Goog-Upload-Protocol': 'multipart'\r\n };\r\n function genBoundary() {\r\n var str = '';\r\n for (var i = 0; i < 2; i++) {\r\n str =\r\n str +\r\n Math.random()\r\n .toString()\r\n .slice(2);\r\n }\r\n return str;\r\n }\r\n var boundary = genBoundary();\r\n headers['Content-Type'] = 'multipart/related; boundary=' + boundary;\r\n var metadata = metadataForUpload_(location, blob, opt_metadata);\r\n var metadataString = toResourceString(metadata, mappings);\r\n var preBlobPart = '--' +\r\n boundary +\r\n '\\r\\n' +\r\n 'Content-Type: application/json; charset=utf-8\\r\\n\\r\\n' +\r\n metadataString +\r\n '\\r\\n--' +\r\n boundary +\r\n '\\r\\n' +\r\n 'Content-Type: ' +\r\n metadata['contentType'] +\r\n '\\r\\n\\r\\n';\r\n var postBlobPart = '\\r\\n--' + boundary + '--';\r\n var body = FbsBlob.getBlob(preBlobPart, blob, postBlobPart);\r\n if (body === null) {\r\n throw cannotSliceBlob();\r\n }\r\n var urlParams = { name: metadata['fullPath'] };\r\n var url = makeUploadUrl(urlPart);\r\n var method = 'POST';\r\n var timeout = authWrapper.maxUploadRetryTime();\r\n var requestInfo = new RequestInfo(url, method, metadataHandler(authWrapper, mappings), timeout);\r\n requestInfo.urlParams = urlParams;\r\n requestInfo.headers = headers;\r\n requestInfo.body = body.uploadData();\r\n requestInfo.errorHandler = sharedErrorHandler(location);\r\n return requestInfo;\r\n}\r\n/**\r\n * @param current The number of bytes that have been uploaded so far.\r\n * @param total The total number of bytes in the upload.\r\n * @param opt_finalized True if the server has finished the upload.\r\n * @param opt_metadata The upload metadata, should\r\n * only be passed if opt_finalized is true.\r\n * @struct\r\n */\r\nvar ResumableUploadStatus = /** @class */ (function () {\r\n function ResumableUploadStatus(current, total, finalized, metadata) {\r\n this.current = current;\r\n this.total = total;\r\n this.finalized = !!finalized;\r\n this.metadata = metadata || null;\r\n }\r\n return ResumableUploadStatus;\r\n}());\r\nfunction checkResumeHeader_(xhr, opt_allowed) {\r\n var status;\r\n try {\r\n status = xhr.getResponseHeader('X-Goog-Upload-Status');\r\n }\r\n catch (e) {\r\n handlerCheck(false);\r\n }\r\n var allowed = opt_allowed || ['active'];\r\n handlerCheck(contains$1(allowed, status));\r\n return status;\r\n}\r\nfunction createResumableUpload(authWrapper, location, mappings, blob, opt_metadata) {\r\n var urlPart = location.bucketOnlyServerUrl();\r\n var metadata = metadataForUpload_(location, blob, opt_metadata);\r\n var urlParams = { name: metadata['fullPath'] };\r\n var url = makeUploadUrl(urlPart);\r\n var method = 'POST';\r\n var headers = {\r\n 'X-Goog-Upload-Protocol': 'resumable',\r\n 'X-Goog-Upload-Command': 'start',\r\n 'X-Goog-Upload-Header-Content-Length': blob.size(),\r\n 'X-Goog-Upload-Header-Content-Type': metadata['contentType'],\r\n 'Content-Type': 'application/json; charset=utf-8'\r\n };\r\n var body = toResourceString(metadata, mappings);\r\n var timeout = authWrapper.maxUploadRetryTime();\r\n function handler(xhr, text) {\r\n checkResumeHeader_(xhr);\r\n var url;\r\n try {\r\n url = xhr.getResponseHeader('X-Goog-Upload-URL');\r\n }\r\n catch (e) {\r\n handlerCheck(false);\r\n }\r\n handlerCheck(isString(url));\r\n return url;\r\n }\r\n var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n requestInfo.urlParams = urlParams;\r\n requestInfo.headers = headers;\r\n requestInfo.body = body;\r\n requestInfo.errorHandler = sharedErrorHandler(location);\r\n return requestInfo;\r\n}\r\n/**\r\n * @param url From a call to fbs.requests.createResumableUpload.\r\n */\r\nfunction getResumableUploadStatus(authWrapper, location, url, blob) {\r\n var headers = { 'X-Goog-Upload-Command': 'query' };\r\n function handler(xhr, text) {\r\n var status = checkResumeHeader_(xhr, ['active', 'final']);\r\n var sizeString;\r\n try {\r\n sizeString = xhr.getResponseHeader('X-Goog-Upload-Size-Received');\r\n }\r\n catch (e) {\r\n handlerCheck(false);\r\n }\r\n var size = parseInt(sizeString, 10);\r\n handlerCheck(!isNaN(size));\r\n return new ResumableUploadStatus(size, blob.size(), status === 'final');\r\n }\r\n var method = 'POST';\r\n var timeout = authWrapper.maxUploadRetryTime();\r\n var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n requestInfo.headers = headers;\r\n requestInfo.errorHandler = sharedErrorHandler(location);\r\n return requestInfo;\r\n}\r\n/**\r\n * Any uploads via the resumable upload API must transfer a number of bytes\r\n * that is a multiple of this number.\r\n */\r\nvar resumableUploadChunkSize = 256 * 1024;\r\n/**\r\n * @param url From a call to fbs.requests.createResumableUpload.\r\n * @param chunkSize Number of bytes to upload.\r\n * @param opt_status The previous status.\r\n * If not passed or null, we start from the beginning.\r\n * @throws fbs.Error If the upload is already complete, the passed in status\r\n * has a final size inconsistent with the blob, or the blob cannot be sliced\r\n * for upload.\r\n */\r\nfunction continueResumableUpload(location, authWrapper, url, blob, chunkSize, mappings, opt_status, opt_progressCallback) {\r\n // TODO(andysoto): standardize on internal asserts\r\n // assert(!(opt_status && opt_status.finalized));\r\n var status = new ResumableUploadStatus(0, 0);\r\n if (opt_status) {\r\n status.current = opt_status.current;\r\n status.total = opt_status.total;\r\n }\r\n else {\r\n status.current = 0;\r\n status.total = blob.size();\r\n }\r\n if (blob.size() !== status.total) {\r\n throw serverFileWrongSize();\r\n }\r\n var bytesLeft = status.total - status.current;\r\n var bytesToUpload = bytesLeft;\r\n if (chunkSize > 0) {\r\n bytesToUpload = Math.min(bytesToUpload, chunkSize);\r\n }\r\n var startByte = status.current;\r\n var endByte = startByte + bytesToUpload;\r\n var uploadCommand = bytesToUpload === bytesLeft ? 'upload, finalize' : 'upload';\r\n var headers = {\r\n 'X-Goog-Upload-Command': uploadCommand,\r\n 'X-Goog-Upload-Offset': status.current\r\n };\r\n var body = blob.slice(startByte, endByte);\r\n if (body === null) {\r\n throw cannotSliceBlob();\r\n }\r\n function handler(xhr, text) {\r\n // TODO(andysoto): Verify the MD5 of each uploaded range:\r\n // the 'x-range-md5' header comes back with status code 308 responses.\r\n // We'll only be able to bail out though, because you can't re-upload a\r\n // range that you previously uploaded.\r\n var uploadStatus = checkResumeHeader_(xhr, ['active', 'final']);\r\n var newCurrent = status.current + bytesToUpload;\r\n var size = blob.size();\r\n var metadata;\r\n if (uploadStatus === 'final') {\r\n metadata = metadataHandler(authWrapper, mappings)(xhr, text);\r\n }\r\n else {\r\n metadata = null;\r\n }\r\n return new ResumableUploadStatus(newCurrent, size, uploadStatus === 'final', metadata);\r\n }\r\n var method = 'POST';\r\n var timeout = authWrapper.maxUploadRetryTime();\r\n var requestInfo = new RequestInfo(url, method, handler, timeout);\r\n requestInfo.headers = headers;\r\n requestInfo.body = body.uploadData();\r\n requestInfo.progressCallback = opt_progressCallback || null;\r\n requestInfo.errorHandler = sharedErrorHandler(location);\r\n return requestInfo;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @struct\r\n */\r\nvar Observer = /** @class */ (function () {\r\n function Observer(nextOrObserver, opt_error, opt_complete) {\r\n var asFunctions = isFunction(nextOrObserver) ||\r\n isDef(opt_error) ||\r\n isDef(opt_complete);\r\n if (asFunctions) {\r\n this.next = nextOrObserver;\r\n this.error = opt_error || null;\r\n this.complete = opt_complete || null;\r\n }\r\n else {\r\n var observer = nextOrObserver;\r\n this.next = observer.next || null;\r\n this.error = observer.error || null;\r\n this.complete = observer.complete || null;\r\n }\r\n }\r\n return Observer;\r\n}());\n\nvar UploadTaskSnapshot = /** @class */ (function () {\r\n function UploadTaskSnapshot(bytesTransferred, totalBytes, state, metadata, task, ref) {\r\n this.bytesTransferred = bytesTransferred;\r\n this.totalBytes = totalBytes;\r\n this.state = state;\r\n this.metadata = metadata;\r\n this.task = task;\r\n this.ref = ref;\r\n }\r\n Object.defineProperty(UploadTaskSnapshot.prototype, \"downloadURL\", {\r\n get: function () {\r\n if (this.metadata !== null) {\r\n var urls = this.metadata['downloadURLs'];\r\n if (urls != null && urls[0] != null) {\r\n return urls[0];\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n else {\r\n return null;\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return UploadTaskSnapshot;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a function that invokes f with its arguments asynchronously as a\r\n * microtask, i.e. as soon as possible after the current script returns back\r\n * into browser code.\r\n */\r\nfunction async(f) {\r\n return function () {\r\n var argsToForward = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n argsToForward[_i] = arguments[_i];\r\n }\r\n resolve(true).then(function () {\r\n f.apply(null, argsToForward);\r\n });\r\n };\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Represents a blob being uploaded. Can be used to pause/resume/cancel the\r\n * upload and manage callbacks for various events.\r\n */\r\nvar UploadTask = /** @class */ (function () {\r\n /**\r\n * @param ref The firebaseStorage.Reference object this task came\r\n * from, untyped to avoid cyclic dependencies.\r\n * @param blob The blob to upload.\r\n */\r\n function UploadTask(ref, authWrapper, location, mappings, blob, metadata) {\r\n if (metadata === void 0) { metadata = null; }\r\n var _this = this;\r\n this.transferred_ = 0;\r\n this.needToFetchStatus_ = false;\r\n this.needToFetchMetadata_ = false;\r\n this.observers_ = [];\r\n this.error_ = null;\r\n this.uploadUrl_ = null;\r\n this.request_ = null;\r\n this.chunkMultiplier_ = 1;\r\n this.resolve_ = null;\r\n this.reject_ = null;\r\n this.ref_ = ref;\r\n this.authWrapper_ = authWrapper;\r\n this.location_ = location;\r\n this.blob_ = blob;\r\n this.metadata_ = metadata;\r\n this.mappings_ = mappings;\r\n this.resumable_ = this.shouldDoResumable_(this.blob_);\r\n this.state_ = InternalTaskState.RUNNING;\r\n this.errorHandler_ = function (error) {\r\n _this.request_ = null;\r\n _this.chunkMultiplier_ = 1;\r\n if (error.codeEquals(Code.CANCELED)) {\r\n _this.needToFetchStatus_ = true;\r\n _this.completeTransitions_();\r\n }\r\n else {\r\n _this.error_ = error;\r\n _this.transition_(InternalTaskState.ERROR);\r\n }\r\n };\r\n this.metadataErrorHandler_ = function (error) {\r\n _this.request_ = null;\r\n if (error.codeEquals(Code.CANCELED)) {\r\n _this.completeTransitions_();\r\n }\r\n else {\r\n _this.error_ = error;\r\n _this.transition_(InternalTaskState.ERROR);\r\n }\r\n };\r\n this.promise_ = make(function (resolve$$1, reject$$1) {\r\n _this.resolve_ = resolve$$1;\r\n _this.reject_ = reject$$1;\r\n _this.start_();\r\n });\r\n // Prevent uncaught rejections on the internal promise from bubbling out\r\n // to the top level with a dummy handler.\r\n this.promise_.then(null, function () { });\r\n }\r\n UploadTask.prototype.makeProgressCallback_ = function () {\r\n var _this = this;\r\n var sizeBefore = this.transferred_;\r\n return function (loaded, total) {\r\n _this.updateProgress_(sizeBefore + loaded);\r\n };\r\n };\r\n UploadTask.prototype.shouldDoResumable_ = function (blob) {\r\n return blob.size() > 256 * 1024;\r\n };\r\n UploadTask.prototype.start_ = function () {\r\n if (this.state_ !== InternalTaskState.RUNNING) {\r\n // This can happen if someone pauses us in a resume callback, for example.\r\n return;\r\n }\r\n if (this.request_ !== null) {\r\n return;\r\n }\r\n if (this.resumable_) {\r\n if (this.uploadUrl_ === null) {\r\n this.createResumable_();\r\n }\r\n else {\r\n if (this.needToFetchStatus_) {\r\n this.fetchStatus_();\r\n }\r\n else {\r\n if (this.needToFetchMetadata_) {\r\n // Happens if we miss the metadata on upload completion.\r\n this.fetchMetadata_();\r\n }\r\n else {\r\n this.continueUpload_();\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n this.oneShotUpload_();\r\n }\r\n };\r\n UploadTask.prototype.resolveToken_ = function (callback) {\r\n var _this = this;\r\n this.authWrapper_.getAuthToken().then(function (authToken) {\r\n switch (_this.state_) {\r\n case InternalTaskState.RUNNING:\r\n callback(authToken);\r\n break;\r\n case InternalTaskState.CANCELING:\r\n _this.transition_(InternalTaskState.CANCELED);\r\n break;\r\n case InternalTaskState.PAUSING:\r\n _this.transition_(InternalTaskState.PAUSED);\r\n break;\r\n default:\r\n }\r\n });\r\n };\r\n // TODO(andysoto): assert false\r\n UploadTask.prototype.createResumable_ = function () {\r\n var _this = this;\r\n this.resolveToken_(function (authToken) {\r\n var requestInfo = createResumableUpload(_this.authWrapper_, _this.location_, _this.mappings_, _this.blob_, _this.metadata_);\r\n var createRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n _this.request_ = createRequest;\r\n createRequest.getPromise().then(function (url) {\r\n _this.request_ = null;\r\n _this.uploadUrl_ = url;\r\n _this.needToFetchStatus_ = false;\r\n _this.completeTransitions_();\r\n }, _this.errorHandler_);\r\n });\r\n };\r\n UploadTask.prototype.fetchStatus_ = function () {\r\n var _this = this;\r\n // TODO(andysoto): assert(this.uploadUrl_ !== null);\r\n var url = this.uploadUrl_;\r\n this.resolveToken_(function (authToken) {\r\n var requestInfo = getResumableUploadStatus(_this.authWrapper_, _this.location_, url, _this.blob_);\r\n var statusRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n _this.request_ = statusRequest;\r\n statusRequest.getPromise().then(function (status) {\r\n status = status;\r\n _this.request_ = null;\r\n _this.updateProgress_(status.current);\r\n _this.needToFetchStatus_ = false;\r\n if (status.finalized) {\r\n _this.needToFetchMetadata_ = true;\r\n }\r\n _this.completeTransitions_();\r\n }, _this.errorHandler_);\r\n });\r\n };\r\n UploadTask.prototype.continueUpload_ = function () {\r\n var _this = this;\r\n var chunkSize = resumableUploadChunkSize * this.chunkMultiplier_;\r\n var status = new ResumableUploadStatus(this.transferred_, this.blob_.size());\r\n // TODO(andysoto): assert(this.uploadUrl_ !== null);\r\n var url = this.uploadUrl_;\r\n this.resolveToken_(function (authToken) {\r\n var requestInfo;\r\n try {\r\n requestInfo = continueResumableUpload(_this.location_, _this.authWrapper_, url, _this.blob_, chunkSize, _this.mappings_, status, _this.makeProgressCallback_());\r\n }\r\n catch (e) {\r\n _this.error_ = e;\r\n _this.transition_(InternalTaskState.ERROR);\r\n return;\r\n }\r\n var uploadRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n _this.request_ = uploadRequest;\r\n uploadRequest\r\n .getPromise()\r\n .then(function (newStatus) {\r\n _this.increaseMultiplier_();\r\n _this.request_ = null;\r\n _this.updateProgress_(newStatus.current);\r\n if (newStatus.finalized) {\r\n _this.metadata_ = newStatus.metadata;\r\n _this.transition_(InternalTaskState.SUCCESS);\r\n }\r\n else {\r\n _this.completeTransitions_();\r\n }\r\n }, _this.errorHandler_);\r\n });\r\n };\r\n UploadTask.prototype.increaseMultiplier_ = function () {\r\n var currentSize = resumableUploadChunkSize * this.chunkMultiplier_;\r\n // Max chunk size is 32M.\r\n if (currentSize < 32 * 1024 * 1024) {\r\n this.chunkMultiplier_ *= 2;\r\n }\r\n };\r\n UploadTask.prototype.fetchMetadata_ = function () {\r\n var _this = this;\r\n this.resolveToken_(function (authToken) {\r\n var requestInfo = getMetadata(_this.authWrapper_, _this.location_, _this.mappings_);\r\n var metadataRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n _this.request_ = metadataRequest;\r\n metadataRequest.getPromise().then(function (metadata) {\r\n _this.request_ = null;\r\n _this.metadata_ = metadata;\r\n _this.transition_(InternalTaskState.SUCCESS);\r\n }, _this.metadataErrorHandler_);\r\n });\r\n };\r\n UploadTask.prototype.oneShotUpload_ = function () {\r\n var _this = this;\r\n this.resolveToken_(function (authToken) {\r\n var requestInfo = multipartUpload(_this.authWrapper_, _this.location_, _this.mappings_, _this.blob_, _this.metadata_);\r\n var multipartRequest = _this.authWrapper_.makeRequest(requestInfo, authToken);\r\n _this.request_ = multipartRequest;\r\n multipartRequest.getPromise().then(function (metadata) {\r\n _this.request_ = null;\r\n _this.metadata_ = metadata;\r\n _this.updateProgress_(_this.blob_.size());\r\n _this.transition_(InternalTaskState.SUCCESS);\r\n }, _this.errorHandler_);\r\n });\r\n };\r\n UploadTask.prototype.updateProgress_ = function (transferred) {\r\n var old = this.transferred_;\r\n this.transferred_ = transferred;\r\n // A progress update can make the \"transferred\" value smaller (e.g. a\r\n // partial upload not completed by server, after which the \"transferred\"\r\n // value may reset to the value at the beginning of the request).\r\n if (this.transferred_ !== old) {\r\n this.notifyObservers_();\r\n }\r\n };\r\n UploadTask.prototype.transition_ = function (state) {\r\n if (this.state_ === state) {\r\n return;\r\n }\r\n switch (state) {\r\n case InternalTaskState.CANCELING:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.RUNNING ||\r\n // this.state_ === InternalTaskState.PAUSING);\r\n this.state_ = state;\r\n if (this.request_ !== null) {\r\n this.request_.cancel();\r\n }\r\n break;\r\n case InternalTaskState.PAUSING:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.RUNNING);\r\n this.state_ = state;\r\n if (this.request_ !== null) {\r\n this.request_.cancel();\r\n }\r\n break;\r\n case InternalTaskState.RUNNING:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.PAUSED ||\r\n // this.state_ === InternalTaskState.PAUSING);\r\n var wasPaused = this.state_ === InternalTaskState.PAUSED;\r\n this.state_ = state;\r\n if (wasPaused) {\r\n this.notifyObservers_();\r\n this.start_();\r\n }\r\n break;\r\n case InternalTaskState.PAUSED:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.PAUSING);\r\n this.state_ = state;\r\n this.notifyObservers_();\r\n break;\r\n case InternalTaskState.CANCELED:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.PAUSED ||\r\n // this.state_ === InternalTaskState.CANCELING);\r\n this.error_ = canceled();\r\n this.state_ = state;\r\n this.notifyObservers_();\r\n break;\r\n case InternalTaskState.ERROR:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.RUNNING ||\r\n // this.state_ === InternalTaskState.PAUSING ||\r\n // this.state_ === InternalTaskState.CANCELING);\r\n this.state_ = state;\r\n this.notifyObservers_();\r\n break;\r\n case InternalTaskState.SUCCESS:\r\n // TODO(andysoto):\r\n // assert(this.state_ === InternalTaskState.RUNNING ||\r\n // this.state_ === InternalTaskState.PAUSING ||\r\n // this.state_ === InternalTaskState.CANCELING);\r\n this.state_ = state;\r\n this.notifyObservers_();\r\n break;\r\n }\r\n };\r\n UploadTask.prototype.completeTransitions_ = function () {\r\n switch (this.state_) {\r\n case InternalTaskState.PAUSING:\r\n this.transition_(InternalTaskState.PAUSED);\r\n break;\r\n case InternalTaskState.CANCELING:\r\n this.transition_(InternalTaskState.CANCELED);\r\n break;\r\n case InternalTaskState.RUNNING:\r\n this.start_();\r\n break;\r\n default:\r\n // TODO(andysoto): assert(false);\r\n break;\r\n }\r\n };\r\n Object.defineProperty(UploadTask.prototype, \"snapshot\", {\r\n get: function () {\r\n var externalState = taskStateFromInternalTaskState(this.state_);\r\n return new UploadTaskSnapshot(this.transferred_, this.blob_.size(), externalState, this.metadata_, this, this.ref_);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Adds a callback for an event.\r\n * @param type The type of event to listen for.\r\n */\r\n UploadTask.prototype.on = function (type, nextOrObserver, error, completed) {\r\n if (nextOrObserver === void 0) { nextOrObserver = undefined; }\r\n if (error === void 0) { error = undefined; }\r\n if (completed === void 0) { completed = undefined; }\r\n function typeValidator(_p) {\r\n if (type !== TaskEvent.STATE_CHANGED) {\r\n throw \"Expected one of the event types: [\" + TaskEvent.STATE_CHANGED + \"].\";\r\n }\r\n }\r\n var nextOrObserverMessage = 'Expected a function or an Object with one of ' +\r\n '`next`, `error`, `complete` properties.';\r\n var nextValidator = nullFunctionSpec(true).validator;\r\n var observerValidator = looseObjectSpec(null, true).validator;\r\n function nextOrObserverValidator(p) {\r\n try {\r\n nextValidator(p);\r\n return;\r\n }\r\n catch (e) { }\r\n try {\r\n observerValidator(p);\r\n var anyDefined = isJustDef(p['next']) ||\r\n isJustDef(p['error']) ||\r\n isJustDef(p['complete']);\r\n if (!anyDefined) {\r\n throw '';\r\n }\r\n return;\r\n }\r\n catch (e) {\r\n throw nextOrObserverMessage;\r\n }\r\n }\r\n var specs = [\r\n stringSpec(typeValidator),\r\n looseObjectSpec(nextOrObserverValidator, true),\r\n nullFunctionSpec(true),\r\n nullFunctionSpec(true)\r\n ];\r\n validate('on', specs, arguments);\r\n var self = this;\r\n function makeBinder(specs) {\r\n function binder(nextOrObserver, error, opt_complete) {\r\n if (specs !== null) {\r\n validate('on', specs, arguments);\r\n }\r\n var observer = new Observer(nextOrObserver, error, completed);\r\n self.addObserver_(observer);\r\n return function () {\r\n self.removeObserver_(observer);\r\n };\r\n }\r\n return binder;\r\n }\r\n function binderNextOrObserverValidator(p) {\r\n if (p === null) {\r\n throw nextOrObserverMessage;\r\n }\r\n nextOrObserverValidator(p);\r\n }\r\n var binderSpecs = [\r\n looseObjectSpec(binderNextOrObserverValidator),\r\n nullFunctionSpec(true),\r\n nullFunctionSpec(true)\r\n ];\r\n var typeOnly = !(isJustDef(nextOrObserver) ||\r\n isJustDef(error) ||\r\n isJustDef(completed));\r\n if (typeOnly) {\r\n return makeBinder(binderSpecs);\r\n }\r\n else {\r\n return makeBinder(null)(nextOrObserver, error, completed);\r\n }\r\n };\r\n /**\r\n * This object behaves like a Promise, and resolves with its snapshot data\r\n * when the upload completes.\r\n * @param onFulfilled The fulfillment callback. Promise chaining works as normal.\r\n * @param onRejected The rejection callback.\r\n */\r\n UploadTask.prototype.then = function (onFulfilled, onRejected) {\r\n // These casts are needed so that TypeScript can infer the types of the\r\n // resulting Promise.\r\n return this.promise_.then(onFulfilled, onRejected);\r\n };\r\n /**\r\n * Equivalent to calling `then(null, onRejected)`.\r\n */\r\n UploadTask.prototype.catch = function (onRejected) {\r\n return this.then(null, onRejected);\r\n };\r\n /**\r\n * Adds the given observer.\r\n */\r\n UploadTask.prototype.addObserver_ = function (observer) {\r\n this.observers_.push(observer);\r\n this.notifyObserver_(observer);\r\n };\r\n /**\r\n * Removes the given observer.\r\n */\r\n UploadTask.prototype.removeObserver_ = function (observer) {\r\n remove(this.observers_, observer);\r\n };\r\n UploadTask.prototype.notifyObservers_ = function () {\r\n var _this = this;\r\n this.finishPromise_();\r\n var observers = clone$1(this.observers_);\r\n observers.forEach(function (observer) {\r\n _this.notifyObserver_(observer);\r\n });\r\n };\r\n UploadTask.prototype.finishPromise_ = function () {\r\n if (this.resolve_ !== null) {\r\n var triggered = true;\r\n switch (taskStateFromInternalTaskState(this.state_)) {\r\n case TaskState.SUCCESS:\r\n async(this.resolve_.bind(null, this.snapshot))();\r\n break;\r\n case TaskState.CANCELED:\r\n case TaskState.ERROR:\r\n var toCall = this.reject_;\r\n async(toCall.bind(null, this.error_))();\r\n break;\r\n default:\r\n triggered = false;\r\n break;\r\n }\r\n if (triggered) {\r\n this.resolve_ = null;\r\n this.reject_ = null;\r\n }\r\n }\r\n };\r\n UploadTask.prototype.notifyObserver_ = function (observer) {\r\n var externalState = taskStateFromInternalTaskState(this.state_);\r\n switch (externalState) {\r\n case TaskState.RUNNING:\r\n case TaskState.PAUSED:\r\n if (observer.next !== null) {\r\n async(observer.next.bind(observer, this.snapshot))();\r\n }\r\n break;\r\n case TaskState.SUCCESS:\r\n if (observer.complete !== null) {\r\n async(observer.complete.bind(observer))();\r\n }\r\n break;\r\n case TaskState.CANCELED:\r\n case TaskState.ERROR:\r\n if (observer.error !== null) {\r\n async(observer.error.bind(observer, this.error_))();\r\n }\r\n break;\r\n default:\r\n // TODO(andysoto): assert(false);\r\n if (observer.error !== null) {\r\n async(observer.error.bind(observer, this.error_))();\r\n }\r\n }\r\n };\r\n /**\r\n * Resumes a paused task. Has no effect on a currently running or failed task.\r\n * @return True if the operation took effect, false if ignored.\r\n */\r\n UploadTask.prototype.resume = function () {\r\n validate('resume', [], arguments);\r\n var valid = this.state_ === InternalTaskState.PAUSED ||\r\n this.state_ === InternalTaskState.PAUSING;\r\n if (valid) {\r\n this.transition_(InternalTaskState.RUNNING);\r\n }\r\n return valid;\r\n };\r\n /**\r\n * Pauses a currently running task. Has no effect on a paused or failed task.\r\n * @return True if the operation took effect, false if ignored.\r\n */\r\n UploadTask.prototype.pause = function () {\r\n validate('pause', [], arguments);\r\n var valid = this.state_ === InternalTaskState.RUNNING;\r\n if (valid) {\r\n this.transition_(InternalTaskState.PAUSING);\r\n }\r\n return valid;\r\n };\r\n /**\r\n * Cancels a currently running or paused task. Has no effect on a complete or\r\n * failed task.\r\n * @return True if the operation took effect, false if ignored.\r\n */\r\n UploadTask.prototype.cancel = function () {\r\n validate('cancel', [], arguments);\r\n var valid = this.state_ === InternalTaskState.RUNNING ||\r\n this.state_ === InternalTaskState.PAUSING;\r\n if (valid) {\r\n this.transition_(InternalTaskState.CANCELING);\r\n }\r\n return valid;\r\n };\r\n return UploadTask;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Provides methods to interact with a bucket in the Firebase Storage service.\r\n * @param location An fbs.location, or the URL at\r\n * which to base this object, in one of the following forms:\r\n * gs:///\r\n * http[s]://firebasestorage.googleapis.com/\r\n * /b//o/\r\n * Any query or fragment strings will be ignored in the http[s]\r\n * format. If no value is passed, the storage object will use a URL based on\r\n * the project ID of the base firebase.App instance.\r\n */\r\nvar Reference = /** @class */ (function () {\r\n function Reference(authWrapper, location) {\r\n this.authWrapper = authWrapper;\r\n if (location instanceof Location) {\r\n this.location = location;\r\n }\r\n else {\r\n this.location = Location.makeFromUrl(location);\r\n }\r\n }\r\n /**\r\n * @return The URL for the bucket and path this object references,\r\n * in the form gs:///\r\n * @override\r\n */\r\n Reference.prototype.toString = function () {\r\n validate('toString', [], arguments);\r\n return 'gs://' + this.location.bucket + '/' + this.location.path;\r\n };\r\n Reference.prototype.newRef = function (authWrapper, location) {\r\n return new Reference(authWrapper, location);\r\n };\r\n Reference.prototype.mappings = function () {\r\n return getMappings();\r\n };\r\n /**\r\n * @return A reference to the object obtained by\r\n * appending childPath, removing any duplicate, beginning, or trailing\r\n * slashes.\r\n */\r\n Reference.prototype.child = function (childPath) {\r\n validate('child', [stringSpec()], arguments);\r\n var newPath = child(this.location.path, childPath);\r\n var location = new Location(this.location.bucket, newPath);\r\n return this.newRef(this.authWrapper, location);\r\n };\r\n Object.defineProperty(Reference.prototype, \"parent\", {\r\n /**\r\n * @return A reference to the parent of the\r\n * current object, or null if the current object is the root.\r\n */\r\n get: function () {\r\n var newPath = parent(this.location.path);\r\n if (newPath === null) {\r\n return null;\r\n }\r\n var location = new Location(this.location.bucket, newPath);\r\n return this.newRef(this.authWrapper, location);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"root\", {\r\n /**\r\n * @return An reference to the root of this\r\n * object's bucket.\r\n */\r\n get: function () {\r\n var location = new Location(this.location.bucket, '');\r\n return this.newRef(this.authWrapper, location);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"bucket\", {\r\n get: function () {\r\n return this.location.bucket;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"fullPath\", {\r\n get: function () {\r\n return this.location.path;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"name\", {\r\n get: function () {\r\n return lastComponent(this.location.path);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Reference.prototype, \"storage\", {\r\n get: function () {\r\n return this.authWrapper.service();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Uploads a blob to this object's location.\r\n * @param data The blob to upload.\r\n * @return An UploadTask that lets you control and\r\n * observe the upload.\r\n */\r\n Reference.prototype.put = function (data, metadata) {\r\n if (metadata === void 0) { metadata = null; }\r\n validate('put', [uploadDataSpec(), metadataSpec(true)], arguments);\r\n this.throwIfRoot_('put');\r\n return new UploadTask(this, this.authWrapper, this.location, this.mappings(), new FbsBlob(data), metadata);\r\n };\r\n /**\r\n * Uploads a string to this object's location.\r\n * @param string The string to upload.\r\n * @param opt_format The format of the string to upload.\r\n * @return An UploadTask that lets you control and\r\n * observe the upload.\r\n */\r\n Reference.prototype.putString = function (string, format, opt_metadata) {\r\n if (format === void 0) { format = StringFormat.RAW; }\r\n validate('putString', [\r\n stringSpec(),\r\n stringSpec(formatValidator, true),\r\n metadataSpec(true)\r\n ], arguments);\r\n this.throwIfRoot_('putString');\r\n var data = dataFromString(format, string);\r\n var metadata = clone(opt_metadata);\r\n if (!isDef(metadata['contentType']) && isDef(data.contentType)) {\r\n metadata['contentType'] = data.contentType;\r\n }\r\n return new UploadTask(this, this.authWrapper, this.location, this.mappings(), new FbsBlob(data.data, true), metadata);\r\n };\r\n /**\r\n * Deletes the object at this location.\r\n * @return A promise that resolves if the deletion succeeds.\r\n */\r\n Reference.prototype.delete = function () {\r\n validate('delete', [], arguments);\r\n this.throwIfRoot_('delete');\r\n var self = this;\r\n return this.authWrapper.getAuthToken().then(function (authToken) {\r\n var requestInfo = deleteObject(self.authWrapper, self.location);\r\n return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\r\n });\r\n };\r\n /**\r\n * A promise that resolves with the metadata for this object. If this\r\n * object doesn't exist or metadata cannot be retreived, the promise is\r\n * rejected.\r\n */\r\n Reference.prototype.getMetadata = function () {\r\n validate('getMetadata', [], arguments);\r\n this.throwIfRoot_('getMetadata');\r\n var self = this;\r\n return this.authWrapper.getAuthToken().then(function (authToken) {\r\n var requestInfo = getMetadata(self.authWrapper, self.location, self.mappings());\r\n return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\r\n });\r\n };\r\n /**\r\n * Updates the metadata for this object.\r\n * @param metadata The new metadata for the object.\r\n * Only values that have been explicitly set will be changed. Explicitly\r\n * setting a value to null will remove the metadata.\r\n * @return A promise that resolves\r\n * with the new metadata for this object.\r\n * @see firebaseStorage.Reference.prototype.getMetadata\r\n */\r\n Reference.prototype.updateMetadata = function (metadata) {\r\n validate('updateMetadata', [metadataSpec()], arguments);\r\n this.throwIfRoot_('updateMetadata');\r\n var self = this;\r\n return this.authWrapper.getAuthToken().then(function (authToken) {\r\n var requestInfo = updateMetadata(self.authWrapper, self.location, metadata, self.mappings());\r\n return self.authWrapper.makeRequest(requestInfo, authToken).getPromise();\r\n });\r\n };\r\n /**\r\n * @return A promise that resolves with the download\r\n * URL for this object.\r\n */\r\n Reference.prototype.getDownloadURL = function () {\r\n validate('getDownloadURL', [], arguments);\r\n this.throwIfRoot_('getDownloadURL');\r\n return this.getMetadata().then(function (metadata) {\r\n var url = metadata['downloadURLs'][0];\r\n if (isDef(url)) {\r\n return url;\r\n }\r\n else {\r\n throw noDownloadURL();\r\n }\r\n });\r\n };\r\n Reference.prototype.throwIfRoot_ = function (name) {\r\n if (this.location.path === '') {\r\n throw invalidRootOperation(name);\r\n }\r\n };\r\n return Reference;\r\n}());\n\n/**\r\n * A request whose promise always fails.\r\n * @struct\r\n * @template T\r\n */\r\nvar FailRequest = /** @class */ (function () {\r\n function FailRequest(error) {\r\n this.promise_ = reject(error);\r\n }\r\n /** @inheritDoc */\r\n FailRequest.prototype.getPromise = function () {\r\n return this.promise_;\r\n };\r\n /** @inheritDoc */\r\n FailRequest.prototype.cancel = function (appDelete) {\r\n if (appDelete === void 0) { appDelete = false; }\r\n };\r\n return FailRequest;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @struct\r\n */\r\nvar RequestMap = /** @class */ (function () {\r\n function RequestMap() {\r\n this.map_ = {};\r\n this.id_ = minSafeInteger;\r\n }\r\n /**\r\n * Registers the given request with this map.\r\n * The request is unregistered when it completes.\r\n * @param r The request to register.\r\n */\r\n RequestMap.prototype.addRequest = function (r) {\r\n var id = this.id_;\r\n this.id_++;\r\n this.map_[id] = r;\r\n var self = this;\r\n function unmap() {\r\n delete self.map_[id];\r\n }\r\n r.getPromise().then(unmap, unmap);\r\n };\r\n /**\r\n * Cancels all registered requests.\r\n */\r\n RequestMap.prototype.clear = function () {\r\n forEach(this.map_, function (key, val) {\r\n if (val) {\r\n val.cancel(true);\r\n }\r\n });\r\n this.map_ = {};\r\n };\r\n return RequestMap;\r\n}());\n\n/**\r\n * @param app If null, getAuthToken always resolves with null.\r\n * @param service The storage service associated with this auth wrapper.\r\n * Untyped to avoid circular type dependencies.\r\n * @struct\r\n */\r\nvar AuthWrapper = /** @class */ (function () {\r\n function AuthWrapper(app, maker, requestMaker, service, pool) {\r\n this.bucket_ = null;\r\n this.deleted_ = false;\r\n this.app_ = app;\r\n if (this.app_ !== null) {\r\n var options = this.app_.options;\r\n if (isDef(options)) {\r\n this.bucket_ = AuthWrapper.extractBucket_(options);\r\n }\r\n }\r\n this.storageRefMaker_ = maker;\r\n this.requestMaker_ = requestMaker;\r\n this.pool_ = pool;\r\n this.service_ = service;\r\n this.maxOperationRetryTime_ = defaultMaxOperationRetryTime;\r\n this.maxUploadRetryTime_ = defaultMaxUploadRetryTime;\r\n this.requestMap_ = new RequestMap();\r\n }\r\n AuthWrapper.extractBucket_ = function (config) {\r\n var bucketString = config[configOption] || null;\r\n if (bucketString == null) {\r\n return null;\r\n }\r\n var loc = Location.makeFromBucketSpec(bucketString);\r\n return loc.bucket;\r\n };\r\n AuthWrapper.prototype.getAuthToken = function () {\r\n // TODO(andysoto): remove ifDef checks after firebase-app implements stubs\r\n // (b/28673818).\r\n if (this.app_ !== null &&\r\n isDef(this.app_.INTERNAL) &&\r\n isDef(this.app_.INTERNAL.getToken)) {\r\n return this.app_.INTERNAL.getToken().then(function (response) {\r\n if (response !== null) {\r\n return response.accessToken;\r\n }\r\n else {\r\n return null;\r\n }\r\n }, function (_error) {\r\n return null;\r\n });\r\n }\r\n else {\r\n return resolve(null);\r\n }\r\n };\r\n AuthWrapper.prototype.bucket = function () {\r\n if (this.deleted_) {\r\n throw appDeleted();\r\n }\r\n else {\r\n return this.bucket_;\r\n }\r\n };\r\n /**\r\n * The service associated with this auth wrapper. Untyped to avoid circular\r\n * type dependencies.\r\n */\r\n AuthWrapper.prototype.service = function () {\r\n return this.service_;\r\n };\r\n /**\r\n * Returns a new firebaseStorage.Reference object referencing this AuthWrapper\r\n * at the given Location.\r\n * @param loc The Location.\r\n * @return Actually a firebaseStorage.Reference, typing not allowed\r\n * because of circular dependency problems.\r\n */\r\n AuthWrapper.prototype.makeStorageReference = function (loc) {\r\n return this.storageRefMaker_(this, loc);\r\n };\r\n AuthWrapper.prototype.makeRequest = function (requestInfo, authToken) {\r\n if (!this.deleted_) {\r\n var request = this.requestMaker_(requestInfo, authToken, this.pool_);\r\n this.requestMap_.addRequest(request);\r\n return request;\r\n }\r\n else {\r\n return new FailRequest(appDeleted());\r\n }\r\n };\r\n /**\r\n * Stop running requests and prevent more from being created.\r\n */\r\n AuthWrapper.prototype.deleteApp = function () {\r\n this.deleted_ = true;\r\n this.app_ = null;\r\n this.requestMap_.clear();\r\n };\r\n AuthWrapper.prototype.maxUploadRetryTime = function () {\r\n return this.maxUploadRetryTime_;\r\n };\r\n AuthWrapper.prototype.setMaxUploadRetryTime = function (time) {\r\n this.maxUploadRetryTime_ = time;\r\n };\r\n AuthWrapper.prototype.maxOperationRetryTime = function () {\r\n return this.maxOperationRetryTime_;\r\n };\r\n AuthWrapper.prototype.setMaxOperationRetryTime = function (time) {\r\n this.maxOperationRetryTime_ = time;\r\n };\r\n return AuthWrapper;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @param f May be invoked\r\n * before the function returns.\r\n * @param callback Get all the arguments passed to the function\r\n * passed to f, including the initial boolean.\r\n */\r\nfunction start(f, callback, timeout) {\r\n // TODO(andysoto): make this code cleaner (probably refactor into an actual\r\n // type instead of a bunch of functions with state shared in the closure)\r\n var waitSeconds = 1;\r\n // Would type this as \"number\" but that doesn't work for Node so ¯\\_(ツ)_/¯\r\n var timeoutId = null;\r\n var hitTimeout = false;\r\n var cancelState = 0;\r\n function canceled() {\r\n return cancelState === 2;\r\n }\r\n var triggeredCallback = false;\r\n function triggerCallback() {\r\n if (!triggeredCallback) {\r\n triggeredCallback = true;\r\n callback.apply(null, arguments);\r\n }\r\n }\r\n function callWithDelay(millis) {\r\n timeoutId = setTimeout(function () {\r\n timeoutId = null;\r\n f(handler, canceled());\r\n }, millis);\r\n }\r\n function handler(success) {\r\n var var_args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n var_args[_i - 1] = arguments[_i];\r\n }\r\n if (triggeredCallback) {\r\n return;\r\n }\r\n if (success) {\r\n triggerCallback.apply(null, arguments);\r\n return;\r\n }\r\n var mustStop = canceled() || hitTimeout;\r\n if (mustStop) {\r\n triggerCallback.apply(null, arguments);\r\n return;\r\n }\r\n if (waitSeconds < 64) {\r\n /* TODO(andysoto): don't back off so quickly if we know we're offline. */\r\n waitSeconds *= 2;\r\n }\r\n var waitMillis;\r\n if (cancelState === 1) {\r\n cancelState = 2;\r\n waitMillis = 0;\r\n }\r\n else {\r\n waitMillis = (waitSeconds + Math.random()) * 1000;\r\n }\r\n callWithDelay(waitMillis);\r\n }\r\n var stopped = false;\r\n function stop(wasTimeout) {\r\n if (stopped) {\r\n return;\r\n }\r\n stopped = true;\r\n if (triggeredCallback) {\r\n return;\r\n }\r\n if (timeoutId !== null) {\r\n if (!wasTimeout) {\r\n cancelState = 2;\r\n }\r\n clearTimeout(timeoutId);\r\n callWithDelay(0);\r\n }\r\n else {\r\n if (!wasTimeout) {\r\n cancelState = 1;\r\n }\r\n }\r\n }\r\n callWithDelay(0);\r\n setTimeout(function () {\r\n hitTimeout = true;\r\n stop(true);\r\n }, timeout);\r\n return stop;\r\n}\r\n/**\r\n * Stops the retry loop from repeating.\r\n * If the function is currently \"in between\" retries, it is invoked immediately\r\n * with the second parameter as \"true\". Otherwise, it will be invoked once more\r\n * after the current invocation finishes iff the current invocation would have\r\n * triggered another retry.\r\n */\r\nfunction stop(id) {\r\n id(false);\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @struct\r\n * @template T\r\n */\r\nvar NetworkRequest = /** @class */ (function () {\r\n function NetworkRequest(url, method, headers, body, successCodes, additionalRetryCodes, callback, errorCallback, timeout, progressCallback, pool) {\r\n this.pendingXhr_ = null;\r\n this.backoffId_ = null;\r\n this.resolve_ = null;\r\n this.reject_ = null;\r\n this.canceled_ = false;\r\n this.appDelete_ = false;\r\n this.url_ = url;\r\n this.method_ = method;\r\n this.headers_ = headers;\r\n this.body_ = body;\r\n this.successCodes_ = successCodes.slice();\r\n this.additionalRetryCodes_ = additionalRetryCodes.slice();\r\n this.callback_ = callback;\r\n this.errorCallback_ = errorCallback;\r\n this.progressCallback_ = progressCallback;\r\n this.timeout_ = timeout;\r\n this.pool_ = pool;\r\n var self = this;\r\n this.promise_ = make(function (resolve$$1, reject$$1) {\r\n self.resolve_ = resolve$$1;\r\n self.reject_ = reject$$1;\r\n self.start_();\r\n });\r\n }\r\n /**\r\n * Actually starts the retry loop.\r\n */\r\n NetworkRequest.prototype.start_ = function () {\r\n var self = this;\r\n function doTheRequest(backoffCallback, canceled$$1) {\r\n if (canceled$$1) {\r\n backoffCallback(false, new RequestEndStatus(false, null, true));\r\n return;\r\n }\r\n var xhr = self.pool_.createXhrIo();\r\n self.pendingXhr_ = xhr;\r\n function progressListener(progressEvent) {\r\n var loaded = progressEvent.loaded;\r\n var total = progressEvent.lengthComputable ? progressEvent.total : -1;\r\n if (self.progressCallback_ !== null) {\r\n self.progressCallback_(loaded, total);\r\n }\r\n }\r\n if (self.progressCallback_ !== null) {\r\n xhr.addUploadProgressListener(progressListener);\r\n }\r\n xhr\r\n .send(self.url_, self.method_, self.body_, self.headers_)\r\n .then(function (xhr) {\r\n if (self.progressCallback_ !== null) {\r\n xhr.removeUploadProgressListener(progressListener);\r\n }\r\n self.pendingXhr_ = null;\r\n xhr = xhr;\r\n var hitServer = xhr.getErrorCode() === ErrorCode.NO_ERROR;\r\n var status = xhr.getStatus();\r\n if (!hitServer || self.isRetryStatusCode_(status)) {\r\n var wasCanceled = xhr.getErrorCode() === ErrorCode.ABORT;\r\n backoffCallback(false, new RequestEndStatus(false, null, wasCanceled));\r\n return;\r\n }\r\n var successCode = contains$1(self.successCodes_, status);\r\n backoffCallback(true, new RequestEndStatus(successCode, xhr));\r\n });\r\n }\r\n /**\r\n * @param requestWentThrough True if the request eventually went\r\n * through, false if it hit the retry limit or was canceled.\r\n */\r\n function backoffDone(requestWentThrough, status) {\r\n var resolve$$1 = self.resolve_;\r\n var reject$$1 = self.reject_;\r\n var xhr = status.xhr;\r\n if (status.wasSuccessCode) {\r\n try {\r\n var result = self.callback_(xhr, xhr.getResponseText());\r\n if (isJustDef(result)) {\r\n resolve$$1(result);\r\n }\r\n else {\r\n resolve$$1();\r\n }\r\n }\r\n catch (e) {\r\n reject$$1(e);\r\n }\r\n }\r\n else {\r\n if (xhr !== null) {\r\n var err = unknown();\r\n err.setServerResponseProp(xhr.getResponseText());\r\n if (self.errorCallback_) {\r\n reject$$1(self.errorCallback_(xhr, err));\r\n }\r\n else {\r\n reject$$1(err);\r\n }\r\n }\r\n else {\r\n if (status.canceled) {\r\n var err = self.appDelete_\r\n ? appDeleted()\r\n : canceled();\r\n reject$$1(err);\r\n }\r\n else {\r\n var err = retryLimitExceeded();\r\n reject$$1(err);\r\n }\r\n }\r\n }\r\n }\r\n if (this.canceled_) {\r\n backoffDone(false, new RequestEndStatus(false, null, true));\r\n }\r\n else {\r\n this.backoffId_ = start(doTheRequest, backoffDone, this.timeout_);\r\n }\r\n };\r\n /** @inheritDoc */\r\n NetworkRequest.prototype.getPromise = function () {\r\n return this.promise_;\r\n };\r\n /** @inheritDoc */\r\n NetworkRequest.prototype.cancel = function (appDelete) {\r\n this.canceled_ = true;\r\n this.appDelete_ = appDelete || false;\r\n if (this.backoffId_ !== null) {\r\n stop(this.backoffId_);\r\n }\r\n if (this.pendingXhr_ !== null) {\r\n this.pendingXhr_.abort();\r\n }\r\n };\r\n NetworkRequest.prototype.isRetryStatusCode_ = function (status) {\r\n // The codes for which to retry came from this page:\r\n // https://cloud.google.com/storage/docs/exponential-backoff\r\n var isFiveHundredCode = status >= 500 && status < 600;\r\n var extraRetryCodes = [\r\n // Request Timeout: web server didn't receive full request in time.\r\n 408,\r\n // Too Many Requests: you're getting rate-limited, basically.\r\n 429\r\n ];\r\n var isExtraRetryCode = contains$1(extraRetryCodes, status);\r\n var isRequestSpecificRetryCode = contains$1(this.additionalRetryCodes_, status);\r\n return isFiveHundredCode || isExtraRetryCode || isRequestSpecificRetryCode;\r\n };\r\n return NetworkRequest;\r\n}());\r\n/**\r\n * A collection of information about the result of a network request.\r\n * @param opt_canceled Defaults to false.\r\n * @struct\r\n */\r\nvar RequestEndStatus = /** @class */ (function () {\r\n function RequestEndStatus(wasSuccessCode, xhr, opt_canceled) {\r\n this.wasSuccessCode = wasSuccessCode;\r\n this.xhr = xhr;\r\n this.canceled = !!opt_canceled;\r\n }\r\n return RequestEndStatus;\r\n}());\r\nfunction addAuthHeader_(headers, authToken) {\r\n if (authToken !== null && authToken.length > 0) {\r\n headers['Authorization'] = 'Firebase ' + authToken;\r\n }\r\n}\r\nfunction addVersionHeader_(headers) {\r\n var number = typeof firebase !== 'undefined' ? firebase.SDK_VERSION : 'AppManager';\r\n headers['X-Firebase-Storage-Version'] = 'webjs/' + number;\r\n}\r\n/**\r\n * @template T\r\n */\r\nfunction makeRequest(requestInfo, authToken, pool) {\r\n var queryPart = makeQueryString(requestInfo.urlParams);\r\n var url = requestInfo.url + queryPart;\r\n var headers = clone(requestInfo.headers);\r\n addAuthHeader_(headers, authToken);\r\n addVersionHeader_(headers);\r\n return new NetworkRequest(url, requestInfo.method, headers, requestInfo.body, requestInfo.successCodes, requestInfo.additionalRetryCodes, requestInfo.handler, requestInfo.errorHandler, requestInfo.timeout, requestInfo.progressCallback, pool);\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * A service that provides firebaseStorage.Reference instances.\r\n * @param opt_url gs:// url to a custom Storage Bucket\r\n *\r\n * @struct\r\n */\r\nvar Service = /** @class */ (function () {\r\n function Service(app, pool, url) {\r\n this.bucket_ = null;\r\n function maker(authWrapper, loc) {\r\n return new Reference(authWrapper, loc);\r\n }\r\n this.authWrapper_ = new AuthWrapper(app, maker, makeRequest, this, pool);\r\n this.app_ = app;\r\n if (url != null) {\r\n this.bucket_ = Location.makeFromBucketSpec(url);\r\n }\r\n else {\r\n var authWrapperBucket = this.authWrapper_.bucket();\r\n if (authWrapperBucket != null) {\r\n this.bucket_ = new Location(authWrapperBucket, '');\r\n }\r\n }\r\n this.internals_ = new ServiceInternals(this);\r\n }\r\n /**\r\n * Returns a firebaseStorage.Reference for the given path in the default\r\n * bucket.\r\n */\r\n Service.prototype.ref = function (path) {\r\n function validator(path) {\r\n if (/^[A-Za-z]+:\\/\\//.test(path)) {\r\n throw 'Expected child path but got a URL, use refFromURL instead.';\r\n }\r\n }\r\n validate('ref', [stringSpec(validator, true)], arguments);\r\n if (this.bucket_ == null) {\r\n throw new Error('No Storage Bucket defined in Firebase Options.');\r\n }\r\n var ref = new Reference(this.authWrapper_, this.bucket_);\r\n if (path != null) {\r\n return ref.child(path);\r\n }\r\n else {\r\n return ref;\r\n }\r\n };\r\n /**\r\n * Returns a firebaseStorage.Reference object for the given absolute URL,\r\n * which must be a gs:// or http[s]:// URL.\r\n */\r\n Service.prototype.refFromURL = function (url) {\r\n function validator(p) {\r\n if (!/^[A-Za-z]+:\\/\\//.test(p)) {\r\n throw 'Expected full URL but got a child path, use ref instead.';\r\n }\r\n try {\r\n Location.makeFromUrl(p);\r\n }\r\n catch (e) {\r\n throw 'Expected valid full URL but got an invalid one.';\r\n }\r\n }\r\n validate('refFromURL', [stringSpec(validator, false)], arguments);\r\n return new Reference(this.authWrapper_, url);\r\n };\r\n Object.defineProperty(Service.prototype, \"maxUploadRetryTime\", {\r\n get: function () {\r\n return this.authWrapper_.maxUploadRetryTime();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Service.prototype.setMaxUploadRetryTime = function (time) {\r\n validate('setMaxUploadRetryTime', [nonNegativeNumberSpec()], arguments);\r\n this.authWrapper_.setMaxUploadRetryTime(time);\r\n };\r\n Object.defineProperty(Service.prototype, \"maxOperationRetryTime\", {\r\n get: function () {\r\n return this.authWrapper_.maxOperationRetryTime();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Service.prototype.setMaxOperationRetryTime = function (time) {\r\n validate('setMaxOperationRetryTime', [nonNegativeNumberSpec()], arguments);\r\n this.authWrapper_.setMaxOperationRetryTime(time);\r\n };\r\n Object.defineProperty(Service.prototype, \"app\", {\r\n get: function () {\r\n return this.app_;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(Service.prototype, \"INTERNAL\", {\r\n get: function () {\r\n return this.internals_;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return Service;\r\n}());\r\n/**\r\n * @struct\r\n */\r\nvar ServiceInternals = /** @class */ (function () {\r\n function ServiceInternals(service) {\r\n this.service_ = service;\r\n }\r\n /**\r\n * Called when the associated app is deleted.\r\n * @see {!fbs.AuthWrapper.prototype.deleteApp}\r\n */\r\n ServiceInternals.prototype.delete = function () {\r\n this.service_.authWrapper_.deleteApp();\r\n return resolve(undefined);\r\n };\r\n return ServiceInternals;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Type constant for Firebase Storage.\r\n */\r\nvar STORAGE_TYPE = 'storage';\r\nfunction factory(app, unused, opt_url) {\r\n return new Service(app, new XhrIoPool(), opt_url);\r\n}\r\nfunction registerStorage(instance) {\r\n var namespaceExports = {\r\n // no-inline\r\n TaskState: TaskState,\r\n TaskEvent: TaskEvent,\r\n StringFormat: StringFormat,\r\n Storage: Service,\r\n Reference: Reference\r\n };\r\n instance.INTERNAL.registerService(STORAGE_TYPE, factory, namespaceExports, undefined, \r\n // Allow multiple storage instances per app.\r\n true);\r\n}\r\nregisterStorage(firebase);\n\nexports.registerStorage = registerStorage;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/@firebase/storage/dist/index.cjs.js\n// module id = 443\n// module chunks = 64016405352682","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar tslib_1 = require('tslib');\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview Firebase constants. Some of these (@defines) can be overridden at compile-time.\r\n */\r\nvar CONSTANTS = {\r\n /**\r\n * @define {boolean} Whether this is the client Node.js SDK.\r\n */\r\n NODE_CLIENT: false,\r\n /**\r\n * @define {boolean} Whether this is the Admin Node.js SDK.\r\n */\r\n NODE_ADMIN: false,\r\n /**\r\n * Firebase SDK Version\r\n */\r\n SDK_VERSION: '${JSCORE_VERSION}'\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Throws an error if the provided assertion is falsy\r\n * @param {*} assertion The assertion to be tested for falsiness\r\n * @param {!string} message The message to display if the check fails\r\n */\r\nvar assert = function (assertion, message) {\r\n if (!assertion) {\r\n throw assertionError(message);\r\n }\r\n};\r\n/**\r\n * Returns an Error object suitable for throwing.\r\n * @param {string} message\r\n * @return {!Error}\r\n */\r\nvar assertionError = function (message) {\r\n return new Error('Firebase Database (' +\r\n CONSTANTS.SDK_VERSION +\r\n ') INTERNAL ASSERT FAILED: ' +\r\n message);\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar stringToByteArray = function (str) {\r\n // TODO(user): Use native implementations if/when available\r\n var out = [], p = 0;\r\n for (var i = 0; i < str.length; i++) {\r\n var c = str.charCodeAt(i);\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if ((c & 0xfc00) == 0xd800 &&\r\n i + 1 < str.length &&\r\n (str.charCodeAt(i + 1) & 0xfc00) == 0xdc00) {\r\n // Surrogate Pair\r\n c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Turns an array of numbers into the string given by the concatenation of the\r\n * characters to which the numbers correspond.\r\n * @param {Array} bytes Array of numbers representing characters.\r\n * @return {string} Stringification of the array.\r\n */\r\nvar byteArrayToString = function (bytes) {\r\n // TODO(user): Use native implementations if/when available\r\n var out = [], pos = 0, c = 0;\r\n while (pos < bytes.length) {\r\n var c1 = bytes[pos++];\r\n if (c1 < 128) {\r\n out[c++] = String.fromCharCode(c1);\r\n }\r\n else if (c1 > 191 && c1 < 224) {\r\n var c2 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));\r\n }\r\n else if (c1 > 239 && c1 < 365) {\r\n // Surrogate Pair\r\n var c2 = bytes[pos++];\r\n var c3 = bytes[pos++];\r\n var c4 = bytes[pos++];\r\n var u = (((c1 & 7) << 18) | ((c2 & 63) << 12) | ((c3 & 63) << 6) | (c4 & 63)) -\r\n 0x10000;\r\n out[c++] = String.fromCharCode(0xd800 + (u >> 10));\r\n out[c++] = String.fromCharCode(0xdc00 + (u & 1023));\r\n }\r\n else {\r\n var c2 = bytes[pos++];\r\n var c3 = bytes[pos++];\r\n out[c++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\r\n }\r\n }\r\n return out.join('');\r\n};\r\n// Static lookup maps, lazily populated by init_()\r\nvar base64 = {\r\n /**\r\n * Maps bytes to characters.\r\n * @type {Object}\r\n * @private\r\n */\r\n byteToCharMap_: null,\r\n /**\r\n * Maps characters to bytes.\r\n * @type {Object}\r\n * @private\r\n */\r\n charToByteMap_: null,\r\n /**\r\n * Maps bytes to websafe characters.\r\n * @type {Object}\r\n * @private\r\n */\r\n byteToCharMapWebSafe_: null,\r\n /**\r\n * Maps websafe characters to bytes.\r\n * @type {Object}\r\n * @private\r\n */\r\n charToByteMapWebSafe_: null,\r\n /**\r\n * Our default alphabet, shared between\r\n * ENCODED_VALS and ENCODED_VALS_WEBSAFE\r\n * @type {string}\r\n */\r\n ENCODED_VALS_BASE: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + 'abcdefghijklmnopqrstuvwxyz' + '0123456789',\r\n /**\r\n * Our default alphabet. Value 64 (=) is special; it means \"nothing.\"\r\n * @type {string}\r\n */\r\n get ENCODED_VALS() {\r\n return this.ENCODED_VALS_BASE + '+/=';\r\n },\r\n /**\r\n * Our websafe alphabet.\r\n * @type {string}\r\n */\r\n get ENCODED_VALS_WEBSAFE() {\r\n return this.ENCODED_VALS_BASE + '-_.';\r\n },\r\n /**\r\n * Whether this browser supports the atob and btoa functions. This extension\r\n * started at Mozilla but is now implemented by many browsers. We use the\r\n * ASSUME_* variables to avoid pulling in the full useragent detection library\r\n * but still allowing the standard per-browser compilations.\r\n *\r\n * @type {boolean}\r\n */\r\n HAS_NATIVE_SUPPORT: typeof atob === 'function',\r\n /**\r\n * Base64-encode an array of bytes.\r\n *\r\n * @param {Array|Uint8Array} input An array of bytes (numbers with\r\n * value in [0, 255]) to encode.\r\n * @param {boolean=} opt_webSafe Boolean indicating we should use the\r\n * alternative alphabet.\r\n * @return {string} The base64 encoded string.\r\n */\r\n encodeByteArray: function (input, opt_webSafe) {\r\n if (!Array.isArray(input)) {\r\n throw Error('encodeByteArray takes an array as a parameter');\r\n }\r\n this.init_();\r\n var byteToCharMap = opt_webSafe\r\n ? this.byteToCharMapWebSafe_\r\n : this.byteToCharMap_;\r\n var output = [];\r\n for (var i = 0; i < input.length; i += 3) {\r\n var byte1 = input[i];\r\n var haveByte2 = i + 1 < input.length;\r\n var byte2 = haveByte2 ? input[i + 1] : 0;\r\n var haveByte3 = i + 2 < input.length;\r\n var byte3 = haveByte3 ? input[i + 2] : 0;\r\n var outByte1 = byte1 >> 2;\r\n var outByte2 = ((byte1 & 0x03) << 4) | (byte2 >> 4);\r\n var outByte3 = ((byte2 & 0x0f) << 2) | (byte3 >> 6);\r\n var outByte4 = byte3 & 0x3f;\r\n if (!haveByte3) {\r\n outByte4 = 64;\r\n if (!haveByte2) {\r\n outByte3 = 64;\r\n }\r\n }\r\n output.push(byteToCharMap[outByte1], byteToCharMap[outByte2], byteToCharMap[outByte3], byteToCharMap[outByte4]);\r\n }\r\n return output.join('');\r\n },\r\n /**\r\n * Base64-encode a string.\r\n *\r\n * @param {string} input A string to encode.\r\n * @param {boolean=} opt_webSafe If true, we should use the\r\n * alternative alphabet.\r\n * @return {string} The base64 encoded string.\r\n */\r\n encodeString: function (input, opt_webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !opt_webSafe) {\r\n return btoa(input);\r\n }\r\n return this.encodeByteArray(stringToByteArray(input), opt_webSafe);\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * @param {string} input to decode.\r\n * @param {boolean=} opt_webSafe True if we should use the\r\n * alternative alphabet.\r\n * @return {string} string representing the decoded value.\r\n */\r\n decodeString: function (input, opt_webSafe) {\r\n // Shortcut for Mozilla browsers that implement\r\n // a native base64 encoder in the form of \"btoa/atob\"\r\n if (this.HAS_NATIVE_SUPPORT && !opt_webSafe) {\r\n return atob(input);\r\n }\r\n return byteArrayToString(this.decodeStringToByteArray(input, opt_webSafe));\r\n },\r\n /**\r\n * Base64-decode a string.\r\n *\r\n * In base-64 decoding, groups of four characters are converted into three\r\n * bytes. If the encoder did not apply padding, the input length may not\r\n * be a multiple of 4.\r\n *\r\n * In this case, the last group will have fewer than 4 characters, and\r\n * padding will be inferred. If the group has one or two characters, it decodes\r\n * to one byte. If the group has three characters, it decodes to two bytes.\r\n *\r\n * @param {string} input Input to decode.\r\n * @param {boolean=} opt_webSafe True if we should use the web-safe alphabet.\r\n * @return {!Array} bytes representing the decoded value.\r\n */\r\n decodeStringToByteArray: function (input, opt_webSafe) {\r\n this.init_();\r\n var charToByteMap = opt_webSafe\r\n ? this.charToByteMapWebSafe_\r\n : this.charToByteMap_;\r\n var output = [];\r\n for (var i = 0; i < input.length;) {\r\n var byte1 = charToByteMap[input.charAt(i++)];\r\n var haveByte2 = i < input.length;\r\n var byte2 = haveByte2 ? charToByteMap[input.charAt(i)] : 0;\r\n ++i;\r\n var haveByte3 = i < input.length;\r\n var byte3 = haveByte3 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n var haveByte4 = i < input.length;\r\n var byte4 = haveByte4 ? charToByteMap[input.charAt(i)] : 64;\r\n ++i;\r\n if (byte1 == null || byte2 == null || byte3 == null || byte4 == null) {\r\n throw Error();\r\n }\r\n var outByte1 = (byte1 << 2) | (byte2 >> 4);\r\n output.push(outByte1);\r\n if (byte3 != 64) {\r\n var outByte2 = ((byte2 << 4) & 0xf0) | (byte3 >> 2);\r\n output.push(outByte2);\r\n if (byte4 != 64) {\r\n var outByte3 = ((byte3 << 6) & 0xc0) | byte4;\r\n output.push(outByte3);\r\n }\r\n }\r\n }\r\n return output;\r\n },\r\n /**\r\n * Lazy static initialization function. Called before\r\n * accessing any of the static map variables.\r\n * @private\r\n */\r\n init_: function () {\r\n if (!this.byteToCharMap_) {\r\n this.byteToCharMap_ = {};\r\n this.charToByteMap_ = {};\r\n this.byteToCharMapWebSafe_ = {};\r\n this.charToByteMapWebSafe_ = {};\r\n // We want quick mappings back and forth, so we precompute two maps.\r\n for (var i = 0; i < this.ENCODED_VALS.length; i++) {\r\n this.byteToCharMap_[i] = this.ENCODED_VALS.charAt(i);\r\n this.charToByteMap_[this.byteToCharMap_[i]] = i;\r\n this.byteToCharMapWebSafe_[i] = this.ENCODED_VALS_WEBSAFE.charAt(i);\r\n this.charToByteMapWebSafe_[this.byteToCharMapWebSafe_[i]] = i;\r\n // Be forgiving when decoding and correctly decode both encodings.\r\n if (i >= this.ENCODED_VALS_BASE.length) {\r\n this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(i)] = i;\r\n this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(i)] = i;\r\n }\r\n }\r\n }\r\n }\r\n};\r\n/**\r\n * URL-safe base64 encoding\r\n * @param {!string} str\r\n * @return {!string}\r\n */\r\nvar base64Encode = function (str) {\r\n var utf8Bytes = stringToByteArray(str);\r\n return base64.encodeByteArray(utf8Bytes, true);\r\n};\r\n/**\r\n * URL-safe base64 decoding\r\n *\r\n * NOTE: DO NOT use the global atob() function - it does NOT support the\r\n * base64Url variant encoding.\r\n *\r\n * @param {string} str To be decoded\r\n * @return {?string} Decoded result, if possible\r\n */\r\nvar base64Decode = function (str) {\r\n try {\r\n return base64.decodeString(str, true);\r\n }\r\n catch (e) {\r\n console.error('base64Decode failed: ', e);\r\n }\r\n return null;\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Do a deep-copy of basic JavaScript Objects or Arrays.\r\n */\r\nfunction deepCopy(value) {\r\n return deepExtend(undefined, value);\r\n}\r\n/**\r\n * Copy properties from source to target (recursively allows extension\r\n * of Objects and Arrays). Scalar values in the target are over-written.\r\n * If target is undefined, an object of the appropriate type will be created\r\n * (and returned).\r\n *\r\n * We recursively copy all child properties of plain Objects in the source- so\r\n * that namespace- like dictionaries are merged.\r\n *\r\n * Note that the target can be a function, in which case the properties in\r\n * the source Object are copied onto it as static properties of the Function.\r\n */\r\nfunction deepExtend(target, source) {\r\n if (!(source instanceof Object)) {\r\n return source;\r\n }\r\n switch (source.constructor) {\r\n case Date:\r\n // Treat Dates like scalars; if the target date object had any child\r\n // properties - they will be lost!\r\n var dateValue = source;\r\n return new Date(dateValue.getTime());\r\n case Object:\r\n if (target === undefined) {\r\n target = {};\r\n }\r\n break;\r\n case Array:\r\n // Always copy the array source and overwrite the target.\r\n target = [];\r\n break;\r\n default:\r\n // Not a plain Object - treat it as a scalar.\r\n return source;\r\n }\r\n for (var prop in source) {\r\n if (!source.hasOwnProperty(prop)) {\r\n continue;\r\n }\r\n target[prop] = deepExtend(target[prop], source[prop]);\r\n }\r\n return target;\r\n}\r\n// TODO: Really needed (for JSCompiler type checking)?\r\nfunction patchProperty(obj, prop, value) {\r\n obj[prop] = value;\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\nvar Deferred = /** @class */ (function () {\r\n function Deferred() {\r\n var _this = this;\r\n this.promise = new Promise(function (resolve, reject) {\r\n _this.resolve = resolve;\r\n _this.reject = reject;\r\n });\r\n }\r\n /**\r\n * Our API internals are not promiseified and cannot because our callback APIs have subtle expectations around\r\n * invoking promises inline, which Promises are forbidden to do. This method accepts an optional node-style callback\r\n * and returns a node-style callback which will resolve or reject the Deferred's promise.\r\n * @param {((?function(?(Error)): (?|undefined))| (?function(?(Error),?=): (?|undefined)))=} callback\r\n * @return {!function(?(Error), ?=)}\r\n */\r\n Deferred.prototype.wrapCallback = function (callback) {\r\n var _this = this;\r\n return function (error, value) {\r\n if (error) {\r\n _this.reject(error);\r\n }\r\n else {\r\n _this.resolve(value);\r\n }\r\n if (typeof callback === 'function') {\r\n // Attaching noop handler just in case developer wasn't expecting\r\n // promises\r\n _this.promise.catch(function () { });\r\n // Some of our callbacks don't expect a value and our own tests\r\n // assert that the parameter length is 1\r\n if (callback.length === 1) {\r\n callback(error);\r\n }\r\n else {\r\n callback(error, value);\r\n }\r\n }\r\n };\r\n };\r\n return Deferred;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns navigator.userAgent string or '' if it's not defined.\r\n * @return {string} user agent string\r\n */\r\nvar getUA = function () {\r\n if (typeof navigator !== 'undefined' &&\r\n typeof navigator['userAgent'] === 'string') {\r\n return navigator['userAgent'];\r\n }\r\n else {\r\n return '';\r\n }\r\n};\r\n/**\r\n * Detect Cordova / PhoneGap / Ionic frameworks on a mobile device.\r\n *\r\n * Deliberately does not rely on checking `file://` URLs (as this fails PhoneGap in the Ripple emulator) nor\r\n * Cordova `onDeviceReady`, which would normally wait for a callback.\r\n *\r\n * @return {boolean} isMobileCordova\r\n */\r\nvar isMobileCordova = function () {\r\n return (typeof window !== 'undefined' &&\r\n !!(window['cordova'] || window['phonegap'] || window['PhoneGap']) &&\r\n /ios|iphone|ipod|ipad|android|blackberry|iemobile/i.test(getUA()));\r\n};\r\n/**\r\n * Detect React Native.\r\n *\r\n * @return {boolean} True if ReactNative environment is detected.\r\n */\r\nvar isReactNative = function () {\r\n return (typeof navigator === 'object' && navigator['product'] === 'ReactNative');\r\n};\r\n/**\r\n * Detect Node.js.\r\n *\r\n * @return {boolean} True if Node.js environment is detected.\r\n */\r\nvar isNodeSdk = function () {\r\n return CONSTANTS.NODE_CLIENT === true || CONSTANTS.NODE_ADMIN === true;\r\n};\n\nvar ERROR_NAME = 'FirebaseError';\r\nvar captureStackTrace = Error\r\n .captureStackTrace;\r\n// Export for faking in tests\r\nfunction patchCapture(captureFake) {\r\n var result = captureStackTrace;\r\n captureStackTrace = captureFake;\r\n return result;\r\n}\r\nvar FirebaseError = /** @class */ (function () {\r\n function FirebaseError(code, message) {\r\n this.code = code;\r\n this.message = message;\r\n // We want the stack value, if implemented by Error\r\n if (captureStackTrace) {\r\n // Patches this.stack, omitted calls above ErrorFactory#create\r\n captureStackTrace(this, ErrorFactory.prototype.create);\r\n }\r\n else {\r\n var err_1 = Error.apply(this, arguments);\r\n this.name = ERROR_NAME;\r\n // Make non-enumerable getter for the property.\r\n Object.defineProperty(this, 'stack', {\r\n get: function () {\r\n return err_1.stack;\r\n }\r\n });\r\n }\r\n }\r\n return FirebaseError;\r\n}());\r\n// Back-door inheritance\r\nFirebaseError.prototype = Object.create(Error.prototype);\r\nFirebaseError.prototype.constructor = FirebaseError;\r\nFirebaseError.prototype.name = ERROR_NAME;\r\nvar ErrorFactory = /** @class */ (function () {\r\n function ErrorFactory(service, serviceName, errors) {\r\n this.service = service;\r\n this.serviceName = serviceName;\r\n this.errors = errors;\r\n // Matches {$name}, by default.\r\n this.pattern = /\\{\\$([^}]+)}/g;\r\n // empty\r\n }\r\n ErrorFactory.prototype.create = function (code, data) {\r\n if (data === undefined) {\r\n data = {};\r\n }\r\n var template = this.errors[code];\r\n var fullCode = this.service + '/' + code;\r\n var message;\r\n if (template === undefined) {\r\n message = 'Error';\r\n }\r\n else {\r\n message = template.replace(this.pattern, function (match, key) {\r\n var value = data[key];\r\n return value !== undefined ? value.toString() : '<' + key + '?>';\r\n });\r\n }\r\n // Service: Error message (service/code).\r\n message = this.serviceName + ': ' + message + ' (' + fullCode + ').';\r\n var err = new FirebaseError(fullCode, message);\r\n // Populate the Error object with message parts for programmatic\r\n // accesses (e.g., e.file).\r\n for (var prop in data) {\r\n if (!data.hasOwnProperty(prop) || prop.slice(-1) === '_') {\r\n continue;\r\n }\r\n err[prop] = data[prop];\r\n }\r\n return err;\r\n };\r\n return ErrorFactory;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Evaluates a JSON string into a javascript object.\r\n *\r\n * @param {string} str A string containing JSON.\r\n * @return {*} The javascript object representing the specified JSON.\r\n */\r\nfunction jsonEval(str) {\r\n return JSON.parse(str);\r\n}\r\n/**\r\n * Returns JSON representing a javascript object.\r\n * @param {*} data Javascript object to be stringified.\r\n * @return {string} The JSON contents of the object.\r\n */\r\nfunction stringify(data) {\r\n return JSON.stringify(data);\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Decodes a Firebase auth. token into constituent parts.\r\n *\r\n * Notes:\r\n * - May return with invalid / incomplete claims if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {{header: *, claims: *, data: *, signature: string}}\r\n */\r\nvar decode = function (token) {\r\n var header = {}, claims = {}, data = {}, signature = '';\r\n try {\r\n var parts = token.split('.');\r\n header = jsonEval(base64Decode(parts[0]) || '');\r\n claims = jsonEval(base64Decode(parts[1]) || '');\r\n signature = parts[2];\r\n data = claims['d'] || {};\r\n delete claims['d'];\r\n }\r\n catch (e) { }\r\n return {\r\n header: header,\r\n claims: claims,\r\n data: data,\r\n signature: signature\r\n };\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its time-based claims. Will return true if the\r\n * token is within the time window authorized by the 'nbf' (not-before) and 'iat' (issued-at) claims.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {boolean}\r\n */\r\nvar isValidTimestamp = function (token) {\r\n var claims = decode(token).claims, now = Math.floor(new Date().getTime() / 1000), validSince, validUntil;\r\n if (typeof claims === 'object') {\r\n if (claims.hasOwnProperty('nbf')) {\r\n validSince = claims['nbf'];\r\n }\r\n else if (claims.hasOwnProperty('iat')) {\r\n validSince = claims['iat'];\r\n }\r\n if (claims.hasOwnProperty('exp')) {\r\n validUntil = claims['exp'];\r\n }\r\n else {\r\n // token will expire after 24h by default\r\n validUntil = validSince + 86400;\r\n }\r\n }\r\n return (now && validSince && validUntil && now >= validSince && now <= validUntil);\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and returns its issued at time if valid, null otherwise.\r\n *\r\n * Notes:\r\n * - May return null if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {?number}\r\n */\r\nvar issuedAtTime = function (token) {\r\n var claims = decode(token).claims;\r\n if (typeof claims === 'object' && claims.hasOwnProperty('iat')) {\r\n return claims['iat'];\r\n }\r\n return null;\r\n};\r\n/**\r\n * Decodes a Firebase auth. token and checks the validity of its format. Expects a valid issued-at time and non-empty\r\n * signature.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {boolean}\r\n */\r\nvar isValidFormat = function (token) {\r\n var decoded = decode(token), claims = decoded.claims;\r\n return (!!decoded.signature &&\r\n !!claims &&\r\n typeof claims === 'object' &&\r\n claims.hasOwnProperty('iat'));\r\n};\r\n/**\r\n * Attempts to peer into an auth token and determine if it's an admin auth token by looking at the claims portion.\r\n *\r\n * Notes:\r\n * - May return a false negative if there's no native base64 decoding support.\r\n * - Doesn't check if the token is actually valid.\r\n *\r\n * @param {?string} token\r\n * @return {boolean}\r\n */\r\nvar isAdmin = function (token) {\r\n var claims = decode(token).claims;\r\n return typeof claims === 'object' && claims['admin'] === true;\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// See http://www.devthought.com/2012/01/18/an-object-is-not-a-hash/\r\nvar contains = function (obj, key) {\r\n return Object.prototype.hasOwnProperty.call(obj, key);\r\n};\r\nvar safeGet = function (obj, key) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key))\r\n return obj[key];\r\n // else return undefined.\r\n};\r\n/**\r\n * Enumerates the keys/values in an object, excluding keys defined on the prototype.\r\n *\r\n * @param {?Object.} obj Object to enumerate.\r\n * @param {!function(K, V)} fn Function to call for each key and value.\r\n * @template K,V\r\n */\r\nvar forEach = function (obj, fn) {\r\n for (var key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n fn(key, obj[key]);\r\n }\r\n }\r\n};\r\n/**\r\n * Copies all the (own) properties from one object to another.\r\n * @param {!Object} objTo\r\n * @param {!Object} objFrom\r\n * @return {!Object} objTo\r\n */\r\nvar extend = function (objTo, objFrom) {\r\n forEach(objFrom, function (key, value) {\r\n objTo[key] = value;\r\n });\r\n return objTo;\r\n};\r\n/**\r\n * Returns a clone of the specified object.\r\n * @param {!Object} obj\r\n * @return {!Object} cloned obj.\r\n */\r\nvar clone = function (obj) {\r\n return extend({}, obj);\r\n};\r\n/**\r\n * Returns true if obj has typeof \"object\" and is not null. Unlike goog.isObject(), does not return true\r\n * for functions.\r\n *\r\n * @param obj {*} A potential object.\r\n * @returns {boolean} True if it's an object.\r\n */\r\nvar isNonNullObject = function (obj) {\r\n return typeof obj === 'object' && obj !== null;\r\n};\r\nvar isEmpty = function (obj) {\r\n for (var key in obj) {\r\n return false;\r\n }\r\n return true;\r\n};\r\nvar getCount = function (obj) {\r\n var rv = 0;\r\n for (var key in obj) {\r\n rv++;\r\n }\r\n return rv;\r\n};\r\nvar map = function (obj, f, opt_obj) {\r\n var res = {};\r\n for (var key in obj) {\r\n res[key] = f.call(opt_obj, obj[key], key, obj);\r\n }\r\n return res;\r\n};\r\nvar findKey = function (obj, fn, opt_this) {\r\n for (var key in obj) {\r\n if (fn.call(opt_this, obj[key], key, obj)) {\r\n return key;\r\n }\r\n }\r\n return undefined;\r\n};\r\nvar findValue = function (obj, fn, opt_this) {\r\n var key = findKey(obj, fn, opt_this);\r\n return key && obj[key];\r\n};\r\nvar getAnyKey = function (obj) {\r\n for (var key in obj) {\r\n return key;\r\n }\r\n};\r\nvar getValues = function (obj) {\r\n var res = [];\r\n var i = 0;\r\n for (var key in obj) {\r\n res[i++] = obj[key];\r\n }\r\n return res;\r\n};\r\n/**\r\n * Tests whether every key/value pair in an object pass the test implemented\r\n * by the provided function\r\n *\r\n * @param {?Object.} obj Object to test.\r\n * @param {!function(K, V)} fn Function to call for each key and value.\r\n * @template K,V\r\n */\r\nvar every = function (obj, fn) {\r\n for (var key in obj) {\r\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n if (!fn(key, obj[key])) {\r\n return false;\r\n }\r\n }\r\n }\r\n return true;\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Returns a querystring-formatted string (e.g. &arg=val&arg2=val2) from a params\r\n * object (e.g. {arg: 'val', arg2: 'val2'})\r\n * Note: You must prepend it with ? when adding it to a URL.\r\n *\r\n * @param {!Object} querystringParams\r\n * @return {string}\r\n */\r\nvar querystring = function (querystringParams) {\r\n var params = [];\r\n forEach(querystringParams, function (key, value) {\r\n if (Array.isArray(value)) {\r\n value.forEach(function (arrayVal) {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(arrayVal));\r\n });\r\n }\r\n else {\r\n params.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\r\n }\r\n });\r\n return params.length ? '&' + params.join('&') : '';\r\n};\r\n/**\r\n * Decodes a querystring (e.g. ?arg=val&arg2=val2) into a params object (e.g. {arg: 'val', arg2: 'val2'})\r\n *\r\n * @param {string} querystring\r\n * @return {!Object}\r\n */\r\nvar querystringDecode = function (querystring) {\r\n var obj = {};\r\n var tokens = querystring.replace(/^\\?/, '').split('&');\r\n tokens.forEach(function (token) {\r\n if (token) {\r\n var key = token.split('=');\r\n obj[key[0]] = key[1];\r\n }\r\n });\r\n return obj;\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Copyright 2011 The Closure Library Authors. All Rights Reserved.\r\n//\r\n// Licensed under the Apache License, Version 2.0 (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.apache.org/licenses/LICENSE-2.0\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS-IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n/**\r\n * @fileoverview Abstract cryptographic hash interface.\r\n *\r\n * See Sha1 and Md5 for sample implementations.\r\n *\r\n */\r\n/**\r\n * Create a cryptographic hash instance.\r\n *\r\n * @constructor\r\n * @struct\r\n */\r\nvar Hash = /** @class */ (function () {\r\n function Hash() {\r\n /**\r\n * The block size for the hasher.\r\n * @type {number}\r\n */\r\n this.blockSize = -1;\r\n }\r\n return Hash;\r\n}());\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @fileoverview SHA-1 cryptographic hash.\r\n * Variable names follow the notation in FIPS PUB 180-3:\r\n * http://csrc.nist.gov/publications/fips/fips180-3/fips180-3_final.pdf.\r\n *\r\n * Usage:\r\n * var sha1 = new sha1();\r\n * sha1.update(bytes);\r\n * var hash = sha1.digest();\r\n *\r\n * Performance:\r\n * Chrome 23: ~400 Mbit/s\r\n * Firefox 16: ~250 Mbit/s\r\n *\r\n */\r\n/**\r\n * SHA-1 cryptographic hash constructor.\r\n *\r\n * The properties declared here are discussed in the above algorithm document.\r\n * @constructor\r\n * @extends {Hash}\r\n * @final\r\n * @struct\r\n */\r\nvar Sha1 = /** @class */ (function (_super) {\r\n tslib_1.__extends(Sha1, _super);\r\n function Sha1() {\r\n var _this = _super.call(this) || this;\r\n /**\r\n * Holds the previous values of accumulated variables a-e in the compress_\r\n * function.\r\n * @type {!Array}\r\n * @private\r\n */\r\n _this.chain_ = [];\r\n /**\r\n * A buffer holding the partially computed hash result.\r\n * @type {!Array}\r\n * @private\r\n */\r\n _this.buf_ = [];\r\n /**\r\n * An array of 80 bytes, each a part of the message to be hashed. Referred to\r\n * as the message schedule in the docs.\r\n * @type {!Array}\r\n * @private\r\n */\r\n _this.W_ = [];\r\n /**\r\n * Contains data needed to pad messages less than 64 bytes.\r\n * @type {!Array}\r\n * @private\r\n */\r\n _this.pad_ = [];\r\n /**\r\n * @private {number}\r\n */\r\n _this.inbuf_ = 0;\r\n /**\r\n * @private {number}\r\n */\r\n _this.total_ = 0;\r\n _this.blockSize = 512 / 8;\r\n _this.pad_[0] = 128;\r\n for (var i = 1; i < _this.blockSize; ++i) {\r\n _this.pad_[i] = 0;\r\n }\r\n _this.reset();\r\n return _this;\r\n }\r\n Sha1.prototype.reset = function () {\r\n this.chain_[0] = 0x67452301;\r\n this.chain_[1] = 0xefcdab89;\r\n this.chain_[2] = 0x98badcfe;\r\n this.chain_[3] = 0x10325476;\r\n this.chain_[4] = 0xc3d2e1f0;\r\n this.inbuf_ = 0;\r\n this.total_ = 0;\r\n };\r\n /**\r\n * Internal compress helper function.\r\n * @param {!Array|!Uint8Array|string} buf Block to compress.\r\n * @param {number=} opt_offset Offset of the block in the buffer.\r\n * @private\r\n */\r\n Sha1.prototype.compress_ = function (buf, opt_offset) {\r\n if (!opt_offset) {\r\n opt_offset = 0;\r\n }\r\n var W = this.W_;\r\n // get 16 big endian words\r\n if (typeof buf === 'string') {\r\n for (var i = 0; i < 16; i++) {\r\n // TODO(user): [bug 8140122] Recent versions of Safari for Mac OS and iOS\r\n // have a bug that turns the post-increment ++ operator into pre-increment\r\n // during JIT compilation. We have code that depends heavily on SHA-1 for\r\n // correctness and which is affected by this bug, so I've removed all uses\r\n // of post-increment ++ in which the result value is used. We can revert\r\n // this change once the Safari bug\r\n // (https://bugs.webkit.org/show_bug.cgi?id=109036) has been fixed and\r\n // most clients have been updated.\r\n W[i] =\r\n (buf.charCodeAt(opt_offset) << 24) |\r\n (buf.charCodeAt(opt_offset + 1) << 16) |\r\n (buf.charCodeAt(opt_offset + 2) << 8) |\r\n buf.charCodeAt(opt_offset + 3);\r\n opt_offset += 4;\r\n }\r\n }\r\n else {\r\n for (var i = 0; i < 16; i++) {\r\n W[i] =\r\n (buf[opt_offset] << 24) |\r\n (buf[opt_offset + 1] << 16) |\r\n (buf[opt_offset + 2] << 8) |\r\n buf[opt_offset + 3];\r\n opt_offset += 4;\r\n }\r\n }\r\n // expand to 80 words\r\n for (var i = 16; i < 80; i++) {\r\n var t = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\r\n W[i] = ((t << 1) | (t >>> 31)) & 0xffffffff;\r\n }\r\n var a = this.chain_[0];\r\n var b = this.chain_[1];\r\n var c = this.chain_[2];\r\n var d = this.chain_[3];\r\n var e = this.chain_[4];\r\n var f, k;\r\n // TODO(user): Try to unroll this loop to speed up the computation.\r\n for (var i = 0; i < 80; i++) {\r\n if (i < 40) {\r\n if (i < 20) {\r\n f = d ^ (b & (c ^ d));\r\n k = 0x5a827999;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0x6ed9eba1;\r\n }\r\n }\r\n else {\r\n if (i < 60) {\r\n f = (b & c) | (d & (b | c));\r\n k = 0x8f1bbcdc;\r\n }\r\n else {\r\n f = b ^ c ^ d;\r\n k = 0xca62c1d6;\r\n }\r\n }\r\n var t = (((a << 5) | (a >>> 27)) + f + e + k + W[i]) & 0xffffffff;\r\n e = d;\r\n d = c;\r\n c = ((b << 30) | (b >>> 2)) & 0xffffffff;\r\n b = a;\r\n a = t;\r\n }\r\n this.chain_[0] = (this.chain_[0] + a) & 0xffffffff;\r\n this.chain_[1] = (this.chain_[1] + b) & 0xffffffff;\r\n this.chain_[2] = (this.chain_[2] + c) & 0xffffffff;\r\n this.chain_[3] = (this.chain_[3] + d) & 0xffffffff;\r\n this.chain_[4] = (this.chain_[4] + e) & 0xffffffff;\r\n };\r\n Sha1.prototype.update = function (bytes, opt_length) {\r\n // TODO(johnlenz): tighten the function signature and remove this check\r\n if (bytes == null) {\r\n return;\r\n }\r\n if (opt_length === undefined) {\r\n opt_length = bytes.length;\r\n }\r\n var lengthMinusBlock = opt_length - this.blockSize;\r\n var n = 0;\r\n // Using local instead of member variables gives ~5% speedup on Firefox 16.\r\n var buf = this.buf_;\r\n var inbuf = this.inbuf_;\r\n // The outer while loop should execute at most twice.\r\n while (n < opt_length) {\r\n // When we have no data in the block to top up, we can directly process the\r\n // input buffer (assuming it contains sufficient data). This gives ~25%\r\n // speedup on Chrome 23 and ~15% speedup on Firefox 16, but requires that\r\n // the data is provided in large chunks (or in multiples of 64 bytes).\r\n if (inbuf == 0) {\r\n while (n <= lengthMinusBlock) {\r\n this.compress_(bytes, n);\r\n n += this.blockSize;\r\n }\r\n }\r\n if (typeof bytes === 'string') {\r\n while (n < opt_length) {\r\n buf[inbuf] = bytes.charCodeAt(n);\r\n ++inbuf;\r\n ++n;\r\n if (inbuf == this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n while (n < opt_length) {\r\n buf[inbuf] = bytes[n];\r\n ++inbuf;\r\n ++n;\r\n if (inbuf == this.blockSize) {\r\n this.compress_(buf);\r\n inbuf = 0;\r\n // Jump to the outer loop so we use the full-block optimization.\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n this.inbuf_ = inbuf;\r\n this.total_ += opt_length;\r\n };\r\n /** @override */\r\n Sha1.prototype.digest = function () {\r\n var digest = [];\r\n var totalBits = this.total_ * 8;\r\n // Add pad 0x80 0x00*.\r\n if (this.inbuf_ < 56) {\r\n this.update(this.pad_, 56 - this.inbuf_);\r\n }\r\n else {\r\n this.update(this.pad_, this.blockSize - (this.inbuf_ - 56));\r\n }\r\n // Add # bits.\r\n for (var i = this.blockSize - 1; i >= 56; i--) {\r\n this.buf_[i] = totalBits & 255;\r\n totalBits /= 256; // Don't use bit-shifting here!\r\n }\r\n this.compress_(this.buf_);\r\n var n = 0;\r\n for (var i = 0; i < 5; i++) {\r\n for (var j = 24; j >= 0; j -= 8) {\r\n digest[n] = (this.chain_[i] >> j) & 255;\r\n ++n;\r\n }\r\n }\r\n return digest;\r\n };\r\n return Sha1;\r\n}(Hash));\n\n/**\r\n * Helper to make a Subscribe function (just like Promise helps make a\r\n * Thenable).\r\n *\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\nfunction createSubscribe(executor, onNoObservers) {\r\n var proxy = new ObserverProxy(executor, onNoObservers);\r\n return proxy.subscribe.bind(proxy);\r\n}\r\n/**\r\n * Implement fan-out for any number of Observers attached via a subscribe\r\n * function.\r\n */\r\nvar ObserverProxy = /** @class */ (function () {\r\n /**\r\n * @param executor Function which can make calls to a single Observer\r\n * as a proxy.\r\n * @param onNoObservers Callback when count of Observers goes to zero.\r\n */\r\n function ObserverProxy(executor, onNoObservers) {\r\n var _this = this;\r\n this.observers = [];\r\n this.unsubscribes = [];\r\n this.observerCount = 0;\r\n // Micro-task scheduling by calling task.then().\r\n this.task = Promise.resolve();\r\n this.finalized = false;\r\n this.onNoObservers = onNoObservers;\r\n // Call the executor asynchronously so subscribers that are called\r\n // synchronously after the creation of the subscribe function\r\n // can still receive the very first value generated in the executor.\r\n this.task\r\n .then(function () {\r\n executor(_this);\r\n })\r\n .catch(function (e) {\r\n _this.error(e);\r\n });\r\n }\r\n ObserverProxy.prototype.next = function (value) {\r\n this.forEachObserver(function (observer) {\r\n observer.next(value);\r\n });\r\n };\r\n ObserverProxy.prototype.error = function (error) {\r\n this.forEachObserver(function (observer) {\r\n observer.error(error);\r\n });\r\n this.close(error);\r\n };\r\n ObserverProxy.prototype.complete = function () {\r\n this.forEachObserver(function (observer) {\r\n observer.complete();\r\n });\r\n this.close();\r\n };\r\n /**\r\n * Subscribe function that can be used to add an Observer to the fan-out list.\r\n *\r\n * - We require that no event is sent to a subscriber sychronously to their\r\n * call to subscribe().\r\n */\r\n ObserverProxy.prototype.subscribe = function (nextOrObserver, error, complete) {\r\n var _this = this;\r\n var observer;\r\n if (nextOrObserver === undefined &&\r\n error === undefined &&\r\n complete === undefined) {\r\n throw new Error('Missing Observer.');\r\n }\r\n // Assemble an Observer object when passed as callback functions.\r\n if (implementsAnyMethods(nextOrObserver, ['next', 'error', 'complete'])) {\r\n observer = nextOrObserver;\r\n }\r\n else {\r\n observer = {\r\n next: nextOrObserver,\r\n error: error,\r\n complete: complete\r\n };\r\n }\r\n if (observer.next === undefined) {\r\n observer.next = noop;\r\n }\r\n if (observer.error === undefined) {\r\n observer.error = noop;\r\n }\r\n if (observer.complete === undefined) {\r\n observer.complete = noop;\r\n }\r\n var unsub = this.unsubscribeOne.bind(this, this.observers.length);\r\n // Attempt to subscribe to a terminated Observable - we\r\n // just respond to the Observer with the final error or complete\r\n // event.\r\n if (this.finalized) {\r\n this.task.then(function () {\r\n try {\r\n if (_this.finalError) {\r\n observer.error(_this.finalError);\r\n }\r\n else {\r\n observer.complete();\r\n }\r\n }\r\n catch (e) {\r\n // nothing\r\n }\r\n return;\r\n });\r\n }\r\n this.observers.push(observer);\r\n return unsub;\r\n };\r\n // Unsubscribe is synchronous - we guarantee that no events are sent to\r\n // any unsubscribed Observer.\r\n ObserverProxy.prototype.unsubscribeOne = function (i) {\r\n if (this.observers === undefined || this.observers[i] === undefined) {\r\n return;\r\n }\r\n delete this.observers[i];\r\n this.observerCount -= 1;\r\n if (this.observerCount === 0 && this.onNoObservers !== undefined) {\r\n this.onNoObservers(this);\r\n }\r\n };\r\n ObserverProxy.prototype.forEachObserver = function (fn) {\r\n if (this.finalized) {\r\n // Already closed by previous event....just eat the additional values.\r\n return;\r\n }\r\n // Since sendOne calls asynchronously - there is no chance that\r\n // this.observers will become undefined.\r\n for (var i = 0; i < this.observers.length; i++) {\r\n this.sendOne(i, fn);\r\n }\r\n };\r\n // Call the Observer via one of it's callback function. We are careful to\r\n // confirm that the observe has not been unsubscribed since this asynchronous\r\n // function had been queued.\r\n ObserverProxy.prototype.sendOne = function (i, fn) {\r\n var _this = this;\r\n // Execute the callback asynchronously\r\n this.task.then(function () {\r\n if (_this.observers !== undefined && _this.observers[i] !== undefined) {\r\n try {\r\n fn(_this.observers[i]);\r\n }\r\n catch (e) {\r\n // Ignore exceptions raised in Observers or missing methods of an\r\n // Observer.\r\n // Log error to console. b/31404806\r\n if (typeof console !== 'undefined' && console.error) {\r\n console.error(e);\r\n }\r\n }\r\n }\r\n });\r\n };\r\n ObserverProxy.prototype.close = function (err) {\r\n var _this = this;\r\n if (this.finalized) {\r\n return;\r\n }\r\n this.finalized = true;\r\n if (err !== undefined) {\r\n this.finalError = err;\r\n }\r\n // Proxy is no longer needed - garbage collect references\r\n this.task.then(function () {\r\n _this.observers = undefined;\r\n _this.onNoObservers = undefined;\r\n });\r\n };\r\n return ObserverProxy;\r\n}());\r\n/** Turn synchronous function into one called asynchronously. */\r\nfunction async(fn, onError) {\r\n return function () {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n Promise.resolve(true)\r\n .then(function () {\r\n fn.apply(void 0, args);\r\n })\r\n .catch(function (error) {\r\n if (onError) {\r\n onError(error);\r\n }\r\n });\r\n };\r\n}\r\n/**\r\n * Return true if the object passed in implements any of the named methods.\r\n */\r\nfunction implementsAnyMethods(obj, methods) {\r\n if (typeof obj !== 'object' || obj === null) {\r\n return false;\r\n }\r\n for (var _i = 0, methods_1 = methods; _i < methods_1.length; _i++) {\r\n var method = methods_1[_i];\r\n if (method in obj && typeof obj[method] === 'function') {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\nfunction noop() {\r\n // do nothing\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * Check to make sure the appropriate number of arguments are provided for a public function.\r\n * Throws an error if it fails.\r\n *\r\n * @param {!string} fnName The function name\r\n * @param {!number} minCount The minimum number of arguments to allow for the function call\r\n * @param {!number} maxCount The maximum number of argument to allow for the function call\r\n * @param {!number} argCount The actual number of arguments provided.\r\n */\r\nvar validateArgCount = function (fnName, minCount, maxCount, argCount) {\r\n var argError;\r\n if (argCount < minCount) {\r\n argError = 'at least ' + minCount;\r\n }\r\n else if (argCount > maxCount) {\r\n argError = maxCount === 0 ? 'none' : 'no more than ' + maxCount;\r\n }\r\n if (argError) {\r\n var error = fnName +\r\n ' failed: Was called with ' +\r\n argCount +\r\n (argCount === 1 ? ' argument.' : ' arguments.') +\r\n ' Expects ' +\r\n argError +\r\n '.';\r\n throw new Error(error);\r\n }\r\n};\r\n/**\r\n * Generates a string to prefix an error message about failed argument validation\r\n *\r\n * @param {!string} fnName The function name\r\n * @param {!number} argumentNumber The index of the argument\r\n * @param {boolean} optional Whether or not the argument is optional\r\n * @return {!string} The prefix to add to the error thrown for validation.\r\n */\r\nfunction errorPrefix(fnName, argumentNumber, optional) {\r\n var argName = '';\r\n switch (argumentNumber) {\r\n case 1:\r\n argName = optional ? 'first' : 'First';\r\n break;\r\n case 2:\r\n argName = optional ? 'second' : 'Second';\r\n break;\r\n case 3:\r\n argName = optional ? 'third' : 'Third';\r\n break;\r\n case 4:\r\n argName = optional ? 'fourth' : 'Fourth';\r\n break;\r\n default:\r\n throw new Error('errorPrefix called with argumentNumber > 4. Need to update it?');\r\n }\r\n var error = fnName + ' failed: ';\r\n error += argName + ' argument ';\r\n return error;\r\n}\r\n/**\r\n * @param {!string} fnName\r\n * @param {!number} argumentNumber\r\n * @param {!string} namespace\r\n * @param {boolean} optional\r\n */\r\nfunction validateNamespace(fnName, argumentNumber, namespace, optional) {\r\n if (optional && !namespace)\r\n return;\r\n if (typeof namespace !== 'string') {\r\n //TODO: I should do more validation here. We only allow certain chars in namespaces.\r\n throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n 'must be a valid firebase namespace.');\r\n }\r\n}\r\nfunction validateCallback(fnName, argumentNumber, callback, optional) {\r\n if (optional && !callback)\r\n return;\r\n if (typeof callback !== 'function')\r\n throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n 'must be a valid function.');\r\n}\r\nfunction validateContextObject(fnName, argumentNumber, context, optional) {\r\n if (optional && !context)\r\n return;\r\n if (typeof context !== 'object' || context === null)\r\n throw new Error(errorPrefix(fnName, argumentNumber, optional) +\r\n 'must be a valid context object.');\r\n}\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n// Code originally came from goog.crypt.stringToUtf8ByteArray, but for some reason they\r\n// automatically replaced '\\r\\n' with '\\n', and they didn't handle surrogate pairs,\r\n// so it's been modified.\r\n// Note that not all Unicode characters appear as single characters in JavaScript strings.\r\n// fromCharCode returns the UTF-16 encoding of a character - so some Unicode characters\r\n// use 2 characters in Javascript. All 4-byte UTF-8 characters begin with a first\r\n// character in the range 0xD800 - 0xDBFF (the first character of a so-called surrogate\r\n// pair).\r\n// See http://www.ecma-international.org/ecma-262/5.1/#sec-15.1.3\r\n/**\r\n * @param {string} str\r\n * @return {Array}\r\n */\r\nvar stringToByteArray$1 = function (str) {\r\n var out = [], p = 0;\r\n for (var i = 0; i < str.length; i++) {\r\n var c = str.charCodeAt(i);\r\n // Is this the lead surrogate in a surrogate pair?\r\n if (c >= 0xd800 && c <= 0xdbff) {\r\n var high = c - 0xd800; // the high 10 bits.\r\n i++;\r\n assert(i < str.length, 'Surrogate pair missing trail surrogate.');\r\n var low = str.charCodeAt(i) - 0xdc00; // the low 10 bits.\r\n c = 0x10000 + (high << 10) + low;\r\n }\r\n if (c < 128) {\r\n out[p++] = c;\r\n }\r\n else if (c < 2048) {\r\n out[p++] = (c >> 6) | 192;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else if (c < 65536) {\r\n out[p++] = (c >> 12) | 224;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n else {\r\n out[p++] = (c >> 18) | 240;\r\n out[p++] = ((c >> 12) & 63) | 128;\r\n out[p++] = ((c >> 6) & 63) | 128;\r\n out[p++] = (c & 63) | 128;\r\n }\r\n }\r\n return out;\r\n};\r\n/**\r\n * Calculate length without actually converting; useful for doing cheaper validation.\r\n * @param {string} str\r\n * @return {number}\r\n */\r\nvar stringLength = function (str) {\r\n var p = 0;\r\n for (var i = 0; i < str.length; i++) {\r\n var c = str.charCodeAt(i);\r\n if (c < 128) {\r\n p++;\r\n }\r\n else if (c < 2048) {\r\n p += 2;\r\n }\r\n else if (c >= 0xd800 && c <= 0xdbff) {\r\n // Lead surrogate of a surrogate pair. The pair together will take 4 bytes to represent.\r\n p += 4;\r\n i++; // skip trail surrogate.\r\n }\r\n else {\r\n p += 3;\r\n }\r\n }\r\n return p;\r\n};\n\n/**\r\n * Copyright 2017 Google Inc.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\n\nexports.assert = assert;\nexports.assertionError = assertionError;\nexports.base64 = base64;\nexports.base64Decode = base64Decode;\nexports.base64Encode = base64Encode;\nexports.CONSTANTS = CONSTANTS;\nexports.deepCopy = deepCopy;\nexports.deepExtend = deepExtend;\nexports.patchProperty = patchProperty;\nexports.Deferred = Deferred;\nexports.getUA = getUA;\nexports.isMobileCordova = isMobileCordova;\nexports.isNodeSdk = isNodeSdk;\nexports.isReactNative = isReactNative;\nexports.ErrorFactory = ErrorFactory;\nexports.FirebaseError = FirebaseError;\nexports.patchCapture = patchCapture;\nexports.jsonEval = jsonEval;\nexports.stringify = stringify;\nexports.decode = decode;\nexports.isAdmin = isAdmin;\nexports.issuedAtTime = issuedAtTime;\nexports.isValidFormat = isValidFormat;\nexports.isValidTimestamp = isValidTimestamp;\nexports.clone = clone;\nexports.contains = contains;\nexports.every = every;\nexports.extend = extend;\nexports.findKey = findKey;\nexports.findValue = findValue;\nexports.forEach = forEach;\nexports.getAnyKey = getAnyKey;\nexports.getCount = getCount;\nexports.getValues = getValues;\nexports.isEmpty = isEmpty;\nexports.isNonNullObject = isNonNullObject;\nexports.map = map;\nexports.safeGet = safeGet;\nexports.querystring = querystring;\nexports.querystringDecode = querystringDecode;\nexports.Sha1 = Sha1;\nexports.async = async;\nexports.createSubscribe = createSubscribe;\nexports.errorPrefix = errorPrefix;\nexports.validateArgCount = validateArgCount;\nexports.validateCallback = validateCallback;\nexports.validateContextObject = validateContextObject;\nexports.validateNamespace = validateNamespace;\nexports.stringLength = stringLength;\nexports.stringToByteArray = stringToByteArray$1;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/@firebase/util/dist/index.cjs.js\n// module id = 132\n// module chunks = 64016405352682","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nrequire('@firebase/polyfill');\nmodule.exports = require('@firebase/app').default;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/firebase/app/index.js\n// module id = 578\n// module chunks = 64016405352682","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nrequire('@firebase/auth');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/firebase/auth/index.js\n// module id = 579\n// module chunks = 64016405352682","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nmodule.exports = require('@firebase/database');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/firebase/database/index.js\n// module id = 580\n// module chunks = 64016405352682","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar firebase = require('./app');\nrequire('./auth');\nrequire('./database');\nrequire('./messaging');\nrequire('./storage');\n\nmodule.exports = firebase;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/firebase/index.js\n// module id = 581\n// module chunks = 64016405352682","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nrequire('@firebase/messaging');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/firebase/messaging/index.js\n// module id = 582\n// module chunks = 64016405352682","/**\n * Copyright 2017 Google Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nrequire('@firebase/storage');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/firebase/storage/index.js\n// module id = 583\n// module chunks = 64016405352682","/*!\n * JavaScript Cookie v2.2.0\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;(function (factory) {\n\tvar registeredInModuleLoader = false;\n\tif (typeof define === 'function' && define.amd) {\n\t\tdefine(factory);\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (typeof exports === 'object') {\n\t\tmodule.exports = factory();\n\t\tregisteredInModuleLoader = true;\n\t}\n\tif (!registeredInModuleLoader) {\n\t\tvar OldCookies = window.Cookies;\n\t\tvar api = window.Cookies = factory();\n\t\tapi.noConflict = function () {\n\t\t\twindow.Cookies = OldCookies;\n\t\t\treturn api;\n\t\t};\n\t}\n}(function () {\n\tfunction extend () {\n\t\tvar i = 0;\n\t\tvar result = {};\n\t\tfor (; i < arguments.length; i++) {\n\t\t\tvar attributes = arguments[ i ];\n\t\t\tfor (var key in attributes) {\n\t\t\t\tresult[key] = attributes[key];\n\t\t\t}\n\t\t}\n\t\treturn result;\n\t}\n\n\tfunction init (converter) {\n\t\tfunction api (key, value, attributes) {\n\t\t\tvar result;\n\t\t\tif (typeof document === 'undefined') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Write\n\n\t\t\tif (arguments.length > 1) {\n\t\t\t\tattributes = extend({\n\t\t\t\t\tpath: '/'\n\t\t\t\t}, api.defaults, attributes);\n\n\t\t\t\tif (typeof attributes.expires === 'number') {\n\t\t\t\t\tvar expires = new Date();\n\t\t\t\t\texpires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n\t\t\t\t\tattributes.expires = expires;\n\t\t\t\t}\n\n\t\t\t\t// We're using \"expires\" because \"max-age\" is not supported by IE\n\t\t\t\tattributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n\t\t\t\ttry {\n\t\t\t\t\tresult = JSON.stringify(value);\n\t\t\t\t\tif (/^[\\{\\[]/.test(result)) {\n\t\t\t\t\t\tvalue = result;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\n\t\t\t\tif (!converter.write) {\n\t\t\t\t\tvalue = encodeURIComponent(String(value))\n\t\t\t\t\t\t.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n\t\t\t\t} else {\n\t\t\t\t\tvalue = converter.write(value, key);\n\t\t\t\t}\n\n\t\t\t\tkey = encodeURIComponent(String(key));\n\t\t\t\tkey = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n\t\t\t\tkey = key.replace(/[\\(\\)]/g, escape);\n\n\t\t\t\tvar stringifiedAttributes = '';\n\n\t\t\t\tfor (var attributeName in attributes) {\n\t\t\t\t\tif (!attributes[attributeName]) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '; ' + attributeName;\n\t\t\t\t\tif (attributes[attributeName] === true) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tstringifiedAttributes += '=' + attributes[attributeName];\n\t\t\t\t}\n\t\t\t\treturn (document.cookie = key + '=' + value + stringifiedAttributes);\n\t\t\t}\n\n\t\t\t// Read\n\n\t\t\tif (!key) {\n\t\t\t\tresult = {};\n\t\t\t}\n\n\t\t\t// To prevent the for loop in the first place assign an empty array\n\t\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t\t// calling \"get()\"\n\t\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\t\t\tvar rdecode = /(%[0-9A-Z]{2})+/g;\n\t\t\tvar i = 0;\n\n\t\t\tfor (; i < cookies.length; i++) {\n\t\t\t\tvar parts = cookies[i].split('=');\n\t\t\t\tvar cookie = parts.slice(1).join('=');\n\n\t\t\t\tif (!this.json && cookie.charAt(0) === '\"') {\n\t\t\t\t\tcookie = cookie.slice(1, -1);\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tvar name = parts[0].replace(rdecode, decodeURIComponent);\n\t\t\t\t\tcookie = converter.read ?\n\t\t\t\t\t\tconverter.read(cookie, name) : converter(cookie, name) ||\n\t\t\t\t\t\tcookie.replace(rdecode, decodeURIComponent);\n\n\t\t\t\t\tif (this.json) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tcookie = JSON.parse(cookie);\n\t\t\t\t\t\t} catch (e) {}\n\t\t\t\t\t}\n\n\t\t\t\t\tif (key === name) {\n\t\t\t\t\t\tresult = cookie;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (!key) {\n\t\t\t\t\t\tresult[name] = cookie;\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\n\t\t\treturn result;\n\t\t}\n\n\t\tapi.set = api;\n\t\tapi.get = function (key) {\n\t\t\treturn api.call(api, key);\n\t\t};\n\t\tapi.getJSON = function () {\n\t\t\treturn api.apply({\n\t\t\t\tjson: true\n\t\t\t}, [].slice.call(arguments));\n\t\t};\n\t\tapi.defaults = {};\n\n\t\tapi.remove = function (key, attributes) {\n\t\t\tapi(key, '', extend(attributes, {\n\t\t\t\texpires: -1\n\t\t\t}));\n\t\t};\n\n\t\tapi.withConverter = init;\n\n\t\treturn api;\n\t}\n\n\treturn init(function () {});\n}));\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/js-cookie/src/js.cookie.js\n// module id = 606\n// module chunks = 64016405352682","// This method of obtaining a reference to the global object needs to be\n// kept identical to the way it is obtained in runtime.js\nvar g = (function() { return this })() || Function(\"return this\")();\n\n// Use `getOwnPropertyNames` because not all browsers support calling\n// `hasOwnProperty` on the global `self` object in a worker. See #183.\nvar hadRuntime = g.regeneratorRuntime &&\n Object.getOwnPropertyNames(g).indexOf(\"regeneratorRuntime\") >= 0;\n\n// Save the old regeneratorRuntime in case it needs to be restored later.\nvar oldRuntime = hadRuntime && g.regeneratorRuntime;\n\n// Force reevalutation of runtime.js.\ng.regeneratorRuntime = undefined;\n\nmodule.exports = require(\"./runtime\");\n\nif (hadRuntime) {\n // Restore the original runtime.\n g.regeneratorRuntime = oldRuntime;\n} else {\n // Remove the global property added by runtime.js.\n try {\n delete g.regeneratorRuntime;\n } catch(e) {\n g.regeneratorRuntime = undefined;\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/regenerator-runtime/runtime-module.js\n// module id = 660\n// module chunks = 64016405352682","/**\n * Copyright (c) 2014, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * https://raw.github.com/facebook/regenerator/master/LICENSE file. An\n * additional grant of patent rights can be found in the PATENTS file in\n * the same directory.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration. If the Promise is rejected, however, the\n // result for this iteration will be rejected with the same\n // reason. Note that rejections of yielded Promises are not\n // thrown back into the generator function, as is the case\n // when an awaited Promise is rejected. This difference in\n // behavior between yield and await is important, because it\n // allows the consumer to decide what to do with the yielded\n // rejection (swallow it and continue, manually .throw it back\n // into the generator, abandon iteration, whatever). With\n // await, by contrast, there is no opportunity to examine the\n // rejection reason outside the generator function, so the\n // only option is to throw it from the await expression, and\n // let the generator function handle the exception.\n result.value = unwrapped;\n resolve(result);\n }, reject);\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // In sloppy mode, unbound `this` refers to the global object, fallback to\n // Function constructor if we're in global strict mode. That is sadly a form\n // of indirect eval which violates Content Security Policy.\n (function() { return this })() || Function(\"return this\")()\n);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./~/regenerator-runtime/runtime.js\n// module id = 661\n// module chunks = 64016405352682","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a