1
- document . addEventListener ( 'DOMContentLoaded' , async function ( ) {
1
+ function isJwtExpired ( token ) {
2
+ const parts = token . split ( "." ) ;
3
+ if ( parts . length !== 3 ) {
4
+ return true ;
5
+ }
2
6
3
- // Netlify function to get the coveo search token via API
4
- async function getsearchObj ( ) {
5
- const response = await fetch (
6
- window . location . origin + "/api/v1/auth/search_token"
7
- ) ;
8
- return response . json ( ) ;
9
- }
7
+ const [ _ , payload ] = parts ;
8
+ const decodedPayload = atob ( payload ) ;
9
+ const payloadObj = JSON . parse ( decodedPayload ) ;
10
10
11
- const searchObj = await getsearchObj ( )
12
- Coveo . SearchEndpoint . configureCloudV2Endpoint ( searchObj . org_id , searchObj . token , `https://${ searchObj . org_id } .org.coveo.com/rest/search` ) ;
11
+ const currentTime = Math . floor ( Date . now ( ) / 1000 ) ;
12
+ const expTime = payloadObj . exp ;
13
+ return currentTime >= expTime ;
14
+ }
13
15
14
- const analyticsElement = document . querySelector ( '.CoveoAnalytics' ) ;
15
- if ( analyticsElement ) {
16
- const analyticsEndpoint = `https://${ searchObj . org_id } .analytics.org.coveo.com/rest/ua` ;
17
- analyticsElement . setAttribute ( 'data-endpoint' , analyticsEndpoint ) ;
18
- }
16
+ async function getsearchObj ( ) {
17
+ const response = await fetch (
18
+ window . location . origin + "/api/v1/auth/search_token"
19
+ ) ;
20
+ return response . json ( ) ;
21
+ }
22
+
23
+ document . addEventListener ( "DOMContentLoaded" , async function ( ) {
24
+ const token = localStorage . getItem ( "coveo_jwt_v1" ) ;
25
+ const org_id = localStorage . getItem ( "coveo_org_id_v1" ) ;
26
+ let searchObj = { token, org_id } ;
27
+ if ( token === null || org_id === null || isJwtExpired ( token ) ) {
28
+ searchObj = await getsearchObj ( ) ;
29
+ localStorage . setItem ( "coveo_jwt_v1" , searchObj . token ) ;
30
+ localStorage . setItem ( "coveo_org_id_v1" , searchObj . org_id ) ;
31
+ }
19
32
20
- const root = document . getElementById ( "search" ) ;
21
- const searchBoxRoot = document . getElementById ( "searchbox" ) ;
22
- Coveo . initSearchbox ( searchBoxRoot , "/search.html" ) ;
23
- var resetbtn = document . querySelector ( '#reset_btn' ) ;
24
- if ( resetbtn ) {
25
- resetbtn . onclick = function ( ) {
26
- document . querySelector ( '.coveo-facet-header-eraser' ) . click ( ) ;
27
- } ;
33
+ Coveo . SearchEndpoint . configureCloudV2Endpoint (
34
+ searchObj . org_id ,
35
+ searchObj . token ,
36
+ `https://${ searchObj . org_id } .org.coveo.com/rest/search`
37
+ ) ;
38
+
39
+ const analyticsElement = document . querySelector ( ".CoveoAnalytics" ) ;
40
+ if ( analyticsElement ) {
41
+ const analyticsEndpoint = `https://${ searchObj . org_id } .analytics.org.coveo.com/rest/ua` ;
42
+ analyticsElement . setAttribute ( "data-endpoint" , analyticsEndpoint ) ;
43
+ }
44
+
45
+ const root = document . getElementById ( "search" ) ;
46
+ const searchBoxRoot = document . getElementById ( "searchbox" ) ;
47
+ Coveo . initSearchbox ( searchBoxRoot , "/search.html" ) ;
48
+ var resetbtn = document . querySelector ( "#reset_btn" ) ;
49
+ if ( resetbtn ) {
50
+ resetbtn . onclick = function ( ) {
51
+ document . querySelector ( ".coveo-facet-header-eraser" ) . click ( ) ;
52
+ } ;
53
+ }
54
+ Coveo . $$ ( root ) . on ( "querySuccess" , function ( e , args ) {
55
+ resetbtn . style . display = "block" ;
56
+ } ) ;
57
+ Coveo . $$ ( root ) . on ( "afterComponentsInitialization" , function ( e , data ) {
58
+ setTimeout ( function ( ) {
59
+ document . querySelector ( ".CoveoOmnibox input" ) . value = Coveo . state (
60
+ root ,
61
+ "q"
62
+ ) ;
63
+ } , 1000 ) ;
64
+ } ) ;
65
+ Coveo . $ ( "#search" ) . on ( "newResultsDisplayed" , function ( e , args ) {
66
+ for ( var i = 0 ; i < e . target . lastChild . children . length ; i ++ ) {
67
+ //Remove the title for tooltip box
68
+ Coveo . $ ( ".CoveoResultLink" ) . removeAttr ( "title" ) ;
28
69
}
29
- Coveo . $$ ( root ) . on ( "querySuccess" , function ( e , args ) {
30
- resetbtn . style . display = "block" ;
31
- } ) ;
32
- Coveo . $$ ( root ) . on ( 'afterComponentsInitialization' , function ( e , data ) {
33
- setTimeout ( function ( ) {
34
- document . querySelector ( '.CoveoOmnibox input' ) . value = Coveo . state ( root , 'q' ) ;
35
- } , 1000 ) ;
36
- } ) ;
37
- Coveo . $ ( '#search' ) . on ( "newResultsDisplayed" , function ( e , args ) {
38
- for ( var i = 0 ; i < e . target . lastChild . children . length ; i ++ ) {
39
- //Remove the title for tooltip box
40
- Coveo . $ ( '.CoveoResultLink' ) . removeAttr ( 'title' ) ;
41
- }
42
- } ) ;
43
- Coveo . init ( root , {
44
- f5_product_module : {
45
- dependsOn : "@f5_product" ,
46
- dependsOnCondition : ( parentFacet ) => {
47
- const id = parentFacet . options . id ;
48
- const value = "NGINX Management Suite" ;
49
- const selected = parentFacet . queryStateModel . get ( `f:${ id } ` )
50
- return selected . includes ( value ) ;
51
- }
52
- }
53
- } ) ;
54
- } )
55
-
56
-
70
+ } ) ;
71
+ Coveo . init ( root , {
72
+ f5_product_module : {
73
+ dependsOn : "@f5_product" ,
74
+ dependsOnCondition : ( parentFacet ) => {
75
+ const id = parentFacet . options . id ;
76
+ const value = "NGINX Management Suite" ;
77
+ const selected = parentFacet . queryStateModel . get ( `f:${ id } ` ) ;
78
+ return selected . includes ( value ) ;
79
+ } ,
80
+ } ,
81
+ } ) ;
82
+ } ) ;
0 commit comments