Skip to content

Commit 9eaa654

Browse files
committed
Mapping as singleton
1 parent 37b5f4a commit 9eaa654

9 files changed

Lines changed: 24 additions & 51 deletions

File tree

x-pack/plugins/cases/server/client/cases/push.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import { createCaseError, flattenCaseSavedObject, getAlertInfoFromComments } fro
2525
import { ENABLE_CASE_CONNECTOR } from '../../../common/constants';
2626
import { CasesClient, CasesClientArgs, CasesClientInternal } from '..';
2727
import { Operations } from '../../authorization';
28+
import { casesConnectors } from '../../connectors';
2829

2930
/**
3031
* Returns true if the case should be closed based on the configuration settings and whether the case
@@ -77,7 +78,6 @@ export const push = async (
7778
user,
7879
logger,
7980
authorization,
80-
casesConnectors,
8181
} = clientArgs;
8282

8383
try {

x-pack/plugins/cases/server/client/cases/utils.test.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import {
3030
} from './utils';
3131
import { flattenCaseSavedObject } from '../../common';
3232
import { SECURITY_SOLUTION_OWNER } from '../../../common';
33-
import { CasesConnectorsFactory } from '../../connectors';
33+
import { casesConnectors } from '../../connectors';
3434

3535
const formatComment = {
3636
commentId: commentObj.id,
@@ -436,8 +436,6 @@ describe('utils', () => {
436436
isPreconfigured: false,
437437
};
438438

439-
const casesConnectors = new CasesConnectorsFactory().getCasesConnectors();
440-
441439
it('creates an external incident', async () => {
442440
const res = await createIncident({
443441
actionsClient: actionsMock,

x-pack/plugins/cases/server/client/configure/create_mappings.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,13 @@ import { ACTION_SAVED_OBJECT_TYPE } from '../../../../actions/server';
1010
import { createCaseError } from '../../common/error';
1111
import { CasesClientArgs } from '..';
1212
import { CreateMappingsArgs } from './types';
13+
import { casesConnectors } from '../../connectors';
1314

1415
export const createMappings = async (
1516
{ connector, owner }: CreateMappingsArgs,
1617
clientArgs: CasesClientArgs
1718
): Promise<ConnectorMappingsAttributes[]> => {
18-
const {
19-
unsecuredSavedObjectsClient,
20-
connectorMappingsService,
21-
logger,
22-
casesConnectors,
23-
} = clientArgs;
19+
const { unsecuredSavedObjectsClient, connectorMappingsService, logger } = clientArgs;
2420

2521
try {
2622
const mappings = casesConnectors.get(connector.type)?.getMapping() ?? [];

x-pack/plugins/cases/server/client/configure/update_mappings.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,13 @@ import { ACTION_SAVED_OBJECT_TYPE } from '../../../../actions/server';
1010
import { createCaseError } from '../../common/error';
1111
import { CasesClientArgs } from '..';
1212
import { UpdateMappingsArgs } from './types';
13+
import { casesConnectors } from '../../connectors';
1314

1415
export const updateMappings = async (
1516
{ connector, mappingId }: UpdateMappingsArgs,
1617
clientArgs: CasesClientArgs
1718
): Promise<ConnectorMappingsAttributes[]> => {
18-
const {
19-
unsecuredSavedObjectsClient,
20-
connectorMappingsService,
21-
logger,
22-
casesConnectors,
23-
} = clientArgs;
19+
const { unsecuredSavedObjectsClient, connectorMappingsService, logger } = clientArgs;
2420

2521
try {
2622
const mappings = casesConnectors.get(connector.type)?.getMapping() ?? [];

x-pack/plugins/cases/server/client/factory.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import { PluginStartContract as FeaturesPluginStart } from '../../../features/se
2727
import { PluginStartContract as ActionsPluginStart } from '../../../actions/server';
2828
import { AuthorizationAuditLogger } from '../authorization';
2929
import { CasesClient, createCasesClient } from '.';
30-
import { CasesConnectorsFactory } from '../connectors';
3130

3231
interface CasesClientFactoryArgs {
3332
securityPluginSetup?: SecurityPluginSetup;
@@ -91,7 +90,6 @@ export class CasesClientFactory {
9190

9291
const caseService = new CasesService(this.logger, this.options?.securityPluginStart?.authc);
9392
const userInfo = caseService.getUser({ request });
94-
const casesConnectorsFactory = new CasesConnectorsFactory();
9593

9694
return createCasesClient({
9795
alertsService: new AlertService(),
@@ -112,7 +110,6 @@ export class CasesClientFactory {
112110
logger: this.logger,
113111
authorization: auth,
114112
actionsClient: await this.options.actionsPluginStart.getActionsClientWithRequest(request),
115-
casesConnectors: casesConnectorsFactory.getCasesConnectors(),
116113
});
117114
}
118115
}

x-pack/plugins/cases/server/client/types.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import type { PublicMethodsOf } from '@kbn/utility-types';
99
import { ElasticsearchClient, SavedObjectsClientContract, Logger } from 'kibana/server';
1010
import { User } from '../../common/api';
1111
import { Authorization } from '../authorization/authorization';
12-
import { CasesConnectorsMap } from '../connectors/types';
1312
import {
1413
AlertServiceContract,
1514
CaseConfigureService,
@@ -36,5 +35,4 @@ export interface CasesClientArgs {
3635
readonly logger: Logger;
3736
readonly authorization: PublicMethodsOf<Authorization>;
3837
readonly actionsClient: PublicMethodsOf<ActionsClient>;
39-
readonly casesConnectors: CasesConnectorsMap;
4038
}

x-pack/plugins/cases/server/connectors/factory.ts

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -9,29 +9,20 @@ import { ConnectorTypes } from '../../common/api';
99
import { getCaseConnector as getJiraCaseConnector } from './jira';
1010
import { getCaseConnector as getResilientCaseConnector } from './resilient';
1111
import { getServiceNowITSMCaseConnector, getServiceNowSIRCaseConnector } from './servicenow';
12-
import {
13-
CasesConnectorsMap,
14-
CasesConnectorTypes,
15-
ICasesConnector,
16-
ICasesConnectorFactory,
17-
} from './types';
12+
import { ICasesConnector, CasesConnectorsMap } from './types';
1813

19-
export class CasesConnectorsFactory implements ICasesConnectorFactory {
20-
private readonly casesConnectorsMap: Map<CasesConnectorTypes, ICasesConnector<{}>>;
14+
const mapping: Record<ConnectorTypes, ICasesConnector | null> = {
15+
[ConnectorTypes.jira]: getJiraCaseConnector(),
16+
[ConnectorTypes.serviceNowITSM]: getServiceNowITSMCaseConnector(),
17+
[ConnectorTypes.serviceNowSIR]: getServiceNowSIRCaseConnector(),
18+
[ConnectorTypes.resilient]: getResilientCaseConnector(),
19+
[ConnectorTypes.none]: null,
20+
};
2121

22-
constructor() {
23-
this.casesConnectorsMap = new Map<CasesConnectorTypes, ICasesConnector>();
24-
this.initMapping();
25-
}
22+
const isConnectorTypeSupported = (type: string): type is ConnectorTypes =>
23+
Object.values(ConnectorTypes).includes(type as ConnectorTypes);
2624

27-
private initMapping() {
28-
this.casesConnectorsMap.set(ConnectorTypes.jira, getJiraCaseConnector());
29-
this.casesConnectorsMap.set(ConnectorTypes.serviceNowITSM, getServiceNowITSMCaseConnector());
30-
this.casesConnectorsMap.set(ConnectorTypes.serviceNowSIR, getServiceNowSIRCaseConnector());
31-
this.casesConnectorsMap.set(ConnectorTypes.resilient, getResilientCaseConnector());
32-
}
33-
34-
public getCasesConnectors = (): CasesConnectorsMap => {
35-
return this.casesConnectorsMap;
36-
};
37-
}
25+
export const casesConnectors: CasesConnectorsMap = {
26+
get: (type: string): ICasesConnector | undefined | null =>
27+
isConnectorTypeSupported(type) ? mapping[type] : undefined,
28+
};

x-pack/plugins/cases/server/connectors/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { CommentRequest, CommentType } from '../../common/api';
1616

1717
export * from './types';
1818
export { transformConnectorComment } from './case';
19-
export { CasesConnectorsFactory } from './factory';
19+
export { casesConnectors } from './factory';
2020

2121
/**
2222
* Separator used for creating a json parsable array from the mustache syntax that the alerting framework

x-pack/plugins/cases/server/connectors/types.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
*/
77

88
import { Logger } from 'kibana/server';
9-
import { CaseResponse, ConnectorMappingsAttributes, ConnectorTypes } from '../../common/api';
9+
import { CaseResponse, ConnectorMappingsAttributes } from '../../common/api';
1010
import { CasesClientGetAlertsResponse } from '../client/alerts/types';
1111
import { CasesClientFactory } from '../client/factory';
1212
import { RegisterActionType } from '../types';
@@ -31,9 +31,6 @@ export interface ICasesConnector<TExternalServiceParams = {}> {
3131
getMapping: () => ConnectorMappingsAttributes[];
3232
}
3333

34-
export type CasesConnectorTypes = Omit<ConnectorTypes, ConnectorTypes.none>;
35-
export type CasesConnectorsMap = Map<CasesConnectorTypes, ICasesConnector>;
36-
37-
export interface ICasesConnectorFactory {
38-
getCasesConnectors: () => CasesConnectorsMap;
34+
export interface CasesConnectorsMap {
35+
get: (type: string) => ICasesConnector | undefined | null;
3936
}

0 commit comments

Comments
 (0)