diff --git a/.changeset/giant-badgers-clap.md b/.changeset/giant-badgers-clap.md new file mode 100644 index 0000000..33e092f --- /dev/null +++ b/.changeset/giant-badgers-clap.md @@ -0,0 +1,9 @@ +--- +"@labdigital/federated-token": patch +--- + +Check for values modified in deserializeAccessToken + +When you only set a value in a service, the token did not get updated in the gateway. +This was because the valueModified was only set after a token change, not just a value change. +This changes improves the check to fix that. diff --git a/src/token.test.ts b/src/token.test.ts index 88feebe..7b89fc3 100644 --- a/src/token.test.ts +++ b/src/token.test.ts @@ -136,6 +136,10 @@ describe("FederatedToken", () => { federatedToken.isAccessTokenModified(), "isModified should be true when trackModified is true and token is modified" ); + assert.isTrue( + federatedToken.isValueModified(), + "isModified should be true when trackModified is true and value is modified" + ); }); test("serializeAccessToken", () => { diff --git a/src/token.ts b/src/token.ts index cdff979..e733168 100644 --- a/src/token.ts +++ b/src/token.ts @@ -93,12 +93,15 @@ export class FederatedToken { Buffer.from(at, "base64").toString("ascii") ); - // Merge tokens into this object. Checking for modified tokens - for (const k in token.tokens) { - if (trackModified && !isEqual(this.tokens[k], token.tokens[k])) { - this._accessTokenModified = true; - } + if (trackModified) { + this._valueModified = !isEqual(this.values, token.values); + + this._accessTokenModified = Object.keys(token.tokens).some( + (key) => !isEqual(this.tokens[key], token.tokens[key]) + ); } + + // Merge tokens and values into "this" object. this.tokens = { ...this.tokens, ...token.tokens,