| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- import { LanguageCode } from '@vendure/common/lib/generated-types';
- import { ID } from '@vendure/common/lib/shared-types';
- import i18next from 'i18next';
- import { DEFAULT_LANGUAGE_CODE } from '../../common/constants';
- import { Channel } from '../../entity/channel/channel.entity';
- import { AuthenticatedSession } from '../../entity/session/authenticated-session.entity';
- import { Session } from '../../entity/session/session.entity';
- import { User } from '../../entity/user/user.entity';
- /**
- * @description
- * The RequestContext holds information relevant to the current request, which may be
- * required at various points of the stack.
- *
- * @docsCategory
- * @docsWeight 1
- */
- export class RequestContext {
- private readonly _languageCode: LanguageCode;
- private readonly _channel: Channel;
- private readonly _session?: Session;
- private readonly _isAuthorized: boolean;
- private readonly _authorizedAsOwnerOnly: boolean;
- private readonly _translationFn: i18next.TranslationFunction;
- /**
- * @internal
- */
- constructor(options: {
- channel: Channel;
- session?: Session;
- languageCode?: LanguageCode;
- isAuthorized: boolean;
- authorizedAsOwnerOnly: boolean;
- translationFn?: i18next.TranslationFunction;
- }) {
- const { channel, session, languageCode, translationFn } = options;
- this._channel = channel;
- this._session = session;
- this._languageCode =
- languageCode || (channel && channel.defaultLanguageCode) || DEFAULT_LANGUAGE_CODE;
- this._isAuthorized = options.isAuthorized;
- this._authorizedAsOwnerOnly = options.authorizedAsOwnerOnly;
- this._translationFn = translationFn || (((key: string) => key) as any);
- }
- get channel(): Channel {
- return this._channel;
- }
- get channelId(): ID {
- return this._channel.id;
- }
- get languageCode(): LanguageCode {
- return this._languageCode;
- }
- get session(): Session | undefined {
- return this._session;
- }
- get activeUserId(): ID | undefined {
- const user = this.activeUser;
- if (user) {
- return user.id;
- }
- }
- get activeUser(): User | undefined {
- if (this.session) {
- if (this.isAuthenticatedSession(this.session)) {
- return this.session.user;
- }
- }
- }
- /**
- * True if the current session is authorized to access the current resolver method.
- */
- get isAuthorized(): boolean {
- return this._isAuthorized;
- }
- /**
- * True if the current anonymous session is only authorized to operate on entities that
- * are owned by the current session.
- */
- get authorizedAsOwnerOnly(): boolean {
- return this._authorizedAsOwnerOnly;
- }
- /**
- * @description
- * Translate the given i18n key
- */
- translate(key: string, variables?: { [k: string]: any }): string {
- try {
- return this._translationFn(key, variables);
- } catch (e) {
- return `Translation format error: ${e.message}). Original key: ${key}`;
- }
- }
- private isAuthenticatedSession(session: Session): session is AuthenticatedSession {
- return session.hasOwnProperty('user');
- }
- }
|