convert soft 404s to hard 404s in unfurler ssr
This commit is contained in:
		
							parent
							
								
									2f3e498906
								
							
						
					
					
						commit
						105cccf9b0
					
				| @ -47,6 +47,7 @@ export class BisqAddressComponent implements OnInit, OnDestroy { | |||||||
|               catchError((err) => { |               catchError((err) => { | ||||||
|                 this.isLoadingAddress = false; |                 this.isLoadingAddress = false; | ||||||
|                 this.error = err; |                 this.error = err; | ||||||
|  |                 this.seoService.logSoft404(); | ||||||
|                 console.log(err); |                 console.log(err); | ||||||
|                 return of(null); |                 return of(null); | ||||||
|               }) |               }) | ||||||
| @ -62,6 +63,7 @@ export class BisqAddressComponent implements OnInit, OnDestroy { | |||||||
|       (error) => { |       (error) => { | ||||||
|         console.log(error); |         console.log(error); | ||||||
|         this.error = error; |         this.error = error; | ||||||
|  |         this.seoService.logSoft404(); | ||||||
|         this.isLoadingAddress = false; |         this.isLoadingAddress = false; | ||||||
|       }); |       }); | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -82,6 +82,7 @@ export class BisqBlockComponent implements OnInit, OnDestroy { | |||||||
|       ) |       ) | ||||||
|       .subscribe((block: BisqBlock) => { |       .subscribe((block: BisqBlock) => { | ||||||
|         if (!block) { |         if (!block) { | ||||||
|  |           this.seoService.logSoft404(); | ||||||
|           return; |           return; | ||||||
|         } |         } | ||||||
|         this.isLoading = false; |         this.isLoading = false; | ||||||
| @ -97,6 +98,7 @@ export class BisqBlockComponent implements OnInit, OnDestroy { | |||||||
| 
 | 
 | ||||||
|   caughtHttpError(err: HttpErrorResponse){ |   caughtHttpError(err: HttpErrorResponse){ | ||||||
|     this.error = err; |     this.error = err; | ||||||
|  |     this.seoService.logSoft404(); | ||||||
|     return of(null); |     return of(null); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -70,11 +70,13 @@ export class BisqTransactionComponent implements OnInit, OnDestroy { | |||||||
|                     catchError((txError: HttpErrorResponse) => { |                     catchError((txError: HttpErrorResponse) => { | ||||||
|                       console.log(txError); |                       console.log(txError); | ||||||
|                       this.error = txError; |                       this.error = txError; | ||||||
|  |                       this.seoService.logSoft404(); | ||||||
|                       return of(null); |                       return of(null); | ||||||
|                     }) |                     }) | ||||||
|                   ); |                   ); | ||||||
|               } |               } | ||||||
|               this.error = bisqTxError; |               this.error = bisqTxError; | ||||||
|  |               this.seoService.logSoft404(); | ||||||
|               return of(null); |               return of(null); | ||||||
|             }) |             }) | ||||||
|           ); |           ); | ||||||
| @ -103,6 +105,7 @@ export class BisqTransactionComponent implements OnInit, OnDestroy { | |||||||
|       this.isLoadingTx = false; |       this.isLoadingTx = false; | ||||||
| 
 | 
 | ||||||
|       if (!tx) { |       if (!tx) { | ||||||
|  |         this.seoService.logSoft404(); | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -88,6 +88,7 @@ export class AddressComponent implements OnInit, OnDestroy { | |||||||
|                 catchError((err) => { |                 catchError((err) => { | ||||||
|                   this.isLoadingAddress = false; |                   this.isLoadingAddress = false; | ||||||
|                   this.error = err; |                   this.error = err; | ||||||
|  |                   this.seoService.logSoft404(); | ||||||
|                   console.log(err); |                   console.log(err); | ||||||
|                   return of(null); |                   return of(null); | ||||||
|                 }) |                 }) | ||||||
| @ -157,6 +158,7 @@ export class AddressComponent implements OnInit, OnDestroy { | |||||||
|       (error) => { |       (error) => { | ||||||
|         console.log(error); |         console.log(error); | ||||||
|         this.error = error; |         this.error = error; | ||||||
|  |         this.seoService.logSoft404(); | ||||||
|         this.isLoadingAddress = false; |         this.isLoadingAddress = false; | ||||||
|       }); |       }); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -86,6 +86,7 @@ export class AssetComponent implements OnInit, OnDestroy { | |||||||
|                   catchError((err) => { |                   catchError((err) => { | ||||||
|                     this.isLoadingAsset = false; |                     this.isLoadingAsset = false; | ||||||
|                     this.error = err; |                     this.error = err; | ||||||
|  |                     this.seoService.logSoft404(); | ||||||
|                     console.log(err); |                     console.log(err); | ||||||
|                     return of(null); |                     return of(null); | ||||||
|                   }) |                   }) | ||||||
| @ -153,6 +154,7 @@ export class AssetComponent implements OnInit, OnDestroy { | |||||||
|       (error) => { |       (error) => { | ||||||
|         console.log(error); |         console.log(error); | ||||||
|         this.error = error; |         this.error = error; | ||||||
|  |         this.seoService.logSoft404(); | ||||||
|         this.isLoadingAsset = false; |         this.isLoadingAsset = false; | ||||||
|       }); |       }); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -82,6 +82,7 @@ export class BlockPreviewComponent implements OnInit, OnDestroy { | |||||||
|               }), |               }), | ||||||
|               catchError((err) => { |               catchError((err) => { | ||||||
|                 this.error = err; |                 this.error = err; | ||||||
|  |                 this.seoService.logSoft404(); | ||||||
|                 this.openGraphService.fail('block-data-' + this.rawId); |                 this.openGraphService.fail('block-data-' + this.rawId); | ||||||
|                 this.openGraphService.fail('block-viz-' + this.rawId); |                 this.openGraphService.fail('block-viz-' + this.rawId); | ||||||
|                 return of(null); |                 return of(null); | ||||||
| @ -138,6 +139,7 @@ export class BlockPreviewComponent implements OnInit, OnDestroy { | |||||||
|     (error) => { |     (error) => { | ||||||
|       this.error = error; |       this.error = error; | ||||||
|       this.isLoadingOverview = false; |       this.isLoadingOverview = false; | ||||||
|  |       this.seoService.logSoft404(); | ||||||
|       this.openGraphService.fail('block-viz-' + this.rawId); |       this.openGraphService.fail('block-viz-' + this.rawId); | ||||||
|       this.openGraphService.fail('block-data-' + this.rawId); |       this.openGraphService.fail('block-data-' + this.rawId); | ||||||
|       if (this.blockGraph) { |       if (this.blockGraph) { | ||||||
|  | |||||||
| @ -192,6 +192,7 @@ export class BlockComponent implements OnInit, OnDestroy { | |||||||
|                       this.error = err; |                       this.error = err; | ||||||
|                       this.isLoadingBlock = false; |                       this.isLoadingBlock = false; | ||||||
|                       this.isLoadingOverview = false; |                       this.isLoadingOverview = false; | ||||||
|  |                       this.seoService.logSoft404(); | ||||||
|                       return EMPTY; |                       return EMPTY; | ||||||
|                     }) |                     }) | ||||||
|                   ); |                   ); | ||||||
| @ -200,6 +201,7 @@ export class BlockComponent implements OnInit, OnDestroy { | |||||||
|                   this.error = err; |                   this.error = err; | ||||||
|                   this.isLoadingBlock = false; |                   this.isLoadingBlock = false; | ||||||
|                   this.isLoadingOverview = false; |                   this.isLoadingOverview = false; | ||||||
|  |                   this.seoService.logSoft404(); | ||||||
|                   return EMPTY; |                   return EMPTY; | ||||||
|                 }), |                 }), | ||||||
|               ); |               ); | ||||||
| @ -215,6 +217,7 @@ export class BlockComponent implements OnInit, OnDestroy { | |||||||
|               this.error = err; |               this.error = err; | ||||||
|               this.isLoadingBlock = false; |               this.isLoadingBlock = false; | ||||||
|               this.isLoadingOverview = false; |               this.isLoadingOverview = false; | ||||||
|  |               this.seoService.logSoft404(); | ||||||
|               return EMPTY; |               return EMPTY; | ||||||
|             }) |             }) | ||||||
|           ); |           ); | ||||||
|  | |||||||
| @ -61,6 +61,7 @@ export class PoolPreviewComponent implements OnInit { | |||||||
|               }), |               }), | ||||||
|               catchError(() => { |               catchError(() => { | ||||||
|                 this.isLoading = false; |                 this.isLoading = false; | ||||||
|  |                 this.seoService.logSoft404(); | ||||||
|                 this.openGraphService.fail('pool-hash-' + this.slug); |                 this.openGraphService.fail('pool-hash-' + this.slug); | ||||||
|                 return of([slug]); |                 return of([slug]); | ||||||
|               }) |               }) | ||||||
| @ -70,6 +71,7 @@ export class PoolPreviewComponent implements OnInit { | |||||||
|           return this.apiService.getPoolStats$(slug).pipe( |           return this.apiService.getPoolStats$(slug).pipe( | ||||||
|             catchError(() => { |             catchError(() => { | ||||||
|               this.isLoading = false; |               this.isLoading = false; | ||||||
|  |               this.seoService.logSoft404(); | ||||||
|               this.openGraphService.fail('pool-stats-' + this.slug); |               this.openGraphService.fail('pool-stats-' + this.slug); | ||||||
|               return of(null); |               return of(null); | ||||||
|             }) |             }) | ||||||
|  | |||||||
| @ -1,8 +1,8 @@ | |||||||
| import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core'; | import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, OnInit } from '@angular/core'; | ||||||
| import { ActivatedRoute } from '@angular/router'; | import { ActivatedRoute } from '@angular/router'; | ||||||
| import { EChartsOption, graphic } from 'echarts'; | import { EChartsOption, graphic } from 'echarts'; | ||||||
| import { BehaviorSubject, Observable, timer } from 'rxjs'; | import { BehaviorSubject, Observable, of, timer } from 'rxjs'; | ||||||
| import { distinctUntilChanged, map, share, switchMap, tap } from 'rxjs/operators'; | import { catchError, distinctUntilChanged, map, share, switchMap, tap } from 'rxjs/operators'; | ||||||
| import { BlockExtended, PoolStat } from '../../interfaces/node-api.interface'; | import { BlockExtended, PoolStat } from '../../interfaces/node-api.interface'; | ||||||
| import { ApiService } from '../../services/api.service'; | import { ApiService } from '../../services/api.service'; | ||||||
| import { StateService } from '../../services/state.service'; | import { StateService } from '../../services/state.service'; | ||||||
| @ -59,10 +59,21 @@ export class PoolComponent implements OnInit { | |||||||
|                 this.prepareChartOptions(data.map(val => [val.timestamp * 1000, val.avgHashrate])); |                 this.prepareChartOptions(data.map(val => [val.timestamp * 1000, val.avgHashrate])); | ||||||
|                 return [slug]; |                 return [slug]; | ||||||
|               }), |               }), | ||||||
|  |               catchError(() => { | ||||||
|  |                 this.isLoading = false; | ||||||
|  |                 this.seoService.logSoft404(); | ||||||
|  |                 return of([slug]); | ||||||
|  |               }) | ||||||
|             ); |             ); | ||||||
|         }), |         }), | ||||||
|         switchMap((slug) => { |         switchMap((slug) => { | ||||||
|           return this.apiService.getPoolStats$(slug); |           return this.apiService.getPoolStats$(slug).pipe( | ||||||
|  |             catchError(() => { | ||||||
|  |               this.isLoading = false; | ||||||
|  |               this.seoService.logSoft404(); | ||||||
|  |               return of(null); | ||||||
|  |             }) | ||||||
|  |           ); | ||||||
|         }), |         }), | ||||||
|         tap(() => { |         tap(() => { | ||||||
|           this.loadMoreSubject.next(this.blocks[this.blocks.length - 1]?.height); |           this.loadMoreSubject.next(this.blocks[this.blocks.length - 1]?.height); | ||||||
|  | |||||||
| @ -133,6 +133,7 @@ export class TransactionPreviewComponent implements OnInit, OnDestroy { | |||||||
|       ) |       ) | ||||||
|       .subscribe((tx: Transaction) => { |       .subscribe((tx: Transaction) => { | ||||||
|           if (!tx) { |           if (!tx) { | ||||||
|  |             this.seoService.logSoft404(); | ||||||
|             this.openGraphService.fail('tx-data-' + this.txId); |             this.openGraphService.fail('tx-data-' + this.txId); | ||||||
|             return; |             return; | ||||||
|           } |           } | ||||||
| @ -182,6 +183,7 @@ export class TransactionPreviewComponent implements OnInit, OnDestroy { | |||||||
|           this.openGraphService.waitOver('tx-data-' + this.txId); |           this.openGraphService.waitOver('tx-data-' + this.txId); | ||||||
|         }, |         }, | ||||||
|         (error) => { |         (error) => { | ||||||
|  |           this.seoService.logSoft404(); | ||||||
|           this.openGraphService.fail('tx-data-' + this.txId); |           this.openGraphService.fail('tx-data-' + this.txId); | ||||||
|           this.error = error; |           this.error = error; | ||||||
|           this.isLoadingTx = false; |           this.isLoadingTx = false; | ||||||
|  | |||||||
| @ -193,8 +193,10 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|       }) |       }) | ||||||
|     ).subscribe((tx) => { |     ).subscribe((tx) => { | ||||||
|       if (!tx) { |       if (!tx) { | ||||||
|  |         this.seoService.logSoft404(); | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
|  |       this.seoService.clearSoft404(); | ||||||
| 
 | 
 | ||||||
|       this.tx = tx; |       this.tx = tx; | ||||||
|       this.isCached = true; |       this.isCached = true; | ||||||
| @ -287,8 +289,10 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|       ) |       ) | ||||||
|       .subscribe((tx: Transaction) => { |       .subscribe((tx: Transaction) => { | ||||||
|         if (!tx) { |         if (!tx) { | ||||||
|  |           this.seoService.logSoft404(); | ||||||
|           return; |           return; | ||||||
|         } |         } | ||||||
|  |         this.seoService.clearSoft404(); | ||||||
| 
 | 
 | ||||||
|           this.tx = tx; |           this.tx = tx; | ||||||
|           this.isCached = false; |           this.isCached = false; | ||||||
| @ -340,6 +344,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|         }, |         }, | ||||||
|         (error) => { |         (error) => { | ||||||
|           this.error = error; |           this.error = error; | ||||||
|  |           this.seoService.logSoft404(); | ||||||
|           this.isLoadingTx = false; |           this.isLoadingTx = false; | ||||||
|         } |         } | ||||||
|       ); |       ); | ||||||
| @ -394,6 +399,7 @@ export class TransactionComponent implements OnInit, AfterViewInit, OnDestroy { | |||||||
|       this.waitingForTransaction = true; |       this.waitingForTransaction = true; | ||||||
|     } |     } | ||||||
|     this.error = error; |     this.error = error; | ||||||
|  |     this.seoService.logSoft404(); | ||||||
|     this.isLoadingTx = false; |     this.isLoadingTx = false; | ||||||
|     return of(false); |     return of(false); | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -54,6 +54,7 @@ export class ChannelPreviewComponent implements OnInit { | |||||||
|               }), |               }), | ||||||
|               catchError((err) => { |               catchError((err) => { | ||||||
|                 this.error = err; |                 this.error = err; | ||||||
|  |                 this.seoService.logSoft404(); | ||||||
|                 this.openGraphService.fail('channel-map-' + this.shortId); |                 this.openGraphService.fail('channel-map-' + this.shortId); | ||||||
|                 this.openGraphService.fail('channel-data-' + this.shortId); |                 this.openGraphService.fail('channel-data-' + this.shortId); | ||||||
|                 return of(null); |                 return of(null); | ||||||
|  | |||||||
| @ -38,6 +38,7 @@ export class ChannelComponent implements OnInit { | |||||||
|               }), |               }), | ||||||
|               catchError((err) => { |               catchError((err) => { | ||||||
|                 this.error = err; |                 this.error = err; | ||||||
|  |                 this.seoService.logSoft404(); | ||||||
|                 return [{ |                 return [{ | ||||||
|                   short_id: params.get('short_id') |                   short_id: params.get('short_id') | ||||||
|                 }]; |                 }]; | ||||||
|  | |||||||
| @ -50,6 +50,7 @@ export class GroupPreviewComponent implements OnInit { | |||||||
|               name: this.slug.replace(/-/gi, ' '), |               name: this.slug.replace(/-/gi, ' '), | ||||||
|               description: '', |               description: '', | ||||||
|             }; |             }; | ||||||
|  |             this.seoService.logSoft404(); | ||||||
|             this.openGraphService.fail('ln-group-map-' + this.slug); |             this.openGraphService.fail('ln-group-map-' + this.slug); | ||||||
|             this.openGraphService.fail('ln-group-data-' + this.slug); |             this.openGraphService.fail('ln-group-data-' + this.slug); | ||||||
|             return of(null); |             return of(null); | ||||||
| @ -106,6 +107,7 @@ export class GroupPreviewComponent implements OnInit { | |||||||
|           }; |           }; | ||||||
|         }), |         }), | ||||||
|         catchError(() => { |         catchError(() => { | ||||||
|  |           this.seoService.logSoft404(); | ||||||
|           this.openGraphService.fail('ln-group-map-' + this.slug); |           this.openGraphService.fail('ln-group-map-' + this.slug); | ||||||
|           this.openGraphService.fail('ln-group-data-' + this.slug); |           this.openGraphService.fail('ln-group-data-' + this.slug); | ||||||
|           return of({ |           return of({ | ||||||
|  | |||||||
| @ -81,6 +81,7 @@ export class NodePreviewComponent implements OnInit { | |||||||
|         }), |         }), | ||||||
|         catchError(err => { |         catchError(err => { | ||||||
|           this.error = err; |           this.error = err; | ||||||
|  |           this.seoService.logSoft404(); | ||||||
|           this.openGraphService.fail('node-map-' + this.publicKey); |           this.openGraphService.fail('node-map-' + this.publicKey); | ||||||
|           this.openGraphService.fail('node-data-' + this.publicKey); |           this.openGraphService.fail('node-data-' + this.publicKey); | ||||||
|           return [{ |           return [{ | ||||||
|  | |||||||
| @ -121,6 +121,7 @@ export class NodeComponent implements OnInit { | |||||||
|         }), |         }), | ||||||
|         catchError(err => { |         catchError(err => { | ||||||
|           this.error = err; |           this.error = err; | ||||||
|  |           this.seoService.logSoft404(); | ||||||
|           return [{ |           return [{ | ||||||
|             alias: this.publicKey, |             alias: this.publicKey, | ||||||
|             public_key: this.publicKey, |             public_key: this.publicKey, | ||||||
|  | |||||||
| @ -85,6 +85,7 @@ export class NodesPerISPPreview implements OnInit { | |||||||
|         }), |         }), | ||||||
|         catchError(err => { |         catchError(err => { | ||||||
|           this.error = err; |           this.error = err; | ||||||
|  |           this.seoService.logSoft404(); | ||||||
|           this.openGraphService.fail('isp-map-' + this.id); |           this.openGraphService.fail('isp-map-' + this.id); | ||||||
|           this.openGraphService.fail('isp-data-' + this.id); |           this.openGraphService.fail('isp-data-' + this.id); | ||||||
|           return of({ |           return of({ | ||||||
|  | |||||||
| @ -1,5 +1,7 @@ | |||||||
| import { Injectable } from '@angular/core'; | import { Injectable } from '@angular/core'; | ||||||
| import { Title, Meta } from '@angular/platform-browser'; | import { Title, Meta } from '@angular/platform-browser'; | ||||||
|  | import { ActivatedRoute, NavigationEnd, Router } from '@angular/router'; | ||||||
|  | import { filter, map, switchMap } from 'rxjs'; | ||||||
| import { StateService } from './state.service'; | import { StateService } from './state.service'; | ||||||
| 
 | 
 | ||||||
| @Injectable({ | @Injectable({ | ||||||
| @ -13,8 +15,22 @@ export class SeoService { | |||||||
|     private titleService: Title, |     private titleService: Title, | ||||||
|     private metaService: Meta, |     private metaService: Meta, | ||||||
|     private stateService: StateService, |     private stateService: StateService, | ||||||
|  |     private router: Router, | ||||||
|  |     private activatedRoute: ActivatedRoute, | ||||||
|   ) { |   ) { | ||||||
|     this.stateService.networkChanged$.subscribe((network) => this.network = network); |     this.stateService.networkChanged$.subscribe((network) => this.network = network); | ||||||
|  |     this.router.events.pipe( | ||||||
|  |       filter(event => event instanceof NavigationEnd), | ||||||
|  |       map(() => this.activatedRoute), | ||||||
|  |       map(route => { | ||||||
|  |         while (route.firstChild) route = route.firstChild; | ||||||
|  |         return route; | ||||||
|  |       }), | ||||||
|  |       filter(route => route.outlet === 'primary'), | ||||||
|  |       switchMap(route => route.data), | ||||||
|  |     ).subscribe((data) => { | ||||||
|  |       this.clearSoft404(); | ||||||
|  |     }); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   setTitle(newTitle: string): void { |   setTitle(newTitle: string): void { | ||||||
| @ -53,4 +69,14 @@ export class SeoService { | |||||||
|   ucfirst(str: string) { |   ucfirst(str: string) { | ||||||
|     return str.charAt(0).toUpperCase() + str.slice(1); |     return str.charAt(0).toUpperCase() + str.slice(1); | ||||||
|   } |   } | ||||||
|  | 
 | ||||||
|  |   clearSoft404() { | ||||||
|  |     window['soft404'] = false; | ||||||
|  |     console.log('cleared soft 404'); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   logSoft404() { | ||||||
|  |     window['soft404'] = true; | ||||||
|  |     console.log('set soft 404'); | ||||||
|  |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -179,8 +179,15 @@ class Server { | |||||||
|       await page.waitForNetworkIdle({ |       await page.waitForNetworkIdle({ | ||||||
|         timeout: config.PUPPETEER.RENDER_TIMEOUT || 3000, |         timeout: config.PUPPETEER.RENDER_TIMEOUT || 3000, | ||||||
|       }); |       }); | ||||||
|  |       const is404 = await page.evaluate(async () => { | ||||||
|  |         return !!window['soft404']; | ||||||
|  |       }); | ||||||
|  |       if (is404) { | ||||||
|  |         return '404'; | ||||||
|  |       } else { | ||||||
|         let html = await page.content(); |         let html = await page.content(); | ||||||
|         return html; |         return html; | ||||||
|  |       } | ||||||
|     } catch (e) { |     } catch (e) { | ||||||
|       if (e instanceof TimeoutError) { |       if (e instanceof TimeoutError) { | ||||||
|         let html = await page.content(); |         let html = await page.content(); | ||||||
| @ -258,7 +265,11 @@ class Server { | |||||||
|         result = await this.renderUnfurlMeta(rawPath); |         result = await this.renderUnfurlMeta(rawPath); | ||||||
|       } |       } | ||||||
|       if (result && result.length) { |       if (result && result.length) { | ||||||
|  |         if (result === '404') { | ||||||
|  |           res.status(404).send(); | ||||||
|  |         } else { | ||||||
|           res.send(result); |           res.send(result); | ||||||
|  |         } | ||||||
|       } else { |       } else { | ||||||
|         res.status(500).send(); |         res.status(500).send(); | ||||||
|       } |       } | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user