@accounter/server
Version:
Accounter GraphQL server
54 lines • 3.19 kB
JavaScript
import { AdminContextProvider } from '../../admin-context/providers/admin-context.provider.js';
import { AuthContextProvider } from '../../auth/providers/auth-context.provider.js';
import { resolveMembershipBusinessNames } from '../../financial-entities/helpers/membership-names.helper.js';
export const userContextResolvers = {
Query: {
userContext: async (_, __, { injector }) => {
const authContext = await injector.get(AuthContextProvider).getAuthContext();
// Names come from each business's `financial_entities` row, so RLS limits
// them to this request's read scope: a scoped request leaves out-of-scope
// memberships unnamed. That is intentional here — the client's scope
// switcher, which must name every membership to let a user leave a narrow
// scope, reads `myMemberships` unscoped instead.
const businessNamesMap = await resolveMembershipBusinessNames(injector, authContext?.memberships ?? []);
const memberships = (authContext?.memberships ?? []).map((membership) => ({
businessId: membership.businessId,
role: membership.roleId,
businessName: membership.businessName ?? businessNamesMap.get(membership.businessId) ?? null,
}));
const activeReadScope = authContext?.activeReadScope?.businessIds ?? [];
// Single-business preference fields only make sense when the request reads
// from exactly one business; for multi-business reads they are null and
// callers must narrow the scope to obtain them.
if (activeReadScope.length !== 1) {
return {
memberships,
activeReadScope,
defaultLocalCurrency: null,
defaultCryptoConversionFiatCurrency: null,
ledgerLock: null,
financialAccountsBusinessesIds: null,
foreignSecuritiesBusinessId: null,
locality: null,
};
}
const { financialAccounts: { internalWalletsIds }, bankDeposits: { bankDepositBusinessId }, foreignSecurities: { foreignSecuritiesBusinessId }, defaultLocalCurrency, defaultCryptoConversionFiatCurrency, ledgerLock, locality, } = await injector.get(AdminContextProvider).getVerifiedAdminContext();
const financialAccountsBusinessesIds = [...internalWalletsIds];
if (bankDepositBusinessId) {
// TODO: this should be removed after bank deposit conversion to financial account is done (then - it should be added to internalWalletsIds)
financialAccountsBusinessesIds.push(bankDepositBusinessId);
}
return {
memberships,
activeReadScope,
defaultLocalCurrency,
defaultCryptoConversionFiatCurrency,
ledgerLock,
financialAccountsBusinessesIds,
foreignSecuritiesBusinessId,
locality,
};
},
},
};
//# sourceMappingURL=user-context.resolver.js.map