***

title: "RequestContextService"
generated: true
---------------

<GenerationInfo sourceFile="packages/core/src/service/helpers/request-context/request-context.service.ts" sourceLine="25" packageName="@vendure/core" />

Creates new [RequestContext](/current/core/reference/typescript-api/request/request-context#requestcontext) instances.

```ts title="Signature"
class RequestContextService {
    create(config: {
        req?: Request;
        apiType: ApiType;
        channelOrToken?: Channel | string;
        languageCode?: LanguageCode;
        currencyCode?: CurrencyCode;
        user?: User;
        activeOrderId?: ID;
    }) => Promise<RequestContext>;
    fromRequest(req: Request, info?: GraphQLResolveInfo, requiredPermissions?: Permission[], session?: CachedSession) => Promise<RequestContext>;
}
```

<div className="members-wrapper">

### create

\<MemberInfo kind="method" type={`(config: {         req?: Request;         apiType: <a href='/current/core/reference/typescript-api/request/api-type#apitype'>ApiType</a>;         channelOrToken?: <a href='/current/core/reference/typescript-api/entities/channel#channel'>Channel</a> | string;         languageCode?: <a href='/current/core/reference/typescript-api/common/language-code#languagecode'>LanguageCode</a>;         currencyCode?: <a href='/current/core/reference/typescript-api/common/currency-code#currencycode'>CurrencyCode</a>;         user?: <a href='/current/core/reference/typescript-api/entities/user#user'>User</a>;         activeOrderId?: <a href='/current/core/reference/typescript-api/common/id#id'>ID</a>;     }) => Promise<<a href='/current/core/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>>`}  since="1.5.0"  />

Creates a RequestContext based on the config provided. This can be useful when interacting
with services outside the request-response cycle, for example in stand-alone scripts or in
worker jobs.

Without a `user`, the resulting context is anonymous and carries no permissions, which
services that perform permission checks will reject. Pass the `User` the context should act
as — commonly the superadmin for administrative scripts:

```ts
const { superadminCredentials } = this.configService.authOptions;
const superAdminUser = await this.connection.rawConnection.getRepository(User).findOneOrFail({
    where: { identifier: superadminCredentials.identifier },
    // The roles (and their channels) must be loaded, or the resulting context
    // has the user's id but no permissions.
    relations: { roles: { channels: true } },
});

const ctx = await this.requestContextService.create({
    apiType: 'admin',
    user: superAdminUser,
});
```

### fromRequest

\<MemberInfo kind="method" type={`(req: Request, info?: GraphQLResolveInfo, requiredPermissions?: <a href='/current/core/reference/typescript-api/common/permission#permission'>Permission</a>[], session?: <a href='/current/core/reference/typescript-api/auth/session-cache-strategy#cachedsession'>CachedSession</a>) => Promise<<a href='/current/core/reference/typescript-api/request/request-context#requestcontext'>RequestContext</a>>`}   />

Creates a new RequestContext based on an Express request object. This is used internally
in the API layer by the AuthGuard, and creates the RequestContext which is then passed
to all resolvers & controllers.

</div>
