@@ -2,149 +2,155 @@ import { jwtDecoder } from "@kinde/jwt-decoder";
22import { KindeAccessToken , KindeIdToken } from "../types" ;
33import { config } from "../config/index" ;
44import { generateUserObject } from "../utils/generateUserObject" ;
5- import { validateToken } from "@kinde/jwt-validator" ;
6- import { refreshTokens } from "../utils/refreshTokens" ;
75import { getAccessToken } from "../utils/getAccessToken" ;
86import RouterClient from "../routerClients/RouterClient" ;
97import { getIdToken } from "../utils/getIdToken" ;
108import { isTokenExpired } from "../utils/jwt/validation" ;
119import { sessionManager } from "../session/sessionManager" ;
1210import { kindeClient } from "../session/kindeServerClient" ;
11+ import { RequestQueueManager } from "../utils/workQueue" ;
1312
1413/**
1514 *
1615 * @param {RouterClient } routerClient
1716 * @returns
1817 */
1918export const setup = async ( routerClient : RouterClient ) => {
20- try {
21- let accessTokenEncoded = await getAccessToken ( routerClient . req ) ;
22- let idTokenEncoded = await getIdToken ( routerClient . req ) ;
19+ const queueManager = RequestQueueManager . getInstance ( ) ;
2320
24- if ( ! accessTokenEncoded || ! idTokenEncoded ) {
25- if ( config . isDebugMode ) {
26- console . log ( "setup: no access or id token - returning NOT_LOGGED_IN" ) ;
21+ return queueManager . enqueue ( async ( ) => {
22+ try {
23+ let accessTokenEncoded = await getAccessToken ( routerClient . req ) ;
24+ let idTokenEncoded = await getIdToken ( routerClient . req ) ;
25+
26+ if ( ! accessTokenEncoded || ! idTokenEncoded ) {
27+ if ( config . isDebugMode ) {
28+ console . log ( "setup: no access or id token - returning NOT_LOGGED_IN" ) ;
29+ }
30+ return routerClient . json (
31+ {
32+ message : "NOT_LOGGED_IN" ,
33+ } ,
34+ { status : 200 } ,
35+ ) ;
2736 }
28- return routerClient . json (
29- {
30- message : "NOT_LOGGED_IN" ,
31- } ,
32- { status : 200 } ,
33- ) ;
34- }
3537
36- const session = await sessionManager ( routerClient . req ) ;
38+ const session = await sessionManager ( routerClient . req ) ;
3739
38- if ( isTokenExpired ( accessTokenEncoded ) || isTokenExpired ( idTokenEncoded ) ) {
39- if ( config . isDebugMode ) {
40- console . log ( "setup: access or id token expired - attempting refresh" ) ;
40+ if (
41+ isTokenExpired ( accessTokenEncoded ) ||
42+ isTokenExpired ( idTokenEncoded )
43+ ) {
44+ if ( config . isDebugMode ) {
45+ console . log ( "setup: access or id token expired - attempting refresh" ) ;
46+ }
47+ try {
48+ const refreshResponse = await kindeClient . refreshTokens ( session ) ;
49+ accessTokenEncoded = refreshResponse . access_token ;
50+ idTokenEncoded = refreshResponse . id_token ;
51+ } catch ( error ) {
52+ if ( config . isDebugMode ) {
53+ console . error ( "setup: refresh tokens failed - returning error" ) ;
54+ }
55+ return routerClient . json (
56+ { message : "REFRESH_FAILED" , error } ,
57+ { status : 500 } ,
58+ ) ;
59+ }
4160 }
61+
62+ let accessToken : KindeAccessToken | null = null ;
63+ let idToken : KindeIdToken | null = null ;
64+
4265 try {
43- const refreshResponse = await kindeClient . refreshTokens ( session ) ;
44- accessTokenEncoded = refreshResponse . access_token ;
45- idTokenEncoded = refreshResponse . id_token ;
66+ accessToken = jwtDecoder < KindeAccessToken > ( accessTokenEncoded ) ;
4667 } catch ( error ) {
4768 if ( config . isDebugMode ) {
48- console . error ( "setup: refresh tokens failed - returning error" ) ;
69+ console . error (
70+ "setup: access token decode failed, redirecting to login" ,
71+ ) ;
4972 }
5073 return routerClient . json (
51- { message : "REFRESH_FAILED " , error } ,
74+ { message : "ACCESS_TOKEN_DECODE_FAILED " , error } ,
5275 { status : 500 } ,
5376 ) ;
5477 }
55- }
5678
57- let accessToken : KindeAccessToken | null = null ;
58- let idToken : KindeIdToken | null = null ;
79+ try {
80+ idToken = jwtDecoder < KindeIdToken > ( idTokenEncoded ) ;
81+ } catch ( error ) {
82+ if ( config . isDebugMode ) {
83+ console . error ( "setup: id token decode failed, redirecting to login" ) ;
84+ }
85+ return routerClient . json (
86+ { message : "ID_TOKEN_DECODE_FAILED" , error } ,
87+ { status : 500 } ,
88+ ) ;
89+ }
5990
60- try {
61- accessToken = jwtDecoder < KindeAccessToken > ( accessTokenEncoded ) ;
62- } catch ( error ) {
63- if ( config . isDebugMode ) {
64- console . error (
65- "setup: access token decode failed, redirecting to login" ,
91+ if ( ! accessToken || ! idToken ) {
92+ return routerClient . json (
93+ { message : "TOKENS_MISSING" , error : "No access or id token" } ,
94+ { status : 500 } ,
6695 ) ;
6796 }
68- return routerClient . json (
69- { message : "ACCESS_TOKEN_DECODE_FAILED" , error } ,
70- { status : 500 } ,
71- ) ;
72- }
7397
74- try {
75- idToken = jwtDecoder < KindeIdToken > ( idTokenEncoded ) ;
98+ const permissions = accessToken . permissions ;
99+
100+ const organization = accessToken . org_code ;
101+ const featureFlags = accessToken . feature_flags ;
102+ const userOrganizations = idToken . org_codes ;
103+ const orgName = accessToken . org_name ;
104+ const orgProperties = accessToken . organization_properties ;
105+ const orgNames = idToken . organizations ;
106+
107+ return routerClient . json ( {
108+ accessToken,
109+ accessTokenEncoded,
110+ accessTokenRaw : accessTokenEncoded ,
111+ idToken,
112+ idTokenRaw : idTokenEncoded ,
113+ idTokenEncoded,
114+ user : generateUserObject ( idToken , accessToken ) ,
115+ permissions : {
116+ permissions,
117+ orgCode : organization ,
118+ } ,
119+ needsRefresh : false ,
120+ message : "OK" ,
121+ organization : {
122+ orgCode : organization ,
123+ orgName,
124+ properties : {
125+ city : orgProperties ?. kp_org_city ?. v ,
126+ industry : orgProperties ?. kp_org_industry ?. v ,
127+ postcode : orgProperties ?. kp_org_postcode ?. v ,
128+ state_region : orgProperties ?. kp_org_state_region ?. v ,
129+ street_address : orgProperties ?. kp_org_street_address ?. v ,
130+ street_address_2 : orgProperties ?. kp_org_street_address_2 ?. v ,
131+ } ,
132+ } ,
133+ featureFlags,
134+ userOrganizations : {
135+ orgCodes : userOrganizations ,
136+ orgs : orgNames ?. map ( ( org ) => ( {
137+ code : org ?. id ,
138+ name : org ?. name ,
139+ } ) ) ,
140+ } ,
141+ } ) ;
76142 } catch ( error ) {
77143 if ( config . isDebugMode ) {
78- console . error ( "setup: id token decode failed, redirecting to login" ) ;
144+ console . error ( "setup: failed, error: " , error ) ;
79145 }
80- return routerClient . json (
81- { message : "ID_TOKEN_DECODE_FAILED" , error } ,
82- { status : 500 } ,
83- ) ;
84- }
85146
86- if ( ! accessToken || ! idToken ) {
87147 return routerClient . json (
88- { message : "TOKENS_MISSING" , error : "No access or id token" } ,
148+ {
149+ message : "SETUP_FAILED" ,
150+ error,
151+ } ,
89152 { status : 500 } ,
90153 ) ;
91154 }
92-
93- const permissions = accessToken . permissions ;
94-
95- const organization = accessToken . org_code ;
96- const featureFlags = accessToken . feature_flags ;
97- const userOrganizations = idToken . org_codes ;
98- const orgName = accessToken . org_name ;
99- const orgProperties = accessToken . organization_properties ;
100- const orgNames = idToken . organizations ;
101-
102- return routerClient . json ( {
103- accessToken,
104- accessTokenEncoded,
105- accessTokenRaw : accessTokenEncoded ,
106- idToken,
107- idTokenRaw : idTokenEncoded ,
108- idTokenEncoded,
109- user : generateUserObject ( idToken , accessToken ) ,
110- permissions : {
111- permissions,
112- orgCode : organization ,
113- } ,
114- needsRefresh : false ,
115- message : "OK" ,
116- organization : {
117- orgCode : organization ,
118- orgName,
119- properties : {
120- city : orgProperties ?. kp_org_city ?. v ,
121- industry : orgProperties ?. kp_org_industry ?. v ,
122- postcode : orgProperties ?. kp_org_postcode ?. v ,
123- state_region : orgProperties ?. kp_org_state_region ?. v ,
124- street_address : orgProperties ?. kp_org_street_address ?. v ,
125- street_address_2 : orgProperties ?. kp_org_street_address_2 ?. v ,
126- } ,
127- } ,
128- featureFlags,
129- userOrganizations : {
130- orgCodes : userOrganizations ,
131- orgs : orgNames ?. map ( ( org ) => ( {
132- code : org ?. id ,
133- name : org ?. name ,
134- } ) ) ,
135- } ,
136- } ) ;
137- } catch ( error ) {
138- if ( config . isDebugMode ) {
139- console . error ( "setup: failed, error: " , error ) ;
140- }
141-
142- return routerClient . json (
143- {
144- message : "SETUP_FAILED" ,
145- error,
146- } ,
147- { status : 500 } ,
148- ) ;
149- }
155+ } ) ;
150156} ;
0 commit comments