Improve workspace auth context surface (#18164)
This commit is contained in:
+2
-2
@@ -13,7 +13,7 @@ import {
|
||||
ActorFromAuthContextService,
|
||||
type RecordInput,
|
||||
} from 'src/engine/core-modules/actor/services/actor-from-auth-context.service';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
|
||||
@WorkspaceQueryHook(`*.createMany`)
|
||||
export class CreatedByCreateManyPreQueryHook
|
||||
@@ -24,7 +24,7 @@ export class CreatedByCreateManyPreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
objectName: string,
|
||||
payload: CreateManyResolverArgs<RecordInput>,
|
||||
): Promise<CreateManyResolverArgs<RecordInput>> {
|
||||
|
||||
+2
-2
@@ -13,7 +13,7 @@ import {
|
||||
ActorFromAuthContextService,
|
||||
type RecordInput,
|
||||
} from 'src/engine/core-modules/actor/services/actor-from-auth-context.service';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
|
||||
@WorkspaceQueryHook(`*.createOne`)
|
||||
export class CreatedByCreateOnePreQueryHook
|
||||
@@ -24,7 +24,7 @@ export class CreatedByCreateOnePreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
objectName: string,
|
||||
payload: CreateOneResolverArgs<RecordInput>,
|
||||
): Promise<CreateOneResolverArgs<RecordInput>> {
|
||||
|
||||
+2
-2
@@ -13,7 +13,7 @@ import {
|
||||
ActorFromAuthContextService,
|
||||
type RecordInput,
|
||||
} from 'src/engine/core-modules/actor/services/actor-from-auth-context.service';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
|
||||
@WorkspaceQueryHook(`*.updateMany`)
|
||||
export class UpdatedByUpdateManyPreQueryHook
|
||||
@@ -24,7 +24,7 @@ export class UpdatedByUpdateManyPreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
objectName: string,
|
||||
payload: UpdateManyResolverArgs<RecordInput>,
|
||||
): Promise<UpdateManyResolverArgs<RecordInput>> {
|
||||
|
||||
+2
-2
@@ -13,7 +13,7 @@ import {
|
||||
ActorFromAuthContextService,
|
||||
type RecordInput,
|
||||
} from 'src/engine/core-modules/actor/services/actor-from-auth-context.service';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
|
||||
@WorkspaceQueryHook(`*.updateOne`)
|
||||
export class UpdatedByUpdateOnePreQueryHook
|
||||
@@ -24,7 +24,7 @@ export class UpdatedByUpdateOnePreQueryHook
|
||||
) {}
|
||||
|
||||
async execute(
|
||||
authContext: AuthContext,
|
||||
authContext: WorkspaceAuthContext,
|
||||
objectName: string,
|
||||
payload: UpdateOneResolverArgs<RecordInput>,
|
||||
): Promise<UpdateOneResolverArgs<RecordInput>> {
|
||||
|
||||
+26
-104
@@ -1,5 +1,4 @@
|
||||
import { Test, type TestingModule } from '@nestjs/testing';
|
||||
import { getRepositoryToken } from '@nestjs/typeorm';
|
||||
|
||||
import {
|
||||
type ActorMetadata,
|
||||
@@ -8,24 +7,11 @@ import {
|
||||
} from 'twenty-shared/types';
|
||||
|
||||
import { ActorFromAuthContextService } from 'src/engine/core-modules/actor/services/actor-from-auth-context.service';
|
||||
import { type ApiKeyEntity } from 'src/engine/core-modules/api-key/api-key.entity';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type UserEntity } from 'src/engine/core-modules/user/user.entity';
|
||||
import { type WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
||||
import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager';
|
||||
import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
|
||||
|
||||
type TestingAuthContext = Omit<AuthContext, 'workspace' | 'apiKey' | 'user'> & {
|
||||
workspace: Partial<WorkspaceEntity>;
|
||||
apiKey?: Partial<ApiKeyEntity>;
|
||||
user?: Partial<UserEntity>;
|
||||
};
|
||||
|
||||
type ExpectedResult = { createdBy: ActorMetadata }[];
|
||||
|
||||
// TODO create util
|
||||
const fromFullNameMetadataToName = ({
|
||||
firstName,
|
||||
lastName,
|
||||
@@ -33,35 +19,11 @@ const fromFullNameMetadataToName = ({
|
||||
|
||||
describe('ActorFromAuthContextService', () => {
|
||||
let service: ActorFromAuthContextService;
|
||||
const mockWorkspaceMemberRepository = {
|
||||
findOneOrFail: jest.fn(),
|
||||
};
|
||||
const globalWorkspaceOrmManager: jest.Mocked<
|
||||
Pick<
|
||||
GlobalWorkspaceOrmManager,
|
||||
'getRepository' | 'executeInWorkspaceContext'
|
||||
>
|
||||
> = {
|
||||
getRepository: jest.fn().mockResolvedValue(mockWorkspaceMemberRepository),
|
||||
executeInWorkspaceContext: jest
|
||||
.fn()
|
||||
.mockImplementation((fn: () => any, _authContext?: any) => fn()),
|
||||
};
|
||||
|
||||
beforeEach(async () => {
|
||||
const module: TestingModule = await Test.createTestingModule({
|
||||
providers: [
|
||||
ActorFromAuthContextService,
|
||||
{
|
||||
provide: GlobalWorkspaceOrmManager,
|
||||
useValue: globalWorkspaceOrmManager,
|
||||
},
|
||||
{
|
||||
provide: getRepositoryToken(FieldMetadataEntity),
|
||||
useValue: {
|
||||
findOne: jest.fn().mockResolvedValue(true),
|
||||
},
|
||||
},
|
||||
{
|
||||
provide: WorkspaceManyOrAllFlatEntityMapsCacheService,
|
||||
useValue: {
|
||||
@@ -117,101 +79,60 @@ describe('ActorFromAuthContextService', () => {
|
||||
it('should be defined', () => {
|
||||
expect(service).toBeDefined();
|
||||
});
|
||||
|
||||
describe('injectCreatedBy', () => {
|
||||
it('should build metadata from workspaceMemberId and user when both are present', async () => {
|
||||
it('should build metadata from workspaceMember when user auth context', async () => {
|
||||
const workspaceMemberName = {
|
||||
firstName: 'John',
|
||||
lastName: 'Doe',
|
||||
};
|
||||
|
||||
const authContext = {
|
||||
type: 'user',
|
||||
workspaceMemberId: '20202020-0b5c-4178-bed7-d371f6411eaa',
|
||||
userWorkspaceId: '20202020-1234-5678-9012-345678901234',
|
||||
user: {
|
||||
firstName: '',
|
||||
lastName: '',
|
||||
id: '20202020-9aae-49a8-bafc-ac44bae62d6d',
|
||||
},
|
||||
workspace: { id: '20202020-bdec-497f-847a-1bb334fefe58' },
|
||||
} as const satisfies TestingAuthContext;
|
||||
|
||||
const mockedWorkspaceMember = {
|
||||
id: '20202020-0b5c-4178-bed7-d371f6411eaa',
|
||||
name: {
|
||||
firstName: 'John',
|
||||
lastName: 'Doe',
|
||||
workspaceMember: {
|
||||
id: '20202020-0b5c-4178-bed7-d371f6411eaa',
|
||||
name: workspaceMemberName,
|
||||
},
|
||||
} as const satisfies Partial<WorkspaceMemberWorkspaceEntity>;
|
||||
|
||||
mockWorkspaceMemberRepository.findOneOrFail.mockResolvedValueOnce(
|
||||
mockedWorkspaceMember,
|
||||
);
|
||||
workspace: { id: '20202020-bdec-497f-847a-1bb334fefe58' },
|
||||
} as unknown as WorkspaceAuthContext;
|
||||
|
||||
const result = await service.injectCreatedBy({
|
||||
records: [{}],
|
||||
objectMetadataNameSingular: 'person',
|
||||
authContext: authContext as AuthContext,
|
||||
authContext,
|
||||
});
|
||||
|
||||
expect(result).toEqual<ExpectedResult>([
|
||||
{
|
||||
createdBy: {
|
||||
context: {},
|
||||
name: fromFullNameMetadataToName(mockedWorkspaceMember.name),
|
||||
workspaceMemberId: authContext.workspaceMemberId,
|
||||
name: fromFullNameMetadataToName(workspaceMemberName),
|
||||
workspaceMemberId: '20202020-0b5c-4178-bed7-d371f6411eaa',
|
||||
source: FieldActorSource.MANUAL,
|
||||
},
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('should build metadata from user when workspaceMemberId is missing', async () => {
|
||||
const authContext = {
|
||||
user: {
|
||||
firstName: 'John',
|
||||
lastName: 'Doe',
|
||||
id: '20202020-9aae-49a8-bafc-ac44bae62d6d',
|
||||
},
|
||||
workspace: { id: '20202020-bdec-497f-847a-1bb334fefe58' },
|
||||
} as const satisfies TestingAuthContext;
|
||||
|
||||
const mockedWorkspaceMember = {
|
||||
id: '20202020-78a3-4520-ba74-b0e1b534a501',
|
||||
name: {
|
||||
firstName: 'Pepito',
|
||||
lastName: 'Dubois',
|
||||
},
|
||||
} as const satisfies Partial<WorkspaceMemberWorkspaceEntity>;
|
||||
|
||||
mockWorkspaceMemberRepository.findOneOrFail.mockResolvedValueOnce(
|
||||
mockedWorkspaceMember,
|
||||
);
|
||||
|
||||
const result = await service.injectCreatedBy({
|
||||
records: [{}],
|
||||
objectMetadataNameSingular: 'person',
|
||||
authContext: authContext as AuthContext,
|
||||
});
|
||||
|
||||
expect(result).toEqual<ExpectedResult>([
|
||||
{
|
||||
createdBy: {
|
||||
context: {},
|
||||
name: fromFullNameMetadataToName(mockedWorkspaceMember.name),
|
||||
workspaceMemberId: mockedWorkspaceMember.id,
|
||||
source: FieldActorSource.MANUAL,
|
||||
},
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it('should build metadata from apiKey when only apiKey is present', async () => {
|
||||
it('should build metadata from apiKey when apiKey auth context', async () => {
|
||||
const authContext = {
|
||||
type: 'apiKey',
|
||||
apiKey: {
|
||||
id: '20202020-56c2-471b-925d-31ed3ecd0951',
|
||||
name: 'API Key Name',
|
||||
},
|
||||
workspace: { id: '20202020-bdec-497f-847a-1bb334fefe58' },
|
||||
} as const satisfies TestingAuthContext;
|
||||
} as unknown as WorkspaceAuthContext;
|
||||
|
||||
const result = await service.injectCreatedBy({
|
||||
records: [{}],
|
||||
objectMetadataNameSingular: 'person',
|
||||
authContext: authContext as AuthContext,
|
||||
authContext,
|
||||
});
|
||||
|
||||
expect(result).toEqual<ExpectedResult>([
|
||||
@@ -219,7 +140,7 @@ describe('ActorFromAuthContextService', () => {
|
||||
createdBy: {
|
||||
source: FieldActorSource.API,
|
||||
workspaceMemberId: null,
|
||||
name: authContext.apiKey.name,
|
||||
name: 'API Key Name',
|
||||
context: {},
|
||||
},
|
||||
},
|
||||
@@ -228,14 +149,15 @@ describe('ActorFromAuthContextService', () => {
|
||||
|
||||
it('should throw error when no valid actor information is found', async () => {
|
||||
const authContext = {
|
||||
type: 'system',
|
||||
workspace: { id: 'workspace-id' },
|
||||
} as const satisfies TestingAuthContext;
|
||||
} as unknown as WorkspaceAuthContext;
|
||||
|
||||
await expect(
|
||||
service.injectCreatedBy({
|
||||
records: [{}],
|
||||
objectMetadataNameSingular: 'person',
|
||||
authContext: authContext as AuthContext,
|
||||
authContext,
|
||||
}),
|
||||
).rejects.toThrowErrorMatchingInlineSnapshot(
|
||||
`"Unable to build actor metadata - no valid actor information found in auth context"`,
|
||||
|
||||
+20
-50
@@ -1,27 +1,26 @@
|
||||
import { Injectable, Logger } from '@nestjs/common';
|
||||
|
||||
import { type ActorMetadata } from 'twenty-shared/types';
|
||||
import { assertIsDefinedOrThrow, isDefined } from 'twenty-shared/utils';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { buildCreatedByFromApiKey } from 'src/engine/core-modules/actor/utils/build-created-by-from-api-key.util';
|
||||
import { buildCreatedByFromApplication } from 'src/engine/core-modules/actor/utils/build-created-by-from-application.util';
|
||||
import { buildCreatedByFromFullNameMetadata } from 'src/engine/core-modules/actor/utils/build-created-by-from-full-name-metadata.util';
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { WorkspaceNotFoundDefaultError } from 'src/engine/core-modules/workspace/workspace.exception';
|
||||
import { isApiKeyAuthContext } from 'src/engine/core-modules/auth/guards/is-api-key-auth-context.guard';
|
||||
import { isApplicationAuthContext } from 'src/engine/core-modules/auth/guards/is-application-auth-context.guard';
|
||||
import { isUserAuthContext } from 'src/engine/core-modules/auth/guards/is-user-auth-context.guard';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/metadata-modules/flat-entity/services/workspace-many-or-all-flat-entity-maps-cache.service';
|
||||
import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps.util';
|
||||
import { buildFieldMapsFromFlatObjectMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/build-field-maps-from-flat-object-metadata.util';
|
||||
import { buildObjectIdByNameMaps } from 'src/engine/metadata-modules/flat-object-metadata/utils/build-object-id-by-name-maps.util';
|
||||
import { GlobalWorkspaceOrmManager } from 'src/engine/twenty-orm/global-workspace-datasource/global-workspace-orm.manager';
|
||||
import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
|
||||
|
||||
export type RecordInput = Record<string, unknown>;
|
||||
|
||||
export type InjectActorParams = {
|
||||
records: RecordInput[];
|
||||
objectMetadataNameSingular: string;
|
||||
authContext: AuthContext;
|
||||
authContext: WorkspaceAuthContext;
|
||||
};
|
||||
|
||||
@Injectable()
|
||||
@@ -29,7 +28,6 @@ export class ActorFromAuthContextService {
|
||||
private readonly logger = new Logger(ActorFromAuthContextService.name);
|
||||
|
||||
constructor(
|
||||
private readonly globalWorkspaceOrmManager: GlobalWorkspaceOrmManager,
|
||||
private readonly flatEntityMapsCacheService: WorkspaceManyOrAllFlatEntityMapsCacheService,
|
||||
) {}
|
||||
|
||||
@@ -89,8 +87,6 @@ export class ActorFromAuthContextService {
|
||||
> {
|
||||
const workspace = authContext.workspace;
|
||||
|
||||
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
|
||||
|
||||
const { flatObjectMetadataMaps, flatFieldMetadataMaps } =
|
||||
await this.flatEntityMapsCacheService.getOrRecomputeManyOrAllFlatEntityMaps(
|
||||
{
|
||||
@@ -131,7 +127,7 @@ export class ActorFromAuthContextService {
|
||||
|
||||
const clonedRecords = structuredClone(records);
|
||||
|
||||
const actorMetadata = await this.buildActorMetadata(authContext);
|
||||
const actorMetadata = this.buildActorMetadata(authContext);
|
||||
|
||||
for (const record of clonedRecords) {
|
||||
this.injectActorToRecord(actorMetadata, record, fieldName);
|
||||
@@ -159,49 +155,23 @@ export class ActorFromAuthContextService {
|
||||
}
|
||||
}
|
||||
|
||||
private async buildActorMetadata(
|
||||
authContext: AuthContext,
|
||||
): Promise<ActorMetadata> {
|
||||
const { workspace, user, apiKey, application } = authContext;
|
||||
|
||||
assertIsDefinedOrThrow(workspace, WorkspaceNotFoundDefaultError);
|
||||
|
||||
if (isDefined(user)) {
|
||||
return this.globalWorkspaceOrmManager.executeInWorkspaceContext(
|
||||
async () => {
|
||||
const workspaceMemberRepository =
|
||||
await this.globalWorkspaceOrmManager.getRepository<WorkspaceMemberWorkspaceEntity>(
|
||||
workspace.id,
|
||||
'workspaceMember',
|
||||
{ shouldBypassPermissionChecks: true },
|
||||
);
|
||||
|
||||
const workspaceMember = await workspaceMemberRepository.findOneOrFail(
|
||||
{
|
||||
where: {
|
||||
userId: user.id,
|
||||
},
|
||||
},
|
||||
);
|
||||
|
||||
return buildCreatedByFromFullNameMetadata({
|
||||
fullNameMetadata: workspaceMember.name,
|
||||
workspaceMemberId: workspaceMember.id,
|
||||
});
|
||||
},
|
||||
authContext as WorkspaceAuthContext,
|
||||
);
|
||||
}
|
||||
|
||||
if (isDefined(apiKey)) {
|
||||
return buildCreatedByFromApiKey({
|
||||
apiKey,
|
||||
private buildActorMetadata(authContext: WorkspaceAuthContext): ActorMetadata {
|
||||
if (isUserAuthContext(authContext)) {
|
||||
return buildCreatedByFromFullNameMetadata({
|
||||
fullNameMetadata: authContext.workspaceMember.name,
|
||||
workspaceMemberId: authContext.workspaceMemberId,
|
||||
});
|
||||
}
|
||||
|
||||
if (isDefined(application)) {
|
||||
if (isApiKeyAuthContext(authContext)) {
|
||||
return buildCreatedByFromApiKey({
|
||||
apiKey: authContext.apiKey,
|
||||
});
|
||||
}
|
||||
|
||||
if (isApplicationAuthContext(authContext)) {
|
||||
return buildCreatedByFromApplication({
|
||||
application,
|
||||
application: authContext.application,
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
-15
@@ -1,15 +0,0 @@
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
|
||||
export const isWorkspaceAuthContext = (
|
||||
context: AuthContext,
|
||||
): context is WorkspaceAuthContext => {
|
||||
return (
|
||||
isDefined(context.workspace) &&
|
||||
(isDefined(context.userWorkspaceId) ||
|
||||
isDefined(context.apiKey) ||
|
||||
isDefined(context.application))
|
||||
);
|
||||
};
|
||||
@@ -9,7 +9,7 @@ import { type WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-membe
|
||||
export { AUTH_CONTEXT_USER_SELECT_FIELDS } from 'src/engine/core-modules/auth/constants/auth-context-user-select-fields.constants';
|
||||
export { type AuthContextUser } from 'src/engine/core-modules/auth/types/auth-context-user.type';
|
||||
|
||||
export type AuthContext = {
|
||||
export type RawAuthContext = {
|
||||
user?: AuthContextUser | null | undefined;
|
||||
apiKey?: ApiKeyEntity | null | undefined;
|
||||
workspaceMemberId?: string;
|
||||
@@ -25,6 +25,9 @@ export type AuthContext = {
|
||||
};
|
||||
};
|
||||
|
||||
// @deprecated Use WorkspaceAuthContext instead
|
||||
export type AuthContext = RawAuthContext;
|
||||
|
||||
export type SerializableAuthContext = {
|
||||
userId?: string;
|
||||
userWorkspaceId?: string;
|
||||
|
||||
+10
-10
@@ -1,4 +1,4 @@
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type RawAuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
|
||||
export type WorkspaceAuthContextType =
|
||||
| 'system'
|
||||
@@ -9,27 +9,27 @@ export type WorkspaceAuthContextType =
|
||||
|
||||
interface BaseWorkspaceAuthContext {
|
||||
type: WorkspaceAuthContextType;
|
||||
workspace: NonNullable<AuthContext['workspace']>;
|
||||
workspace: NonNullable<RawAuthContext['workspace']>;
|
||||
workspaceMetadataVersion?: string;
|
||||
}
|
||||
|
||||
export interface ApiKeyWorkspaceAuthContext extends BaseWorkspaceAuthContext {
|
||||
type: 'apiKey';
|
||||
apiKey: NonNullable<AuthContext['apiKey']>;
|
||||
apiKey: NonNullable<RawAuthContext['apiKey']>;
|
||||
}
|
||||
|
||||
export interface UserWorkspaceAuthContext extends BaseWorkspaceAuthContext {
|
||||
type: 'user';
|
||||
userWorkspaceId: NonNullable<AuthContext['userWorkspaceId']>;
|
||||
user: NonNullable<AuthContext['user']>;
|
||||
workspaceMemberId: NonNullable<AuthContext['workspaceMemberId']>;
|
||||
workspaceMember: NonNullable<AuthContext['workspaceMember']>;
|
||||
userWorkspaceId: NonNullable<RawAuthContext['userWorkspaceId']>;
|
||||
user: NonNullable<RawAuthContext['user']>;
|
||||
workspaceMemberId: NonNullable<RawAuthContext['workspaceMemberId']>;
|
||||
workspaceMember: NonNullable<RawAuthContext['workspaceMember']>;
|
||||
}
|
||||
|
||||
export interface ApplicationWorkspaceAuthContext
|
||||
extends BaseWorkspaceAuthContext {
|
||||
type: 'application';
|
||||
application: NonNullable<AuthContext['application']>;
|
||||
application: NonNullable<RawAuthContext['application']>;
|
||||
}
|
||||
|
||||
export interface SystemWorkspaceAuthContext extends BaseWorkspaceAuthContext {
|
||||
@@ -39,8 +39,8 @@ export interface SystemWorkspaceAuthContext extends BaseWorkspaceAuthContext {
|
||||
export interface PendingActivationUserWorkspaceAuthContext
|
||||
extends BaseWorkspaceAuthContext {
|
||||
type: 'pendingActivationUser';
|
||||
userWorkspaceId: NonNullable<AuthContext['userWorkspaceId']>;
|
||||
user: NonNullable<AuthContext['user']>;
|
||||
userWorkspaceId: NonNullable<RawAuthContext['userWorkspaceId']>;
|
||||
user: NonNullable<RawAuthContext['user']>;
|
||||
}
|
||||
|
||||
export type WorkspaceAuthContext =
|
||||
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type RawAuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type ApiKeyWorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
|
||||
type ApiKeyAuthContextInput = {
|
||||
workspace: NonNullable<AuthContext['workspace']>;
|
||||
apiKey: NonNullable<AuthContext['apiKey']>;
|
||||
workspace: NonNullable<RawAuthContext['workspace']>;
|
||||
apiKey: NonNullable<RawAuthContext['apiKey']>;
|
||||
workspaceMetadataVersion?: string;
|
||||
};
|
||||
|
||||
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type RawAuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type ApplicationWorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
|
||||
type ApplicationAuthContextInput = {
|
||||
workspace: NonNullable<AuthContext['workspace']>;
|
||||
application: NonNullable<AuthContext['application']>;
|
||||
workspace: NonNullable<RawAuthContext['workspace']>;
|
||||
application: NonNullable<RawAuthContext['application']>;
|
||||
workspaceMetadataVersion?: string;
|
||||
};
|
||||
|
||||
|
||||
+4
-4
@@ -1,10 +1,10 @@
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type RawAuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type PendingActivationUserWorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
|
||||
type PendingActivationUserAuthContextInput = {
|
||||
workspace: NonNullable<AuthContext['workspace']>;
|
||||
userWorkspaceId: NonNullable<AuthContext['userWorkspaceId']>;
|
||||
user: NonNullable<AuthContext['user']>;
|
||||
workspace: NonNullable<RawAuthContext['workspace']>;
|
||||
userWorkspaceId: NonNullable<RawAuthContext['userWorkspaceId']>;
|
||||
user: NonNullable<RawAuthContext['user']>;
|
||||
workspaceMetadataVersion?: string;
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type RawAuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type SystemWorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
|
||||
type SystemAuthContextInput = {
|
||||
workspace: NonNullable<AuthContext['workspace']>;
|
||||
workspace: NonNullable<RawAuthContext['workspace']>;
|
||||
workspaceMetadataVersion?: string;
|
||||
};
|
||||
|
||||
|
||||
+6
-6
@@ -1,12 +1,12 @@
|
||||
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type RawAuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
|
||||
import { type UserWorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
|
||||
|
||||
type UserAuthContextInput = {
|
||||
workspace: NonNullable<AuthContext['workspace']>;
|
||||
userWorkspaceId: NonNullable<AuthContext['userWorkspaceId']>;
|
||||
user: NonNullable<AuthContext['user']>;
|
||||
workspaceMemberId: NonNullable<AuthContext['workspaceMemberId']>;
|
||||
workspaceMember: NonNullable<AuthContext['workspaceMember']>;
|
||||
workspace: NonNullable<RawAuthContext['workspace']>;
|
||||
userWorkspaceId: NonNullable<RawAuthContext['userWorkspaceId']>;
|
||||
user: NonNullable<RawAuthContext['user']>;
|
||||
workspaceMemberId: NonNullable<RawAuthContext['workspaceMemberId']>;
|
||||
workspaceMember: NonNullable<RawAuthContext['workspaceMember']>;
|
||||
workspaceMetadataVersion?: string;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user