diff --git a/index.js b/index.js index 381fc13..16d15cc 100644 --- a/index.js +++ b/index.js @@ -239,13 +239,20 @@ function getPassedContext(event, body) { let k; if ((k = key.match(/^ctx[_-](.*)$/))) { - // Check for any type conversions on the query parameter - let type = event.queryStringParameters["t_" + key]; - let converter = typeConverters[type]; - if (converter) { - value = converter(value); + // if the key is just `ctx_` or `ctx-` and there is a value, parse it as JSON + if (!k[1] && value) { + ctx[key] = JSON.parse(value); + } else { + // Check for any type conversions on the query parameter + let type = event.queryStringParameters["t_" + key]; + let converter = typeConverters[type]; + if (converter) { + value = converter(value); + } + ctx[k[1]] = value; + } - ctx[k[1]] = value; + } return ctx; }, diff --git a/package.json b/package.json index cf4905c..6ba6e8f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "leo-auth", - "version": "4.0.3", + "version": "4.0.4", "description": "Auth sdk", "homepage": "https://leoplatform.io", "main": "index.js", diff --git a/test/index.utest.ts b/test/index.utest.ts index 9a8cd9a..1b796d3 100644 --- a/test/index.utest.ts +++ b/test/index.utest.ts @@ -289,6 +289,20 @@ describe('index', function () { }); assert.deepEqual(user.identities, [ "role/test2", "role/test3", "role/aws_key" ]); }); + it("get user - custom context with JSON value", async() => { + let sdk = require(".."); + let user = await sdk.getUser({ + queryStringParameters: { + ctx_: "{\"test\":\"value\"}" + }, + requestContext: { + identity: { + caller: "identity-1234" + } + } + }); + assert.deepEqual(user.context, { key: "identity-1234", ctx_: { test: "value" } }); + }); }); describe("auth user", () => {