[Security Solutions] Replaces most deprecated io-ts alerting and list types (#100234)
## Summary Replaces most of the deprecated io-ts alerting and list types within securitysolution as part of Phase 3 of 4 phases outlined in earlier PR's such as https://github.com/elastic/kibana/pull/99260 ### Checklist - [x] [Unit or functional tests](https://www.elastic.co/guide/en/kibana/master/development-tests.html) were updated or added to match the most common scenarios
This commit is contained in:
parent
6d4cca29a7
commit
e15b887e43
|
@ -1,11 +1,12 @@
|
||||||
/*
|
/*
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
* or more contributor license agreements. Licensed under the Elastic License
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||||
* 2.0.
|
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||||
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ElasticsearchClient } from 'src/core/server';
|
import { ElasticsearchClient } from '../elasticsearch_client';
|
||||||
|
|
||||||
interface AliasesResponse {
|
interface AliasesResponse {
|
||||||
[indexName: string]: {
|
[indexName: string]: {
|
|
@ -1,11 +1,12 @@
|
||||||
/*
|
/*
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
* or more contributor license agreements. Licensed under the Elastic License
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||||
* 2.0.
|
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||||
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ElasticsearchClient } from 'src/core/server';
|
import { ElasticsearchClient } from '../elasticsearch_client';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieves the count of documents in a given index
|
* Retrieves the count of documents in a given index
|
|
@ -12,9 +12,12 @@ export * from './delete_all_index';
|
||||||
export * from './delete_policy';
|
export * from './delete_policy';
|
||||||
export * from './delete_template';
|
export * from './delete_template';
|
||||||
export * from './elasticsearch_client';
|
export * from './elasticsearch_client';
|
||||||
|
export * from './get_index_aliases';
|
||||||
|
export * from './get_index_count';
|
||||||
export * from './get_index_exists';
|
export * from './get_index_exists';
|
||||||
export * from './get_policy_exists';
|
export * from './get_policy_exists';
|
||||||
export * from './get_template_exists';
|
export * from './get_template_exists';
|
||||||
|
export * from './read_index';
|
||||||
export * from './read_privileges';
|
export * from './read_privileges';
|
||||||
export * from './set_policy';
|
export * from './set_policy';
|
||||||
export * from './set_template';
|
export * from './set_template';
|
||||||
|
|
|
@ -1,11 +1,12 @@
|
||||||
/*
|
/*
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
* or more contributor license agreements. Licensed under the Elastic License
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||||
* 2.0.
|
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||||
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ElasticsearchClient } from 'kibana/server';
|
import { ElasticsearchClient } from '../elasticsearch_client';
|
||||||
|
|
||||||
export const readIndex = async (esClient: ElasticsearchClient, index: string): Promise<unknown> => {
|
export const readIndex = async (esClient: ElasticsearchClient, index: string): Promise<unknown> => {
|
||||||
return esClient.indices.get({
|
return esClient.indices.get({
|
|
@ -24,3 +24,6 @@ export const from = new t.Type<string, string, unknown>(
|
||||||
t.identity
|
t.identity
|
||||||
);
|
);
|
||||||
export type From = t.TypeOf<typeof from>;
|
export type From = t.TypeOf<typeof from>;
|
||||||
|
|
||||||
|
export const fromOrUndefined = t.union([from, t.undefined]);
|
||||||
|
export type FromOrUndefined = t.TypeOf<typeof fromOrUndefined>;
|
||||||
|
|
|
@ -24,6 +24,7 @@ export * from './default_to_string';
|
||||||
export * from './default_uuid';
|
export * from './default_uuid';
|
||||||
export * from './from';
|
export * from './from';
|
||||||
export * from './language';
|
export * from './language';
|
||||||
|
export * from './machine_learning_job_id';
|
||||||
export * from './max_signals';
|
export * from './max_signals';
|
||||||
export * from './normalized_ml_job_id';
|
export * from './normalized_ml_job_id';
|
||||||
export * from './references_default_array';
|
export * from './references_default_array';
|
||||||
|
@ -38,3 +39,4 @@ export * from './threat_subtechnique';
|
||||||
export * from './threat_tactic';
|
export * from './threat_tactic';
|
||||||
export * from './threat_technique';
|
export * from './threat_technique';
|
||||||
export * from './throttle';
|
export * from './throttle';
|
||||||
|
export * from './type';
|
||||||
|
|
|
@ -10,3 +10,6 @@ import * as t from 'io-ts';
|
||||||
|
|
||||||
export const language = t.keyof({ eql: null, kuery: null, lucene: null });
|
export const language = t.keyof({ eql: null, kuery: null, lucene: null });
|
||||||
export type Language = t.TypeOf<typeof language>;
|
export type Language = t.TypeOf<typeof language>;
|
||||||
|
|
||||||
|
export const languageOrUndefined = t.union([language, t.undefined]);
|
||||||
|
export type LanguageOrUndefined = t.TypeOf<typeof languageOrUndefined>;
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||||
|
* or more contributor license agreements. Licensed under the Elastic License
|
||||||
|
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||||
|
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||||
|
* Side Public License, v 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
|
|
||||||
|
import * as t from 'io-ts';
|
||||||
|
|
||||||
|
import { machine_learning_job_id_normalized } from '../normalized_ml_job_id';
|
||||||
|
|
||||||
|
export const machine_learning_job_id = t.union([t.string, machine_learning_job_id_normalized]);
|
||||||
|
export type MachineLearningJobId = t.TypeOf<typeof machine_learning_job_id>;
|
||||||
|
|
||||||
|
export const machineLearningJobIdOrUndefined = t.union([machine_learning_job_id, t.undefined]);
|
||||||
|
export type MachineLearningJobIdOrUndefined = t.TypeOf<typeof machineLearningJobIdOrUndefined>;
|
|
@ -13,3 +13,6 @@ import { PositiveIntegerGreaterThanZero } from '@kbn/securitysolution-io-ts-type
|
||||||
|
|
||||||
export const max_signals = PositiveIntegerGreaterThanZero;
|
export const max_signals = PositiveIntegerGreaterThanZero;
|
||||||
export type MaxSignals = t.TypeOf<typeof max_signals>;
|
export type MaxSignals = t.TypeOf<typeof max_signals>;
|
||||||
|
|
||||||
|
export const maxSignalsOrUndefined = t.union([max_signals, t.undefined]);
|
||||||
|
export type MaxSignalsOrUndefined = t.TypeOf<typeof maxSignalsOrUndefined>;
|
||||||
|
|
|
@ -6,6 +6,8 @@
|
||||||
* Side Public License, v 1.
|
* Side Public License, v 1.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
import { Either } from 'fp-ts/lib/Either';
|
import { Either } from 'fp-ts/lib/Either';
|
||||||
|
|
||||||
|
@ -26,3 +28,9 @@ export const RiskScore = new t.Type<number, number, unknown>(
|
||||||
);
|
);
|
||||||
|
|
||||||
export type RiskScoreC = typeof RiskScore;
|
export type RiskScoreC = typeof RiskScore;
|
||||||
|
|
||||||
|
export const risk_score = RiskScore;
|
||||||
|
export type RiskScore = t.TypeOf<typeof risk_score>;
|
||||||
|
|
||||||
|
export const riskScoreOrUndefined = t.union([risk_score, t.undefined]);
|
||||||
|
export type RiskScoreOrUndefined = t.TypeOf<typeof riskScoreOrUndefined>;
|
||||||
|
|
|
@ -10,10 +10,7 @@
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
import { operator } from '@kbn/securitysolution-io-ts-types';
|
import { operator } from '@kbn/securitysolution-io-ts-types';
|
||||||
import { RiskScore } from '../risk_score';
|
import { riskScoreOrUndefined } from '../risk_score';
|
||||||
|
|
||||||
export const riskScoreOrUndefined = t.union([RiskScore, t.undefined]);
|
|
||||||
export type RiskScoreOrUndefined = t.TypeOf<typeof riskScoreOrUndefined>;
|
|
||||||
|
|
||||||
export const risk_score_mapping_field = t.string;
|
export const risk_score_mapping_field = t.string;
|
||||||
export const risk_score_mapping_value = t.string;
|
export const risk_score_mapping_value = t.string;
|
||||||
|
@ -28,3 +25,6 @@ export const risk_score_mapping_item = t.exact(
|
||||||
|
|
||||||
export const risk_score_mapping = t.array(risk_score_mapping_item);
|
export const risk_score_mapping = t.array(risk_score_mapping_item);
|
||||||
export type RiskScoreMapping = t.TypeOf<typeof risk_score_mapping>;
|
export type RiskScoreMapping = t.TypeOf<typeof risk_score_mapping>;
|
||||||
|
|
||||||
|
export const riskScoreMappingOrUndefined = t.union([risk_score_mapping, t.undefined]);
|
||||||
|
export type RiskScoreMappingOrUndefined = t.TypeOf<typeof riskScoreMappingOrUndefined>;
|
||||||
|
|
|
@ -32,3 +32,6 @@ export type Threat = t.TypeOf<typeof threat>;
|
||||||
|
|
||||||
export const threats = t.array(threat);
|
export const threats = t.array(threat);
|
||||||
export type Threats = t.TypeOf<typeof threats>;
|
export type Threats = t.TypeOf<typeof threats>;
|
||||||
|
|
||||||
|
export const threatsOrUndefined = t.union([threats, t.undefined]);
|
||||||
|
export type ThreatsOrUndefined = t.TypeOf<typeof threatsOrUndefined>;
|
||||||
|
|
|
@ -21,3 +21,5 @@ export const threat_subtechnique = t.type({
|
||||||
});
|
});
|
||||||
|
|
||||||
export const threat_subtechniques = t.array(threat_subtechnique);
|
export const threat_subtechniques = t.array(threat_subtechnique);
|
||||||
|
|
||||||
|
export type ThreatSubtechnique = t.TypeOf<typeof threat_subtechnique>;
|
||||||
|
|
|
@ -30,3 +30,5 @@ export const threat_technique = t.intersection([
|
||||||
),
|
),
|
||||||
]);
|
]);
|
||||||
export const threat_techniques = t.array(threat_technique);
|
export const threat_techniques = t.array(threat_technique);
|
||||||
|
|
||||||
|
export type ThreatTechnique = t.TypeOf<typeof threat_technique>;
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
||||||
|
* or more contributor license agreements. Licensed under the Elastic License
|
||||||
|
* 2.0 and the Server Side Public License, v 1; you may not use this file except
|
||||||
|
* in compliance with, at your election, the Elastic License 2.0 or the Server
|
||||||
|
* Side Public License, v 1.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import * as t from 'io-ts';
|
||||||
|
|
||||||
|
export const type = t.keyof({
|
||||||
|
eql: null,
|
||||||
|
machine_learning: null,
|
||||||
|
query: null,
|
||||||
|
saved_query: null,
|
||||||
|
threshold: null,
|
||||||
|
threat_match: null,
|
||||||
|
});
|
||||||
|
export type Type = t.TypeOf<typeof type>;
|
||||||
|
|
||||||
|
export const typeOrUndefined = t.union([type, t.undefined]);
|
||||||
|
export type TypeOrUndefined = t.TypeOf<typeof typeOrUndefined>;
|
|
@ -16,7 +16,6 @@ export * from './default_create_comments_array';
|
||||||
export * from './default_namespace';
|
export * from './default_namespace';
|
||||||
export * from './default_namespace_array';
|
export * from './default_namespace_array';
|
||||||
export * from './default_update_comments_array';
|
export * from './default_update_comments_array';
|
||||||
export * from './default_version_number';
|
|
||||||
export * from './description';
|
export * from './description';
|
||||||
export * from './endpoint';
|
export * from './endpoint';
|
||||||
export * from './entries';
|
export * from './entries';
|
||||||
|
@ -43,4 +42,3 @@ export * from './type';
|
||||||
export * from './update_comment';
|
export * from './update_comment';
|
||||||
export * from './updated_at';
|
export * from './updated_at';
|
||||||
export * from './updated_by';
|
export * from './updated_by';
|
||||||
export * from './version';
|
|
||||||
|
|
|
@ -40,3 +40,4 @@ export const type = t.keyof({
|
||||||
|
|
||||||
export const typeOrUndefined = t.union([type, t.undefined]);
|
export const typeOrUndefined = t.union([type, t.undefined]);
|
||||||
export type Type = t.TypeOf<typeof type>;
|
export type Type = t.TypeOf<typeof type>;
|
||||||
|
export type TypeOrUndefined = t.TypeOf<typeof typeOrUndefined>;
|
||||||
|
|
|
@ -13,6 +13,7 @@ export * from './default_empty_string';
|
||||||
export * from './default_string_array';
|
export * from './default_string_array';
|
||||||
export * from './default_string_boolean_false';
|
export * from './default_string_boolean_false';
|
||||||
export * from './default_uuid';
|
export * from './default_uuid';
|
||||||
|
export * from './default_version_number';
|
||||||
export * from './empty_string_array';
|
export * from './empty_string_array';
|
||||||
export * from './iso_date_string';
|
export * from './iso_date_string';
|
||||||
export * from './non_empty_array';
|
export * from './non_empty_array';
|
||||||
|
@ -26,3 +27,4 @@ export * from './positive_integer';
|
||||||
export * from './positive_integer_greater_than_zero';
|
export * from './positive_integer_greater_than_zero';
|
||||||
export * from './string_to_positive_number';
|
export * from './string_to_positive_number';
|
||||||
export * from './uuid';
|
export * from './uuid';
|
||||||
|
export * from './version';
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
import { PositiveIntegerGreaterThanZero } from '@kbn/securitysolution-io-ts-types';
|
import { PositiveIntegerGreaterThanZero } from '../positive_integer_greater_than_zero';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Note this is just a positive number, but we use it as a type here which is still ok.
|
* Note this is just a positive number, but we use it as a type here which is still ok.
|
||||||
|
@ -16,3 +16,6 @@ import { PositiveIntegerGreaterThanZero } from '@kbn/securitysolution-io-ts-type
|
||||||
*/
|
*/
|
||||||
export const version = PositiveIntegerGreaterThanZero;
|
export const version = PositiveIntegerGreaterThanZero;
|
||||||
export type Version = t.TypeOf<typeof version>;
|
export type Version = t.TypeOf<typeof version>;
|
||||||
|
|
||||||
|
export const versionOrUndefined = t.union([version, t.undefined]);
|
||||||
|
export type VersionOrUndefined = t.TypeOf<typeof versionOrUndefined>;
|
|
@ -17,10 +17,10 @@ import {
|
||||||
entriesNested,
|
entriesNested,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
|
||||||
import { Filter } from '../../../../../src/plugins/data/common';
|
import type { Filter } from '../../../../../src/plugins/data/common';
|
||||||
import { CreateExceptionListItemSchema, ExceptionListItemSchema } from '../schemas';
|
import type { CreateExceptionListItemSchema, ExceptionListItemSchema } from '../schemas';
|
||||||
|
|
||||||
import { BooleanFilter, NestedFilter } from './types';
|
import type { BooleanFilter, NestedFilter } from './types';
|
||||||
import { hasLargeValueList } from './utils';
|
import { hasLargeValueList } from './utils';
|
||||||
|
|
||||||
type NonListEntry = EntryMatch | EntryMatchAny | EntryNested | EntryExists;
|
type NonListEntry = EntryMatch | EntryMatchAny | EntryNested | EntryExists;
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
* 2.0.
|
* 2.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { EntriesArray } from '@kbn/securitysolution-io-ts-list-types';
|
import type { EntriesArray } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
|
||||||
export const hasLargeValueList = (entries: EntriesArray): boolean => {
|
export const hasLargeValueList = (entries: EntriesArray): boolean => {
|
||||||
const found = entries.filter(({ type }) => type === 'list');
|
const found = entries.filter(({ type }) => type === 'list');
|
||||||
|
|
|
@ -11,18 +11,6 @@ import * as t from 'io-ts';
|
||||||
import { NonEmptyString } from '@kbn/securitysolution-io-ts-types';
|
import { NonEmptyString } from '@kbn/securitysolution-io-ts-types';
|
||||||
import { DefaultNamespace } from '@kbn/securitysolution-io-ts-list-types';
|
import { DefaultNamespace } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Directly use the type from the package and not from here
|
|
||||||
*/
|
|
||||||
export {
|
|
||||||
DefaultNamespace,
|
|
||||||
Type,
|
|
||||||
OsType,
|
|
||||||
OsTypeArray,
|
|
||||||
listOperator as operator,
|
|
||||||
NonEmptyEntriesArray,
|
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
|
||||||
|
|
||||||
export const list_id = NonEmptyString;
|
export const list_id = NonEmptyString;
|
||||||
export type ListId = t.TypeOf<typeof list_id>;
|
export type ListId = t.TypeOf<typeof list_id>;
|
||||||
export const list_idOrUndefined = t.union([list_id, t.undefined]);
|
export const list_idOrUndefined = t.union([list_id, t.undefined]);
|
||||||
|
@ -91,12 +79,6 @@ export const _version = t.string;
|
||||||
export const _versionOrUndefined = t.union([_version, t.undefined]);
|
export const _versionOrUndefined = t.union([_version, t.undefined]);
|
||||||
export type _VersionOrUndefined = t.TypeOf<typeof _versionOrUndefined>;
|
export type _VersionOrUndefined = t.TypeOf<typeof _versionOrUndefined>;
|
||||||
|
|
||||||
export const version = t.number;
|
|
||||||
export type Version = t.TypeOf<typeof version>;
|
|
||||||
|
|
||||||
export const versionOrUndefined = t.union([version, t.undefined]);
|
|
||||||
export type VersionOrUndefined = t.TypeOf<typeof versionOrUndefined>;
|
|
||||||
|
|
||||||
export const immutable = t.boolean;
|
export const immutable = t.boolean;
|
||||||
export type Immutable = t.TypeOf<typeof immutable>;
|
export type Immutable = t.TypeOf<typeof immutable>;
|
||||||
|
|
||||||
|
|
|
@ -7,8 +7,6 @@
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
import {
|
import {
|
||||||
DefaultVersionNumber,
|
|
||||||
DefaultVersionNumberDecoded,
|
|
||||||
NamespaceType,
|
NamespaceType,
|
||||||
OsTypeArray,
|
OsTypeArray,
|
||||||
Tags,
|
Tags,
|
||||||
|
@ -19,7 +17,11 @@ import {
|
||||||
osTypeArrayOrUndefined,
|
osTypeArrayOrUndefined,
|
||||||
tags,
|
tags,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
import { DefaultUuid } from '@kbn/securitysolution-io-ts-types';
|
import {
|
||||||
|
DefaultUuid,
|
||||||
|
DefaultVersionNumber,
|
||||||
|
DefaultVersionNumberDecoded,
|
||||||
|
} from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import { ListId, namespace_type } from '../common/schemas';
|
import { ListId, namespace_type } from '../common/schemas';
|
||||||
import { RequiredKeepUndefined } from '../../types';
|
import { RequiredKeepUndefined } from '../../types';
|
||||||
|
|
|
@ -9,12 +9,8 @@ import * as t from 'io-ts';
|
||||||
import {
|
import {
|
||||||
DefaultVersionNumber,
|
DefaultVersionNumber,
|
||||||
DefaultVersionNumberDecoded,
|
DefaultVersionNumberDecoded,
|
||||||
description,
|
} from '@kbn/securitysolution-io-ts-types';
|
||||||
id,
|
import { description, id, meta, name, type } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
meta,
|
|
||||||
name,
|
|
||||||
type,
|
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
|
||||||
|
|
||||||
import { deserializer, serializer } from '../common/schemas';
|
import { deserializer, serializer } from '../common/schemas';
|
||||||
import { RequiredKeepUndefined } from '../../types';
|
import { RequiredKeepUndefined } from '../../types';
|
||||||
|
|
|
@ -7,8 +7,9 @@
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
import { description, id, meta, name } from '@kbn/securitysolution-io-ts-list-types';
|
import { description, id, meta, name } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import { _version, version } from '../common/schemas';
|
import { _version } from '../common/schemas';
|
||||||
import { RequiredKeepUndefined } from '../../types';
|
import { RequiredKeepUndefined } from '../../types';
|
||||||
|
|
||||||
export const patchListSchema = t.intersection([
|
export const patchListSchema = t.intersection([
|
||||||
|
|
|
@ -18,8 +18,9 @@ import {
|
||||||
osTypeArrayOrUndefined,
|
osTypeArrayOrUndefined,
|
||||||
tags,
|
tags,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import { _version, list_id, namespace_type, version } from '../common/schemas';
|
import { _version, list_id, namespace_type } from '../common/schemas';
|
||||||
import { RequiredKeepUndefined } from '../../types';
|
import { RequiredKeepUndefined } from '../../types';
|
||||||
|
|
||||||
export const updateExceptionListSchema = t.intersection([
|
export const updateExceptionListSchema = t.intersection([
|
||||||
|
|
|
@ -6,7 +6,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
import { description, id, meta, name, version } from '@kbn/securitysolution-io-ts-list-types';
|
import { description, id, meta, name } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import { _version } from '../common/schemas';
|
import { _version } from '../common/schemas';
|
||||||
import { RequiredKeepUndefined } from '../../types';
|
import { RequiredKeepUndefined } from '../../types';
|
||||||
|
|
|
@ -19,6 +19,7 @@ import {
|
||||||
updated_at,
|
updated_at,
|
||||||
updated_by,
|
updated_by,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
_versionOrUndefined,
|
_versionOrUndefined,
|
||||||
|
@ -26,7 +27,6 @@ import {
|
||||||
list_id,
|
list_id,
|
||||||
namespace_type,
|
namespace_type,
|
||||||
tie_breaker_id,
|
tie_breaker_id,
|
||||||
version,
|
|
||||||
} from '../common/schemas';
|
} from '../common/schemas';
|
||||||
|
|
||||||
export const exceptionListSchema = t.exact(
|
export const exceptionListSchema = t.exact(
|
||||||
|
|
|
@ -17,6 +17,7 @@ import {
|
||||||
updated_at,
|
updated_at,
|
||||||
updated_by,
|
updated_by,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
_versionOrUndefined,
|
_versionOrUndefined,
|
||||||
|
@ -24,7 +25,6 @@ import {
|
||||||
immutable,
|
immutable,
|
||||||
serializerOrUndefined,
|
serializerOrUndefined,
|
||||||
tie_breaker_id,
|
tie_breaker_id,
|
||||||
version,
|
|
||||||
} from '../common/schemas';
|
} from '../common/schemas';
|
||||||
|
|
||||||
export const listSchema = t.exact(
|
export const listSchema = t.exact(
|
||||||
|
|
|
@ -5,16 +5,13 @@
|
||||||
* 2.0.
|
* 2.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
export {
|
export type {
|
||||||
ListSchema,
|
ListSchema,
|
||||||
ExceptionListSchema,
|
ExceptionListSchema,
|
||||||
ExceptionListItemSchema,
|
ExceptionListItemSchema,
|
||||||
CreateExceptionListSchema,
|
CreateExceptionListSchema,
|
||||||
CreateExceptionListItemSchema,
|
CreateExceptionListItemSchema,
|
||||||
UpdateExceptionListItemSchema,
|
UpdateExceptionListItemSchema,
|
||||||
exceptionListItemSchema,
|
|
||||||
createExceptionListItemSchema,
|
|
||||||
listSchema,
|
|
||||||
} from './schemas';
|
} from './schemas';
|
||||||
|
|
||||||
export { buildExceptionFilter } from './exceptions';
|
export { buildExceptionFilter } from './exceptions';
|
||||||
|
|
|
@ -23,7 +23,7 @@ import {
|
||||||
CreateExceptionListItemSchema,
|
CreateExceptionListItemSchema,
|
||||||
ExceptionListItemSchema,
|
ExceptionListItemSchema,
|
||||||
exceptionListItemSchema,
|
exceptionListItemSchema,
|
||||||
} from '../../../../common';
|
} from '../../../../common/schemas';
|
||||||
import { AutocompleteStart, IIndexPattern } from '../../../../../../../src/plugins/data/public';
|
import { AutocompleteStart, IIndexPattern } from '../../../../../../../src/plugins/data/public';
|
||||||
import { AndOrBadge } from '../and_or_badge';
|
import { AndOrBadge } from '../and_or_badge';
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ import {
|
||||||
ListSchema,
|
ListSchema,
|
||||||
createExceptionListItemSchema,
|
createExceptionListItemSchema,
|
||||||
exceptionListItemSchema,
|
exceptionListItemSchema,
|
||||||
} from '../../../../common';
|
} from '../../../../common/schemas';
|
||||||
import { IFieldType, IIndexPattern } from '../../../../../../../src/plugins/data/public';
|
import { IFieldType, IIndexPattern } from '../../../../../../../src/plugins/data/public';
|
||||||
import {
|
import {
|
||||||
EXCEPTION_OPERATORS,
|
EXCEPTION_OPERATORS,
|
||||||
|
|
|
@ -7,11 +7,11 @@
|
||||||
|
|
||||||
export * from './shared_exports';
|
export * from './shared_exports';
|
||||||
|
|
||||||
import { PluginInitializerContext } from '../../../../src/core/public';
|
import type { PluginInitializerContext } from '../../../../src/core/public';
|
||||||
|
|
||||||
import { Plugin } from './plugin';
|
import { Plugin } from './plugin';
|
||||||
import { PluginSetup, PluginStart } from './types';
|
import type { PluginSetup, PluginStart } from './types';
|
||||||
|
|
||||||
export const plugin = (context: PluginInitializerContext): Plugin => new Plugin(context);
|
export const plugin = (context: PluginInitializerContext): Plugin => new Plugin(context);
|
||||||
|
|
||||||
export { Plugin, PluginSetup, PluginStart };
|
export type { Plugin, PluginSetup, PluginStart };
|
||||||
|
|
|
@ -16,13 +16,13 @@ import {
|
||||||
updated_at,
|
updated_at,
|
||||||
updated_by,
|
updated_by,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
deserializerOrUndefined,
|
deserializerOrUndefined,
|
||||||
immutable,
|
immutable,
|
||||||
serializerOrUndefined,
|
serializerOrUndefined,
|
||||||
tie_breaker_id,
|
tie_breaker_id,
|
||||||
version,
|
|
||||||
} from '../../../common/schemas';
|
} from '../../../common/schemas';
|
||||||
|
|
||||||
export const indexEsListSchema = t.exact(
|
export const indexEsListSchema = t.exact(
|
||||||
|
|
|
@ -16,13 +16,13 @@ import {
|
||||||
updated_at,
|
updated_at,
|
||||||
updated_by,
|
updated_by,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
deserializerOrUndefined,
|
deserializerOrUndefined,
|
||||||
immutable,
|
immutable,
|
||||||
serializerOrUndefined,
|
serializerOrUndefined,
|
||||||
tie_breaker_id,
|
tie_breaker_id,
|
||||||
version,
|
|
||||||
} from '../../../common/schemas';
|
} from '../../../common/schemas';
|
||||||
|
|
||||||
export const searchEsListSchema = t.exact(
|
export const searchEsListSchema = t.exact(
|
||||||
|
|
|
@ -20,6 +20,7 @@ import {
|
||||||
tags,
|
tags,
|
||||||
updated_by,
|
updated_by,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { versionOrUndefined } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
immutableOrUndefined,
|
immutableOrUndefined,
|
||||||
|
@ -27,7 +28,6 @@ import {
|
||||||
list_id,
|
list_id,
|
||||||
list_type,
|
list_type,
|
||||||
tie_breaker_id,
|
tie_breaker_id,
|
||||||
versionOrUndefined,
|
|
||||||
} from '../../../common/schemas';
|
} from '../../../common/schemas';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -7,13 +7,14 @@
|
||||||
|
|
||||||
import { SavedObjectsClientContract } from 'kibana/server';
|
import { SavedObjectsClientContract } from 'kibana/server';
|
||||||
import uuid from 'uuid';
|
import uuid from 'uuid';
|
||||||
|
import { Version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION,
|
ENDPOINT_EVENT_FILTERS_LIST_DESCRIPTION,
|
||||||
ENDPOINT_EVENT_FILTERS_LIST_ID,
|
ENDPOINT_EVENT_FILTERS_LIST_ID,
|
||||||
ENDPOINT_EVENT_FILTERS_LIST_NAME,
|
ENDPOINT_EVENT_FILTERS_LIST_NAME,
|
||||||
} from '../../../common/constants';
|
} from '../../../common/constants';
|
||||||
import { ExceptionListSchema, Version } from '../../../common/schemas';
|
import { ExceptionListSchema } from '../../../common/schemas';
|
||||||
import { ExceptionListSoSchema } from '../../schemas/saved_objects';
|
import { ExceptionListSoSchema } from '../../schemas/saved_objects';
|
||||||
|
|
||||||
import { getSavedObjectType, transformSavedObjectToExceptionList } from './utils';
|
import { getSavedObjectType, transformSavedObjectToExceptionList } from './utils';
|
||||||
|
|
|
@ -7,13 +7,14 @@
|
||||||
|
|
||||||
import { SavedObjectsClientContract } from 'kibana/server';
|
import { SavedObjectsClientContract } from 'kibana/server';
|
||||||
import uuid from 'uuid';
|
import uuid from 'uuid';
|
||||||
|
import { Version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ENDPOINT_LIST_DESCRIPTION,
|
ENDPOINT_LIST_DESCRIPTION,
|
||||||
ENDPOINT_LIST_ID,
|
ENDPOINT_LIST_ID,
|
||||||
ENDPOINT_LIST_NAME,
|
ENDPOINT_LIST_NAME,
|
||||||
} from '../../../common/constants';
|
} from '../../../common/constants';
|
||||||
import { ExceptionListSchema, Version } from '../../../common/schemas';
|
import { ExceptionListSchema } from '../../../common/schemas';
|
||||||
import { ExceptionListSoSchema } from '../../schemas/saved_objects';
|
import { ExceptionListSoSchema } from '../../schemas/saved_objects';
|
||||||
|
|
||||||
import { getSavedObjectType, transformSavedObjectToExceptionList } from './utils';
|
import { getSavedObjectType, transformSavedObjectToExceptionList } from './utils';
|
||||||
|
|
|
@ -7,13 +7,14 @@
|
||||||
|
|
||||||
import { SavedObjectsClientContract } from 'kibana/server';
|
import { SavedObjectsClientContract } from 'kibana/server';
|
||||||
import uuid from 'uuid';
|
import uuid from 'uuid';
|
||||||
|
import { Version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION,
|
ENDPOINT_TRUSTED_APPS_LIST_DESCRIPTION,
|
||||||
ENDPOINT_TRUSTED_APPS_LIST_ID,
|
ENDPOINT_TRUSTED_APPS_LIST_ID,
|
||||||
ENDPOINT_TRUSTED_APPS_LIST_NAME,
|
ENDPOINT_TRUSTED_APPS_LIST_NAME,
|
||||||
} from '../../../common/constants';
|
} from '../../../common/constants';
|
||||||
import { ExceptionListSchema, Version } from '../../../common/schemas';
|
import { ExceptionListSchema } from '../../../common/schemas';
|
||||||
import { ExceptionListSoSchema } from '../../schemas/saved_objects';
|
import { ExceptionListSoSchema } from '../../schemas/saved_objects';
|
||||||
|
|
||||||
import { getSavedObjectType, transformSavedObjectToExceptionList } from './utils';
|
import { getSavedObjectType, transformSavedObjectToExceptionList } from './utils';
|
||||||
|
|
|
@ -15,8 +15,9 @@ import {
|
||||||
NamespaceType,
|
NamespaceType,
|
||||||
Tags,
|
Tags,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { Version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import { ExceptionListSchema, Immutable, ListId, Version } from '../../../common/schemas';
|
import { ExceptionListSchema, Immutable, ListId } from '../../../common/schemas';
|
||||||
import { ExceptionListSoSchema } from '../../schemas/saved_objects';
|
import { ExceptionListSoSchema } from '../../schemas/saved_objects';
|
||||||
|
|
||||||
import { getSavedObjectType, transformSavedObjectToExceptionList } from './utils';
|
import { getSavedObjectType, transformSavedObjectToExceptionList } from './utils';
|
||||||
|
|
|
@ -30,6 +30,8 @@ import {
|
||||||
import {
|
import {
|
||||||
EmptyStringArrayDecoded,
|
EmptyStringArrayDecoded,
|
||||||
NonEmptyStringArrayDecoded,
|
NonEmptyStringArrayDecoded,
|
||||||
|
Version,
|
||||||
|
VersionOrUndefined,
|
||||||
} from '@kbn/securitysolution-io-ts-types';
|
} from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
@ -43,8 +45,6 @@ import {
|
||||||
PerPageOrUndefined,
|
PerPageOrUndefined,
|
||||||
SortFieldOrUndefined,
|
SortFieldOrUndefined,
|
||||||
SortOrderOrUndefined,
|
SortOrderOrUndefined,
|
||||||
Version,
|
|
||||||
VersionOrUndefined,
|
|
||||||
_VersionOrUndefined,
|
_VersionOrUndefined,
|
||||||
} from '../../../common/schemas';
|
} from '../../../common/schemas';
|
||||||
|
|
||||||
|
|
|
@ -16,11 +16,11 @@ import {
|
||||||
OsTypeArray,
|
OsTypeArray,
|
||||||
TagsOrUndefined,
|
TagsOrUndefined,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { VersionOrUndefined } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ExceptionListSchema,
|
ExceptionListSchema,
|
||||||
ListIdOrUndefined,
|
ListIdOrUndefined,
|
||||||
VersionOrUndefined,
|
|
||||||
_VersionOrUndefined,
|
_VersionOrUndefined,
|
||||||
} from '../../../common/schemas';
|
} from '../../../common/schemas';
|
||||||
import { ExceptionListSoSchema } from '../../schemas/saved_objects';
|
import { ExceptionListSoSchema } from '../../schemas/saved_objects';
|
||||||
|
|
|
@ -9,6 +9,7 @@ import { Readable } from 'stream';
|
||||||
|
|
||||||
import { ElasticsearchClient } from 'kibana/server';
|
import { ElasticsearchClient } from 'kibana/server';
|
||||||
import { MetaOrUndefined, Type } from '@kbn/securitysolution-io-ts-list-types';
|
import { MetaOrUndefined, Type } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { Version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import { createListIfItDoesNotExist } from '../lists/create_list_if_it_does_not_exist';
|
import { createListIfItDoesNotExist } from '../lists/create_list_if_it_does_not_exist';
|
||||||
import {
|
import {
|
||||||
|
@ -16,7 +17,6 @@ import {
|
||||||
ListIdOrUndefined,
|
ListIdOrUndefined,
|
||||||
ListSchema,
|
ListSchema,
|
||||||
SerializerOrUndefined,
|
SerializerOrUndefined,
|
||||||
Version,
|
|
||||||
} from '../../../common/schemas';
|
} from '../../../common/schemas';
|
||||||
import { ConfigType } from '../../config';
|
import { ConfigType } from '../../config';
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ import {
|
||||||
Name,
|
Name,
|
||||||
Type,
|
Type,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { Version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import { encodeHitVersion } from '../utils/encode_hit_version';
|
import { encodeHitVersion } from '../utils/encode_hit_version';
|
||||||
import {
|
import {
|
||||||
|
@ -21,7 +22,6 @@ import {
|
||||||
Immutable,
|
Immutable,
|
||||||
ListSchema,
|
ListSchema,
|
||||||
SerializerOrUndefined,
|
SerializerOrUndefined,
|
||||||
Version,
|
|
||||||
} from '../../../common/schemas';
|
} from '../../../common/schemas';
|
||||||
import { IndexEsListSchema } from '../../schemas/elastic_query';
|
import { IndexEsListSchema } from '../../schemas/elastic_query';
|
||||||
|
|
||||||
|
|
|
@ -13,13 +13,13 @@ import {
|
||||||
Name,
|
Name,
|
||||||
Type,
|
Type,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { Version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
DeserializerOrUndefined,
|
DeserializerOrUndefined,
|
||||||
Immutable,
|
Immutable,
|
||||||
ListSchema,
|
ListSchema,
|
||||||
SerializerOrUndefined,
|
SerializerOrUndefined,
|
||||||
Version,
|
|
||||||
} from '../../../common/schemas';
|
} from '../../../common/schemas';
|
||||||
|
|
||||||
import { getList } from './get_list';
|
import { getList } from './get_list';
|
||||||
|
|
|
@ -18,6 +18,7 @@ import {
|
||||||
NameOrUndefined,
|
NameOrUndefined,
|
||||||
Type,
|
Type,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { Version, VersionOrUndefined } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
DeserializerOrUndefined,
|
DeserializerOrUndefined,
|
||||||
|
@ -30,8 +31,6 @@ import {
|
||||||
SerializerOrUndefined,
|
SerializerOrUndefined,
|
||||||
SortFieldOrUndefined,
|
SortFieldOrUndefined,
|
||||||
SortOrderOrUndefined,
|
SortOrderOrUndefined,
|
||||||
Version,
|
|
||||||
VersionOrUndefined,
|
|
||||||
_VersionOrUndefined,
|
_VersionOrUndefined,
|
||||||
} from '../../../common/schemas';
|
} from '../../../common/schemas';
|
||||||
import { ConfigType } from '../../config';
|
import { ConfigType } from '../../config';
|
||||||
|
|
|
@ -12,10 +12,11 @@ import {
|
||||||
MetaOrUndefined,
|
MetaOrUndefined,
|
||||||
NameOrUndefined,
|
NameOrUndefined,
|
||||||
} from '@kbn/securitysolution-io-ts-list-types';
|
} from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { VersionOrUndefined } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import { decodeVersion } from '../utils/decode_version';
|
import { decodeVersion } from '../utils/decode_version';
|
||||||
import { encodeHitVersion } from '../utils/encode_hit_version';
|
import { encodeHitVersion } from '../utils/encode_hit_version';
|
||||||
import { ListSchema, VersionOrUndefined, _VersionOrUndefined } from '../../../common/schemas';
|
import { ListSchema, _VersionOrUndefined } from '../../../common/schemas';
|
||||||
import { UpdateEsListSchema } from '../../schemas/elastic_query';
|
import { UpdateEsListSchema } from '../../schemas/elastic_query';
|
||||||
|
|
||||||
import { getList } from '.';
|
import { getList } from '.';
|
||||||
|
|
|
@ -1,77 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { addIdToItem, removeIdFromItem } from './add_remove_id_to_item';
|
|
||||||
|
|
||||||
jest.mock('uuid', () => ({
|
|
||||||
v4: jest.fn().mockReturnValue('123'),
|
|
||||||
}));
|
|
||||||
|
|
||||||
describe('add_remove_id_to_item', () => {
|
|
||||||
afterEach(() => {
|
|
||||||
jest.clearAllMocks();
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('addIdToItem', () => {
|
|
||||||
test('it adds an id to an empty item', () => {
|
|
||||||
expect(addIdToItem({})).toEqual({ id: '123' });
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it adds a complex object', () => {
|
|
||||||
expect(
|
|
||||||
addIdToItem({
|
|
||||||
field: '',
|
|
||||||
type: 'mapping',
|
|
||||||
value: '',
|
|
||||||
})
|
|
||||||
).toEqual({
|
|
||||||
id: '123',
|
|
||||||
field: '',
|
|
||||||
type: 'mapping',
|
|
||||||
value: '',
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it adds an id to an existing item', () => {
|
|
||||||
expect(addIdToItem({ test: '456' })).toEqual({ id: '123', test: '456' });
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it does not change the id if it already exists', () => {
|
|
||||||
expect(addIdToItem({ id: '456' })).toEqual({ id: '456' });
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it returns the same reference if it has an id already', () => {
|
|
||||||
const obj = { id: '456' };
|
|
||||||
expect(addIdToItem(obj)).toBe(obj);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it returns a new reference if it adds an id to an item', () => {
|
|
||||||
const obj = { test: '456' };
|
|
||||||
expect(addIdToItem(obj)).not.toBe(obj);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('removeIdFromItem', () => {
|
|
||||||
test('it removes an id from an item', () => {
|
|
||||||
expect(removeIdFromItem({ id: '456' })).toEqual({});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it returns a new reference if it removes an id from an item', () => {
|
|
||||||
const obj = { id: '123', test: '456' };
|
|
||||||
expect(removeIdFromItem(obj)).not.toBe(obj);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it does not effect an item without an id', () => {
|
|
||||||
expect(removeIdFromItem({ test: '456' })).toEqual({ test: '456' });
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it returns the same reference if it does not have an id already', () => {
|
|
||||||
const obj = { test: '456' };
|
|
||||||
expect(removeIdFromItem(obj)).toBe(obj);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,50 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import uuid from 'uuid';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is useful for when you have arrays without an ID and need to add one for
|
|
||||||
* ReactJS keys. I break the types slightly by introducing an id to an arbitrary item
|
|
||||||
* but then cast it back to the regular type T.
|
|
||||||
* Usage of this could be considered tech debt as I am adding an ID when the backend
|
|
||||||
* could be doing the same thing but it depends on how you want to model your data and
|
|
||||||
* if you view modeling your data with id's to please ReactJS a good or bad thing.
|
|
||||||
* @param item The item to add an id to.
|
|
||||||
*/
|
|
||||||
type NotArray<T> = T extends unknown[] ? never : T;
|
|
||||||
export const addIdToItem = <T>(item: NotArray<T>): T => {
|
|
||||||
const maybeId: typeof item & { id?: string } = item;
|
|
||||||
if (maybeId.id != null) {
|
|
||||||
return item;
|
|
||||||
} else {
|
|
||||||
return { ...item, id: uuid.v4() };
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is to reverse the id you added to your arrays for ReactJS keys.
|
|
||||||
* @param item The item to remove the id from.
|
|
||||||
*/
|
|
||||||
export const removeIdFromItem = <T>(
|
|
||||||
item: NotArray<T>
|
|
||||||
):
|
|
||||||
| T
|
|
||||||
| Pick<
|
|
||||||
T & {
|
|
||||||
id?: string | undefined;
|
|
||||||
},
|
|
||||||
Exclude<keyof T, 'id'>
|
|
||||||
> => {
|
|
||||||
const maybeId: typeof item & { id?: string } = item;
|
|
||||||
if (maybeId.id != null) {
|
|
||||||
const { id, ...noId } = maybeId;
|
|
||||||
return noId;
|
|
||||||
} else {
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
};
|
|
|
@ -5,6 +5,7 @@
|
||||||
* 2.0.
|
* 2.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { Language } from '@kbn/securitysolution-io-ts-alerting-types';
|
||||||
import {
|
import {
|
||||||
Filter,
|
Filter,
|
||||||
IIndexPattern,
|
IIndexPattern,
|
||||||
|
@ -17,7 +18,7 @@ import {
|
||||||
} from '../../../lists/common/schemas';
|
} from '../../../lists/common/schemas';
|
||||||
import { ESBoolQuery } from '../typed_json';
|
import { ESBoolQuery } from '../typed_json';
|
||||||
import { buildExceptionFilter } from '../shared_imports';
|
import { buildExceptionFilter } from '../shared_imports';
|
||||||
import { Query, Language, Index, TimestampOverrideOrUndefined } from './schemas/common/schemas';
|
import { Query, Index, TimestampOverrideOrUndefined } from './schemas/common/schemas';
|
||||||
|
|
||||||
export const getQueryFilter = (
|
export const getQueryFilter = (
|
||||||
query: Query,
|
query: Query,
|
||||||
|
|
|
@ -8,21 +8,14 @@
|
||||||
/* eslint-disable @typescript-eslint/naming-convention */
|
/* eslint-disable @typescript-eslint/naming-convention */
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
import { Either } from 'fp-ts/lib/Either';
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
SavedObjectAttributes,
|
UUID,
|
||||||
SavedObjectAttribute,
|
NonEmptyString,
|
||||||
SavedObjectAttributeSingle,
|
IsoDateString,
|
||||||
} from 'src/core/types';
|
PositiveIntegerGreaterThanZero,
|
||||||
import { RiskScore } from '../types/risk_score';
|
PositiveInteger,
|
||||||
import { UUID } from '../types/uuid';
|
} from '@kbn/securitysolution-io-ts-types';
|
||||||
import { IsoDateString } from '../types/iso_date_string';
|
|
||||||
import { PositiveIntegerGreaterThanZero } from '../types/positive_integer_greater_than_zero';
|
|
||||||
import { PositiveInteger } from '../types/positive_integer';
|
|
||||||
import { NonEmptyString } from '../types/non_empty_string';
|
|
||||||
import { parseScheduleDates } from '../../parse_schedule_dates';
|
|
||||||
import { machine_learning_job_id_normalized } from '../types/normalized_ml_job_id';
|
|
||||||
|
|
||||||
export const author = t.array(t.string);
|
export const author = t.array(t.string);
|
||||||
export type Author = t.TypeOf<typeof author>;
|
export type Author = t.TypeOf<typeof author>;
|
||||||
|
@ -76,79 +69,6 @@ export type Filters = t.TypeOf<typeof filters>; // Filters are not easily type-a
|
||||||
export const filtersOrUndefined = t.union([filters, t.undefined]);
|
export const filtersOrUndefined = t.union([filters, t.undefined]);
|
||||||
export type FiltersOrUndefined = t.TypeOf<typeof filtersOrUndefined>;
|
export type FiltersOrUndefined = t.TypeOf<typeof filtersOrUndefined>;
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const saved_object_attribute_single: t.Type<SavedObjectAttributeSingle> = t.recursion(
|
|
||||||
'saved_object_attribute_single',
|
|
||||||
() => t.union([t.string, t.number, t.boolean, t.null, t.undefined, saved_object_attributes])
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const saved_object_attribute: t.Type<SavedObjectAttribute> = t.recursion(
|
|
||||||
'saved_object_attribute',
|
|
||||||
() => t.union([saved_object_attribute_single, t.array(saved_object_attribute_single)])
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const saved_object_attributes: t.Type<SavedObjectAttributes> = t.recursion(
|
|
||||||
'saved_object_attributes',
|
|
||||||
() => t.record(t.string, saved_object_attribute)
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Params is an "object", since it is a type of AlertActionParams which is action templates.
|
|
||||||
* @see x-pack/plugins/alerting/common/alert.ts
|
|
||||||
*/
|
|
||||||
export const action_group = t.string;
|
|
||||||
export const action_id = t.string;
|
|
||||||
export const action_action_type_id = t.string;
|
|
||||||
export const action_params = saved_object_attributes;
|
|
||||||
export const action = t.exact(
|
|
||||||
t.type({
|
|
||||||
group: action_group,
|
|
||||||
id: action_id,
|
|
||||||
action_type_id: action_action_type_id,
|
|
||||||
params: action_params,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
export const actions = t.array(action);
|
|
||||||
export type Actions = t.TypeOf<typeof actions>;
|
|
||||||
|
|
||||||
export const actionsCamel = t.array(
|
|
||||||
t.exact(
|
|
||||||
t.type({
|
|
||||||
group: action_group,
|
|
||||||
id: action_id,
|
|
||||||
actionTypeId: action_action_type_id,
|
|
||||||
params: action_params,
|
|
||||||
})
|
|
||||||
)
|
|
||||||
);
|
|
||||||
export type ActionsCamel = t.TypeOf<typeof actions>;
|
|
||||||
|
|
||||||
const stringValidator = (input: unknown): input is string => typeof input === 'string';
|
|
||||||
export const from = new t.Type<string, string, unknown>(
|
|
||||||
'From',
|
|
||||||
t.string.is,
|
|
||||||
(input, context): Either<t.Errors, string> => {
|
|
||||||
if (stringValidator(input) && parseScheduleDates(input) == null) {
|
|
||||||
return t.failure(input, context, 'Failed to parse "from" on rule param');
|
|
||||||
}
|
|
||||||
return t.string.validate(input, context);
|
|
||||||
},
|
|
||||||
t.identity
|
|
||||||
);
|
|
||||||
export type From = t.TypeOf<typeof from>;
|
|
||||||
|
|
||||||
export const fromOrUndefined = t.union([from, t.undefined]);
|
|
||||||
export type FromOrUndefined = t.TypeOf<typeof fromOrUndefined>;
|
|
||||||
|
|
||||||
export const immutable = t.boolean;
|
export const immutable = t.boolean;
|
||||||
export type Immutable = t.TypeOf<typeof immutable>;
|
export type Immutable = t.TypeOf<typeof immutable>;
|
||||||
|
|
||||||
|
@ -183,26 +103,6 @@ export type Query = t.TypeOf<typeof query>;
|
||||||
export const queryOrUndefined = t.union([query, t.undefined]);
|
export const queryOrUndefined = t.union([query, t.undefined]);
|
||||||
export type QueryOrUndefined = t.TypeOf<typeof queryOrUndefined>;
|
export type QueryOrUndefined = t.TypeOf<typeof queryOrUndefined>;
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const language = t.keyof({ eql: null, kuery: null, lucene: null });
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type Language = t.TypeOf<typeof language>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const languageOrUndefined = t.union([language, t.undefined]);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type LanguageOrUndefined = t.TypeOf<typeof languageOrUndefined>;
|
|
||||||
|
|
||||||
export const license = t.string;
|
export const license = t.string;
|
||||||
export type License = t.TypeOf<typeof license>;
|
export type License = t.TypeOf<typeof license>;
|
||||||
|
|
||||||
|
@ -241,27 +141,12 @@ export type TimestampOverride = t.TypeOf<typeof timestamp_override>;
|
||||||
export const timestampOverrideOrUndefined = t.union([timestamp_override, t.undefined]);
|
export const timestampOverrideOrUndefined = t.union([timestamp_override, t.undefined]);
|
||||||
export type TimestampOverrideOrUndefined = t.TypeOf<typeof timestampOverrideOrUndefined>;
|
export type TimestampOverrideOrUndefined = t.TypeOf<typeof timestampOverrideOrUndefined>;
|
||||||
|
|
||||||
export const throttle = t.string;
|
|
||||||
export type Throttle = t.TypeOf<typeof throttle>;
|
|
||||||
|
|
||||||
export const throttleOrNull = t.union([throttle, t.null]);
|
|
||||||
export type ThrottleOrNull = t.TypeOf<typeof throttleOrNull>;
|
|
||||||
|
|
||||||
export const throttleOrNullOrUndefined = t.union([throttle, t.null, t.undefined]);
|
|
||||||
export type ThrottleOrUndefinedOrNull = t.TypeOf<typeof throttleOrNullOrUndefined>;
|
|
||||||
|
|
||||||
export const anomaly_threshold = PositiveInteger;
|
export const anomaly_threshold = PositiveInteger;
|
||||||
export type AnomalyThreshold = t.TypeOf<typeof PositiveInteger>;
|
export type AnomalyThreshold = t.TypeOf<typeof PositiveInteger>;
|
||||||
|
|
||||||
export const anomalyThresholdOrUndefined = t.union([anomaly_threshold, t.undefined]);
|
export const anomalyThresholdOrUndefined = t.union([anomaly_threshold, t.undefined]);
|
||||||
export type AnomalyThresholdOrUndefined = t.TypeOf<typeof anomalyThresholdOrUndefined>;
|
export type AnomalyThresholdOrUndefined = t.TypeOf<typeof anomalyThresholdOrUndefined>;
|
||||||
|
|
||||||
export const machine_learning_job_id = t.union([t.string, machine_learning_job_id_normalized]);
|
|
||||||
export type MachineLearningJobId = t.TypeOf<typeof machine_learning_job_id>;
|
|
||||||
|
|
||||||
export const machineLearningJobIdOrUndefined = t.union([machine_learning_job_id, t.undefined]);
|
|
||||||
export type MachineLearningJobIdOrUndefined = t.TypeOf<typeof machineLearningJobIdOrUndefined>;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Note that this is a non-exact io-ts type as we allow extra meta information
|
* Note that this is a non-exact io-ts type as we allow extra meta information
|
||||||
* to be added to the meta object
|
* to be added to the meta object
|
||||||
|
@ -271,158 +156,18 @@ export type Meta = t.TypeOf<typeof meta>;
|
||||||
export const metaOrUndefined = t.union([meta, t.undefined]);
|
export const metaOrUndefined = t.union([meta, t.undefined]);
|
||||||
export type MetaOrUndefined = t.TypeOf<typeof metaOrUndefined>;
|
export type MetaOrUndefined = t.TypeOf<typeof metaOrUndefined>;
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const max_signals = PositiveIntegerGreaterThanZero;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type MaxSignals = t.TypeOf<typeof max_signals>;
|
|
||||||
|
|
||||||
export const maxSignalsOrUndefined = t.union([max_signals, t.undefined]);
|
|
||||||
export type MaxSignalsOrUndefined = t.TypeOf<typeof maxSignalsOrUndefined>;
|
|
||||||
|
|
||||||
export const name = NonEmptyString;
|
export const name = NonEmptyString;
|
||||||
export type Name = t.TypeOf<typeof name>;
|
export type Name = t.TypeOf<typeof name>;
|
||||||
|
|
||||||
export const nameOrUndefined = t.union([name, t.undefined]);
|
export const nameOrUndefined = t.union([name, t.undefined]);
|
||||||
export type NameOrUndefined = t.TypeOf<typeof nameOrUndefined>;
|
export type NameOrUndefined = t.TypeOf<typeof nameOrUndefined>;
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const operator = t.keyof({
|
|
||||||
equals: null,
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type Operator = t.TypeOf<typeof operator>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export enum OperatorEnum {
|
|
||||||
EQUALS = 'equals',
|
|
||||||
}
|
|
||||||
|
|
||||||
export const risk_score = RiskScore;
|
|
||||||
export type RiskScore = t.TypeOf<typeof risk_score>;
|
|
||||||
|
|
||||||
export const riskScoreOrUndefined = t.union([risk_score, t.undefined]);
|
|
||||||
export type RiskScoreOrUndefined = t.TypeOf<typeof riskScoreOrUndefined>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const risk_score_mapping_field = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const risk_score_mapping_value = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const risk_score_mapping_item = t.exact(
|
|
||||||
t.type({
|
|
||||||
field: risk_score_mapping_field,
|
|
||||||
value: risk_score_mapping_value,
|
|
||||||
operator,
|
|
||||||
risk_score: riskScoreOrUndefined,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const risk_score_mapping = t.array(risk_score_mapping_item);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type RiskScoreMapping = t.TypeOf<typeof risk_score_mapping>;
|
|
||||||
|
|
||||||
export const riskScoreMappingOrUndefined = t.union([risk_score_mapping, t.undefined]);
|
|
||||||
export type RiskScoreMappingOrUndefined = t.TypeOf<typeof riskScoreMappingOrUndefined>;
|
|
||||||
|
|
||||||
export const rule_name_override = t.string;
|
export const rule_name_override = t.string;
|
||||||
export type RuleNameOverride = t.TypeOf<typeof rule_name_override>;
|
export type RuleNameOverride = t.TypeOf<typeof rule_name_override>;
|
||||||
|
|
||||||
export const ruleNameOverrideOrUndefined = t.union([rule_name_override, t.undefined]);
|
export const ruleNameOverrideOrUndefined = t.union([rule_name_override, t.undefined]);
|
||||||
export type RuleNameOverrideOrUndefined = t.TypeOf<typeof ruleNameOverrideOrUndefined>;
|
export type RuleNameOverrideOrUndefined = t.TypeOf<typeof ruleNameOverrideOrUndefined>;
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const severity = t.keyof({ low: null, medium: null, high: null, critical: null });
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type Severity = t.TypeOf<typeof severity>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const severityOrUndefined = t.union([severity, t.undefined]);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type SeverityOrUndefined = t.TypeOf<typeof severityOrUndefined>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const severity_mapping_field = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const severity_mapping_value = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const severity_mapping_item = t.exact(
|
|
||||||
t.type({
|
|
||||||
field: severity_mapping_field,
|
|
||||||
operator,
|
|
||||||
value: severity_mapping_value,
|
|
||||||
severity,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type SeverityMappingItem = t.TypeOf<typeof severity_mapping_item>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const severity_mapping = t.array(severity_mapping_item);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type SeverityMapping = t.TypeOf<typeof severity_mapping>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const severityMappingOrUndefined = t.union([severity_mapping, t.undefined]);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type SeverityMappingOrUndefined = t.TypeOf<typeof severityMappingOrUndefined>;
|
|
||||||
|
|
||||||
export const status = t.keyof({ open: null, closed: null, 'in-progress': null });
|
export const status = t.keyof({ open: null, closed: null, 'in-progress': null });
|
||||||
export type Status = t.TypeOf<typeof status>;
|
export type Status = t.TypeOf<typeof status>;
|
||||||
|
|
||||||
|
@ -445,19 +190,6 @@ export type To = t.TypeOf<typeof to>;
|
||||||
export const toOrUndefined = t.union([to, t.undefined]);
|
export const toOrUndefined = t.union([to, t.undefined]);
|
||||||
export type ToOrUndefined = t.TypeOf<typeof toOrUndefined>;
|
export type ToOrUndefined = t.TypeOf<typeof toOrUndefined>;
|
||||||
|
|
||||||
export const type = t.keyof({
|
|
||||||
eql: null,
|
|
||||||
machine_learning: null,
|
|
||||||
query: null,
|
|
||||||
saved_query: null,
|
|
||||||
threshold: null,
|
|
||||||
threat_match: null,
|
|
||||||
});
|
|
||||||
export type Type = t.TypeOf<typeof type>;
|
|
||||||
|
|
||||||
export const typeOrUndefined = t.union([type, t.undefined]);
|
|
||||||
export type TypeOrUndefined = t.TypeOf<typeof typeOrUndefined>;
|
|
||||||
|
|
||||||
export const queryFilter = t.string;
|
export const queryFilter = t.string;
|
||||||
export type QueryFilter = t.TypeOf<typeof queryFilter>;
|
export type QueryFilter = t.TypeOf<typeof queryFilter>;
|
||||||
|
|
||||||
|
@ -511,152 +243,6 @@ export type Fields = t.TypeOf<typeof fields>;
|
||||||
export const fieldsOrUndefined = t.union([fields, t.undefined]);
|
export const fieldsOrUndefined = t.union([fields, t.undefined]);
|
||||||
export type FieldsOrUndefined = t.TypeOf<typeof fieldsOrUndefined>;
|
export type FieldsOrUndefined = t.TypeOf<typeof fieldsOrUndefined>;
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_framework = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_tactic_id = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_tactic_name = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_tactic_reference = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_tactic = t.type({
|
|
||||||
id: threat_tactic_id,
|
|
||||||
name: threat_tactic_name,
|
|
||||||
reference: threat_tactic_reference,
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type ThreatTactic = t.TypeOf<typeof threat_tactic>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_subtechnique_id = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_subtechnique_name = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_subtechnique_reference = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_subtechnique = t.type({
|
|
||||||
id: threat_subtechnique_id,
|
|
||||||
name: threat_subtechnique_name,
|
|
||||||
reference: threat_subtechnique_reference,
|
|
||||||
});
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type ThreatSubtechnique = t.TypeOf<typeof threat_subtechnique>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_subtechniques = t.array(threat_subtechnique);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_technique_id = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_technique_name = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_technique_reference = t.string;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_technique = t.intersection([
|
|
||||||
t.exact(
|
|
||||||
t.type({
|
|
||||||
id: threat_technique_id,
|
|
||||||
name: threat_technique_name,
|
|
||||||
reference: threat_technique_reference,
|
|
||||||
})
|
|
||||||
),
|
|
||||||
t.exact(
|
|
||||||
t.partial({
|
|
||||||
subtechnique: threat_subtechniques,
|
|
||||||
})
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type ThreatTechnique = t.TypeOf<typeof threat_technique>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat_techniques = t.array(threat_technique);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threat = t.intersection([
|
|
||||||
t.exact(
|
|
||||||
t.type({
|
|
||||||
framework: threat_framework,
|
|
||||||
tactic: threat_tactic,
|
|
||||||
})
|
|
||||||
),
|
|
||||||
t.exact(
|
|
||||||
t.partial({
|
|
||||||
technique: threat_techniques,
|
|
||||||
})
|
|
||||||
),
|
|
||||||
]);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type Threat = t.TypeOf<typeof threat>;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const threats = t.array(threat);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type Threats = t.TypeOf<typeof threats>;
|
|
||||||
|
|
||||||
export const threatsOrUndefined = t.union([threats, t.undefined]);
|
|
||||||
export type ThreatsOrUndefined = t.TypeOf<typeof threatsOrUndefined>;
|
|
||||||
|
|
||||||
export const thresholdField = t.exact(
|
export const thresholdField = t.exact(
|
||||||
t.type({
|
t.type({
|
||||||
field: t.union([t.string, t.array(t.string)]), // Covers pre- and post-7.12
|
field: t.union([t.string, t.array(t.string)]), // Covers pre- and post-7.12
|
||||||
|
@ -707,43 +293,19 @@ export type ThresholdNormalized = t.TypeOf<typeof thresholdNormalized>;
|
||||||
export const thresholdNormalizedOrUndefined = t.union([thresholdNormalized, t.undefined]);
|
export const thresholdNormalizedOrUndefined = t.union([thresholdNormalized, t.undefined]);
|
||||||
export type ThresholdNormalizedOrUndefined = t.TypeOf<typeof thresholdNormalizedOrUndefined>;
|
export type ThresholdNormalizedOrUndefined = t.TypeOf<typeof thresholdNormalizedOrUndefined>;
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const created_at = IsoDateString;
|
export const created_at = IsoDateString;
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const updated_at = IsoDateString;
|
export const updated_at = IsoDateString;
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const updated_by = t.string;
|
export const updated_by = t.string;
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const created_by = t.string;
|
export const created_by = t.string;
|
||||||
|
|
||||||
export const updatedByOrNull = t.union([updated_by, t.null]);
|
export const updatedByOrNull = t.union([updated_by, t.null]);
|
||||||
export type UpdatedByOrNull = t.TypeOf<typeof updatedByOrNull>;
|
export type UpdatedByOrNull = t.TypeOf<typeof updatedByOrNull>;
|
||||||
export const createdByOrNull = t.union([created_by, t.null]);
|
export const createdByOrNull = t.union([created_by, t.null]);
|
||||||
export type CreatedByOrNull = t.TypeOf<typeof createdByOrNull>;
|
export type CreatedByOrNull = t.TypeOf<typeof createdByOrNull>;
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const version = PositiveIntegerGreaterThanZero;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export type Version = t.TypeOf<typeof version>;
|
|
||||||
|
|
||||||
export const versionOrUndefined = t.union([version, t.undefined]);
|
|
||||||
export type VersionOrUndefined = t.TypeOf<typeof versionOrUndefined>;
|
|
||||||
|
|
||||||
export const last_success_at = IsoDateString;
|
export const last_success_at = IsoDateString;
|
||||||
export type LastSuccessAt = t.TypeOf<typeof IsoDateString>;
|
export type LastSuccessAt = t.TypeOf<typeof IsoDateString>;
|
||||||
|
|
||||||
|
|
|
@ -8,46 +8,20 @@
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
description,
|
Actions,
|
||||||
anomaly_threshold,
|
DefaultActionsArray,
|
||||||
filters,
|
DefaultFromString,
|
||||||
index,
|
DefaultIntervalString,
|
||||||
saved_id,
|
DefaultMaxSignalsNumber,
|
||||||
timeline_id,
|
DefaultRiskScoreMappingArray,
|
||||||
timeline_title,
|
DefaultSeverityMappingArray,
|
||||||
meta,
|
DefaultThreatArray,
|
||||||
|
DefaultThrottleNull,
|
||||||
|
DefaultToString,
|
||||||
|
From,
|
||||||
|
RiskScoreMapping,
|
||||||
machine_learning_job_id,
|
machine_learning_job_id,
|
||||||
risk_score,
|
risk_score,
|
||||||
MaxSignals,
|
|
||||||
name,
|
|
||||||
severity,
|
|
||||||
Tags,
|
|
||||||
To,
|
|
||||||
type,
|
|
||||||
Threats,
|
|
||||||
threshold,
|
|
||||||
ThrottleOrNull,
|
|
||||||
note,
|
|
||||||
References,
|
|
||||||
Actions,
|
|
||||||
Enabled,
|
|
||||||
FalsePositives,
|
|
||||||
From,
|
|
||||||
Interval,
|
|
||||||
language,
|
|
||||||
query,
|
|
||||||
rule_id,
|
|
||||||
version,
|
|
||||||
building_block_type,
|
|
||||||
license,
|
|
||||||
rule_name_override,
|
|
||||||
timestamp_override,
|
|
||||||
Author,
|
|
||||||
RiskScoreMapping,
|
|
||||||
SeverityMapping,
|
|
||||||
event_category_override,
|
|
||||||
} from '../common/schemas';
|
|
||||||
import {
|
|
||||||
threat_index,
|
threat_index,
|
||||||
concurrent_searches,
|
concurrent_searches,
|
||||||
items_per_search,
|
items_per_search,
|
||||||
|
@ -56,23 +30,48 @@ import {
|
||||||
threat_mapping,
|
threat_mapping,
|
||||||
threat_language,
|
threat_language,
|
||||||
threat_indicator_path,
|
threat_indicator_path,
|
||||||
} from '../types/threat_mapping';
|
Threats,
|
||||||
|
type,
|
||||||
|
language,
|
||||||
|
severity,
|
||||||
|
SeverityMapping,
|
||||||
|
ThrottleOrNull,
|
||||||
|
MaxSignals,
|
||||||
|
} from '@kbn/securitysolution-io-ts-alerting-types';
|
||||||
import {
|
import {
|
||||||
|
version,
|
||||||
DefaultStringArray,
|
DefaultStringArray,
|
||||||
DefaultActionsArray,
|
|
||||||
DefaultBooleanFalse,
|
DefaultBooleanFalse,
|
||||||
DefaultFromString,
|
} from '@kbn/securitysolution-io-ts-types';
|
||||||
DefaultIntervalString,
|
|
||||||
DefaultMaxSignalsNumber,
|
import { DefaultListArray, ListArray } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
DefaultToString,
|
import {
|
||||||
DefaultThreatArray,
|
description,
|
||||||
DefaultThrottleNull,
|
anomaly_threshold,
|
||||||
DefaultListArray,
|
filters,
|
||||||
ListArray,
|
index,
|
||||||
DefaultRiskScoreMappingArray,
|
saved_id,
|
||||||
DefaultSeverityMappingArray,
|
timeline_id,
|
||||||
} from '../types';
|
timeline_title,
|
||||||
|
meta,
|
||||||
|
name,
|
||||||
|
Tags,
|
||||||
|
To,
|
||||||
|
threshold,
|
||||||
|
note,
|
||||||
|
References,
|
||||||
|
Enabled,
|
||||||
|
FalsePositives,
|
||||||
|
Interval,
|
||||||
|
query,
|
||||||
|
rule_id,
|
||||||
|
building_block_type,
|
||||||
|
license,
|
||||||
|
rule_name_override,
|
||||||
|
timestamp_override,
|
||||||
|
Author,
|
||||||
|
event_category_override,
|
||||||
|
} from '../common/schemas';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Big differences between this schema and the createRulesSchema
|
* Big differences between this schema and the createRulesSchema
|
||||||
|
|
|
@ -11,9 +11,8 @@ import {
|
||||||
AddPrepackagedRulesSchema,
|
AddPrepackagedRulesSchema,
|
||||||
} from './add_prepackaged_rules_schema';
|
} from './add_prepackaged_rules_schema';
|
||||||
|
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
import { pipe } from 'fp-ts/lib/pipeable';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
import { left } from 'fp-ts/lib/Either';
|
||||||
import {
|
import {
|
||||||
getAddPrepackagedRulesSchemaMock,
|
getAddPrepackagedRulesSchemaMock,
|
||||||
|
|
|
@ -6,9 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { createRulesBulkSchema, CreateRulesBulkSchema } from './create_rules_bulk_schema';
|
import { createRulesBulkSchema, CreateRulesBulkSchema } from './create_rules_bulk_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, formatErrors } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { foldLeftRight } from '../../../test_utils';
|
|
||||||
import { formatErrors } from '../../../format_errors';
|
|
||||||
import { getCreateRulesSchemaMock } from './rule_schemas.mock';
|
import { getCreateRulesSchemaMock } from './rule_schemas.mock';
|
||||||
|
|
||||||
// only the basics of testing are here.
|
// only the basics of testing are here.
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
|
|
||||||
|
import { PositiveInteger, PositiveIntegerGreaterThanZero } from '@kbn/securitysolution-io-ts-types';
|
||||||
import { index } from '../common/schemas';
|
import { index } from '../common/schemas';
|
||||||
import { PositiveInteger, PositiveIntegerGreaterThanZero } from '../types';
|
|
||||||
|
|
||||||
export const signalsReindexOptions = t.partial({
|
export const signalsReindexOptions = t.partial({
|
||||||
requests_per_second: t.number,
|
requests_per_second: t.number,
|
||||||
|
|
|
@ -12,9 +12,8 @@ import {
|
||||||
ExportRulesQuerySchema,
|
ExportRulesQuerySchema,
|
||||||
ExportRulesQuerySchemaDecoded,
|
ExportRulesQuerySchemaDecoded,
|
||||||
} from './export_rules_schema';
|
} from './export_rules_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
import { pipe } from 'fp-ts/lib/pipeable';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
import { left } from 'fp-ts/lib/Either';
|
||||||
|
|
||||||
describe('create rules schema', () => {
|
describe('create rules schema', () => {
|
||||||
|
|
|
@ -7,11 +7,10 @@
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
|
|
||||||
|
import { DefaultExportFileName } from '@kbn/securitysolution-io-ts-alerting-types';
|
||||||
|
import { DefaultStringBooleanFalse } from '@kbn/securitysolution-io-ts-types';
|
||||||
import { rule_id, FileName, ExcludeExportDetails } from '../common/schemas';
|
import { rule_id, FileName, ExcludeExportDetails } from '../common/schemas';
|
||||||
|
|
||||||
import { DefaultExportFileName } from '../types/default_export_file_name';
|
|
||||||
import { DefaultStringBooleanFalse } from '../types/default_string_boolean_false';
|
|
||||||
|
|
||||||
const objects = t.array(t.exact(t.type({ rule_id })));
|
const objects = t.array(t.exact(t.type({ rule_id })));
|
||||||
export const exportRulesSchema = t.union([t.exact(t.type({ objects })), t.null]);
|
export const exportRulesSchema = t.union([t.exact(t.type({ objects })), t.null]);
|
||||||
export type ExportRulesSchema = t.TypeOf<typeof exportRulesSchema>;
|
export type ExportRulesSchema = t.TypeOf<typeof exportRulesSchema>;
|
||||||
|
|
|
@ -5,9 +5,8 @@
|
||||||
* 2.0.
|
* 2.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
import { pipe } from 'fp-ts/lib/pipeable';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
import { left } from 'fp-ts/lib/Either';
|
||||||
import { FindRulesSchema, findRulesSchema } from './find_rules_schema';
|
import { FindRulesSchema, findRulesSchema } from './find_rules_schema';
|
||||||
|
|
||||||
|
|
|
@ -7,9 +7,8 @@
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
|
|
||||||
|
import { DefaultPerPage, DefaultPage } from '@kbn/securitysolution-io-ts-alerting-types';
|
||||||
import { queryFilter, fields, sort_field, sort_order, PerPage, Page } from '../common/schemas';
|
import { queryFilter, fields, sort_field, sort_order, PerPage, Page } from '../common/schemas';
|
||||||
import { DefaultPerPage } from '../types/default_per_page';
|
|
||||||
import { DefaultPage } from '../types/default_page';
|
|
||||||
|
|
||||||
export const findRulesSchema = t.exact(
|
export const findRulesSchema = t.exact(
|
||||||
t.partial({
|
t.partial({
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
|
|
||||||
import { from } from '../common/schemas';
|
import { from } from '@kbn/securitysolution-io-ts-alerting-types';
|
||||||
|
|
||||||
export const getSignalsMigrationStatusSchema = t.exact(
|
export const getSignalsMigrationStatusSchema = t.exact(
|
||||||
t.type({
|
t.type({
|
||||||
|
|
|
@ -5,9 +5,8 @@
|
||||||
* 2.0.
|
* 2.0.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
import { pipe } from 'fp-ts/lib/pipeable';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
import { left } from 'fp-ts/lib/Either';
|
||||||
import {
|
import {
|
||||||
ImportRulesSchema,
|
ImportRulesSchema,
|
||||||
|
|
|
@ -7,6 +7,47 @@
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
|
|
||||||
|
import {
|
||||||
|
Actions,
|
||||||
|
DefaultActionsArray,
|
||||||
|
DefaultFromString,
|
||||||
|
DefaultIntervalString,
|
||||||
|
DefaultMaxSignalsNumber,
|
||||||
|
DefaultRiskScoreMappingArray,
|
||||||
|
DefaultSeverityMappingArray,
|
||||||
|
DefaultThreatArray,
|
||||||
|
DefaultThrottleNull,
|
||||||
|
DefaultToString,
|
||||||
|
From,
|
||||||
|
machine_learning_job_id,
|
||||||
|
risk_score,
|
||||||
|
RiskScoreMapping,
|
||||||
|
threat_index,
|
||||||
|
items_per_search,
|
||||||
|
concurrent_searches,
|
||||||
|
threat_query,
|
||||||
|
threat_filters,
|
||||||
|
threat_mapping,
|
||||||
|
threat_language,
|
||||||
|
threat_indicator_path,
|
||||||
|
Threats,
|
||||||
|
type,
|
||||||
|
language,
|
||||||
|
severity,
|
||||||
|
SeverityMapping,
|
||||||
|
ThrottleOrNull,
|
||||||
|
MaxSignals,
|
||||||
|
} from '@kbn/securitysolution-io-ts-alerting-types';
|
||||||
|
|
||||||
|
import {
|
||||||
|
DefaultVersionNumber,
|
||||||
|
Version,
|
||||||
|
DefaultStringArray,
|
||||||
|
DefaultBooleanTrue,
|
||||||
|
OnlyFalseAllowed,
|
||||||
|
DefaultStringBooleanFalse,
|
||||||
|
} from '@kbn/securitysolution-io-ts-types';
|
||||||
|
import { DefaultListArray, ListArray } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
import {
|
import {
|
||||||
description,
|
description,
|
||||||
anomaly_threshold,
|
anomaly_threshold,
|
||||||
|
@ -18,26 +59,15 @@ import {
|
||||||
timeline_id,
|
timeline_id,
|
||||||
timeline_title,
|
timeline_title,
|
||||||
meta,
|
meta,
|
||||||
machine_learning_job_id,
|
|
||||||
risk_score,
|
|
||||||
MaxSignals,
|
|
||||||
name,
|
name,
|
||||||
severity,
|
|
||||||
Tags,
|
Tags,
|
||||||
To,
|
To,
|
||||||
type,
|
|
||||||
Threats,
|
|
||||||
threshold,
|
threshold,
|
||||||
ThrottleOrNull,
|
|
||||||
note,
|
note,
|
||||||
Version,
|
|
||||||
References,
|
References,
|
||||||
Actions,
|
|
||||||
Enabled,
|
Enabled,
|
||||||
FalsePositives,
|
FalsePositives,
|
||||||
From,
|
|
||||||
Interval,
|
Interval,
|
||||||
language,
|
|
||||||
query,
|
query,
|
||||||
rule_id,
|
rule_id,
|
||||||
id,
|
id,
|
||||||
|
@ -50,39 +80,8 @@ import {
|
||||||
rule_name_override,
|
rule_name_override,
|
||||||
timestamp_override,
|
timestamp_override,
|
||||||
Author,
|
Author,
|
||||||
RiskScoreMapping,
|
|
||||||
SeverityMapping,
|
|
||||||
event_category_override,
|
event_category_override,
|
||||||
} from '../common/schemas';
|
} from '../common/schemas';
|
||||||
import {
|
|
||||||
threat_index,
|
|
||||||
items_per_search,
|
|
||||||
concurrent_searches,
|
|
||||||
threat_query,
|
|
||||||
threat_filters,
|
|
||||||
threat_mapping,
|
|
||||||
threat_language,
|
|
||||||
threat_indicator_path,
|
|
||||||
} from '../types/threat_mapping';
|
|
||||||
|
|
||||||
import {
|
|
||||||
DefaultStringArray,
|
|
||||||
DefaultActionsArray,
|
|
||||||
DefaultBooleanTrue,
|
|
||||||
DefaultFromString,
|
|
||||||
DefaultIntervalString,
|
|
||||||
DefaultMaxSignalsNumber,
|
|
||||||
DefaultToString,
|
|
||||||
DefaultThreatArray,
|
|
||||||
DefaultThrottleNull,
|
|
||||||
DefaultVersionNumber,
|
|
||||||
OnlyFalseAllowed,
|
|
||||||
DefaultStringBooleanFalse,
|
|
||||||
DefaultListArray,
|
|
||||||
ListArray,
|
|
||||||
DefaultRiskScoreMappingArray,
|
|
||||||
DefaultSeverityMappingArray,
|
|
||||||
} from '../types';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Differences from this and the createRulesSchema are
|
* Differences from this and the createRulesSchema are
|
||||||
|
|
|
@ -6,9 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { patchRulesBulkSchema, PatchRulesBulkSchema } from './patch_rules_bulk_schema';
|
import { patchRulesBulkSchema, PatchRulesBulkSchema } from './patch_rules_bulk_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, formatErrors, foldLeftRight } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { foldLeftRight } from '../../../test_utils';
|
|
||||||
import { formatErrors } from '../../../format_errors';
|
|
||||||
import { PatchRulesSchema } from './patch_rules_schema';
|
import { PatchRulesSchema } from './patch_rules_schema';
|
||||||
|
|
||||||
// only the basics of testing are here.
|
// only the basics of testing are here.
|
||||||
|
|
|
@ -7,9 +7,8 @@
|
||||||
|
|
||||||
import { patchRulesSchema, PatchRulesSchema, PatchRulesSchemaDecoded } from './patch_rules_schema';
|
import { patchRulesSchema, PatchRulesSchema, PatchRulesSchemaDecoded } from './patch_rules_schema';
|
||||||
import { getPatchRulesSchemaMock, getPatchRulesSchemaDecodedMock } from './patch_rules_schema.mock';
|
import { getPatchRulesSchemaMock, getPatchRulesSchemaDecodedMock } from './patch_rules_schema.mock';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
import { pipe } from 'fp-ts/lib/pipeable';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
import { left } from 'fp-ts/lib/Either';
|
||||||
import { getListArrayMock } from '../types/lists.mock';
|
import { getListArrayMock } from '../types/lists.mock';
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,32 @@
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
|
|
||||||
|
import {
|
||||||
|
actions,
|
||||||
|
from,
|
||||||
|
machine_learning_job_id,
|
||||||
|
risk_score,
|
||||||
|
risk_score_mapping,
|
||||||
|
threat_index,
|
||||||
|
concurrent_searches,
|
||||||
|
items_per_search,
|
||||||
|
threat_query,
|
||||||
|
threat_filters,
|
||||||
|
threat_mapping,
|
||||||
|
threat_language,
|
||||||
|
threat_indicator_path,
|
||||||
|
threats,
|
||||||
|
type,
|
||||||
|
language,
|
||||||
|
severity,
|
||||||
|
severity_mapping,
|
||||||
|
max_signals,
|
||||||
|
throttle,
|
||||||
|
} from '@kbn/securitysolution-io-ts-alerting-types';
|
||||||
|
|
||||||
|
import { version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
|
import { listArrayOrUndefined } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
import {
|
import {
|
||||||
description,
|
description,
|
||||||
anomaly_threshold,
|
anomaly_threshold,
|
||||||
|
@ -17,27 +43,16 @@ import {
|
||||||
timeline_id,
|
timeline_id,
|
||||||
timeline_title,
|
timeline_title,
|
||||||
meta,
|
meta,
|
||||||
machine_learning_job_id,
|
|
||||||
risk_score,
|
|
||||||
rule_id,
|
rule_id,
|
||||||
name,
|
name,
|
||||||
severity,
|
|
||||||
type,
|
|
||||||
note,
|
note,
|
||||||
version,
|
|
||||||
actions,
|
|
||||||
false_positives,
|
false_positives,
|
||||||
interval,
|
interval,
|
||||||
max_signals,
|
|
||||||
from,
|
|
||||||
enabled,
|
enabled,
|
||||||
tags,
|
tags,
|
||||||
threats,
|
|
||||||
threshold,
|
threshold,
|
||||||
throttle,
|
|
||||||
references,
|
references,
|
||||||
to,
|
to,
|
||||||
language,
|
|
||||||
query,
|
query,
|
||||||
id,
|
id,
|
||||||
building_block_type,
|
building_block_type,
|
||||||
|
@ -45,21 +60,8 @@ import {
|
||||||
license,
|
license,
|
||||||
rule_name_override,
|
rule_name_override,
|
||||||
timestamp_override,
|
timestamp_override,
|
||||||
risk_score_mapping,
|
|
||||||
severity_mapping,
|
|
||||||
event_category_override,
|
event_category_override,
|
||||||
} from '../common/schemas';
|
} from '../common/schemas';
|
||||||
import {
|
|
||||||
threat_index,
|
|
||||||
concurrent_searches,
|
|
||||||
items_per_search,
|
|
||||||
threat_query,
|
|
||||||
threat_filters,
|
|
||||||
threat_mapping,
|
|
||||||
threat_language,
|
|
||||||
threat_indicator_path,
|
|
||||||
} from '../types/threat_mapping';
|
|
||||||
import { listArrayOrUndefined } from '../types/lists';
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* All of the patch elements should default to undefined if not set
|
* All of the patch elements should default to undefined if not set
|
||||||
|
|
|
@ -6,9 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { queryRulesBulkSchema, QueryRulesBulkSchema } from './query_rules_bulk_schema';
|
import { queryRulesBulkSchema, QueryRulesBulkSchema } from './query_rules_bulk_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, formatErrors, foldLeftRight } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { foldLeftRight } from '../../../test_utils';
|
|
||||||
import { formatErrors } from '../../../format_errors';
|
|
||||||
|
|
||||||
// only the basics of testing are here.
|
// only the basics of testing are here.
|
||||||
// see: query_rules_schema.test.ts for the bulk of the validation tests
|
// see: query_rules_schema.test.ts for the bulk of the validation tests
|
||||||
|
|
|
@ -6,9 +6,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { queryRulesSchema, QueryRulesSchema } from './query_rules_schema';
|
import { queryRulesSchema, QueryRulesSchema } from './query_rules_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
import { pipe } from 'fp-ts/lib/pipeable';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
import { left } from 'fp-ts/lib/Either';
|
||||||
|
|
||||||
describe('query_rules_schema', () => {
|
describe('query_rules_schema', () => {
|
||||||
|
|
|
@ -6,9 +6,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { QuerySignalsSchema, querySignalsSchema } from './query_signals_index_schema';
|
import { QuerySignalsSchema, querySignalsSchema } from './query_signals_index_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
import { pipe } from 'fp-ts/lib/pipeable';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
import { left } from 'fp-ts/lib/Either';
|
||||||
|
|
||||||
describe('query, aggs, size, _source and track_total_hits on signals index', () => {
|
describe('query, aggs, size, _source and track_total_hits on signals index', () => {
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
import { PositiveIntegerGreaterThanZero } from '../types/positive_integer_greater_than_zero';
|
import { PositiveIntegerGreaterThanZero } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
export const querySignalsSchema = t.exact(
|
export const querySignalsSchema = t.exact(
|
||||||
t.partial({
|
t.partial({
|
||||||
|
|
|
@ -6,9 +6,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { createRulesSchema, CreateRulesSchema, SavedQueryCreateSchema } from './rule_schemas';
|
import { createRulesSchema, CreateRulesSchema, SavedQueryCreateSchema } from './rule_schemas';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
import { pipe } from 'fp-ts/lib/pipeable';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
import { left } from 'fp-ts/lib/Either';
|
||||||
import {
|
import {
|
||||||
getCreateSavedQueryRulesSchemaMock,
|
getCreateSavedQueryRulesSchemaMock,
|
||||||
|
|
|
@ -7,8 +7,12 @@
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
|
|
||||||
import { listArray } from '../types/lists';
|
|
||||||
import {
|
import {
|
||||||
|
actions,
|
||||||
|
from,
|
||||||
|
risk_score,
|
||||||
|
machine_learning_job_id,
|
||||||
|
risk_score_mapping,
|
||||||
threat_filters,
|
threat_filters,
|
||||||
threat_query,
|
threat_query,
|
||||||
threat_mapping,
|
threat_mapping,
|
||||||
|
@ -16,14 +20,20 @@ import {
|
||||||
threat_indicator_path,
|
threat_indicator_path,
|
||||||
concurrent_searches,
|
concurrent_searches,
|
||||||
items_per_search,
|
items_per_search,
|
||||||
} from '../types/threat_mapping';
|
threats,
|
||||||
|
severity_mapping,
|
||||||
|
severity,
|
||||||
|
max_signals,
|
||||||
|
throttle,
|
||||||
|
} from '@kbn/securitysolution-io-ts-alerting-types';
|
||||||
|
import { listArray } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
id,
|
id,
|
||||||
index,
|
index,
|
||||||
filters,
|
filters,
|
||||||
event_category_override,
|
event_category_override,
|
||||||
risk_score_mapping,
|
|
||||||
severity_mapping,
|
|
||||||
building_block_type,
|
building_block_type,
|
||||||
note,
|
note,
|
||||||
license,
|
license,
|
||||||
|
@ -35,25 +45,17 @@ import {
|
||||||
author,
|
author,
|
||||||
description,
|
description,
|
||||||
false_positives,
|
false_positives,
|
||||||
from,
|
|
||||||
rule_id,
|
rule_id,
|
||||||
immutable,
|
immutable,
|
||||||
output_index,
|
output_index,
|
||||||
query,
|
query,
|
||||||
machine_learning_job_id,
|
|
||||||
max_signals,
|
|
||||||
risk_score,
|
|
||||||
severity,
|
|
||||||
threats,
|
|
||||||
to,
|
to,
|
||||||
references,
|
references,
|
||||||
version,
|
|
||||||
saved_id,
|
saved_id,
|
||||||
threshold,
|
threshold,
|
||||||
anomaly_threshold,
|
anomaly_threshold,
|
||||||
name,
|
name,
|
||||||
tags,
|
tags,
|
||||||
actions,
|
|
||||||
interval,
|
interval,
|
||||||
enabled,
|
enabled,
|
||||||
updated_at,
|
updated_at,
|
||||||
|
@ -66,7 +68,6 @@ import {
|
||||||
last_success_message,
|
last_success_message,
|
||||||
last_failure_at,
|
last_failure_at,
|
||||||
last_failure_message,
|
last_failure_message,
|
||||||
throttle,
|
|
||||||
} from '../common/schemas';
|
} from '../common/schemas';
|
||||||
|
|
||||||
const createSchema = <
|
const createSchema = <
|
||||||
|
|
|
@ -6,9 +6,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { setSignalsStatusSchema, SetSignalsStatusSchema } from './set_signal_status_schema';
|
import { setSignalsStatusSchema, SetSignalsStatusSchema } from './set_signal_status_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
import { pipe } from 'fp-ts/lib/pipeable';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
import { left } from 'fp-ts/lib/Either';
|
||||||
|
|
||||||
describe('set signal status schema', () => {
|
describe('set signal status schema', () => {
|
||||||
|
|
|
@ -6,9 +6,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { updateRulesBulkSchema, UpdateRulesBulkSchema } from './update_rules_bulk_schema';
|
import { updateRulesBulkSchema, UpdateRulesBulkSchema } from './update_rules_bulk_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, formatErrors, foldLeftRight } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { foldLeftRight } from '../../../test_utils';
|
|
||||||
import { formatErrors } from '../../../format_errors';
|
|
||||||
import { getUpdateRulesSchemaMock } from './rule_schemas.mock';
|
import { getUpdateRulesSchemaMock } from './rule_schemas.mock';
|
||||||
import { UpdateRulesSchema } from './rule_schemas';
|
import { UpdateRulesSchema } from './rule_schemas';
|
||||||
|
|
||||||
|
|
|
@ -9,8 +9,7 @@ import { left } from 'fp-ts/lib/Either';
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
import { pipe } from 'fp-ts/lib/pipeable';
|
||||||
|
|
||||||
import { errorSchema, ErrorSchema } from './error_schema';
|
import { errorSchema, ErrorSchema } from './error_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
import { getErrorSchemaMock } from './error_schema.mocks';
|
import { getErrorSchemaMock } from './error_schema.mocks';
|
||||||
|
|
||||||
describe('error_schema', () => {
|
describe('error_schema', () => {
|
||||||
|
|
|
@ -10,8 +10,7 @@ import { left, Either } from 'fp-ts/lib/Either';
|
||||||
import { ImportRulesSchema, importRulesSchema } from './import_rules_schema';
|
import { ImportRulesSchema, importRulesSchema } from './import_rules_schema';
|
||||||
import { ErrorSchema } from './error_schema';
|
import { ErrorSchema } from './error_schema';
|
||||||
import { Errors } from 'io-ts';
|
import { Errors } from 'io-ts';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
|
|
||||||
describe('import_rules_schema', () => {
|
describe('import_rules_schema', () => {
|
||||||
test('it should validate an empty import response with no errors', () => {
|
test('it should validate an empty import response with no errors', () => {
|
||||||
|
|
|
@ -11,8 +11,7 @@ import {
|
||||||
PrePackagedRulesAndTimelinesSchema,
|
PrePackagedRulesAndTimelinesSchema,
|
||||||
prePackagedRulesAndTimelinesSchema,
|
prePackagedRulesAndTimelinesSchema,
|
||||||
} from './prepackaged_rules_schema';
|
} from './prepackaged_rules_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
|
|
||||||
describe('prepackaged_rules_schema', () => {
|
describe('prepackaged_rules_schema', () => {
|
||||||
test('it should validate an empty prepackaged response with defaults', () => {
|
test('it should validate an empty prepackaged response with defaults', () => {
|
||||||
|
|
|
@ -11,8 +11,7 @@ import {
|
||||||
PrePackagedRulesAndTimelinesStatusSchema,
|
PrePackagedRulesAndTimelinesStatusSchema,
|
||||||
prePackagedRulesAndTimelinesStatusSchema,
|
prePackagedRulesAndTimelinesStatusSchema,
|
||||||
} from './prepackaged_rules_status_schema';
|
} from './prepackaged_rules_status_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
|
|
||||||
describe('prepackaged_rules_schema', () => {
|
describe('prepackaged_rules_schema', () => {
|
||||||
test('it should validate an empty prepackaged response with defaults', () => {
|
test('it should validate an empty prepackaged response with defaults', () => {
|
||||||
|
|
|
@ -11,8 +11,7 @@ import { pipe } from 'fp-ts/lib/pipeable';
|
||||||
import { RulesBulkSchema, rulesBulkSchema } from './rules_bulk_schema';
|
import { RulesBulkSchema, rulesBulkSchema } from './rules_bulk_schema';
|
||||||
import { RulesSchema } from './rules_schema';
|
import { RulesSchema } from './rules_schema';
|
||||||
import { ErrorSchema } from './error_schema';
|
import { ErrorSchema } from './error_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
|
|
||||||
import { getRulesSchemaMock } from './rules_schema.mocks';
|
import { getRulesSchemaMock } from './rules_schema.mocks';
|
||||||
import { getErrorSchemaMock } from './error_schema.mocks';
|
import { getErrorSchemaMock } from './error_schema.mocks';
|
||||||
|
|
|
@ -21,8 +21,7 @@ import {
|
||||||
addThreatMatchFields,
|
addThreatMatchFields,
|
||||||
addEqlFields,
|
addEqlFields,
|
||||||
} from './rules_schema';
|
} from './rules_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
import { TypeAndTimelineOnly } from './type_timeline_only_schema';
|
import { TypeAndTimelineOnly } from './type_timeline_only_schema';
|
||||||
import {
|
import {
|
||||||
getRulesSchemaMock,
|
getRulesSchemaMock,
|
||||||
|
@ -30,7 +29,7 @@ import {
|
||||||
getThreatMatchingSchemaMock,
|
getThreatMatchingSchemaMock,
|
||||||
getRulesEqlSchemaMock,
|
getRulesEqlSchemaMock,
|
||||||
} from './rules_schema.mocks';
|
} from './rules_schema.mocks';
|
||||||
import { ListArray } from '../types/lists';
|
import { ListArray } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
|
||||||
export const ANCHOR_DATE = '2020-02-20T03:57:54.037Z';
|
export const ANCHOR_DATE = '2020-02-20T03:57:54.037Z';
|
||||||
|
|
||||||
|
|
|
@ -10,59 +10,13 @@ import { isObject } from 'lodash/fp';
|
||||||
import { Either, left, fold } from 'fp-ts/lib/Either';
|
import { Either, left, fold } from 'fp-ts/lib/Either';
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
import { pipe } from 'fp-ts/lib/pipeable';
|
||||||
|
|
||||||
import { isMlRule } from '../../../machine_learning/helpers';
|
|
||||||
import { isThresholdRule } from '../../utils';
|
|
||||||
import {
|
import {
|
||||||
actions,
|
actions,
|
||||||
anomaly_threshold,
|
|
||||||
description,
|
|
||||||
enabled,
|
|
||||||
event_category_override,
|
|
||||||
false_positives,
|
|
||||||
from,
|
from,
|
||||||
id,
|
|
||||||
immutable,
|
|
||||||
index,
|
|
||||||
interval,
|
|
||||||
rule_id,
|
|
||||||
language,
|
|
||||||
name,
|
|
||||||
output_index,
|
|
||||||
max_signals,
|
|
||||||
machine_learning_job_id,
|
machine_learning_job_id,
|
||||||
query,
|
|
||||||
references,
|
|
||||||
severity,
|
|
||||||
updated_by,
|
|
||||||
tags,
|
|
||||||
to,
|
|
||||||
risk_score,
|
risk_score,
|
||||||
created_at,
|
DefaultRiskScoreMappingArray,
|
||||||
created_by,
|
DefaultSeverityMappingArray,
|
||||||
updated_at,
|
|
||||||
saved_id,
|
|
||||||
timeline_id,
|
|
||||||
timeline_title,
|
|
||||||
type,
|
|
||||||
threats,
|
|
||||||
threshold,
|
|
||||||
throttle,
|
|
||||||
job_status,
|
|
||||||
status_date,
|
|
||||||
last_success_at,
|
|
||||||
last_success_message,
|
|
||||||
last_failure_at,
|
|
||||||
last_failure_message,
|
|
||||||
version,
|
|
||||||
filters,
|
|
||||||
meta,
|
|
||||||
note,
|
|
||||||
building_block_type,
|
|
||||||
license,
|
|
||||||
rule_name_override,
|
|
||||||
timestamp_override,
|
|
||||||
} from '../common/schemas';
|
|
||||||
import {
|
|
||||||
threat_index,
|
threat_index,
|
||||||
concurrent_searches,
|
concurrent_searches,
|
||||||
items_per_search,
|
items_per_search,
|
||||||
|
@ -71,14 +25,58 @@ import {
|
||||||
threat_mapping,
|
threat_mapping,
|
||||||
threat_language,
|
threat_language,
|
||||||
threat_indicator_path,
|
threat_indicator_path,
|
||||||
} from '../types/threat_mapping';
|
threats,
|
||||||
|
type,
|
||||||
|
language,
|
||||||
|
severity,
|
||||||
|
throttle,
|
||||||
|
max_signals,
|
||||||
|
} from '@kbn/securitysolution-io-ts-alerting-types';
|
||||||
|
import { DefaultStringArray, version } from '@kbn/securitysolution-io-ts-types';
|
||||||
|
|
||||||
import { DefaultListArray } from '../types/lists_default_array';
|
import { DefaultListArray } from '@kbn/securitysolution-io-ts-list-types';
|
||||||
|
import { isMlRule } from '../../../machine_learning/helpers';
|
||||||
|
import { isThresholdRule } from '../../utils';
|
||||||
import {
|
import {
|
||||||
DefaultStringArray,
|
anomaly_threshold,
|
||||||
DefaultRiskScoreMappingArray,
|
description,
|
||||||
DefaultSeverityMappingArray,
|
enabled,
|
||||||
} from '../types';
|
event_category_override,
|
||||||
|
false_positives,
|
||||||
|
id,
|
||||||
|
immutable,
|
||||||
|
index,
|
||||||
|
interval,
|
||||||
|
rule_id,
|
||||||
|
name,
|
||||||
|
output_index,
|
||||||
|
query,
|
||||||
|
references,
|
||||||
|
updated_by,
|
||||||
|
tags,
|
||||||
|
to,
|
||||||
|
created_at,
|
||||||
|
created_by,
|
||||||
|
updated_at,
|
||||||
|
saved_id,
|
||||||
|
timeline_id,
|
||||||
|
timeline_title,
|
||||||
|
threshold,
|
||||||
|
job_status,
|
||||||
|
status_date,
|
||||||
|
last_success_at,
|
||||||
|
last_success_message,
|
||||||
|
last_failure_at,
|
||||||
|
last_failure_message,
|
||||||
|
filters,
|
||||||
|
meta,
|
||||||
|
note,
|
||||||
|
building_block_type,
|
||||||
|
license,
|
||||||
|
rule_name_override,
|
||||||
|
timestamp_override,
|
||||||
|
} from '../common/schemas';
|
||||||
|
|
||||||
import { typeAndTimelineOnlySchema, TypeAndTimelineOnly } from './type_timeline_only_schema';
|
import { typeAndTimelineOnlySchema, TypeAndTimelineOnly } from './type_timeline_only_schema';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -9,8 +9,7 @@ import { left } from 'fp-ts/lib/Either';
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
import { pipe } from 'fp-ts/lib/pipeable';
|
||||||
|
|
||||||
import { TypeAndTimelineOnly, typeAndTimelineOnlySchema } from './type_timeline_only_schema';
|
import { TypeAndTimelineOnly, typeAndTimelineOnlySchema } from './type_timeline_only_schema';
|
||||||
import { exactCheck } from '../../../exact_check';
|
import { exactCheck, foldLeftRight, getPaths } from '@kbn/securitysolution-io-ts-utils';
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
|
|
||||||
describe('prepackaged_rule_schema', () => {
|
describe('prepackaged_rule_schema', () => {
|
||||||
test('it should validate a a type and timeline_id together', () => {
|
test('it should validate a a type and timeline_id together', () => {
|
||||||
|
|
|
@ -7,7 +7,8 @@
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
import * as t from 'io-ts';
|
||||||
|
|
||||||
import { timeline_id, type } from '../common/schemas';
|
import { type } from '@kbn/securitysolution-io-ts-alerting-types';
|
||||||
|
import { timeline_id } from '../common/schemas';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Special schema type that is only the type and the timeline_id.
|
* Special schema type that is only the type and the timeline_id.
|
||||||
|
|
|
@ -1,51 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { DefaultBooleanTrue } from './default_boolean_true';
|
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
|
|
||||||
describe('default_boolean_true', () => {
|
|
||||||
test('it should validate a boolean false', () => {
|
|
||||||
const payload = false;
|
|
||||||
const decoded = DefaultBooleanTrue.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should validate a boolean true', () => {
|
|
||||||
const payload = true;
|
|
||||||
const decoded = DefaultBooleanTrue.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should not validate a number', () => {
|
|
||||||
const payload = 5;
|
|
||||||
const decoded = DefaultBooleanTrue.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([
|
|
||||||
'Invalid value "5" supplied to "DefaultBooleanTrue"',
|
|
||||||
]);
|
|
||||||
expect(message.schema).toEqual({});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should return a default true', () => {
|
|
||||||
const payload = null;
|
|
||||||
const decoded = DefaultBooleanTrue.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(true);
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { DefaultFromString } from './default_from_string';
|
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
|
|
||||||
describe('default_from_string', () => {
|
|
||||||
test('it should validate a from string', () => {
|
|
||||||
const payload = 'now-20m';
|
|
||||||
const decoded = DefaultFromString.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should not validate a number', () => {
|
|
||||||
const payload = 5;
|
|
||||||
const decoded = DefaultFromString.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([
|
|
||||||
'Invalid value "5" supplied to "DefaultFromString"',
|
|
||||||
]);
|
|
||||||
expect(message.schema).toEqual({});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should return a default of "now-6m"', () => {
|
|
||||||
const payload = null;
|
|
||||||
const decoded = DefaultFromString.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual('now-6m');
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,57 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { DefaultActionsArray } from './default_actions_array';
|
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
import { Actions } from '../common/schemas';
|
|
||||||
|
|
||||||
describe('default_actions_array', () => {
|
|
||||||
test('it should validate an empty array', () => {
|
|
||||||
const payload: string[] = [];
|
|
||||||
const decoded = DefaultActionsArray.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should validate an array of actions', () => {
|
|
||||||
const payload: Actions = [
|
|
||||||
{ id: '123', group: 'group', action_type_id: 'action_type_id', params: {} },
|
|
||||||
];
|
|
||||||
const decoded = DefaultActionsArray.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should not validate an array with a number', () => {
|
|
||||||
const payload = [
|
|
||||||
{ id: '123', group: 'group', action_type_id: 'action_type_id', params: {} },
|
|
||||||
5,
|
|
||||||
];
|
|
||||||
const decoded = DefaultActionsArray.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([
|
|
||||||
'Invalid value "5" supplied to "DefaultActionsArray"',
|
|
||||||
]);
|
|
||||||
expect(message.schema).toEqual({});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should return a default array entry', () => {
|
|
||||||
const payload = null;
|
|
||||||
const decoded = DefaultActionsArray.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual([]);
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,23 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
|
||||||
import { Either } from 'fp-ts/lib/Either';
|
|
||||||
import { actions, Actions } from '../common/schemas';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Types the DefaultStringArray as:
|
|
||||||
* - If undefined, then a default action array will be set
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const DefaultActionsArray = new t.Type<Actions, Actions | undefined, unknown>(
|
|
||||||
'DefaultActionsArray',
|
|
||||||
actions.is,
|
|
||||||
(input, context): Either<t.Errors, Actions> =>
|
|
||||||
input == null ? t.success([]) : actions.validate(input, context),
|
|
||||||
t.identity
|
|
||||||
);
|
|
|
@ -1,81 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
|
||||||
|
|
||||||
import { DefaultArray } from './default_array';
|
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
|
|
||||||
const testSchema = t.keyof({
|
|
||||||
valid: true,
|
|
||||||
also_valid: true,
|
|
||||||
});
|
|
||||||
type TestSchema = t.TypeOf<typeof testSchema>;
|
|
||||||
|
|
||||||
const defaultArraySchema = DefaultArray(testSchema);
|
|
||||||
|
|
||||||
describe('default_array', () => {
|
|
||||||
test('it should validate an empty array', () => {
|
|
||||||
const payload: string[] = [];
|
|
||||||
const decoded = defaultArraySchema.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should validate an array of testSchema', () => {
|
|
||||||
const payload: TestSchema[] = ['valid'];
|
|
||||||
const decoded = defaultArraySchema.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should validate an array of valid testSchema strings', () => {
|
|
||||||
const payload = ['valid', 'also_valid'];
|
|
||||||
const decoded = defaultArraySchema.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should not validate an array with a number', () => {
|
|
||||||
const payload = ['valid', 123];
|
|
||||||
const decoded = defaultArraySchema.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([
|
|
||||||
'Invalid value "123" supplied to "DefaultArray"',
|
|
||||||
]);
|
|
||||||
expect(message.schema).toEqual({});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should not validate an array with an invalid string', () => {
|
|
||||||
const payload = ['valid', 'invalid'];
|
|
||||||
const decoded = defaultArraySchema.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([
|
|
||||||
'Invalid value "invalid" supplied to "DefaultArray"',
|
|
||||||
]);
|
|
||||||
expect(message.schema).toEqual({});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should return a default array entry', () => {
|
|
||||||
const payload = null;
|
|
||||||
const decoded = defaultArraySchema.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual([]);
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,27 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
|
||||||
import { Either } from 'fp-ts/lib/Either';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Types the DefaultArray<C> as:
|
|
||||||
* - If undefined, then a default array will be set
|
|
||||||
* - If an array is sent in, then the array will be validated to ensure all elements are type C
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const DefaultArray = <C extends t.Mixed>(codec: C) => {
|
|
||||||
const arrType = t.array(codec);
|
|
||||||
type ArrType = t.TypeOf<typeof arrType>;
|
|
||||||
return new t.Type<ArrType, ArrType | undefined, unknown>(
|
|
||||||
'DefaultArray',
|
|
||||||
arrType.is,
|
|
||||||
(input, context): Either<t.Errors, ArrType> =>
|
|
||||||
input == null ? t.success([]) : arrType.validate(input, context),
|
|
||||||
t.identity
|
|
||||||
);
|
|
||||||
};
|
|
|
@ -1,51 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { DefaultBooleanFalse } from './default_boolean_false';
|
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
|
|
||||||
describe('default_boolean_false', () => {
|
|
||||||
test('it should validate a boolean false', () => {
|
|
||||||
const payload = false;
|
|
||||||
const decoded = DefaultBooleanFalse.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should validate a boolean true', () => {
|
|
||||||
const payload = true;
|
|
||||||
const decoded = DefaultBooleanFalse.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should not validate a number', () => {
|
|
||||||
const payload = 5;
|
|
||||||
const decoded = DefaultBooleanFalse.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([
|
|
||||||
'Invalid value "5" supplied to "DefaultBooleanFalse"',
|
|
||||||
]);
|
|
||||||
expect(message.schema).toEqual({});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should return a default false', () => {
|
|
||||||
const payload = null;
|
|
||||||
const decoded = DefaultBooleanFalse.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(false);
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
|
||||||
import { Either } from 'fp-ts/lib/Either';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Types the DefaultBooleanFalse as:
|
|
||||||
* - If null or undefined, then a default false will be set
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const DefaultBooleanFalse = new t.Type<boolean, boolean | undefined, unknown>(
|
|
||||||
'DefaultBooleanFalse',
|
|
||||||
t.boolean.is,
|
|
||||||
(input, context): Either<t.Errors, boolean> =>
|
|
||||||
input == null ? t.success(false) : t.boolean.validate(input, context),
|
|
||||||
t.identity
|
|
||||||
);
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
|
||||||
import { Either } from 'fp-ts/lib/Either';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Types the DefaultBooleanTrue as:
|
|
||||||
* - If null or undefined, then a default true will be set
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const DefaultBooleanTrue = new t.Type<boolean, boolean | undefined, unknown>(
|
|
||||||
'DefaultBooleanTrue',
|
|
||||||
t.boolean.is,
|
|
||||||
(input, context): Either<t.Errors, boolean> =>
|
|
||||||
input == null ? t.success(true) : t.boolean.validate(input, context),
|
|
||||||
t.identity
|
|
||||||
);
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { DefaultEmptyString } from './default_empty_string';
|
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
|
|
||||||
describe('default_empty_string', () => {
|
|
||||||
test('it should validate a regular string', () => {
|
|
||||||
const payload = 'some string';
|
|
||||||
const decoded = DefaultEmptyString.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should not validate a number', () => {
|
|
||||||
const payload = 5;
|
|
||||||
const decoded = DefaultEmptyString.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([
|
|
||||||
'Invalid value "5" supplied to "DefaultEmptyString"',
|
|
||||||
]);
|
|
||||||
expect(message.schema).toEqual({});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should return a default of ""', () => {
|
|
||||||
const payload = null;
|
|
||||||
const decoded = DefaultEmptyString.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual('');
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
|
||||||
import { Either } from 'fp-ts/lib/Either';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Types the DefaultEmptyString as:
|
|
||||||
* - If null or undefined, then a default of an empty string "" will be used
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const DefaultEmptyString = new t.Type<string, string | undefined, unknown>(
|
|
||||||
'DefaultEmptyString',
|
|
||||||
t.string.is,
|
|
||||||
(input, context): Either<t.Errors, string> =>
|
|
||||||
input == null ? t.success('') : t.string.validate(input, context),
|
|
||||||
t.identity
|
|
||||||
);
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { DefaultExportFileName } from './default_export_file_name';
|
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
|
|
||||||
describe('default_export_file_name', () => {
|
|
||||||
test('it should validate a regular string', () => {
|
|
||||||
const payload = 'some string';
|
|
||||||
const decoded = DefaultExportFileName.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should not validate a number', () => {
|
|
||||||
const payload = 5;
|
|
||||||
const decoded = DefaultExportFileName.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([
|
|
||||||
'Invalid value "5" supplied to "DefaultExportFileName"',
|
|
||||||
]);
|
|
||||||
expect(message.schema).toEqual({});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should return a default of "export.ndjson"', () => {
|
|
||||||
const payload = null;
|
|
||||||
const decoded = DefaultExportFileName.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual('export.ndjson');
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
|
||||||
import { Either } from 'fp-ts/lib/Either';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Types the DefaultExportFileName as:
|
|
||||||
* - If null or undefined, then a default of "export.ndjson" will be used
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const DefaultExportFileName = new t.Type<string, string | undefined, unknown>(
|
|
||||||
'DefaultExportFileName',
|
|
||||||
t.string.is,
|
|
||||||
(input, context): Either<t.Errors, string> =>
|
|
||||||
input == null ? t.success('export.ndjson') : t.string.validate(input, context),
|
|
||||||
t.identity
|
|
||||||
);
|
|
|
@ -1,26 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
|
||||||
import { Either } from 'fp-ts/lib/Either';
|
|
||||||
import { from } from '../common/schemas';
|
|
||||||
/**
|
|
||||||
* Types the DefaultFromString as:
|
|
||||||
* - If null or undefined, then a default of the string "now-6m" will be used
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const DefaultFromString = new t.Type<string, string | undefined, unknown>(
|
|
||||||
'DefaultFromString',
|
|
||||||
t.string.is,
|
|
||||||
(input, context): Either<t.Errors, string> => {
|
|
||||||
if (input == null) {
|
|
||||||
return t.success('now-6m');
|
|
||||||
}
|
|
||||||
return from.validate(input, context);
|
|
||||||
},
|
|
||||||
t.identity
|
|
||||||
);
|
|
|
@ -1,42 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import { DefaultIntervalString } from './default_interval_string';
|
|
||||||
import { pipe } from 'fp-ts/lib/pipeable';
|
|
||||||
import { left } from 'fp-ts/lib/Either';
|
|
||||||
import { foldLeftRight, getPaths } from '../../../test_utils';
|
|
||||||
|
|
||||||
describe('default_interval_string', () => {
|
|
||||||
test('it should validate a interval string', () => {
|
|
||||||
const payload = '20m';
|
|
||||||
const decoded = DefaultIntervalString.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual(payload);
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should not validate a number', () => {
|
|
||||||
const payload = 5;
|
|
||||||
const decoded = DefaultIntervalString.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([
|
|
||||||
'Invalid value "5" supplied to "DefaultIntervalString"',
|
|
||||||
]);
|
|
||||||
expect(message.schema).toEqual({});
|
|
||||||
});
|
|
||||||
|
|
||||||
test('it should return a default of "5m"', () => {
|
|
||||||
const payload = null;
|
|
||||||
const decoded = DefaultIntervalString.decode(payload);
|
|
||||||
const message = pipe(decoded, foldLeftRight);
|
|
||||||
|
|
||||||
expect(getPaths(left(message.errors))).toEqual([]);
|
|
||||||
expect(message.schema).toEqual('5m');
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
||||||
* or more contributor license agreements. Licensed under the Elastic License
|
|
||||||
* 2.0; you may not use this file except in compliance with the Elastic License
|
|
||||||
* 2.0.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import * as t from 'io-ts';
|
|
||||||
import { Either } from 'fp-ts/lib/Either';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Types the DefaultIntervalString as:
|
|
||||||
* - If null or undefined, then a default of the string "5m" will be used
|
|
||||||
* @deprecated Use packages/kbn-securitysolution-io-ts-utils
|
|
||||||
*/
|
|
||||||
export const DefaultIntervalString = new t.Type<string, string | undefined, unknown>(
|
|
||||||
'DefaultIntervalString',
|
|
||||||
t.string.is,
|
|
||||||
(input, context): Either<t.Errors, string> =>
|
|
||||||
input == null ? t.success('5m') : t.string.validate(input, context),
|
|
||||||
t.identity
|
|
||||||
);
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue