firebase / firebase-js-sdk

Firebase Javascript SDK
https://firebase.google.com/docs/web/setup
Other
4.74k stars 868 forks source link

RFC: Usage of experimentalForceLongPolling option. #1674

Open mikelehen opened 5 years ago

mikelehen commented 5 years ago

Are you experiencing the error Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds despite your network seeming healthy? Please visit https://debug-my.firebaseapp.com/ and check the results at the end. If the tests "with default options" fail (or are very slow) but the "with forceLongPolling" ones succeed, then this indicates your traffic is likely going through a proxy that is buffering responses in a way that is not compatible with Firestore.

As a workaround, you can force long-polling as follows:

firebase.firestore().settings({ experimentalForceLongPolling: true });

Have you enabled experimentalForceLongPolling and experimentalAutoDetectLongPolling to solve a reproducible connection issue related to a specific environment?

We would like to know:

  1. What environment causes the problem (app platform, antivirus software, network proxy, network conditions, etc.)?
  2. What is the behavior without experimentalForceLongPolling or experimentalAutoDetectLongPolling?
  3. Does experimentalAutoDetectLongPolling completely resolve the issue?
  4. Does experimentalForceLongPolling completely resolve the issue?
  5. Please visit https://debug-my.firebaseapp.com/, wait for "All tests done" (about 60 seconds), paste the results into a gist, and paste the link in your comment.

If there is an existing comment concerning the environment you are using, feel free to just add a 👍 to it.

catchshyam commented 3 years ago

@wenbozhu Browser: Chrome 86.0.4240.75 OS: Windows 10 Bullguard Premium Version: 21.0.385.9 with Safe Browsing feature turned on (this would be on by default)

Let me know if you need any further details.

shahyash62 commented 3 years ago

@mikelehen

What environment causes the problem (app platform, antivirus software, network proxy, network conditions, etc.)? React-Native / Windows defender / No proxy / Network conditions: excellent. "dependencies": { "@react-native-community/masked-view": "^0.1.10", "@react-navigation/native": "^5.8.6", "@react-navigation/stack": "^5.12.4", "axios": "^0.21.0", "firebase": "^8.0.1", "react": "16.13.1", "react-native": "0.63.3", "react-native-gesture-handler": "^1.8.0", "react-native-paper": "^4.3.1", "react-native-reanimated": "^1.13.1", "react-native-safe-area-context": "^3.1.8", "react-native-screens": "^2.13.0", "react-native-vector-icons": "^7.1.0" } What is the behavior without experimentalForceLongPolling? Getting this error @firebase/firestore: Firestore (8.0.1): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend.

Does experimentalForceLongPolling completely resolve the issue? Yes, it seems so. Although the data is still fetched almost immediately (definitely in under 10s), and yet the call fails when I am not using this setting.

Please visit https://debug-my.firebaseapp.com/, wait for "All tests done" (about 60 seconds), paste the results into a gist, and paste the link in your comment. https://gist.github.com/shahyash62/4c90c412309de5673d9b3e15046b608a

ElaineSchwner commented 3 years ago

HTTP proxies, or network hardware, all that's trying to evaluate the whole payload of an HTTP response before allowing any of it through. Firestore's default mechanism for pushing updates from the server sends multiple logical updates in the same HTTP response. What experimentalForceLongPolling does is to restrict the server from sending only a single update per HTTP response. The server then waits until it gets another request from the client to send the next update.

The performance penalty falls out of that description: it's one round trip per update. On fast networks proximate to the Firestore instance, this isn't something you'll notice. On slow networks or configurations traveling a long distance to the server it's more of an issue.

As noted elsewhere, we're working on adding code that auto-detects this condition.

Oh I understand. My apps doesn`t work with Samsung J6, and it connects only with 2.4Ghz Wi-fi.

Benny739 commented 3 years ago

With experimentalAutoDetectLongPolling I'm getting lots of couldn't reach cloud firestore in 10 seconds errors. With the flag disabled everything works fine, so it looks like the flag influences the standard mode.

Jennnnny commented 3 years ago

@rafikhan thanks for the update. The easiest way I reproduce the issue and test is with BullGuard antivirus. I just upgraded to firebase 7.24.0 and tested my app. My finding are the following,

With experimentalAutoDetectLongPolling flag on: I no longer see the error message "unable to reach firebase backend" on the browser console. However, the app still takes close to a minute to boot up.

With experimentalForceLongPolling flag on: No errors like the previous flag and app boots up with in a matter of seconds.

So I guess the new flag is in the right direction but still there is scope for further optimization.

Thanks!

From the gist you posted in this comment the very first POST request of webchannel failed to get any response and was terminated after 20s..we don't know the reason though. However, such kind of logs can be very helpful for us to debug. Do you have similar logs for experimentalForceLongPolling mode and experimentalAutoDetectLongPolling mode?

chenlevy commented 3 years ago

Just encountered the exact same problem on my PC using experimentalAutoDetectLongPolling: true here is the debug gist: https://gist.github.com/chenlevy/af308e5fd288ba383abd43110a3e5d25 tell me if there is anything else I can do.

pimmee commented 3 years ago

I have some users that are experiencing this issue. A user gets the following error on my site: image image

And with the following result on your test site: image

With experimentalForceLongPolling flag on: Unreliable/slow connection. But the user is able to access the site

With experimentalAutoDetectLongPolling flag on: Mostly good connection but sometimes the connection fails with the following error: image

It seems like these options are not stable enough yet, and my only option at this point seems to be to ignore the users not able to visit the site.

Update: The connection error with experimentalAutoDetectLongPolling turned on seems to occur when multiple tabs are open. When I close other tabs and refresh the page, the connection works.

Jennnnny commented 3 years ago

Just encountered the exact same problem on my PC using experimentalAutoDetectLongPolling: true here is the debug gist: https://gist.github.com/chenlevy/af308e5fd288ba383abd43110a3e5d25 tell me if there is anything else I can do.

Hi! I'm not from Firebase team, but I can help you with the webchannel stuff(the underlying connection) here.

For the first three tests of this gist, the very first POST request of webchannel failed. It's more like something wrong with the testing connection https://webchannel.googleapis.com, https://webchannel.sandbox.google.com, because from my knowledge of webchannel, such kind of failure is unrelated to longpolling... And if my understanding is correct, the flag 'experimentalAutoDetectLongPolling' is not tested in those tests, right?

I suppose https://webchannel.googleapis.com, etc are testing connections for debugging provided by Firebase? Did you get the error message using 'experimentalAutoDetectLongPolling' with this testing connection, or the connection of your own apps?

scottfr commented 3 years ago

We're seeing significantly delays in the initial connection when enabling experimentalAutoDetectLongPolling when running in a Gitlab CI/CD Docker container. Hard to say how long but probably on the order of a minute or so.

There are no delays when using the force long polling option or not setting anything at all.

chenlevy commented 3 years ago

Just encountered the exact same problem on my PC using experimentalAutoDetectLongPolling: true here is the debug gist: https://gist.github.com/chenlevy/af308e5fd288ba383abd43110a3e5d25 tell me if there is anything else I can do.

Hi! I'm not from Firebase team, but I can help you with the webchannel stuff(the underlying connection) here.

For the first three tests of this gist, the very first POST request of webchannel failed. It's more like something wrong with the testing connection https://webchannel.googleapis.com, https://webchannel.sandbox.google.com, because from my knowledge of webchannel, such kind of failure is unrelated to longpolling... And if my understanding is correct, the flag 'experimentalAutoDetectLongPolling' is not tested in those tests, right?

I suppose https://webchannel.googleapis.com, etc are testing connections for debugging provided by Firebase? Did you get the error message using 'experimentalAutoDetectLongPolling' with this testing connection, or the connection of your own apps?

Thanks for your reply, actually the 'experimentalAutoDetectLongPolling: true' flag was tested in those tests. I was able to reproduce it on my dev machine occasionally and some of my users are also experiencing this issue. Any news about this? I'm thinking about completely remove any direct calls to firebase in my code and to access the data through api. It'll take a lot of effort so I prefer not to do so, Does the Firebase team has any news about this issue or how to solve/workaround it?

rafikhan commented 3 years ago

Update from Firebase Hi everyone, thanks for being patient. This issue is definitely a priority and we have been internally discussing how to move it forward. As of right now we need more detailed logging from the networking library we use to talk to the backend (WebChannel).

To get this data we'd like to ask those of you experiencing the one minute delay when using experimentalAutoDetectLongPolling to deploy a special Firebase SDK that automatically logs detailed network traffic and share the contents back with us. You can download it via npm install firebase@longpoll which includes Firebase 8.2.2.

Please give this a try. Thank you.

Tag: @scottfr @chenlevy @pimmee @Benny739 @catchshyam

squinn commented 3 years ago

I'm also struggling with this issue in one of our larger apps, and specifically am running into trouble with folks that have the parent control software from qustodio.com installed on their computer. For my users, even if they have Qustodio set to allow all traffic through, they run into this "Backend didn't respond within 10 seconds" error when trying to access our app. If they instead completely turn off Qustodio, then everything works fine. We tried using the "experimentalAutoDetectLongPolling" option, which did not resolve the issue. If we instead use the "experimentalForceLongPolling" option it does resolve the issue, but we'd prefer not to make 'long polling' the default approach for all of our users due to the performance trade offs.

We'll see if we can enable in our app the special SDK requested in the prior post, but I wanted to share in the meantime that installing Qustodio is an easy way to consistently reproduce at least one use case where the "experimentalAutoDetectLongPolling" option doesn't seem to do the trick.

Thank you for your efforts in this! I'm one of the many big Firebase fans. :-)

nikhilag commented 3 years ago

We are seeing this issue quite frequently in production (logged via sentry). We developed an ecommerce site for our client where we use firestore to track inventory and prices in real-time. The client went through some heat maps and found that prices weren't loading in some cases and via sentry we confirmed that a few visitors encounter "Could not reach firestore backend..." issue everyday. image

After coming across this thread, I turned on the setting experimentalAutoDetectLongPolling but it didn't make any difference. Can someone please suggest a workaround or a fix? It's very important that we fix this urgently to prevent our client from losing potential customers. I suppose calling firestore via cloud function will be more reliable since that will be over http. However that will require us to make several changes since we depend quite a bit on the real-time benefits of firestore.

rafikhan commented 3 years ago

@nikhilag - Have you tried using experimentalForceLongPolling? It's a temporary workaround while we get auto detection working.

nikhilag commented 3 years ago

Thanks @rafikhan. I just deployed with this setting. Will update here again after a day to check if it worked.

nikhilag commented 3 years ago

@rafikhan It doesn't seem experimentalForceLongPolling worked for me either. I still got similar no. of issues in Sentry today. It could be our site is experiencing some issue which is unrelated to this thread.

rafikhan commented 3 years ago

@nikhilag Can you tell us anything about the network connection your users are on that might be hitting this issue? How reliable is it? Is it 4G, etc.?

nikhilag commented 3 years ago

@rafikhan I don't have the data on the network connection but most people seem to be on 4g based on the heat maps. Everything in the site loads properly except for the prices from firestore. I saw a very high number of "Could not reach Cloud Firestore backend" issues today.

nikhilag commented 3 years ago

It seems to me that this is a hard issue to solve. I came across multiple issues online and none of them have a good solution:-

https://github.com/firebase/firebase-android-sdk/issues/1794 - July 21, 2020 https://github.com/firebase/firebase-android-sdk/issues/1790 - July 20, 2020 https://github.com/firebase/firebase-js-sdk/issues/2923 - April 16, 2020 https://github.com/firebase/firebase-js-sdk/issues/1457 - Jan 8, 2019 https://groups.google.com/g/firebase-talk/c/uLRHxgqtQaE?pli=1 - June 17, 2020

I suppose I have to start using cloud functions to pull data from firestore and I can just use polling to keep the data up to date. I think firestore realtime feature is awesome but I need to solve this issue for our client urgently and it seems rest api might be my best bet. One problem with cloud function is that the cold start takes too long. I can use cloud run with minimum one instance running to ensure better response time. If there's any alternative strategy I can try, please let me know. Thanks!

benomatis commented 3 years ago

What environment causes the problem (app platform, antivirus software, network proxy, network conditions, etc.)?

What is the behavior without experimentalForceLongPolling?

Does experimentalForceLongPolling completely resolve the issue?

Please visit https://debug-my.firebaseapp.com/, wait for "All tests done" (about 60 seconds), paste the results into a gist, and paste the link in your comment.

rafikhan commented 3 years ago

Thank you so much for publishing your log! We made some recent changes to the debugging tool at https://debug-my.firebaseapp.com/ . Can you please use it again and submit a new gist?

@scottfr @chenlevy @pimmee @Benny739 @catchshyam - It would be super helpful if you could do the same.

benomatis commented 3 years ago

@rafikhan something I wanted to ask: I'm betting the debugging tool should be run (in my case) in the Emulator's browser, correct? Does it matter if experimentalForceLongPolling is set in my app running on the same device?

rafikhan commented 3 years ago

@benomatis yes, in your case use the emulator's browser. The setting between each firestore instance is independent. It shouldn't interfere. If there's an issue we'll see it in the logs.

benomatis commented 3 years ago

@rafikhan I updated my comment with the new logs. Thanks for your support!

rafikhan commented 3 years ago

The output looks like it was still from the old tool. I think the caching on the tool was not setup correctly. Can you clear the browser cache (or do hard reload) on your emulator and try again?

benomatis commented 3 years ago

@rafikhan I ran it again after cache clear, edited my comment with the new gist link.

rafikhan commented 3 years ago

@benomatis the debug page shows a healthy connection to the outside world which suggests the issue is something specific within your app. Are you using libraries that hook into network calls like sentry.io, etc.?

benomatis commented 3 years ago

@rafikhan No, not really, the stripe 3rd party package I use has not been implemented at the time I experienced the issue.

Here is my dependency list for reference, if that helps: https://gist.github.com/benomatis/2449edacd2a900b03eb8cefe1fac87f9

rafikhan commented 3 years ago

Hi @benomatis - Can you update your react native app to use experimentalAutoDetectLongPolling and let us know what the observed behavior is? Thank you.

benomatis commented 3 years ago

@rafikhan It completely resolves the the issue. Previously the app could not connect to firebase, with this setting on it now can. This is an Android-only issue, though I guess this might have been self-explanatory to some already.

MarkChrisLevy commented 2 years ago

Hi, I wanted to let you know about my observations related to this issue.

Generally default settings are ok for most users, but as you already know there are some specific networks or maybe other network environment settings that cause connection problems for some users. When we changed firestore settings to experimentalAutoDetectLongPolling it worked for the users, that had connection problems before, but... for many other users, that didn't have any issues with the connection we noticed that error "Could not reach Cloud Firestore backend" was thrown quite often. So we switched to experimentalForceLongPolling and all the issues was gone.

So it seems that experimentalAutoDetectLongPolling is working, but introduce another problem. We check that with firebase-js 8.4.2 and 8.6.7.

TGRHavoc commented 2 years ago

Hey, I've been having the issue described in the original comment when using firebase emulators (so, all network connections should be local).

Hopefully the information provided is useful?

What environment causes the problem (app platform, antivirus software, network proxy, network conditions, etc.)?

Firebase (npm module used in React.js): 8.6.8 Antivirus: Windows, Sophos. As far as I can tell, these don't detect anything suspicious Network: It's all on the same PC so network connection should be ideal. All connections to the actual firebase api works perfectly I've documented the experience on StackOverflow in the hopes others could help (I've only just found this issue after hours of searching).

What is the behavior without experimentalForceLongPolling or experimentalAutoDetectLongPolling?

Connections to a specific firestore endpoint never completes (except if I manually go to the URL in another tab). URL: http://localhost:8081/google.firestore.v1.Firestore/Listen/channel?database=projects%2Fmy-project%2Fdatabases%2F(default)&VER=8&RID=rpc&SID=FgqppSIdbuIaPmABDJD6fA%3D%3D&CI=0&AID=0&TYPE=xmlhttp&zx=yzaslurbjssn&t=1

Does experimentalAutoDetectLongPolling completely resolve the issue? Does experimentalForceLongPolling completely resolve the issue?

As far as I can tell, yes. Haven't completely tested it yet as its getting late but, a quick looks suggests adding these settings have fixed the issue.

Please visit https://debug-my.firebaseapp.com/, wait for "All tests done" (about 60 seconds), paste the results into a gist, and paste the link in your comment.

I don't think this is necessary as only the local emulators seems to cause this issue. In regards to that, if this is the wrong place to be posting this comment, I appologise.

Edit: It may be a Windows problem or, a configuration issue on my specific machine. I booted up a Linux VM and it seems that it works perfectly without the experimental function calls...

fitterman commented 2 years ago

What environment causes the problem (app platform, antivirus software, network proxy, network conditions, etc.)?

I have an app built with Expo and it's been working fine. I exported the code ( expo run:android) and immediately could not connect to Firestore from the app, both on real devices (Pixel 2) and an emulator (Pixel 4a running on 64-bit emulator, v 30.7.5-7491168 on a Mac). It is set up to use Android Studio HTTP proxy.

What is the behavior without experimentalForceLongPolling or experimentalAutoDetectLongPolling?

I get this error: "@firebase/firestore: Firestore (8.7.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend."

Does experimentalAutoDetectLongPolling completely resolve the issue?

It seemed to work sometimes after restarting the app. It's using react native so sometimes just editing the change and saving it would cause the JS to reload and then the app got past the error. Deleting the entire storage of the app and forcing it to go through the complete initialize would never succeed.

Does experimentalForceLongPolling completely resolve the issue?

Yes, although I've only been able to test a little thus far today. It definitely has been consistently successful thus far.

Please visit https://debug-my.firebaseapp.com/

I ran the requested URL, above, on from Chrome on the emulated device and no tests failed. https://gist.github.com/fitterman/d6d61adf2ad527cec5accbad0d0353d7

I did try it from the Mac (Firefox) that the emulator is on and one test failed. I am not sure this is relevant: https://gist.github.com/fitterman/6e3c7949f2875405e1035491dff0399f

tgangso commented 2 years ago

Hi, I wanted to let you know about my observations related to this issue.

Generally default settings are ok for most users, but as you already know there are some specific networks or maybe other network environment settings that cause connection problems for some users. When we changed firestore settings to experimentalAutoDetectLongPolling it worked for the users, that had connection problems before, but... for many other users, that didn't have any issues with the connection we noticed that error "Could not reach Cloud Firestore backend" was thrown quite often. So we switched to experimentalForceLongPolling and all the issues was gone.

So it seems that experimentalAutoDetectLongPolling is working, but introduce another problem. We check that with firebase-js 8.4.2 and 8.6.7.

This is my experience with experimentalAutoDetectLongPolling aswell. And not hard to reproduce this error, just refresh the app a few times and it randomly happends.

alexstanbury commented 2 years ago

We are having this issue, experimentalAutoDetectLongPolling does not help but experimentalForceLongPolling does. With limited testing we haven't noticed any performance impact with long polling enabled, can you shed some more light on what sort of performance issues we might see?

I'd like to find a way of implementing what I presume the auto-detection is trying to do (I can't find where in the source code it is implemented) so the polling is only switched on for clients that truly need it. We don't want to force users to use polling if they don't need to and I'd rather not have to ask clients to switch this option on themselves through using a checkbox or something.

Here is a gist from one of the affected machines. They are both running Windows 10 and using Chrome browser, I don't know the exact reason why they can't connect but they are corporate supplied machines so I assume there is some kind of firewall software blocking the connection.

baptisteArno commented 2 years ago

I'd also like to know what kind of performance impact we can have with long polling enabled

fabiank0 commented 2 years ago

Also had this problem, experimentalAutoDetectLongPolling did not work, but experimentalForceLongPolling fixed all problems. Unfortunately I'm not aware which software or configuration was blocking it.

baptisteArno commented 2 years ago

I find this crazy that we can't even catch the error with a try-catch! Am I missing someting?

wenbozhu commented 2 years ago

@baptisteArno

I'd also like to know what kind of performance impact we can have with long polling enabled

The client may see up to 1-RTT extra delay for individual server-sent messages. If the server-sent message rate is < 1/1-RTT, the latency impact is going to be negligible.

schmidt-sebastian commented 2 years ago

It might also be easier to understand if you take into account how long polling works. Once the client receives a message, the connection is dropped. The client then re-opens the connection and waits for the next event. If the next event already occurred by the time the client reconnected, there is extra latency. If the next event has not yet happened, the connection is upheld until the next event occurs, in which case there is no latency impact. The extra latency is therefore limited to the time of a roundtrip.

btjones commented 2 years ago

In our app when we set experimentalAutoDetectLongPolling: true AND do NOT call firestore.enablePersistence(…) we've been getting a lot of the errors below. It seems to only happen with this combination. Calling firestore.enablePersistence(…) OR removing experimentalAutoDetectLongPolling: true seems to resolve the issue. Is anyone else running into this?

Interestingly I do NOT seem to run into this issue when using experimentalForceLongPolling instead of experimentalAutoDetectLongPolling.

stack trace (some of it - click to expand) ``` index.js:1 [2021-08-09T21:34:50.776Z] @firebase/firestore: Firestore (8.8.0): Could not reach Cloud Firestore backend. Backend didn't respond within 10 seconds. This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend. console. @ index.js:1 overrideMethod @ react_devtools_backend.js:2574 defaultLogHandler @ logger.ts:115 Logger.error @ logger.ts:210 x @ prebuilt-e10b3b00-01f089b3.js:231 t.Cr @ prebuilt-e10b3b00-01f089b3.js:10675 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:10644 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:11490 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:15145 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:15203 Promise.then (async) t.Rc @ prebuilt-e10b3b00-01f089b3.js:15202 t.enqueue @ prebuilt-e10b3b00-01f089b3.js:15144 t.enqueueAndForget @ prebuilt-e10b3b00-01f089b3.js:15124 t.handleDelayElapsed @ prebuilt-e10b3b00-01f089b3.js:11489 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:11468 setTimeout (async) t.start @ prebuilt-e10b3b00-01f089b3.js:11467 t.createAndSchedule @ prebuilt-e10b3b00-01f089b3.js:11459 t.enqueueAfterDelay @ prebuilt-e10b3b00-01f089b3.js:15228 t.Sr @ prebuilt-e10b3b00-01f089b3.js:10643 Qo @ prebuilt-e10b3b00-01f089b3.js:10906 Uo @ prebuilt-e10b3b00-01f089b3.js:10874 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:12310 step @ tslib.es6.js:102 (anonymous) @ tslib.es6.js:83 fulfilled @ tslib.es6.js:73 Promise.then (async) step @ tslib.es6.js:75 fulfilled @ tslib.es6.js:73 Promise.then (async) step @ tslib.es6.js:75 (anonymous) @ tslib.es6.js:76 __awaiter @ tslib.es6.js:72 Rs @ prebuilt-e10b3b00-01f089b3.js:12288 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:11706 step @ tslib.es6.js:102 (anonymous) @ tslib.es6.js:83 (anonymous) @ tslib.es6.js:76 __awaiter @ tslib.es6.js:72 vs @ prebuilt-e10b3b00-01f089b3.js:11696 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:17140 step @ tslib.es6.js:102 (anonymous) @ tslib.es6.js:83 fulfilled @ tslib.es6.js:73 Promise.then (async) step @ tslib.es6.js:75 (anonymous) @ tslib.es6.js:76 __awaiter @ tslib.es6.js:72 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:17132 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:15145 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:15203 Promise.then (async) t.Rc @ prebuilt-e10b3b00-01f089b3.js:15202 t.enqueue @ prebuilt-e10b3b00-01f089b3.js:15144 t.enqueueAndForget @ prebuilt-e10b3b00-01f089b3.js:15124 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:17131 vc @ prebuilt-e10b3b00-01f089b3.js:17160 t.onSnapshot @ prebuilt-e10b3b00-01f089b3.js:17834 watchUser @ Remote.js:703 watch @ User.js:17 User @ User.js:8 Core.setupUser @ Core.js:194 Core.onAuthChange @ Core.js:141 authCallback @ Auth.js:36 (anonymous) @ Auth.js:46 setTimeout (async) (anonymous) @ Auth.js:45 (anonymous) @ subscribe.ts:104 (anonymous) @ subscribe.ts:233 Promise.then (async) ObserverProxy.sendOne @ subscribe.ts:230 ObserverProxy.forEachObserver @ subscribe.ts:220 ObserverProxy.next @ subscribe.ts:103 (anonymous) @ auth.esm.js:395 (anonymous) @ auth.esm.js:400 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:295 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:295 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 (anonymous) @ auth.esm.js:247 (anonymous) @ auth.esm.js:243 Dd @ auth.esm.js:87 push../node_modules/@firebase/auth/dist/auth.esm.js.H.dispatchEvent @ auth.esm.js:85 li @ auth.esm.js:225 push../node_modules/@firebase/auth/dist/auth.esm.js.k.Jc @ auth.esm.js:223 push../node_modules/@firebase/auth/dist/auth.esm.js.k.Wb @ auth.esm.js:223 XMLHttpRequest.send (async) ei @ auth.esm.js:221 push../node_modules/@firebase/auth/dist/auth.esm.js.Ii.u @ auth.esm.js:243 Si @ auth.esm.js:241 (anonymous) @ auth.esm.js:247 D @ auth.esm.js:68 Yi @ auth.esm.js:247 (anonymous) @ auth.esm.js:264 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:295 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:295 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 index.js:1 [2021-08-09T21:34:50.831Z] @firebase/firestore: Firestore (8.8.0): INTERNAL UNHANDLED ERROR: TypeError: Cannot use 'in' operator to search for 'nullValue' in null at vt (http://localhost:3000/static/js/0.chunk.js:34217:22) at yt (http://localhost:3000/static/js/0.chunk.js:34213:10) at http://localhost:3000/static/js/0.chunk.js:34679:62 at http://localhost:3000/static/js/0.chunk.js:34680:8 at Array.map () at kt (http://localhost:3000/static/js/0.chunk.js:34674:97) at oe (http://localhost:3000/static/js/0.chunk.js:35151:10) at t.mapKeyFn (http://localhost:3000/static/js/0.chunk.js:46366:12) at t.get (http://localhost:3000/static/js/0.chunk.js:40670:18) at http://localhost:3000/static/js/0.chunk.js:46400:61 at step (http://localhost:3000/static/js/0.chunk.js:224427:17) at Object.next (http://localhost:3000/static/js/0.chunk.js:224358:14) at http://localhost:3000/static/js/0.chunk.js:224331:67 at new Promise () at __awaiter (http://localhost:3000/static/js/0.chunk.js:224310:10) at vs (http://localhost:3000/static/js/0.chunk.js:46395:65) at http://localhost:3000/static/js/0.chunk.js:53014:19 at step (http://localhost:3000/static/js/0.chunk.js:224427:17) at Object.next (http://localhost:3000/static/js/0.chunk.js:224358:14) at fulfilled (http://localhost:3000/static/js/0.chunk.js:224313:24) console. @ index.js:1 overrideMethod @ react_devtools_backend.js:2574 defaultLogHandler @ logger.ts:115 Logger.error @ logger.ts:210 x @ prebuilt-e10b3b00-01f089b3.js:231 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:15207 Promise.catch (async) (anonymous) @ prebuilt-e10b3b00-01f089b3.js:15203 Promise.then (async) t.Rc @ prebuilt-e10b3b00-01f089b3.js:15202 t.enqueue @ prebuilt-e10b3b00-01f089b3.js:15144 t.enqueueAndForget @ prebuilt-e10b3b00-01f089b3.js:15124 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:17131 vc @ prebuilt-e10b3b00-01f089b3.js:17160 t.onSnapshot @ prebuilt-e10b3b00-01f089b3.js:18160 watchPagesByWorkspaceId @ Remote.js:535 watchPages @ Workspaces.js:62 set current @ Workspaces.js:220 Workspaces.setWorkspaces @ Workspaces.js:150 async function (async) Workspaces.setWorkspaces @ Workspaces.js:133 (anonymous) @ Remote.js:599 next @ prebuilt-e10b3b00-01f089b3.js:17940 next @ prebuilt-e10b3b00-01f089b3.js:17123 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:13714 setTimeout (async) t.jo @ prebuilt-e10b3b00-01f089b3.js:13713 t.next @ prebuilt-e10b3b00-01f089b3.js:13706 t.no @ prebuilt-e10b3b00-01f089b3.js:11828 t.zr @ prebuilt-e10b3b00-01f089b3.js:11804 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:12546 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:6794 G @ prebuilt-e10b3b00-01f089b3.js:598 t.forEach @ prebuilt-e10b3b00-01f089b3.js:6791 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:12543 Ms @ prebuilt-e10b3b00-01f089b3.js:12549 i @ prebuilt-e10b3b00-01f089b3.js:13567 t.Dr @ prebuilt-e10b3b00-01f089b3.js:10672 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:10644 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:11490 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:15145 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:15203 Promise.then (async) t.Rc @ prebuilt-e10b3b00-01f089b3.js:15202 t.enqueue @ prebuilt-e10b3b00-01f089b3.js:15144 t.enqueueAndForget @ prebuilt-e10b3b00-01f089b3.js:15124 t.handleDelayElapsed @ prebuilt-e10b3b00-01f089b3.js:11489 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:11468 setTimeout (async) t.start @ prebuilt-e10b3b00-01f089b3.js:11467 t.createAndSchedule @ prebuilt-e10b3b00-01f089b3.js:11459 t.enqueueAfterDelay @ prebuilt-e10b3b00-01f089b3.js:15228 t.Sr @ prebuilt-e10b3b00-01f089b3.js:10643 Qo @ prebuilt-e10b3b00-01f089b3.js:10906 Uo @ prebuilt-e10b3b00-01f089b3.js:10874 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:12310 step @ tslib.es6.js:102 (anonymous) @ tslib.es6.js:83 fulfilled @ tslib.es6.js:73 Promise.then (async) step @ tslib.es6.js:75 fulfilled @ tslib.es6.js:73 Promise.then (async) step @ tslib.es6.js:75 (anonymous) @ tslib.es6.js:76 __awaiter @ tslib.es6.js:72 Rs @ prebuilt-e10b3b00-01f089b3.js:12288 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:11706 step @ tslib.es6.js:102 (anonymous) @ tslib.es6.js:83 (anonymous) @ tslib.es6.js:76 __awaiter @ tslib.es6.js:72 vs @ prebuilt-e10b3b00-01f089b3.js:11696 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:17140 step @ tslib.es6.js:102 (anonymous) @ tslib.es6.js:83 fulfilled @ tslib.es6.js:73 Promise.then (async) step @ tslib.es6.js:75 (anonymous) @ tslib.es6.js:76 __awaiter @ tslib.es6.js:72 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:17132 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:15145 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:15203 Promise.then (async) t.Rc @ prebuilt-e10b3b00-01f089b3.js:15202 t.enqueue @ prebuilt-e10b3b00-01f089b3.js:15144 t.enqueueAndForget @ prebuilt-e10b3b00-01f089b3.js:15124 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:17131 vc @ prebuilt-e10b3b00-01f089b3.js:17160 t.onSnapshot @ prebuilt-e10b3b00-01f089b3.js:17834 watchUser @ Remote.js:703 watch @ User.js:17 User @ User.js:8 Core.setupUser @ Core.js:194 Core.onAuthChange @ Core.js:141 authCallback @ Auth.js:36 (anonymous) @ Auth.js:46 setTimeout (async) (anonymous) @ Auth.js:45 (anonymous) @ subscribe.ts:104 (anonymous) @ subscribe.ts:233 Promise.then (async) ObserverProxy.sendOne @ subscribe.ts:230 ObserverProxy.forEachObserver @ subscribe.ts:220 ObserverProxy.next @ subscribe.ts:103 (anonymous) @ auth.esm.js:395 (anonymous) @ auth.esm.js:400 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:295 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:295 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 (anonymous) @ auth.esm.js:247 (anonymous) @ auth.esm.js:243 Dd @ auth.esm.js:87 push../node_modules/@firebase/auth/dist/auth.esm.js.H.dispatchEvent @ auth.esm.js:85 li @ auth.esm.js:225 push../node_modules/@firebase/auth/dist/auth.esm.js.k.Jc @ auth.esm.js:223 push../node_modules/@firebase/auth/dist/auth.esm.js.k.Wb @ auth.esm.js:223 XMLHttpRequest.send (async) ei @ auth.esm.js:221 push../node_modules/@firebase/auth/dist/auth.esm.js.Ii.u @ auth.esm.js:243 Si @ auth.esm.js:241 (anonymous) @ auth.esm.js:247 D @ auth.esm.js:68 Yi @ auth.esm.js:247 (anonymous) @ auth.esm.js:264 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 prebuilt-e10b3b00-01f089b3.js:188 Uncaught (in promise) FirebaseError: Failed to get document because the client is offline. at new n (prebuilt-e10b3b00-01f089b3.js:188) at next (prebuilt-e10b3b00-01f089b3.js:14411) at prebuilt-e10b3b00-01f089b3.js:13714 n @ prebuilt-e10b3b00-01f089b3.js:188 next @ prebuilt-e10b3b00-01f089b3.js:14411 (anonymous) @ prebuilt-e10b3b00-01f089b3.js:13714 async function (async) getFlags @ Flags.js:11 Flags @ Flags.js:7 Core.setupUser @ Core.js:195 Core.onAuthChange @ Core.js:141 authCallback @ Auth.js:36 (anonymous) @ Auth.js:46 setTimeout (async) (anonymous) @ Auth.js:45 (anonymous) @ subscribe.ts:104 (anonymous) @ subscribe.ts:233 Promise.then (async) ObserverProxy.sendOne @ subscribe.ts:230 ObserverProxy.forEachObserver @ subscribe.ts:220 ObserverProxy.next @ subscribe.ts:103 (anonymous) @ auth.esm.js:395 (anonymous) @ auth.esm.js:400 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:295 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:295 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 (anonymous) @ auth.esm.js:247 (anonymous) @ auth.esm.js:243 Dd @ auth.esm.js:87 push../node_modules/@firebase/auth/dist/auth.esm.js.H.dispatchEvent @ auth.esm.js:85 li @ auth.esm.js:225 push../node_modules/@firebase/auth/dist/auth.esm.js.k.Jc @ auth.esm.js:223 push../node_modules/@firebase/auth/dist/auth.esm.js.k.Wb @ auth.esm.js:223 XMLHttpRequest.send (async) ei @ auth.esm.js:221 push../node_modules/@firebase/auth/dist/auth.esm.js.Ii.u @ auth.esm.js:243 Si @ auth.esm.js:241 (anonymous) @ auth.esm.js:247 D @ auth.esm.js:68 Yi @ auth.esm.js:247 (anonymous) @ auth.esm.js:264 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:296 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:295 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 a.onsuccess @ auth.esm.js:295 IndexedDB (async) (anonymous) @ auth.esm.js:295 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 (anonymous) @ auth.esm.js:68 d.onsuccess @ auth.esm.js:293 IndexedDB (async) (anonymous) @ auth.esm.js:293 D @ auth.esm.js:68 tk @ auth.esm.js:293 uk @ auth.esm.js:294 c @ auth.esm.js:294 D @ auth.esm.js:68 vk @ auth.esm.js:294 push../node_modules/@firebase/auth/dist/auth.esm.js.k.set @ auth.esm.js:295 (anonymous) @ auth.esm.js:298 e.g @ auth.esm.js:72 Sc @ auth.esm.js:75 Oc @ auth.esm.js:75 push../node_modules/@firebase/auth/dist/auth.esm.js.k.gc @ auth.esm.js:74 xc @ auth.esm.js:68 Promise.then (async) uc @ auth.esm.js:68 tc @ auth.esm.js:68 Pc @ auth.esm.js:74 zc @ auth.esm.js:73 E @ auth.esm.js:69 Ck @ auth.esm.js:298 Tk @ auth.esm.js:304 Vk @ auth.esm.js:304 vn @ auth.esm.js:372 Fn @ auth.esm.js:375 instanceFactory @ auth.esm.js:436 Provider.getOrInitializeService @ provider.ts:313 Provider.getImmediate @ provider.ts:113 FirebaseAppImpl._getService @ firebaseApp.ts:136 firebaseAppImpl. @ firebaseNamespaceCore.ts:228 serviceNamespace @ firebaseNamespaceCore.ts:209 watchAuthStateChange @ Remote.js:87 Auth.watch @ Auth.js:19 Core @ Core.js:109 NewApiContextProvider @ NewApiContext.js:19 renderWithHooks @ react-dom.development.js:14803 mountIndeterminateComponent @ react-dom.development.js:17482 beginWork @ react-dom.development.js:18596 beginWork$1 @ react-dom.development.js:23179 performUnitOfWork @ react-dom.development.js:22154 workLoopSync @ react-dom.development.js:22130 performSyncWorkOnRoot @ react-dom.development.js:21756 scheduleUpdateOnFiber @ react-dom.development.js:21188 updateContainer @ react-dom.development.js:24373 (anonymous) @ react-dom.development.js:24758 unbatchedUpdates @ react-dom.development.js:21903 legacyRenderSubtreeIntoContainer @ react-dom.development.js:24757 render @ react-dom.development.js:24840 ./src/index.js @ index.js:44 __webpack_require__ @ bootstrap:784 fn @ bootstrap:150 1 @ workspaces.js:31 __webpack_require__ @ bootstrap:784 checkDeferredModules @ bootstrap:45 webpackJsonpCallback @ bootstrap:32 (anonymous) @ main.chunk.js:1 Show 41 more frames prebuilt-e10b3b00-01f089b3.js:1199 Uncaught (in promise) TypeError: Cannot use 'in' operator to search for 'nullValue' in null at vt (prebuilt-e10b3b00-01f089b3.js:1199) at yt (prebuilt-e10b3b00-01f089b3.js:1195) at prebuilt-e10b3b00-01f089b3.js:1581 at prebuilt-e10b3b00-01f089b3.js:1582 at Array.map () at kt (prebuilt-e10b3b00-01f089b3.js:1576) at oe (prebuilt-e10b3b00-01f089b3.js:1913) at t.mapKeyFn (prebuilt-e10b3b00-01f089b3.js:11672) at t.get (prebuilt-e10b3b00-01f089b3.js:6766) at prebuilt-e10b3b00-01f089b3.js:11701 at step (tslib.es6.js:102) at Object.next (tslib.es6.js:83) at tslib.es6.js:76 at new Promise () at __awaiter (tslib.es6.js:72) at vs (prebuilt-e10b3b00-01f089b3.js:11696) at prebuilt-e10b3b00-01f089b3.js:17140 at step (tslib.es6.js:102) at Object.next (tslib.es6.js:83) at fulfilled (tslib.es6.js:73) ```
Screen Shot 2021-08-09 at 2 59 56 PM
sampajano commented 2 years ago

@squinn @MarkChrisLevy @tgangso @fabiank0 @btjones Thanks so much for all of your bug reports!! 😃

We're sorry for some earlier delays, but we're back on it now! :)

We're extremely interested in the case where experimentalAutoDetectLongPolling doesn't work while experimentalForceLongPolling works. And even more so, when experimentalAutoDetectLongPolling causes regressions to users who were able to connect fine without the flag! (I know this one doesn't always consistently repro.)

It would be tremendously helpful if you could, from the problematic machine/browser, visit https://debug-my.firebaseapp.com/ and share the complete test output (it can take a few minutes for all 7 tests to finish) through a gist.

Thanks so much in advance! 😃

srand2 commented 2 years ago

Id Like to leave my test results I received.

https://gist.github.com/srand2/6d4dcdb9832fffdc7abfbf1869211ff1

I was facing the timeout error while using burpsuite proxy and trying to reach examplesite.com

image

Any help would be appreciated

btjones commented 2 years ago

@sampajano here are my results: https://gist.github.com/btjones/a2a2661e858bdbdc6a06b3801f8859a8

sampajano commented 2 years ago

@srand2 @btjones Thanks so much for sharing your the test results!!


@srand2 In your test result we can see both detectBufferingProxy tests took over 30 seconds to finish.. Definitely demonstrating the issue! We'll look deeper into the logs!

@btjones In your test result we saw the detectBufferingProxy test with webchannel.googleapis.com finish within 2-3 seconds but the one with Firestore (test no. 6 has a typo it should be detectBufferingProxy instead) took 30+ seconds. We'll look into the reasons why.


Thanks again! :)

alexstanbury commented 2 years ago

@sampajano there was a log in my comment too, not sure if you missed it. https://github.com/firebase/firebase-js-sdk/issues/1674#issuecomment-884296844

sampajano commented 2 years ago

@alexstanbury Yes! Thanks a lot for reminding me! I've seen it but I've misread the log when i looked earlier.. 😃

Your log is showing the same behavior as the report by @srand2 above! Thanks again for providing the report! We'll take a deeper look and have some diagnostics (and hopefully fixes) soon! 😃

DavidWeiss2 commented 2 years ago

@sampajano Hi, I am developing an application that @srand2 is trying to access.

Here is the part of the code that related to the issue: image

That did not fix the issue @srand2 is facing.

Any help would be appreciated.

sampajano commented 2 years ago

@DavidWeiss2 thanks for the report! We're able to reproduce this issue now and is working on root causing and fixing! Thanks for your patience in the meantime! 😃

SrBrahma commented 2 years ago

Hi, I am having problems with the firestore while using the Emulator. I tried both experimental props in settings(), without success. Here are one warn and one error, that are raised when get()'ing a dummy doc:

```bash [2021-08-26T06:21:24.260Z] @firebase/firestore:, Firestore (8.2.2): Connection, WebChannel transport errored:, he { "a": Y { "C": null, "K": [Circular], "a": Vd { "A": 0, "B": U { "a": false, "b": jd { "a": S { "a": Array [ "database", "VER", ], "b": Object { "VER": Array [ 8, ], "database": Array [ "projects/ahive-firebase/databases/(default)", ], }, "c": 2, }, "b": 2, "c": null, "f": false, }, "c": "http:", "f": "http", "g": "//192.168.0.18:8080/google.firestore.v1.Firestore/Listen/channel", "h": null, "i": "", "j": "", }, "C": true, "F": undefined, "G": false, "I": false, "J": 0, "K": "", "Ka": 5000, "Ma": false, "Na": false, "Oa": false, "P": 0, "Pa": 2, "Qa": undefined, "R": Object { "Content-Type": "text/plain", "X-Goog-Api-Client": "gl-js/ fire/8.2.2", }, "S": -1, "T": 85230, "Ta": 1, "U": false, "Ua": 10000, "V": 0, "X": false, "Y": Object { "database": "projects/ahive-firebase/databases/(default)", }, "a": null, "b": zd { "a": null, "b": null, "c": Array [ yd { "a": Object { "__data__": "{\"database\":\"projects/ahive-firebase/databases/(default)\",\"addTarget\":{\"documents\":{\"documents\":[\"projects/ahive-firebase/databases/(default)/documents/users/aaa\"]},\"targetId\":2}}", }, "b": 0, }, ], "f": 1, "g": 10, }, "c": bc { "a": true, }, "f": Z { "a": [Circular], }, "fa": false, "g": Array [], "ga": undefined, "h": null, "ha": "http://http://192.168.0.18:8080/google.firestore.v1.Firestore/Listen/channel", "i": null, "ia": null, "j": null, "l": null, "m": null, "ma": 0, "na": null, "o": 0, "oa": 600000, "pa": null, "qa": -1, "ra": Ed { "a": Dd {}, }, "s": null, "u": 0, "v": "gsessionid", }, "b": Object { "database": "projects/ahive-firebase/databases/(default)", }, "c": mb { "a": Object { "a": Array [ kb { "$": false, "aa": false, "capture": false, "ea": undefined, "key": 6, "listener": [Function anonymous], "proxy": null, "src": [Circular], "type": "a", }, ], "b": Array [ kb { "$": false, "aa": false, "capture": false, "ea": undefined, "key": 7, "listener": [Function anonymous], "proxy": null, "src": [Circular], "type": "b", }, ], "c": Array [ kb { "$": false, "aa": false, "capture": false, "ea": undefined, "key": 8, "listener": [Function anonymous], "proxy": null, "src": [Circular], "type": "c", }, ], "d": Array [ kb { "$": false, "aa": false, "capture": false, "ea": undefined, "key": 9, "listener": [Function anonymous], "proxy": null, "src": [Circular], "type": "d", }, ], }, "b": 4, "src": [Circular], }, "f": Z { "a": [Circular], }, "i": undefined, "j": false, "l": true, "m": true, "o": "http://http://192.168.0.18:8080/google.firestore.v1.Firestore/Listen/channel", }, "defaultPrevented": false, "status": 1, "target": Y { "C": null, "K": [Circular], "a": Vd { "A": 0, "B": U { "a": false, "b": jd { "a": S { "a": Array [ "database", "VER", ], "b": Object { "VER": Array [ 8, ], "database": Array [ "projects/ahive-firebase/databases/(default)", ], }, "c": 2, }, "b": 2, "c": null, "f": false, }, "c": "http:", "f": "http", "g": "//192.168.0.18:8080/google.firestore.v1.Firestore/Listen/channel", "h": null, "i": "", "j": "", }, "C": true, "F": undefined, "G": false, "I": false, "J": 0, "K": "", "Ka": 5000, "Ma": false, "Na": false, "Oa": false, "P": 0, "Pa": 2, "Qa": undefined, "R": Object { "Content-Type": "text/plain", "X-Goog-Api-Client": "gl-js/ fire/8.2.2", }, "S": -1, "T": 85230, "Ta": 1, "U": false, "Ua": 10000, "V": 0, "X": false, "Y": Object { "database": "projects/ahive-firebase/databases/(default)", }, "a": null, "b": zd { "a": null, "b": null, "c": Array [ yd { "a": Object { "__data__": "{\"database\":\"projects/ahive-firebase/databases/(default)\",\"addTarget\":{\"documents\":{\"documents\":[\"projects/ahive-firebase/databases/(default)/documents/users/aaa\"]},\"targetId\":2}}", }, "b": 0, }, ], "f": 1, "g": 10, }, "c": bc { "a": true, }, "f": Z { "a": [Circular], }, "fa": false, "g": Array [], "ga": undefined, "h": null, "ha": "http://http://192.168.0.18:8080/google.firestore.v1.Firestore/Listen/channel", "i": null, "ia": null, "j": null, "l": null, "m": null, "ma": 0, "na": null, "o": 0, "oa": 600000, "pa": null, "qa": -1, "ra": Ed { "a": Dd {}, }, "s": null, "u": 0, "v": "gsessionid", }, "b": Object { "database": "projects/ahive-firebase/databases/(default)", }, "c": mb { "a": Object { "a": Array [ kb { "$": false, "aa": false, "capture": false, "ea": undefined, "key": 6, "listener": [Function anonymous], "proxy": null, "src": [Circular], "type": "a", }, ], "b": Array [ kb { "$": false, "aa": false, "capture": false, "ea": undefined, "key": 7, "listener": [Function anonymous], "proxy": null, "src": [Circular], "type": "b", }, ], "c": Array [ kb { "$": false, "aa": false, "capture": false, "ea": undefined, "key": 8, "listener": [Function anonymous], "proxy": null, "src": [Circular], "type": "c", }, ], "d": Array [ kb { "$": false, "aa": false, "capture": false, "ea": undefined, "key": 9, "listener": [Function anonymous], "proxy": null, "src": [Circular], "type": "d", }, ], }, "b": 4, "src": [Circular], }, "f": Z { "a": [Circular], }, "i": undefined, "j": false, "l": true, "m": true, "o": "http://http://192.168.0.18:8080/google.firestore.v1.Firestore/Listen/channel", }, "type": "c", } at node_modules/@firebase/component/dist/index.esm.js:23:13 in Component at node_modules/@firebase/component/dist/index.esm.js:119:20 in Provider.prototype.getImmediate at node_modules/@firebase/webchannel-wrapper/dist/index.js:78:324 in be at node_modules/@firebase/firestore/dist/rn/prebuilt.rn-f9cd27ba.js:7071:22 in xr#constructor at node_modules/@firebase/firestore/dist/rn/prebuilt.rn-f9cd27ba.js:7060:8 in Cr at http://192.168.0.18:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&minify=false:134918:27 in Fb at node_modules/@firebase/webchannel-wrapper/dist/index.js:26:476 in at node_modules/@firebase/webchannel-wrapper/dist/index.js:71:446 in Vd at node_modules/@firebase/webchannel-wrapper/dist/index.js:67:255 in m.Ba at node_modules/@firebase/webchannel-wrapper/dist/index.js:66:277 in Md at http://192.168.0.18:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&minify=false:135522:29 in Kc at node_modules/@firebase/webchannel-wrapper/dist/index.js:40:764 in at node_modules/@firebase/webchannel-wrapper/dist/index.js:40:289 in Hb at http://192.168.0.18:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&minify=false:134918:27 in Fb at node_modules/@firebase/webchannel-wrapper/dist/index.js:26:476 in at http://192.168.0.18:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&minify=false:136225:132 in Rd at http://192.168.0.18:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&minify=false:136221:8 in Xa at http://192.168.0.18:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&minify=false:136217:64 in Ba at node_modules/react-native/Libraries/Network/XMLHttpRequest.js:592:4 in setReadyState at node_modules/react-native/Libraries/Network/XMLHttpRequest.js:395:6 in __didCompleteResponse at node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js:189:10 in emit [2021-08-26T06:21:24.309Z] @firebase/firestore:, Firestore (8.2.2): Could not reach Cloud Firestore backend. Connection failed 1 times. Most recent error: FirebaseError: [code=unavailable]: The operation could not be completed This typically indicates that your device does not have a healthy Internet connection at the moment. The client will operate in offline mode until it is able to successfully connect to the backend. at node_modules/@firebase/component/dist/index.esm.js:23:13 in Component at node_modules/@firebase/component/dist/index.esm.js:131:13 in Provider.prototype.getImmediate at node_modules/@firebase/webchannel-wrapper/dist/index.js:78:210 in be at node_modules/@firebase/firestore/dist/rn/prebuilt.rn-f9cd27ba.js:7641:8 in zr at http://192.168.0.18:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&minify=false:145234:102 in ph at node_modules/@firebase/firestore/dist/rn/prebuilt.rn-f9cd27ba.js:7859:51 in Xr#constructor at node_modules/@firebase/firestore/dist/rn/prebuilt.rn-f9cd27ba.js:7859:51 in Xr#constructor at node_modules/@firebase/firestore/dist/rn/prebuilt.rn-f9cd27ba.js:7260:4 in jr#constructor at node_modules/@firebase/firestore/dist/rn/prebuilt.rn-f9cd27ba.js:7256:0 in at node_modules/@firebase/firestore/dist/rn/prebuilt.rn-f9cd27ba.js:7327:0 in at node_modules/@firebase/firestore/dist/rn/prebuilt.rn-f9cd27ba.js:7305:4 in at node_modules/@firebase/firestore/dist/rn/prebuilt.rn-f9cd27ba.js:7336:0 in Gr#constructor at node_modules/@firebase/firestore/dist/rn/prebuilt.rn-f9cd27ba.js:11536:25 in Da#rf [Unhandled promise rejection: FirebaseError: Failed to get document because the client is offline.] at node_modules/@firebase/webchannel-wrapper/dist/index.js:75:488 in m.Da at http://192.168.0.18:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&minify=false:137306:25 in F at node_modules/@firebase/firestore/dist/rn/prebuilt.rn-f9cd27ba.js:11396:5 in ba at http://192.168.0.18:19000/node_modules/expo/AppEntry.bundle?platform=android&dev=true&hot=false&minify=false:147767:28 in ```

I think I know where the lib error is. NOTE THAT there is a wrong url generated there in the object printed. Search for http://http:// here and you will find it. Looks like it's appending to the start another 'http://' for some reason. I use the same url for the Auth and it's working properly, so my url is correct ('http://192.168.0.18', port '8080').

Edit: Looks like that for useEmulator(host, port), I shouldn't pass the url in the host. Just passing '192.168.0.18' worked! The code should really check if the http:// is already included or complain if it's already included and it shouldn't be there. I lost a good hour on that :/