// Account-linking store: maps external SSO identities to internal users. Thin // logic layer over userIdentities.db (mirrors the users model split). const db = require('./userIdentities.db') // The link-only login lookup. Returns the identity row (with user_id) or null. async function findByProviderSubject(provider, subject) { return db.findByProviderSubject(provider, subject) } // Identities linked to a user (Account page). async function listForUser(userId) { return db.listForUser(userId) } // Link an external identity to an internal user. Returns the new row id. The // (provider, subject) UNIQUE constraint enforces one-identity-one-user at the DB. // `displayName` / `avatarUrl` are set by providers that report them (Steam); // the others leave them null. async function link({ userId, provider, subject, email, displayName, avatarUrl }) { return db.insert({ userId, provider, subject, email, displayName, avatarUrl }) } // Refresh a linked identity's name and avatar from a sign-in's profile. async function refreshProfile(identityId, { displayName, avatarUrl } = {}) { return db.updateProfile(identityId, { displayName, avatarUrl }) } // Unlink a provider from a user: every identity of it, or the one `identityId` // names. Returns rows removed (0 if nothing was linked). async function unlink(userId, provider, identityId = null) { return db.deleteForUserProvider(userId, provider, identityId) } module.exports = { findByProviderSubject, listForUser, link, refreshProfile, unlink }