@@ -30,6 +30,11 @@ function makeJwt(payload: Record<string, unknown>): string {
3030 return `${ encode ( { alg : "HS256" } ) } .${ encode ( { aud : [ ] , ...payload } ) } .sig` ;
3131}
3232
33+ function makeA2tJwt ( ) : string {
34+ const now = Math . floor ( Date . now ( ) / 1000 ) ;
35+ return makeJwt ( { exp : now + 3600 , iat : now } ) ;
36+ }
37+
3338beforeEach ( ( ) => {
3439 Object . defineProperty ( globalThis . crypto , "subtle" , {
3540 value : mockSubtle ,
@@ -131,7 +136,7 @@ describe("Auth2Stamper", () => {
131136 const stamper1 = new Auth2Stamper ( new IndexedDBAuth2StamperStorage ( dbName ) ) ;
132137 await stamper1 . init ( ) ;
133138 await stamper1 . setTokens ( {
134- accessToken : makeJwt ( { sub : "u" , ext : { a2t : "persisted-token" } } ) ,
139+ accessToken : makeJwt ( { sub : "u" , ext : { a2t : makeA2tJwt ( ) } } ) ,
135140 idType : "Bearer" ,
136141 } ) ;
137142
@@ -149,7 +154,7 @@ describe("Auth2Stamper", () => {
149154 const stamper = makeStamper ( ) ;
150155 await stamper . init ( ) ;
151156
152- await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : "my-token" } } ) , idType : "Bearer" } ) ;
157+ await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : makeA2tJwt ( ) } } ) , idType : "Bearer" } ) ;
153158
154159 await expect ( stamper . stamp ( { type : "OIDC" , data : Buffer . from ( "payload" ) } ) ) . resolves . toBeTruthy ( ) ;
155160 } ) ;
@@ -158,8 +163,9 @@ describe("Auth2Stamper", () => {
158163 const dbName = `persist-db-${ Date . now ( ) } ` ;
159164 const stamper = new Auth2Stamper ( new IndexedDBAuth2StamperStorage ( dbName ) ) ;
160165 await stamper . init ( ) ;
166+ const a2tJwt = makeA2tJwt ( ) ;
161167 await stamper . setTokens ( {
162- accessToken : makeJwt ( { sub : "u" , ext : { a2t : "auto-connect-token" } } ) ,
168+ accessToken : makeJwt ( { sub : "u" , ext : { a2t : a2tJwt } } ) ,
163169 idType : "Bearer" ,
164170 } ) ;
165171
@@ -170,14 +176,14 @@ describe("Auth2Stamper", () => {
170176 const decoded = JSON . parse ( Buffer . from ( stampStr , "base64url" ) . toString ( "utf-8" ) ) as {
171177 idToken : string ;
172178 } ;
173- expect ( decoded . idToken ) . toBe ( "auto-connect-token" ) ;
179+ expect ( decoded . idToken ) . toBe ( a2tJwt ) ;
174180 } ) ;
175181
176182 it ( "persists bearerToken and refreshToken to IndexedDB" , async ( ) => {
177183 const dbName = `persist-tokens-db-${ Date . now ( ) } ` ;
178184 const stamper = new Auth2Stamper ( new IndexedDBAuth2StamperStorage ( dbName ) ) ;
179185 await stamper . init ( ) ;
180- const accessToken = makeJwt ( { sub : "u" , ext : { a2t : "a2t-tok" } } ) ;
186+ const accessToken = makeJwt ( { sub : "u" , ext : { a2t : makeA2tJwt ( ) } } ) ;
181187 await stamper . setTokens ( {
182188 accessToken,
183189 idType : "Bearer" ,
@@ -203,7 +209,7 @@ describe("Auth2Stamper", () => {
203209 it ( "bearerToken returns '{idType} {accessToken}' after setTokens()" , async ( ) => {
204210 const stamper = makeStamper ( ) ;
205211 await stamper . init ( ) ;
206- const accessToken = makeJwt ( { sub : "test-user" , ext : { a2t : "a2t-tok" } } ) ;
212+ const accessToken = makeJwt ( { sub : "test-user" , ext : { a2t : makeA2tJwt ( ) } } ) ;
207213 await stamper . setTokens ( { accessToken, idType : "Bearer" , refreshToken : "refresh-tok" } ) ;
208214
209215 expect ( stamper . bearerToken ) . toBe ( `Bearer ${ accessToken } ` ) ;
@@ -212,7 +218,7 @@ describe("Auth2Stamper", () => {
212218 it ( "auth2Token.sub matches the sub claim in the access token" , async ( ) => {
213219 const stamper = makeStamper ( ) ;
214220 await stamper . init ( ) ;
215- const accessToken = makeJwt ( { sub : "test-user" , ext : { a2t : "a2t-tok" } } ) ;
221+ const accessToken = makeJwt ( { sub : "test-user" , ext : { a2t : makeA2tJwt ( ) } } ) ;
216222 await stamper . setTokens ( { accessToken, idType : "Bearer" } ) ;
217223
218224 expect ( stamper . auth2Token ?. sub ) . toBe ( "test-user" ) ;
@@ -221,7 +227,7 @@ describe("Auth2Stamper", () => {
221227 it ( "bearerToken returns null after clear()" , async ( ) => {
222228 const stamper = makeStamper ( ) ;
223229 await stamper . init ( ) ;
224- await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : "tok" } } ) , idType : "Bearer" } ) ;
230+ await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : makeA2tJwt ( ) } } ) , idType : "Bearer" } ) ;
225231 await stamper . clear ( ) ;
226232
227233 expect ( stamper . bearerToken ) . toBeNull ( ) ;
@@ -230,7 +236,7 @@ describe("Auth2Stamper", () => {
230236 it ( "auth2Token returns null after clear()" , async ( ) => {
231237 const stamper = makeStamper ( ) ;
232238 await stamper . init ( ) ;
233- await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : "tok" } } ) , idType : "Bearer" } ) ;
239+ await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : makeA2tJwt ( ) } } ) , idType : "Bearer" } ) ;
234240 await stamper . clear ( ) ;
235241
236242 expect ( stamper . auth2Token ) . toBeNull ( ) ;
@@ -247,7 +253,7 @@ describe("Auth2Stamper", () => {
247253 it ( "signs the data with ECDSA P-256 / SHA-256" , async ( ) => {
248254 const stamper = makeStamper ( ) ;
249255 await stamper . init ( ) ;
250- await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : "tok" } } ) , idType : "Bearer" } ) ;
256+ await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : makeA2tJwt ( ) } } ) , idType : "Bearer" } ) ;
251257
252258 const data = Buffer . from ( "test message" ) ;
253259 await stamper . stamp ( { type : "OIDC" , data } ) ;
@@ -270,7 +276,8 @@ describe("Auth2Stamper", () => {
270276 const stamper = makeStamper ( ) ;
271277 await stamper . init ( ) ;
272278
273- await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : "test-id-token" } } ) , idType : "Bearer" } ) ;
279+ const a2tJwt = makeA2tJwt ( ) ;
280+ await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : a2tJwt } } ) , idType : "Bearer" } ) ;
274281
275282 const stampStr = await stamper . stamp ( { type : "OIDC" , data : Buffer . from ( "payload" ) } ) ;
276283 const decoded = JSON . parse ( Buffer . from ( stampStr , "base64url" ) . toString ( "utf-8" ) ) as {
@@ -283,7 +290,7 @@ describe("Auth2Stamper", () => {
283290 } ;
284291
285292 expect ( decoded . kind ) . toBe ( "OIDC" ) ;
286- expect ( decoded . idToken ) . toBe ( "test-id-token" ) ;
293+ expect ( decoded . idToken ) . toBe ( a2tJwt ) ;
287294 expect ( decoded . algorithm ) . toBe ( "Secp256r1" ) ;
288295 expect ( decoded . salt ) . toBe ( "" ) ;
289296 expect ( typeof decoded . publicKey ) . toBe ( "string" ) ;
@@ -293,7 +300,7 @@ describe("Auth2Stamper", () => {
293300 it ( "uses the stored public key (base64url of raw P-256 bytes) in the OIDC stamp" , async ( ) => {
294301 const stamper = makeStamper ( ) ;
295302 await stamper . init ( ) ;
296- await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : "tok" } } ) , idType : "Bearer" } ) ;
303+ await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : makeA2tJwt ( ) } } ) , idType : "Bearer" } ) ;
297304
298305 const stampStr = await stamper . stamp ( { type : "OIDC" , data : Buffer . from ( "data" ) } ) ;
299306 const decoded = JSON . parse ( Buffer . from ( stampStr , "base64url" ) . toString ( "utf-8" ) ) as {
@@ -307,7 +314,7 @@ describe("Auth2Stamper", () => {
307314 it ( "works with empty data" , async ( ) => {
308315 const stamper = makeStamper ( ) ;
309316 await stamper . init ( ) ;
310- await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : "tok" } } ) , idType : "Bearer" } ) ;
317+ await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : makeA2tJwt ( ) } } ) , idType : "Bearer" } ) ;
311318 await expect ( stamper . stamp ( { type : "OIDC" , data : Buffer . from ( "" ) } ) ) . resolves . toBeTruthy ( ) ;
312319 } ) ;
313320 } ) ;
@@ -335,7 +342,7 @@ describe("Auth2Stamper", () => {
335342 it ( "clears the id token" , async ( ) => {
336343 const stamper = makeStamper ( ) ;
337344 await stamper . init ( ) ;
338- await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : "t" } } ) , idType : "Bearer" } ) ;
345+ await stamper . setTokens ( { accessToken : makeJwt ( { sub : "u" , ext : { a2t : makeA2tJwt ( ) } } ) , idType : "Bearer" } ) ;
339346
340347 await stamper . resetKeyPair ( ) ;
341348
0 commit comments