diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index ea8f0cd3e16b..0ec89e8f74c2 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -58503,6 +58503,155 @@ components: description: Version of the updated signal. If server side version is higher, update will be rejected. format: int64 type: integer + SecurityMonitoringSignalsBulkAssigneeUpdateAttributes: + description: Attributes describing the new assignees for a bulk signal update. + properties: + assignee: + description: UUID of the user to assign to the signal. Use an empty string to unassign. + example: 773b045d-ccf8-4808-bd3b-955ef6a8c940 + type: string + version: + $ref: "#/components/schemas/SecurityMonitoringSignalVersion" + required: + - assignee + type: object + SecurityMonitoringSignalsBulkAssigneeUpdateData: + description: Data for updating the assignees for multiple security signals. + properties: + attributes: + $ref: "#/components/schemas/SecurityMonitoringSignalsBulkAssigneeUpdateAttributes" + id: + description: The unique ID of the security signal. + example: AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA + type: string + type: + $ref: "#/components/schemas/SecurityMonitoringSignalType" + required: + - id + - attributes + type: object + SecurityMonitoringSignalsBulkAssigneeUpdateRequest: + description: Request body for updating the assignee of multiple security signals. + properties: + data: + description: An array of signal assignee updates. + items: + $ref: "#/components/schemas/SecurityMonitoringSignalsBulkAssigneeUpdateData" + maxItems: 199 + type: array + required: + - data + type: object + SecurityMonitoringSignalsBulkStateUpdateData: + description: Data for updating the state for multiple security signals. + properties: + attributes: + $ref: "#/components/schemas/SecurityMonitoringSignalStateUpdateAttributes" + id: + description: The unique ID of the security signal. + example: AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA + type: string + type: + $ref: "#/components/schemas/SecurityMonitoringSignalType" + required: + - id + - attributes + type: object + SecurityMonitoringSignalsBulkStateUpdateRequest: + description: Request body for updating the triage states of multiple security signals. + properties: + data: + description: An array of signal state updates. + items: + $ref: "#/components/schemas/SecurityMonitoringSignalsBulkStateUpdateData" + maxItems: 199 + type: array + required: + - data + type: object + SecurityMonitoringSignalsBulkTriageEvent: + description: A single signal event entry in a bulk triage update response. + properties: + event: + $ref: "#/components/schemas/SecurityMonitoringSignalsBulkTriageEventAttributes" + id: + description: The unique ID of the security signal. + example: AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA + type: string + required: + - id + - event + type: object + SecurityMonitoringSignalsBulkTriageEventAttributes: + description: Triage attributes of a security signal returned in a bulk update response. + properties: + archive_comment: + $ref: "#/components/schemas/SecurityMonitoringSignalArchiveComment" + archive_comment_timestamp: + description: Timestamp of the last edit to the archive comment. + format: int64 + type: integer + archive_comment_user: + $ref: "#/components/schemas/SecurityMonitoringTriageUser" + archive_reason: + $ref: "#/components/schemas/SecurityMonitoringSignalArchiveReason" + assignee: + $ref: "#/components/schemas/SecurityMonitoringTriageUser" + id: + description: The unique ID of the security signal. + example: AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA + type: string + incident_ids: + $ref: "#/components/schemas/SecurityMonitoringSignalIncidentIds" + state: + $ref: "#/components/schemas/SecurityMonitoringSignalState" + state_update_timestamp: + description: Timestamp of the last state update. + format: int64 + type: integer + state_update_user: + $ref: "#/components/schemas/SecurityMonitoringTriageUser" + required: + - id + - state + - assignee + - incident_ids + type: object + SecurityMonitoringSignalsBulkTriageUpdateResponse: + description: Response for a bulk triage update of security signals. + properties: + result: + $ref: "#/components/schemas/SecurityMonitoringSignalsBulkTriageUpdateResult" + status: + description: The status of the bulk operation. + example: done + type: string + type: + description: The type of the response. + example: status + type: string + required: + - type + - status + - result + type: object + SecurityMonitoringSignalsBulkTriageUpdateResult: + description: The result payload of a bulk signal triage update. + properties: + count: + description: The number of signals updated. + example: 2 + format: int64 + type: integer + events: + description: The list of updated signals. + items: + $ref: "#/components/schemas/SecurityMonitoringSignalsBulkTriageEvent" + type: array + required: + - count + - events + type: object SecurityMonitoringSignalsListResponse: description: "The response object with all security signals matching the request\nand pagination information." properties: @@ -103249,6 +103398,88 @@ paths: operator: OR permissions: - security_monitoring_signals_read + /api/v2/security_monitoring/signals/bulk/assignee: + patch: + description: |- + Change the triage assignees of multiple security signals at once. + The maximum number of signals that can be updated in a single request is 199. + operationId: BulkEditSecurityMonitoringSignalsAssignee + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/SecurityMonitoringSignalsBulkAssigneeUpdateRequest" + description: Attributes describing the signal assignee updates. + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/SecurityMonitoringSignalsBulkTriageUpdateResponse" + description: OK + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/JSONAPIErrorResponse" + description: Bad Request + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/JSONAPIErrorResponse" + description: Forbidden + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + summary: Bulk update triage assignee of security signals + tags: ["Security Monitoring"] + x-codegen-request-body-name: body + "x-permission": + operator: OR + permissions: + - security_monitoring_signals_write + /api/v2/security_monitoring/signals/bulk/state: + patch: + description: |- + Change the triage states of multiple security signals at once. + The maximum number of signals that can be updated in a single request is 199. + operationId: BulkEditSecurityMonitoringSignalsState + requestBody: + content: + application/json: + schema: + $ref: "#/components/schemas/SecurityMonitoringSignalsBulkStateUpdateRequest" + description: Attributes describing the signal state updates. + required: true + responses: + "200": + content: + application/json: + schema: + $ref: "#/components/schemas/SecurityMonitoringSignalsBulkTriageUpdateResponse" + description: OK + "400": + content: + application/json: + schema: + $ref: "#/components/schemas/JSONAPIErrorResponse" + description: Bad Request + "403": + content: + application/json: + schema: + $ref: "#/components/schemas/JSONAPIErrorResponse" + description: Forbidden + "429": + $ref: "#/components/responses/TooManyRequestsResponse" + summary: Bulk update triage state of security signals + tags: ["Security Monitoring"] + x-codegen-request-body-name: body + "x-permission": + operator: OR + permissions: + - security_monitoring_signals_write /api/v2/security_monitoring/signals/search: post: description: |- diff --git a/features/v2/security_monitoring.feature b/features/v2/security_monitoring.feature index 5695a7ea4a50..791d52de6467 100644 --- a/features/v2/security_monitoring.feature +++ b/features/v2/security_monitoring.feature @@ -121,6 +121,36 @@ Feature: Security Monitoring When the request is sent Then the response status is 200 OK + @skip @team:DataDog/k9-cloud-security-platform + Scenario: Bulk update triage assignee of security signals returns "Bad Request" response + Given operation "BulkEditSecurityMonitoringSignalsAssignee" enabled + And new "BulkEditSecurityMonitoringSignalsAssignee" request + And body with value {"data": [{"attributes": {}, "id": "AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA", "type": "signal"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-cloud-security-platform + Scenario: Bulk update triage assignee of security signals returns "OK" response + Given new "BulkEditSecurityMonitoringSignalsAssignee" request + And body with value {"data": [{"attributes": {"assignee": "773b045d-ccf8-4808-bd3b-955ef6a8c940"}, "id": "AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA", "type": "signal"}]} + When the request is sent + Then the response status is 200 OK + + @skip @team:DataDog/k9-cloud-security-platform + Scenario: Bulk update triage state of security signals returns "Bad Request" response + Given operation "BulkEditSecurityMonitoringSignalsState" enabled + And new "BulkEditSecurityMonitoringSignalsState" request + And body with value {"data": [{"attributes": {}, "id": "AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA", "type": "signal"}]} + When the request is sent + Then the response status is 400 Bad Request + + @generated @skip @team:DataDog/k9-cloud-security-platform + Scenario: Bulk update triage state of security signals returns "OK" response + Given new "BulkEditSecurityMonitoringSignalsState" request + And body with value {"data": [{"attributes": {"archive_reason": "none", "state": "open"}, "id": "AAAAAWgN8Xwgr1vKDQAAAABBV2dOOFh3ZzZobm1mWXJFYTR0OA", "type": "signal"}]} + When the request is sent + Then the response status is 200 OK + @team:DataDog/k9-cloud-security-platform Scenario: Cancel a historical job returns "Bad Request" response Given operation "CancelThreatHuntingJob" enabled diff --git a/features/v2/undo.json b/features/v2/undo.json index dcdc0219f9ca..67707e911772 100644 --- a/features/v2/undo.json +++ b/features/v2/undo.json @@ -5229,6 +5229,18 @@ "type": "safe" } }, + "BulkEditSecurityMonitoringSignalsAssignee": { + "tag": "Security Monitoring", + "undo": { + "type": "idempotent" + } + }, + "BulkEditSecurityMonitoringSignalsState": { + "tag": "Security Monitoring", + "undo": { + "type": "idempotent" + } + }, "SearchSecurityMonitoringSignals": { "tag": "Security Monitoring", "undo": { diff --git a/private/bdd_runner/src/support/scenarios_model_mapping.ts b/private/bdd_runner/src/support/scenarios_model_mapping.ts index 5d2887effac2..b8c0fbf910e1 100644 --- a/private/bdd_runner/src/support/scenarios_model_mapping.ts +++ b/private/bdd_runner/src/support/scenarios_model_mapping.ts @@ -4954,6 +4954,20 @@ export const ScenariosModelMappings: { [key: string]: OperationMapping } = { }, operationResponseType: "SecurityMonitoringSignalsListResponse", }, + "SecurityMonitoringApi.V2.BulkEditSecurityMonitoringSignalsAssignee": { + body: { + type: "SecurityMonitoringSignalsBulkAssigneeUpdateRequest", + format: "", + }, + operationResponseType: "SecurityMonitoringSignalsBulkTriageUpdateResponse", + }, + "SecurityMonitoringApi.V2.BulkEditSecurityMonitoringSignalsState": { + body: { + type: "SecurityMonitoringSignalsBulkStateUpdateRequest", + format: "", + }, + operationResponseType: "SecurityMonitoringSignalsBulkTriageUpdateResponse", + }, "SecurityMonitoringApi.V2.SearchSecurityMonitoringSignals": { body: { type: "SecurityMonitoringSignalListRequest", diff --git a/services/security_monitoring/src/v2/SecurityMonitoringApi.ts b/services/security_monitoring/src/v2/SecurityMonitoringApi.ts index b7d2c32b75c6..662f53e2156f 100644 --- a/services/security_monitoring/src/v2/SecurityMonitoringApi.ts +++ b/services/security_monitoring/src/v2/SecurityMonitoringApi.ts @@ -101,6 +101,9 @@ import { SecurityMonitoringSignalIncidentsUpdateRequest } from "./models/Securit import { SecurityMonitoringSignalListRequest } from "./models/SecurityMonitoringSignalListRequest"; import { SecurityMonitoringSignalListRequestPage } from "./models/SecurityMonitoringSignalListRequestPage"; import { SecurityMonitoringSignalResponse } from "./models/SecurityMonitoringSignalResponse"; +import { SecurityMonitoringSignalsBulkAssigneeUpdateRequest } from "./models/SecurityMonitoringSignalsBulkAssigneeUpdateRequest"; +import { SecurityMonitoringSignalsBulkStateUpdateRequest } from "./models/SecurityMonitoringSignalsBulkStateUpdateRequest"; +import { SecurityMonitoringSignalsBulkTriageUpdateResponse } from "./models/SecurityMonitoringSignalsBulkTriageUpdateResponse"; import { SecurityMonitoringSignalsListResponse } from "./models/SecurityMonitoringSignalsListResponse"; import { SecurityMonitoringSignalsSort } from "./models/SecurityMonitoringSignalsSort"; import { SecurityMonitoringSignalStateUpdateRequest } from "./models/SecurityMonitoringSignalStateUpdateRequest"; @@ -297,6 +300,119 @@ export class SecurityMonitoringApiRequestFactory extends BaseAPIRequestFactory { return requestContext; } + public async bulkEditSecurityMonitoringSignalsAssignee( + body: SecurityMonitoringSignalsBulkAssigneeUpdateRequest, + _options?: Configuration, + ): Promise { + const _config = _options || this.configuration; + + // verify required parameter 'body' is not null or undefined + if (body === null || body === undefined) { + throw new RequiredError( + "body", + "bulkEditSecurityMonitoringSignalsAssignee", + ); + } + + // Path Params + const localVarPath = "/api/v2/security_monitoring/signals/bulk/assignee"; + + // Make Request Context + const { server, overrides } = _config.getServerAndOverrides( + "SecurityMonitoringApi.v2.bulkEditSecurityMonitoringSignalsAssignee", + SecurityMonitoringApi.operationServers, + ); + const requestContext = server.makeRequestContext( + localVarPath, + HttpMethod.PATCH, + overrides, + ); + requestContext.setHeaderParam("Accept", "application/json"); + requestContext.setHttpConfig(_config.httpConfig); + + // Set User-Agent + if (this.userAgent) { + requestContext.setHeaderParam("User-Agent", this.userAgent); + } + + // Body Params + const contentType = getPreferredMediaType(["application/json"]); + requestContext.setHeaderParam("Content-Type", contentType); + const serializedBody = stringify( + serialize( + body, + TypingInfo, + "SecurityMonitoringSignalsBulkAssigneeUpdateRequest", + "", + ), + contentType, + ); + requestContext.setBody(serializedBody); + + // Apply auth methods + applySecurityAuthentication(_config, requestContext, [ + "apiKeyAuth", + "appKeyAuth", + ]); + + return requestContext; + } + + public async bulkEditSecurityMonitoringSignalsState( + body: SecurityMonitoringSignalsBulkStateUpdateRequest, + _options?: Configuration, + ): Promise { + const _config = _options || this.configuration; + + // verify required parameter 'body' is not null or undefined + if (body === null || body === undefined) { + throw new RequiredError("body", "bulkEditSecurityMonitoringSignalsState"); + } + + // Path Params + const localVarPath = "/api/v2/security_monitoring/signals/bulk/state"; + + // Make Request Context + const { server, overrides } = _config.getServerAndOverrides( + "SecurityMonitoringApi.v2.bulkEditSecurityMonitoringSignalsState", + SecurityMonitoringApi.operationServers, + ); + const requestContext = server.makeRequestContext( + localVarPath, + HttpMethod.PATCH, + overrides, + ); + requestContext.setHeaderParam("Accept", "application/json"); + requestContext.setHttpConfig(_config.httpConfig); + + // Set User-Agent + if (this.userAgent) { + requestContext.setHeaderParam("User-Agent", this.userAgent); + } + + // Body Params + const contentType = getPreferredMediaType(["application/json"]); + requestContext.setHeaderParam("Content-Type", contentType); + const serializedBody = stringify( + serialize( + body, + TypingInfo, + "SecurityMonitoringSignalsBulkStateUpdateRequest", + "", + ), + contentType, + ); + requestContext.setBody(serializedBody); + + // Apply auth methods + applySecurityAuthentication(_config, requestContext, [ + "apiKeyAuth", + "appKeyAuth", + ]); + + return requestContext; + } + public async bulkExportSecurityMonitoringRules( body: SecurityMonitoringRuleBulkExportPayload, _options?: Configuration, @@ -5740,6 +5856,164 @@ export class SecurityMonitoringApiResponseProcessor { ); } + /** + * Unwraps the actual response sent by the server from the response context and deserializes the response content + * to the expected objects + * + * @params response Response returned by the server for a request to bulkEditSecurityMonitoringSignalsAssignee + * @throws ApiException if the response code was not in [200, 299] + */ + public async bulkEditSecurityMonitoringSignalsAssignee( + response: ResponseContext, + ): Promise { + const contentType = normalizeMediaType(response.headers["content-type"]); + if (response.httpStatusCode === 200) { + const body: SecurityMonitoringSignalsBulkTriageUpdateResponse = + deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "SecurityMonitoringSignalsBulkTriageUpdateResponse", + ) as SecurityMonitoringSignalsBulkTriageUpdateResponse; + return body; + } + if (response.httpStatusCode === 400 || response.httpStatusCode === 403) { + const bodyText = parse(await response.body.text(), contentType); + let body: JSONAPIErrorResponse; + try { + body = deserialize( + bodyText, + TypingInfo, + "JSONAPIErrorResponse", + ) as JSONAPIErrorResponse; + } catch (error) { + logger.debug(`Got error deserializing error: ${error}`); + throw new ApiException( + response.httpStatusCode, + bodyText, + ); + } + throw new ApiException( + response.httpStatusCode, + body, + ); + } + if (response.httpStatusCode === 429) { + const bodyText = parse(await response.body.text(), contentType); + let body: APIErrorResponse; + try { + body = deserialize( + bodyText, + TypingInfo, + "APIErrorResponse", + ) as APIErrorResponse; + } catch (error) { + logger.debug(`Got error deserializing error: ${error}`); + throw new ApiException( + response.httpStatusCode, + bodyText, + ); + } + throw new ApiException(response.httpStatusCode, body); + } + + // Work around for missing responses in specification, e.g. for petstore.yaml + if (response.httpStatusCode >= 200 && response.httpStatusCode <= 299) { + const body: SecurityMonitoringSignalsBulkTriageUpdateResponse = + deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "SecurityMonitoringSignalsBulkTriageUpdateResponse", + "", + ) as SecurityMonitoringSignalsBulkTriageUpdateResponse; + return body; + } + + const body = (await response.body.text()) || ""; + throw new ApiException( + response.httpStatusCode, + 'Unknown API Status Code!\nBody: "' + body + '"', + ); + } + + /** + * Unwraps the actual response sent by the server from the response context and deserializes the response content + * to the expected objects + * + * @params response Response returned by the server for a request to bulkEditSecurityMonitoringSignalsState + * @throws ApiException if the response code was not in [200, 299] + */ + public async bulkEditSecurityMonitoringSignalsState( + response: ResponseContext, + ): Promise { + const contentType = normalizeMediaType(response.headers["content-type"]); + if (response.httpStatusCode === 200) { + const body: SecurityMonitoringSignalsBulkTriageUpdateResponse = + deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "SecurityMonitoringSignalsBulkTriageUpdateResponse", + ) as SecurityMonitoringSignalsBulkTriageUpdateResponse; + return body; + } + if (response.httpStatusCode === 400 || response.httpStatusCode === 403) { + const bodyText = parse(await response.body.text(), contentType); + let body: JSONAPIErrorResponse; + try { + body = deserialize( + bodyText, + TypingInfo, + "JSONAPIErrorResponse", + ) as JSONAPIErrorResponse; + } catch (error) { + logger.debug(`Got error deserializing error: ${error}`); + throw new ApiException( + response.httpStatusCode, + bodyText, + ); + } + throw new ApiException( + response.httpStatusCode, + body, + ); + } + if (response.httpStatusCode === 429) { + const bodyText = parse(await response.body.text(), contentType); + let body: APIErrorResponse; + try { + body = deserialize( + bodyText, + TypingInfo, + "APIErrorResponse", + ) as APIErrorResponse; + } catch (error) { + logger.debug(`Got error deserializing error: ${error}`); + throw new ApiException( + response.httpStatusCode, + bodyText, + ); + } + throw new ApiException(response.httpStatusCode, body); + } + + // Work around for missing responses in specification, e.g. for petstore.yaml + if (response.httpStatusCode >= 200 && response.httpStatusCode <= 299) { + const body: SecurityMonitoringSignalsBulkTriageUpdateResponse = + deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "SecurityMonitoringSignalsBulkTriageUpdateResponse", + "", + ) as SecurityMonitoringSignalsBulkTriageUpdateResponse; + return body; + } + + const body = (await response.body.text()) || ""; + throw new ApiException( + response.httpStatusCode, + 'Unknown API Status Code!\nBody: "' + body + '"', + ); + } + /** * Unwraps the actual response sent by the server from the response context and deserializes the response content * to the expected objects @@ -10666,6 +10940,22 @@ export interface SecurityMonitoringApiAttachJiraIssueRequest { body: AttachJiraIssueRequest; } +export interface SecurityMonitoringApiBulkEditSecurityMonitoringSignalsAssigneeRequest { + /** + * Attributes describing the signal assignee updates. + * @type SecurityMonitoringSignalsBulkAssigneeUpdateRequest + */ + body: SecurityMonitoringSignalsBulkAssigneeUpdateRequest; +} + +export interface SecurityMonitoringApiBulkEditSecurityMonitoringSignalsStateRequest { + /** + * Attributes describing the signal state updates. + * @type SecurityMonitoringSignalsBulkStateUpdateRequest + */ + body: SecurityMonitoringSignalsBulkStateUpdateRequest; +} + export interface SecurityMonitoringApiBulkExportSecurityMonitoringRulesRequest { /** * @type SecurityMonitoringRuleBulkExportPayload @@ -12022,6 +12312,56 @@ export class SecurityMonitoringApi { }); } + /** + * Change the triage assignees of multiple security signals at once. + * The maximum number of signals that can be updated in a single request is 199. + * @param param The request object + */ + public bulkEditSecurityMonitoringSignalsAssignee( + param: SecurityMonitoringApiBulkEditSecurityMonitoringSignalsAssigneeRequest, + options?: Configuration, + ): Promise { + const requestContextPromise = + this.requestFactory.bulkEditSecurityMonitoringSignalsAssignee( + param.body, + options, + ); + return requestContextPromise.then((requestContext) => { + return this.configuration.httpApi + .send(requestContext) + .then((responseContext) => { + return this.responseProcessor.bulkEditSecurityMonitoringSignalsAssignee( + responseContext, + ); + }); + }); + } + + /** + * Change the triage states of multiple security signals at once. + * The maximum number of signals that can be updated in a single request is 199. + * @param param The request object + */ + public bulkEditSecurityMonitoringSignalsState( + param: SecurityMonitoringApiBulkEditSecurityMonitoringSignalsStateRequest, + options?: Configuration, + ): Promise { + const requestContextPromise = + this.requestFactory.bulkEditSecurityMonitoringSignalsState( + param.body, + options, + ); + return requestContextPromise.then((requestContext) => { + return this.configuration.httpApi + .send(requestContext) + .then((responseContext) => { + return this.responseProcessor.bulkEditSecurityMonitoringSignalsState( + responseContext, + ); + }); + }); + } + /** * Export a list of security monitoring rules as a ZIP file containing JSON rule definitions. * The endpoint accepts a list of rule IDs and returns a ZIP archive where each rule is diff --git a/services/security_monitoring/src/v2/index.ts b/services/security_monitoring/src/v2/index.ts index 376ce9fe4f7f..9368f71408b5 100644 --- a/services/security_monitoring/src/v2/index.ts +++ b/services/security_monitoring/src/v2/index.ts @@ -2,6 +2,8 @@ export { SecurityMonitoringApiActivateContentPackRequest, SecurityMonitoringApiAttachCaseRequest, SecurityMonitoringApiAttachJiraIssueRequest, + SecurityMonitoringApiBulkEditSecurityMonitoringSignalsAssigneeRequest, + SecurityMonitoringApiBulkEditSecurityMonitoringSignalsStateRequest, SecurityMonitoringApiBulkExportSecurityMonitoringRulesRequest, SecurityMonitoringApiCancelThreatHuntingJobRequest, SecurityMonitoringApiConvertExistingSecurityMonitoringRuleRequest, @@ -397,6 +399,15 @@ export { SecurityMonitoringSignalRuleQuery } from "./models/SecurityMonitoringSi export { SecurityMonitoringSignalRuleResponse } from "./models/SecurityMonitoringSignalRuleResponse"; export { SecurityMonitoringSignalRuleResponseQuery } from "./models/SecurityMonitoringSignalRuleResponseQuery"; export { SecurityMonitoringSignalRuleType } from "./models/SecurityMonitoringSignalRuleType"; +export { SecurityMonitoringSignalsBulkAssigneeUpdateAttributes } from "./models/SecurityMonitoringSignalsBulkAssigneeUpdateAttributes"; +export { SecurityMonitoringSignalsBulkAssigneeUpdateData } from "./models/SecurityMonitoringSignalsBulkAssigneeUpdateData"; +export { SecurityMonitoringSignalsBulkAssigneeUpdateRequest } from "./models/SecurityMonitoringSignalsBulkAssigneeUpdateRequest"; +export { SecurityMonitoringSignalsBulkStateUpdateData } from "./models/SecurityMonitoringSignalsBulkStateUpdateData"; +export { SecurityMonitoringSignalsBulkStateUpdateRequest } from "./models/SecurityMonitoringSignalsBulkStateUpdateRequest"; +export { SecurityMonitoringSignalsBulkTriageEvent } from "./models/SecurityMonitoringSignalsBulkTriageEvent"; +export { SecurityMonitoringSignalsBulkTriageEventAttributes } from "./models/SecurityMonitoringSignalsBulkTriageEventAttributes"; +export { SecurityMonitoringSignalsBulkTriageUpdateResponse } from "./models/SecurityMonitoringSignalsBulkTriageUpdateResponse"; +export { SecurityMonitoringSignalsBulkTriageUpdateResult } from "./models/SecurityMonitoringSignalsBulkTriageUpdateResult"; export { SecurityMonitoringSignalsListResponse } from "./models/SecurityMonitoringSignalsListResponse"; export { SecurityMonitoringSignalsListResponseLinks } from "./models/SecurityMonitoringSignalsListResponseLinks"; export { SecurityMonitoringSignalsListResponseMeta } from "./models/SecurityMonitoringSignalsListResponseMeta"; diff --git a/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkAssigneeUpdateAttributes.ts b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkAssigneeUpdateAttributes.ts new file mode 100644 index 000000000000..c104a9f7f998 --- /dev/null +++ b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkAssigneeUpdateAttributes.ts @@ -0,0 +1,54 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +/** + * Attributes describing the new assignees for a bulk signal update. + */ +export class SecurityMonitoringSignalsBulkAssigneeUpdateAttributes { + /** + * UUID of the user to assign to the signal. Use an empty string to unassign. + */ + "assignee": string; + /** + * Version of the updated signal. If server side version is higher, update will be rejected. + */ + "version"?: number; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + assignee: { + baseName: "assignee", + type: "string", + required: true, + }, + version: { + baseName: "version", + type: "number", + format: "int64", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return SecurityMonitoringSignalsBulkAssigneeUpdateAttributes.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkAssigneeUpdateData.ts b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkAssigneeUpdateData.ts new file mode 100644 index 000000000000..d1eea5d461dd --- /dev/null +++ b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkAssigneeUpdateData.ts @@ -0,0 +1,65 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { SecurityMonitoringSignalsBulkAssigneeUpdateAttributes } from "./SecurityMonitoringSignalsBulkAssigneeUpdateAttributes"; +import { SecurityMonitoringSignalType } from "./SecurityMonitoringSignalType"; + +/** + * Data for updating the assignees for multiple security signals. + */ +export class SecurityMonitoringSignalsBulkAssigneeUpdateData { + /** + * Attributes describing the new assignees for a bulk signal update. + */ + "attributes": SecurityMonitoringSignalsBulkAssigneeUpdateAttributes; + /** + * The unique ID of the security signal. + */ + "id": string; + /** + * The type of event. + */ + "type"?: SecurityMonitoringSignalType; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + attributes: { + baseName: "attributes", + type: "SecurityMonitoringSignalsBulkAssigneeUpdateAttributes", + required: true, + }, + id: { + baseName: "id", + type: "string", + required: true, + }, + type: { + baseName: "type", + type: "SecurityMonitoringSignalType", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return SecurityMonitoringSignalsBulkAssigneeUpdateData.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkAssigneeUpdateRequest.ts b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkAssigneeUpdateRequest.ts new file mode 100644 index 000000000000..97b91d16785c --- /dev/null +++ b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkAssigneeUpdateRequest.ts @@ -0,0 +1,47 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { SecurityMonitoringSignalsBulkAssigneeUpdateData } from "./SecurityMonitoringSignalsBulkAssigneeUpdateData"; + +/** + * Request body for updating the assignee of multiple security signals. + */ +export class SecurityMonitoringSignalsBulkAssigneeUpdateRequest { + /** + * An array of signal assignee updates. + */ + "data": Array; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + data: { + baseName: "data", + type: "Array", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return SecurityMonitoringSignalsBulkAssigneeUpdateRequest.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkStateUpdateData.ts b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkStateUpdateData.ts new file mode 100644 index 000000000000..769febf7dc48 --- /dev/null +++ b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkStateUpdateData.ts @@ -0,0 +1,65 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { SecurityMonitoringSignalStateUpdateAttributes } from "./SecurityMonitoringSignalStateUpdateAttributes"; +import { SecurityMonitoringSignalType } from "./SecurityMonitoringSignalType"; + +/** + * Data for updating the state for multiple security signals. + */ +export class SecurityMonitoringSignalsBulkStateUpdateData { + /** + * Attributes describing the change of state of a security signal. + */ + "attributes": SecurityMonitoringSignalStateUpdateAttributes; + /** + * The unique ID of the security signal. + */ + "id": string; + /** + * The type of event. + */ + "type"?: SecurityMonitoringSignalType; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + attributes: { + baseName: "attributes", + type: "SecurityMonitoringSignalStateUpdateAttributes", + required: true, + }, + id: { + baseName: "id", + type: "string", + required: true, + }, + type: { + baseName: "type", + type: "SecurityMonitoringSignalType", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return SecurityMonitoringSignalsBulkStateUpdateData.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkStateUpdateRequest.ts b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkStateUpdateRequest.ts new file mode 100644 index 000000000000..76e5093cd324 --- /dev/null +++ b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkStateUpdateRequest.ts @@ -0,0 +1,47 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { SecurityMonitoringSignalsBulkStateUpdateData } from "./SecurityMonitoringSignalsBulkStateUpdateData"; + +/** + * Request body for updating the triage states of multiple security signals. + */ +export class SecurityMonitoringSignalsBulkStateUpdateRequest { + /** + * An array of signal state updates. + */ + "data": Array; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + data: { + baseName: "data", + type: "Array", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return SecurityMonitoringSignalsBulkStateUpdateRequest.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkTriageEvent.ts b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkTriageEvent.ts new file mode 100644 index 000000000000..338ca83d5489 --- /dev/null +++ b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkTriageEvent.ts @@ -0,0 +1,56 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { SecurityMonitoringSignalsBulkTriageEventAttributes } from "./SecurityMonitoringSignalsBulkTriageEventAttributes"; + +/** + * A single signal event entry in a bulk triage update response. + */ +export class SecurityMonitoringSignalsBulkTriageEvent { + /** + * Triage attributes of a security signal returned in a bulk update response. + */ + "event": SecurityMonitoringSignalsBulkTriageEventAttributes; + /** + * The unique ID of the security signal. + */ + "id": string; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + event: { + baseName: "event", + type: "SecurityMonitoringSignalsBulkTriageEventAttributes", + required: true, + }, + id: { + baseName: "id", + type: "string", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return SecurityMonitoringSignalsBulkTriageEvent.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkTriageEventAttributes.ts b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkTriageEventAttributes.ts new file mode 100644 index 000000000000..6945e7d32dd4 --- /dev/null +++ b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkTriageEventAttributes.ts @@ -0,0 +1,127 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { SecurityMonitoringSignalArchiveReason } from "./SecurityMonitoringSignalArchiveReason"; +import { SecurityMonitoringSignalState } from "./SecurityMonitoringSignalState"; +import { SecurityMonitoringTriageUser } from "./SecurityMonitoringTriageUser"; + +/** + * Triage attributes of a security signal returned in a bulk update response. + */ +export class SecurityMonitoringSignalsBulkTriageEventAttributes { + /** + * Optional comment to display on archived signals. + */ + "archiveComment"?: string; + /** + * Timestamp of the last edit to the archive comment. + */ + "archiveCommentTimestamp"?: number; + /** + * Object representing a given user entity. + */ + "archiveCommentUser"?: SecurityMonitoringTriageUser; + /** + * Reason a signal is archived. + */ + "archiveReason"?: SecurityMonitoringSignalArchiveReason; + /** + * Object representing a given user entity. + */ + "assignee": SecurityMonitoringTriageUser; + /** + * The unique ID of the security signal. + */ + "id": string; + /** + * Array of incidents that are associated with this signal. + */ + "incidentIds": Array; + /** + * The new triage state of the signal. + */ + "state": SecurityMonitoringSignalState; + /** + * Timestamp of the last state update. + */ + "stateUpdateTimestamp"?: number; + /** + * Object representing a given user entity. + */ + "stateUpdateUser"?: SecurityMonitoringTriageUser; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + archiveComment: { + baseName: "archive_comment", + type: "string", + }, + archiveCommentTimestamp: { + baseName: "archive_comment_timestamp", + type: "number", + format: "int64", + }, + archiveCommentUser: { + baseName: "archive_comment_user", + type: "SecurityMonitoringTriageUser", + }, + archiveReason: { + baseName: "archive_reason", + type: "SecurityMonitoringSignalArchiveReason", + }, + assignee: { + baseName: "assignee", + type: "SecurityMonitoringTriageUser", + required: true, + }, + id: { + baseName: "id", + type: "string", + required: true, + }, + incidentIds: { + baseName: "incident_ids", + type: "Array", + required: true, + format: "int64", + }, + state: { + baseName: "state", + type: "SecurityMonitoringSignalState", + required: true, + }, + stateUpdateTimestamp: { + baseName: "state_update_timestamp", + type: "number", + format: "int64", + }, + stateUpdateUser: { + baseName: "state_update_user", + type: "SecurityMonitoringTriageUser", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return SecurityMonitoringSignalsBulkTriageEventAttributes.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkTriageUpdateResponse.ts b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkTriageUpdateResponse.ts new file mode 100644 index 000000000000..4fc17ca31ce1 --- /dev/null +++ b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkTriageUpdateResponse.ts @@ -0,0 +1,65 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { SecurityMonitoringSignalsBulkTriageUpdateResult } from "./SecurityMonitoringSignalsBulkTriageUpdateResult"; + +/** + * Response for a bulk triage update of security signals. + */ +export class SecurityMonitoringSignalsBulkTriageUpdateResponse { + /** + * The result payload of a bulk signal triage update. + */ + "result": SecurityMonitoringSignalsBulkTriageUpdateResult; + /** + * The status of the bulk operation. + */ + "status": string; + /** + * The type of the response. + */ + "type": string; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + result: { + baseName: "result", + type: "SecurityMonitoringSignalsBulkTriageUpdateResult", + required: true, + }, + status: { + baseName: "status", + type: "string", + required: true, + }, + type: { + baseName: "type", + type: "string", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return SecurityMonitoringSignalsBulkTriageUpdateResponse.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkTriageUpdateResult.ts b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkTriageUpdateResult.ts new file mode 100644 index 000000000000..596c8d743302 --- /dev/null +++ b/services/security_monitoring/src/v2/models/SecurityMonitoringSignalsBulkTriageUpdateResult.ts @@ -0,0 +1,57 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { SecurityMonitoringSignalsBulkTriageEvent } from "./SecurityMonitoringSignalsBulkTriageEvent"; + +/** + * The result payload of a bulk signal triage update. + */ +export class SecurityMonitoringSignalsBulkTriageUpdateResult { + /** + * The number of signals updated. + */ + "count": number; + /** + * The list of updated signals. + */ + "events": Array; + /** + * A container for additional, undeclared properties. + * This is a holder for any undeclared properties as specified with + * the 'additionalProperties' keyword in the OAS document. + */ + "additionalProperties"?: { [key: string]: any }; + /** + * @ignore + */ + "_unparsed"?: boolean; + + /** + * @ignore + */ + static readonly attributeTypeMap: AttributeTypeMap = { + count: { + baseName: "count", + type: "number", + required: true, + format: "int64", + }, + events: { + baseName: "events", + type: "Array", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return SecurityMonitoringSignalsBulkTriageUpdateResult.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/security_monitoring/src/v2/models/TypingInfo.ts b/services/security_monitoring/src/v2/models/TypingInfo.ts index 3989b05656bb..c1c015d2f254 100644 --- a/services/security_monitoring/src/v2/models/TypingInfo.ts +++ b/services/security_monitoring/src/v2/models/TypingInfo.ts @@ -247,6 +247,15 @@ import { SecurityMonitoringSignalStateUpdateRequest } from "./SecurityMonitoring import { SecurityMonitoringSignalTriageAttributes } from "./SecurityMonitoringSignalTriageAttributes"; import { SecurityMonitoringSignalTriageUpdateData } from "./SecurityMonitoringSignalTriageUpdateData"; import { SecurityMonitoringSignalTriageUpdateResponse } from "./SecurityMonitoringSignalTriageUpdateResponse"; +import { SecurityMonitoringSignalsBulkAssigneeUpdateAttributes } from "./SecurityMonitoringSignalsBulkAssigneeUpdateAttributes"; +import { SecurityMonitoringSignalsBulkAssigneeUpdateData } from "./SecurityMonitoringSignalsBulkAssigneeUpdateData"; +import { SecurityMonitoringSignalsBulkAssigneeUpdateRequest } from "./SecurityMonitoringSignalsBulkAssigneeUpdateRequest"; +import { SecurityMonitoringSignalsBulkStateUpdateData } from "./SecurityMonitoringSignalsBulkStateUpdateData"; +import { SecurityMonitoringSignalsBulkStateUpdateRequest } from "./SecurityMonitoringSignalsBulkStateUpdateRequest"; +import { SecurityMonitoringSignalsBulkTriageEvent } from "./SecurityMonitoringSignalsBulkTriageEvent"; +import { SecurityMonitoringSignalsBulkTriageEventAttributes } from "./SecurityMonitoringSignalsBulkTriageEventAttributes"; +import { SecurityMonitoringSignalsBulkTriageUpdateResponse } from "./SecurityMonitoringSignalsBulkTriageUpdateResponse"; +import { SecurityMonitoringSignalsBulkTriageUpdateResult } from "./SecurityMonitoringSignalsBulkTriageUpdateResult"; import { SecurityMonitoringSignalsListResponse } from "./SecurityMonitoringSignalsListResponse"; import { SecurityMonitoringSignalsListResponseLinks } from "./SecurityMonitoringSignalsListResponseLinks"; import { SecurityMonitoringSignalsListResponseMeta } from "./SecurityMonitoringSignalsListResponseMeta"; @@ -1000,6 +1009,24 @@ export const TypingInfo: ModelTypingInfo = { SecurityMonitoringSignalTriageUpdateData, SecurityMonitoringSignalTriageUpdateResponse: SecurityMonitoringSignalTriageUpdateResponse, + SecurityMonitoringSignalsBulkAssigneeUpdateAttributes: + SecurityMonitoringSignalsBulkAssigneeUpdateAttributes, + SecurityMonitoringSignalsBulkAssigneeUpdateData: + SecurityMonitoringSignalsBulkAssigneeUpdateData, + SecurityMonitoringSignalsBulkAssigneeUpdateRequest: + SecurityMonitoringSignalsBulkAssigneeUpdateRequest, + SecurityMonitoringSignalsBulkStateUpdateData: + SecurityMonitoringSignalsBulkStateUpdateData, + SecurityMonitoringSignalsBulkStateUpdateRequest: + SecurityMonitoringSignalsBulkStateUpdateRequest, + SecurityMonitoringSignalsBulkTriageEvent: + SecurityMonitoringSignalsBulkTriageEvent, + SecurityMonitoringSignalsBulkTriageEventAttributes: + SecurityMonitoringSignalsBulkTriageEventAttributes, + SecurityMonitoringSignalsBulkTriageUpdateResponse: + SecurityMonitoringSignalsBulkTriageUpdateResponse, + SecurityMonitoringSignalsBulkTriageUpdateResult: + SecurityMonitoringSignalsBulkTriageUpdateResult, SecurityMonitoringSignalsListResponse: SecurityMonitoringSignalsListResponse, SecurityMonitoringSignalsListResponseLinks: