From d660b1740f06f2582debd3a713517eeda037f947 Mon Sep 17 00:00:00 2001 From: Tobias Schneider Date: Sat, 4 Jun 2022 17:23:53 +0200 Subject: [PATCH] `.decode()` syntax change to support headers --- index.js | 5 ++++- index.test.js | 10 +++++++--- package.json | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/index.js b/index.js index bec9fc7..e47ba01 100644 --- a/index.js +++ b/index.js @@ -116,7 +116,10 @@ class JWT { return await crypto.subtle.verify(importAlgorithm, key, Base64URL.parse(tokenParts[2]), this._utf8ToUint8Array(`${tokenParts[0]}.${tokenParts[1]}`)) } decode(token) { - return this._decodePayload(token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/')) + return { + header: this._decodePayload(token.split('.')[0].replace(/-/g, '+').replace(/_/g, '/')), + payload: this._decodePayload(token.split('.')[1].replace(/-/g, '+').replace(/_/g, '/')) + } } } diff --git a/index.test.js b/index.test.js index aba8566..a0cd222 100644 --- a/index.test.js +++ b/index.test.js @@ -115,12 +115,14 @@ test.each(Object.entries(secrets))(`Self test: %s`, async (algorithm, key) => { privateKey = key.private publicKey = key.public } + const token = await JWT.sign(testPayload, privateKey, { algorithm }) expect(token).toMatch(/^[a-zA-Z0-9\-_]+\.[a-zA-Z0-9\-_]+\.[a-zA-Z0-9\-_]+$/) + const verified = await JWT.verify(token, publicKey, { algorithm }) expect(verified).toBeTruthy() - const payload = JWT.decode(token) - expect(payload).toBeTruthy() + + const { payload } = JWT.decode(token) expect({ sub: payload.sub, name: payload.name @@ -151,9 +153,11 @@ test.each(Object.entries(externalTokens))('Verify external tokens: %s', async (a privateKey = key.private publicKey = key.public } + const verified = await JWT.verify(token, publicKey, { algorithm }) expect(verified).toBeTruthy() - const payload = JWT.decode(token) + + const { payload } = JWT.decode(token) expect({ sub: payload.sub, name: payload.name diff --git a/package.json b/package.json index e18c3d9..e2040a0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@tsndr/cloudflare-worker-jwt", - "version": "1.3.1", + "version": "1.4.0", "description": "A lightweight JWT implementation with ZERO dependencies for Cloudflare Worker", "main": "index.js", "scripts": {