From edea33423c6c2da499d24283f21009fa4c089465 Mon Sep 17 00:00:00 2001 From: Jacob Bare Date: Wed, 14 Apr 2021 09:22:10 -0400 Subject: [PATCH] Create rapid identify JSON route/router --- .../marko-web-omeda-identity-x/package.json | 4 +- .../routes/rapid-identify.js | 40 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 packages/marko-web-omeda-identity-x/routes/rapid-identify.js diff --git a/packages/marko-web-omeda-identity-x/package.json b/packages/marko-web-omeda-identity-x/package.json index 4c92b56a3..af3d76e71 100644 --- a/packages/marko-web-omeda-identity-x/package.json +++ b/packages/marko-web-omeda-identity-x/package.json @@ -17,7 +17,9 @@ "graphql-tag": "^2.11.0" }, "peerDependencies": { - "@parameter1/base-cms-marko-web-identity-x": "^2.16.0" + "@parameter1/base-cms-marko-web": "^2.13.0", + "@parameter1/base-cms-marko-web-identity-x": "^2.16.0", + "express": "^4.17.1" }, "publishConfig": { "access": "public" diff --git a/packages/marko-web-omeda-identity-x/routes/rapid-identify.js b/packages/marko-web-omeda-identity-x/routes/rapid-identify.js new file mode 100644 index 000000000..4ea5eb44d --- /dev/null +++ b/packages/marko-web-omeda-identity-x/routes/rapid-identify.js @@ -0,0 +1,40 @@ +const { Router } = require('express'); +const { getAsObject } = require('@parameter1/base-cms-object-path'); +const { asyncRoute } = require('@parameter1/base-cms-utils'); +const jsonErrorHandler = require('@parameter1/base-cms-marko-web/express/json-error-handler'); +const omedaRapidIdentityX = require('../rapid-identify'); +const findOmedaEncryptedId = require('../utils/find-omeda-encrypted-id'); + +module.exports = ({ brandKey, productId } = {}) => { + if (!brandKey) throw new Error('An Omeda brand key is required to use this middleware.'); + if (!productId) throw new Error('An Omeda rapid identification product ID is required to use this middleware.'); + const router = Router(); + router.get('/', asyncRoute(async (req, res) => { + const data = { encryptedId: null, source: null }; + const { identityX } = req; + const context = await identityX.loadActiveContext(); + const user = getAsObject(context, 'user'); + if (!user.id) return res.json(data); + // determine if an encrypted ID already exists for this user and brand. + const encryptedId = findOmedaEncryptedId({ externalIds: user.externalIds, brandKey }); + if (encryptedId) { + data.encryptedId = encryptedId; + data.source = 'existing'; + } else { + // no omeda identifier found for this user, rapidly identify. + const { encryptedCustomerId } = await omedaRapidIdentityX({ + brandKey, + productId, + appUser: user, + identityX, + omedaGraphQL: req.$omeda, + }); + data.encryptedId = encryptedCustomerId; + data.source = 'new'; + } + return res.json(data); + })); + + router.use(jsonErrorHandler()); + return router; +};