/*
* Recursively merges user_metadata and app_metadata from secondary into primary user.
* Data of primary user takes preponderance.
* Array fields are joined.
*/
async function mergeMetadata(primaryUserId, secondaryUserId) {
// load both users with metedata.
const [primaryUser, secondaryUser] = await Promise.all(
[primaryUserId, secondaryUserId].map((uid) => auth0Client.getUser(uid))
);
const customizerCallback = function (objectValue, sourceValue) {
if (_.isArray(objectValue)) {
return sourceValue.concat(objectValue);
}
};
const mergedUserMetadata = _.merge(
{},
secondaryUser.user_metadata,
primaryUser.user_metadata,
customizerCallback
);
const mergedAppMetadata = _.merge(
{},
secondaryUser.app_metadata,
primaryUser.app_metadata,
customizerCallback
);
await auth0Client.updateUser(primaryUserId, {
user_metadata: mergedUserMetadata,
app_metadata: mergedAppMetadata,
});
}