From 67db756644ef5afc460d57373c912c61c0bfa5e3 Mon Sep 17 00:00:00 2001 From: "ci.datadog-api-spec" Date: Mon, 30 Mar 2026 14:55:19 +0000 Subject: [PATCH] Regenerate client from commit f9ea06a of spec repo --- .generator/schemas/v2/openapi.yaml | 52 +- .../frozen.json | 1 + .../recording.har | 6 +- .../frozen.json | 1 + .../recording.har | 44 +- .../frozen.json | 1 + .../recording.har | 26 +- .../frozen.json | 1 + .../recording.har | 8 +- .../frozen.json | 1 + .../recording.har | 40 +- .../frozen.json | 1 + .../recording.har | 14 +- .../frozen.json | 1 + .../recording.har | 8 +- .../frozen.json | 1 + .../recording.har | 44 +- .../frozen.json | 1 + .../recording.har | 8 +- .../frozen.json | 1 + .../recording.har | 46 +- .../frozen.json | 1 + .../recording.har | 42 +- .../frozen.json | 1 - .../frozen.json | 1 - .../frozen.json | 1 - .../frozen.json | 1 - .../frozen.json | 1 - .../frozen.json | 1 - .../frozen.json | 1 - .../frozen.json | 1 - .../frozen.json | 1 - .../frozen.json | 1 - .../frozen.json | 1 - ...s.feature => data_access_controls.feature} | 67 +- features/v2/given.json | 4 +- features/v2/undo.json | 10 +- packages/datadog-api-client/README.md | 2 +- .../src/support/scenarios_model_mapping.ts | 10 +- services/data_access_controls/.yarnrc.yml | 1 + services/data_access_controls/README.md | 40 + services/data_access_controls/package.json | 43 ++ services/data_access_controls/src/index.ts | 3 + .../src/v2/DataAccessControlsApi.ts | 726 ++++++++++++++++++ services/data_access_controls/src/v2/index.ts | 19 + .../src/v2/models/APIErrorResponse.ts | 45 ++ .../src/v2/models/DatasetAttributesRequest.ts | 65 ++ .../v2/models/DatasetAttributesResponse.ts | 80 ++ .../src/v2/models/DatasetCreateRequest.ts | 57 ++ .../src/v2/models/DatasetRequest.ts | 67 ++ .../src/v2/models/DatasetResponse.ts | 73 ++ .../src/v2/models/DatasetResponseMulti.ts | 46 ++ .../src/v2/models/DatasetResponseSingle.ts | 56 ++ .../src/v2/models/DatasetType.ts | 7 + .../src/v2/models/DatasetUpdateRequest.ts | 57 ++ .../src/v2/models/FiltersPerProduct.ts | 58 ++ .../src/v2/models/TypingInfo.ts | 31 + services/data_access_controls/tsconfig.json | 28 + yarn.lock | 9 + 59 files changed, 1726 insertions(+), 238 deletions(-) create mode 100644 cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Bad-Request-response_3993532435/frozen.json rename cassettes/v2/{Datasets_304632144/Create-a-dataset-returns-Bad-Request-response_430521186 => Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Bad-Request-response_3993532435}/recording.har (89%) create mode 100644 cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Conflict-response_3895691767/frozen.json rename cassettes/v2/{Datasets_304632144/Create-a-dataset-returns-Conflict-response_2550608988 => Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Conflict-response_3895691767}/recording.har (70%) create mode 100644 cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-OK-response_3448877847/frozen.json rename cassettes/v2/{Datasets_304632144/Create-a-dataset-returns-OK-response_1489201120 => Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-OK-response_3448877847}/recording.har (69%) create mode 100644 cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Bad-Request-response_1838809586/frozen.json rename cassettes/v2/{Datasets_304632144/Delete-a-dataset-returns-Bad-Request-response_3463824271 => Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Bad-Request-response_1838809586}/recording.har (85%) create mode 100644 cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-No-Content-response_4177341240/frozen.json rename cassettes/v2/{Datasets_304632144/Delete-a-dataset-returns-No-Content-response_2964057451 => Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-No-Content-response_4177341240}/recording.har (70%) create mode 100644 cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Not-Found-response_835176097/frozen.json rename cassettes/v2/{Datasets_304632144/Delete-a-dataset-returns-Not-Found-response_1477191432 => Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Not-Found-response_835176097}/recording.har (77%) create mode 100644 cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-Bad-Request-response_1025030887/frozen.json rename cassettes/v2/{Datasets_304632144/Edit-a-dataset-returns-Bad-Request-response_4202968422 => Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-Bad-Request-response_1025030887}/recording.har (86%) create mode 100644 cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-OK-response_1680409091/frozen.json rename cassettes/v2/{Datasets_304632144/Edit-a-dataset-returns-OK-response_1996941164 => Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-OK-response_1680409091}/recording.har (65%) create mode 100644 cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-Bad-Request-response_3714207895/frozen.json rename cassettes/v2/{Datasets_304632144/Get-a-single-dataset-by-ID-returns-Bad-Request-response_721770438 => Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-Bad-Request-response_3714207895}/recording.har (85%) create mode 100644 cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-OK-response_3849367923/frozen.json rename cassettes/v2/{Datasets_304632144/Get-a-single-dataset-by-ID-returns-OK-response_3806328524 => Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-OK-response_3849367923}/recording.har (64%) create mode 100644 cassettes/v2/Data-Access-Controls_1094776657/Get-all-Data-Access-Control-datasets-returns-OK-response_334834662/frozen.json rename cassettes/v2/{Datasets_304632144/Get-all-datasets-returns-OK-response_3243326099 => Data-Access-Controls_1094776657/Get-all-Data-Access-Control-datasets-returns-OK-response_334834662}/recording.har (52%) delete mode 100644 cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Bad-Request-response_430521186/frozen.json delete mode 100644 cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Conflict-response_2550608988/frozen.json delete mode 100644 cassettes/v2/Datasets_304632144/Create-a-dataset-returns-OK-response_1489201120/frozen.json delete mode 100644 cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Bad-Request-response_3463824271/frozen.json delete mode 100644 cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-No-Content-response_2964057451/frozen.json delete mode 100644 cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Not-Found-response_1477191432/frozen.json delete mode 100644 cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-Bad-Request-response_4202968422/frozen.json delete mode 100644 cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-OK-response_1996941164/frozen.json delete mode 100644 cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-Bad-Request-response_721770438/frozen.json delete mode 100644 cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-OK-response_3806328524/frozen.json delete mode 100644 cassettes/v2/Datasets_304632144/Get-all-datasets-returns-OK-response_3243326099/frozen.json rename features/v2/{datasets.feature => data_access_controls.feature} (60%) create mode 100644 services/data_access_controls/.yarnrc.yml create mode 100644 services/data_access_controls/README.md create mode 100644 services/data_access_controls/package.json create mode 100644 services/data_access_controls/src/index.ts create mode 100644 services/data_access_controls/src/v2/DataAccessControlsApi.ts create mode 100644 services/data_access_controls/src/v2/index.ts create mode 100644 services/data_access_controls/src/v2/models/APIErrorResponse.ts create mode 100644 services/data_access_controls/src/v2/models/DatasetAttributesRequest.ts create mode 100644 services/data_access_controls/src/v2/models/DatasetAttributesResponse.ts create mode 100644 services/data_access_controls/src/v2/models/DatasetCreateRequest.ts create mode 100644 services/data_access_controls/src/v2/models/DatasetRequest.ts create mode 100644 services/data_access_controls/src/v2/models/DatasetResponse.ts create mode 100644 services/data_access_controls/src/v2/models/DatasetResponseMulti.ts create mode 100644 services/data_access_controls/src/v2/models/DatasetResponseSingle.ts create mode 100644 services/data_access_controls/src/v2/models/DatasetType.ts create mode 100644 services/data_access_controls/src/v2/models/DatasetUpdateRequest.ts create mode 100644 services/data_access_controls/src/v2/models/FiltersPerProduct.ts create mode 100644 services/data_access_controls/src/v2/models/TypingInfo.ts create mode 100644 services/data_access_controls/tsconfig.json diff --git a/.generator/schemas/v2/openapi.yaml b/.generator/schemas/v2/openapi.yaml index ea8f0cd3e16b..f81a6b9a6423 100644 --- a/.generator/schemas/v2/openapi.yaml +++ b/.generator/schemas/v2/openapi.yaml @@ -19695,7 +19695,7 @@ components: properties: name: description: Name of the dataset. - example: "Security Audit Dataset" + example: "Security Audit DAC" type: string principals: description: |- @@ -19731,7 +19731,7 @@ components: type: string name: description: Name of the dataset. - example: "Security Audit Dataset" + example: "Security Audit DAC" type: string principals: description: |- @@ -81697,16 +81697,13 @@ paths: appKeyAuth: [] - AuthZ: - user_access_read - summary: Get all datasets + summary: Get all Data Access Control datasets tags: - - Datasets + - Data Access Controls "x-permission": operator: OR permissions: - user_access_read - x-unstable: |- - **Note: Data Access is in preview. If you have any feedback, - contact [Datadog support](https://docs.datadoghq.com/help/).** post: description: |- Create a dataset with the configurations in the request. @@ -81749,17 +81746,14 @@ paths: appKeyAuth: [] - AuthZ: - user_access_manage - summary: Create a dataset + summary: Create a Data Access Control dataset tags: - - Datasets + - Data Access Controls x-codegen-request-body-name: body x-permission: operator: OR permissions: - user_access_manage - x-unstable: |- - **Note: Data Access is in preview. If you have any feedback, - contact [Datadog support](https://docs.datadoghq.com/help/).** /api/v2/datasets/{dataset_id}: delete: description: Deletes the dataset associated with the ID. @@ -81782,16 +81776,13 @@ paths: appKeyAuth: [] - AuthZ: - user_access_manage - summary: Delete a dataset + summary: Delete a Data Access Control dataset tags: - - Datasets + - Data Access Controls "x-permission": operator: OR permissions: - user_access_manage - x-unstable: |- - **Note: Data Access is in preview. If you have any feedback, - contact [Datadog support](https://docs.datadoghq.com/help/).** get: description: Retrieves the dataset associated with the ID. operationId: GetDataset @@ -81817,15 +81808,12 @@ paths: appKeyAuth: [] - AuthZ: - user_access_read - summary: Get a single dataset by ID + summary: Get a Data Access Control dataset by ID tags: - - Datasets + - Data Access Controls "x-permission": operator: OPEN permissions: [] - x-unstable: |- - **Note: Data Access is in preview. If you have any feedback, - contact [Datadog support](https://docs.datadoghq.com/help/).** put: description: |- Edits the dataset associated with the ID. @@ -81859,17 +81847,14 @@ paths: appKeyAuth: [] - AuthZ: - user_access_manage - summary: Edit a dataset + summary: Edit a Data Access Control dataset tags: - - Datasets + - Data Access Controls x-codegen-request-body-name: body "x-permission": operator: OR permissions: - user_access_manage - x-unstable: |- - **Note: Data Access is in preview. If you have any feedback, - contact [Datadog support](https://docs.datadoghq.com/help/).** /api/v2/deletion/data/{product}: post: description: Creates a data deletion request by providing a query and a timeframe targeting the proper data. @@ -111625,13 +111610,16 @@ tags: organization. name: Dashboard Lists - description: |- - The Data Deletion API allows the user to target and delete data from the allowed products. It's currently enabled for Logs and RUM and depends on `logs_delete_data` and `rum_delete_data` permissions respectively. - name: Data Deletion - - description: |- - Data Access Controls in Datadog is a feature that allows administrators and access managers to regulate + Manage [Data Access Controls](https://docs.datadoghq.com/account_management/rbac/data_access/) + programmatically using Datasets. + + Data Access Controls in Datadog allows administrators and access managers to regulate access to sensitive data. By defining Restricted Datasets, you can ensure that only specific teams or roles can view certain types of telemetry (for example, logs, traces, metrics, and RUM data). - name: Datasets + name: Data Access Controls + - description: |- + The Data Deletion API allows the user to target and delete data from the allowed products. It's currently enabled for Logs and RUM and depends on `logs_delete_data` and `rum_delete_data` permissions respectively. + name: Data Deletion - description: |- Manage Deployment Gates using this API to reduce the likelihood and impact of incidents caused by deployments. See the [Deployment Gates documentation](https://docs.datadoghq.com/deployment_gates/) for more information. name: Deployment Gates diff --git a/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Bad-Request-response_3993532435/frozen.json b/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Bad-Request-response_3993532435/frozen.json new file mode 100644 index 000000000000..5b1e29a47297 --- /dev/null +++ b/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Bad-Request-response_3993532435/frozen.json @@ -0,0 +1 @@ +"2026-03-26T21:30:07.702Z" diff --git a/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Bad-Request-response_430521186/recording.har b/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Bad-Request-response_3993532435/recording.har similarity index 89% rename from cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Bad-Request-response_430521186/recording.har rename to cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Bad-Request-response_3993532435/recording.har index cbc6b1a54107..f06bfe7445c7 100644 --- a/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Bad-Request-response_430521186/recording.har +++ b/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Bad-Request-response_3993532435/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "Datasets/Create a dataset returns \"Bad Request\" response", + "_recordingName": "Data Access Controls/Create a Data Access Control dataset returns \"Bad Request\" response", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -57,8 +57,8 @@ "status": 400, "statusText": "Bad Request" }, - "startedDateTime": "2025-07-29T20:35:57.148Z", - "time": 169 + "startedDateTime": "2026-03-26T21:30:08.165Z", + "time": 199 } ], "pages": [], diff --git a/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Conflict-response_3895691767/frozen.json b/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Conflict-response_3895691767/frozen.json new file mode 100644 index 000000000000..5856d84a2690 --- /dev/null +++ b/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Conflict-response_3895691767/frozen.json @@ -0,0 +1 @@ +"2026-03-26T21:30:08.373Z" diff --git a/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Conflict-response_2550608988/recording.har b/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Conflict-response_3895691767/recording.har similarity index 70% rename from cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Conflict-response_2550608988/recording.har rename to cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Conflict-response_3895691767/recording.har index 90b9c53e974e..866625268eeb 100644 --- a/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Conflict-response_2550608988/recording.har +++ b/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-Conflict-response_3895691767/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "Datasets/Create a dataset returns \"Conflict\" response", + "_recordingName": "Data Access Controls/Create a Data Access Control dataset returns \"Conflict\" response", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -8,11 +8,11 @@ }, "entries": [ { - "_id": "32c558cf4a2ef914f443ab94000addc9", + "_id": "9afbe4de1a01216793a5958a7f6a808d", "_order": 0, "cache": {}, "request": { - "bodySize": 210, + "bodySize": 203, "cookies": [], "headers": [ { @@ -32,17 +32,17 @@ "postData": { "mimeType": "application/json", "params": [], - "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit Dataset\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"metrics\"}]},\"type\":\"dataset\"}}" + "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit DAC\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"logs\"}]},\"type\":\"dataset\"}}" }, "queryString": [], "url": "https://api.datadoghq.com/api/v2/datasets" }, "response": { - "bodySize": 255, + "bodySize": 248, "content": { "mimeType": "application/json", - "size": 255, - "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"7cbada94-7d01-4e73-8c74-ea70fb3b3088\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + "size": 248, + "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"fc61b4b4-d05a-4cba-b109-0d123141056e\",\"attributes\":{\"name\":\"Security Audit DAC\",\"product_filters\":[{\"product\":\"logs\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" }, "cookies": [], "headers": [ @@ -57,15 +57,15 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2025-07-29T20:35:57.326Z", - "time": 176 + "startedDateTime": "2026-03-26T21:30:08.376Z", + "time": 303 }, { - "_id": "32c558cf4a2ef914f443ab94000addc9", + "_id": "9afbe4de1a01216793a5958a7f6a808d", "_order": 1, "cache": {}, "request": { - "bodySize": 210, + "bodySize": 203, "cookies": [], "headers": [ { @@ -85,17 +85,17 @@ "postData": { "mimeType": "application/json", "params": [], - "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit Dataset\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"metrics\"}]},\"type\":\"dataset\"}}" + "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit DAC\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"logs\"}]},\"type\":\"dataset\"}}" }, "queryString": [], "url": "https://api.datadoghq.com/api/v2/datasets" }, "response": { - "bodySize": 114, + "bodySize": 110, "content": { "mimeType": "application/json", - "size": 114, - "text": "{\"errors\":[\"Invalid request: [DatasetNameConflict] dataset with name \\\"Security Audit Dataset\\\" already exists\"]}\n" + "size": 110, + "text": "{\"errors\":[\"Invalid request: [DatasetNameConflict] dataset with name \\\"Security Audit DAC\\\" already exists\"]}\n" }, "cookies": [], "headers": [ @@ -110,11 +110,11 @@ "status": 409, "statusText": "Conflict" }, - "startedDateTime": "2025-07-29T20:35:57.509Z", - "time": 167 + "startedDateTime": "2026-03-26T21:30:08.684Z", + "time": 185 }, { - "_id": "f569dd34ba2b185ce3320a771e7e15c2", + "_id": "7b7b60d3c568c7753c0a34c20939b781", "_order": 0, "cache": {}, "request": { @@ -127,11 +127,11 @@ "value": "*/*" } ], - "headersSize": 529, + "headersSize": 528, "httpVersion": "HTTP/1.1", "method": "DELETE", "queryString": [], - "url": "https://api.datadoghq.com/api/v2/datasets/7cbada94-7d01-4e73-8c74-ea70fb3b3088" + "url": "https://api.datadoghq.com/api/v2/datasets/fc61b4b4-d05a-4cba-b109-0d123141056e" }, "response": { "bodySize": 0, @@ -152,8 +152,8 @@ "status": 204, "statusText": "No Content" }, - "startedDateTime": "2025-07-29T20:35:57.685Z", - "time": 148 + "startedDateTime": "2026-03-26T21:30:08.874Z", + "time": 262 } ], "pages": [], diff --git a/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-OK-response_3448877847/frozen.json b/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-OK-response_3448877847/frozen.json new file mode 100644 index 000000000000..d5a139028ade --- /dev/null +++ b/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-OK-response_3448877847/frozen.json @@ -0,0 +1 @@ +"2026-03-26T21:30:09.140Z" diff --git a/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-OK-response_1489201120/recording.har b/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-OK-response_3448877847/recording.har similarity index 69% rename from cassettes/v2/Datasets_304632144/Create-a-dataset-returns-OK-response_1489201120/recording.har rename to cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-OK-response_3448877847/recording.har index 33eda457f532..aabbb18d916f 100644 --- a/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-OK-response_1489201120/recording.har +++ b/cassettes/v2/Data-Access-Controls_1094776657/Create-a-Data-Access-Control-dataset-returns-OK-response_3448877847/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "Datasets/Create a dataset returns \"OK\" response", + "_recordingName": "Data Access Controls/Create a Data Access Control dataset returns \"OK\" response", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -8,11 +8,11 @@ }, "entries": [ { - "_id": "32c558cf4a2ef914f443ab94000addc9", + "_id": "9afbe4de1a01216793a5958a7f6a808d", "_order": 0, "cache": {}, "request": { - "bodySize": 210, + "bodySize": 203, "cookies": [], "headers": [ { @@ -32,17 +32,17 @@ "postData": { "mimeType": "application/json", "params": [], - "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit Dataset\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"metrics\"}]},\"type\":\"dataset\"}}" + "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit DAC\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"logs\"}]},\"type\":\"dataset\"}}" }, "queryString": [], "url": "https://api.datadoghq.com/api/v2/datasets" }, "response": { - "bodySize": 255, + "bodySize": 248, "content": { "mimeType": "application/json", - "size": 255, - "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"86f67664-8b7b-49ae-b671-919ebe11886c\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + "size": 248, + "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"badc1f6e-ad2e-46f3-91bb-63af60d40b43\",\"attributes\":{\"name\":\"Security Audit DAC\",\"product_filters\":[{\"product\":\"logs\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" }, "cookies": [], "headers": [ @@ -57,11 +57,11 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2025-07-29T20:35:57.843Z", - "time": 214 + "startedDateTime": "2026-03-26T21:30:09.143Z", + "time": 241 }, { - "_id": "e15cf98473c5d05e382ba27da41631f3", + "_id": "c29199a6e3ef4bc3be2b0dbc8b4ac123", "_order": 0, "cache": {}, "request": { @@ -78,7 +78,7 @@ "httpVersion": "HTTP/1.1", "method": "DELETE", "queryString": [], - "url": "https://api.datadoghq.com/api/v2/datasets/86f67664-8b7b-49ae-b671-919ebe11886c" + "url": "https://api.datadoghq.com/api/v2/datasets/badc1f6e-ad2e-46f3-91bb-63af60d40b43" }, "response": { "bodySize": 0, @@ -99,8 +99,8 @@ "status": 204, "statusText": "No Content" }, - "startedDateTime": "2025-07-29T20:35:58.064Z", - "time": 181 + "startedDateTime": "2026-03-26T21:30:09.388Z", + "time": 256 } ], "pages": [], diff --git a/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Bad-Request-response_1838809586/frozen.json b/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Bad-Request-response_1838809586/frozen.json new file mode 100644 index 000000000000..ebc2e12bbd2e --- /dev/null +++ b/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Bad-Request-response_1838809586/frozen.json @@ -0,0 +1 @@ +"2026-03-26T21:30:09.647Z" diff --git a/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Bad-Request-response_3463824271/recording.har b/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Bad-Request-response_1838809586/recording.har similarity index 85% rename from cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Bad-Request-response_3463824271/recording.har rename to cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Bad-Request-response_1838809586/recording.har index ee9a3883b3db..d1dd012ac9a8 100644 --- a/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Bad-Request-response_3463824271/recording.har +++ b/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Bad-Request-response_1838809586/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "Datasets/Delete a dataset returns \"Bad Request\" response", + "_recordingName": "Data Access Controls/Delete a Data Access Control dataset returns \"Bad Request\" response", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -21,7 +21,7 @@ "value": "*/*" } ], - "headersSize": 505, + "headersSize": 504, "httpVersion": "HTTP/1.1", "method": "DELETE", "queryString": [], @@ -47,8 +47,8 @@ "status": 400, "statusText": "Bad Request" }, - "startedDateTime": "2025-07-29T20:35:58.255Z", - "time": 167 + "startedDateTime": "2026-03-26T21:30:09.649Z", + "time": 233 } ], "pages": [], diff --git a/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-No-Content-response_4177341240/frozen.json b/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-No-Content-response_4177341240/frozen.json new file mode 100644 index 000000000000..b35deaf69e93 --- /dev/null +++ b/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-No-Content-response_4177341240/frozen.json @@ -0,0 +1 @@ +"2026-03-26T21:30:09.887Z" diff --git a/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-No-Content-response_2964057451/recording.har b/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-No-Content-response_4177341240/recording.har similarity index 70% rename from cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-No-Content-response_2964057451/recording.har rename to cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-No-Content-response_4177341240/recording.har index fe38937eae39..fe02896662e8 100644 --- a/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-No-Content-response_2964057451/recording.har +++ b/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-No-Content-response_4177341240/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "Datasets/Delete a dataset returns \"No Content\" response", + "_recordingName": "Data Access Controls/Delete a Data Access Control dataset returns \"No Content\" response", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -8,11 +8,11 @@ }, "entries": [ { - "_id": "32c558cf4a2ef914f443ab94000addc9", + "_id": "9afbe4de1a01216793a5958a7f6a808d", "_order": 0, "cache": {}, "request": { - "bodySize": 210, + "bodySize": 203, "cookies": [], "headers": [ { @@ -32,17 +32,17 @@ "postData": { "mimeType": "application/json", "params": [], - "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit Dataset\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"metrics\"}]},\"type\":\"dataset\"}}" + "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit DAC\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"logs\"}]},\"type\":\"dataset\"}}" }, "queryString": [], "url": "https://api.datadoghq.com/api/v2/datasets" }, "response": { - "bodySize": 255, + "bodySize": 248, "content": { "mimeType": "application/json", - "size": 255, - "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"60ee6562-48f5-455f-bdb4-fd3f5f899978\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + "size": 248, + "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"d7eacc0a-68a8-4511-8a9e-81c275a3cfc4\",\"attributes\":{\"name\":\"Security Audit DAC\",\"product_filters\":[{\"product\":\"logs\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" }, "cookies": [], "headers": [ @@ -57,11 +57,11 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2025-07-29T20:35:58.433Z", - "time": 181 + "startedDateTime": "2026-03-26T21:30:09.889Z", + "time": 224 }, { - "_id": "e6d82f135ad34466edde778425f3614b", + "_id": "25f5bfcda85b825f12952b7da296afdb", "_order": 0, "cache": {}, "request": { @@ -78,7 +78,7 @@ "httpVersion": "HTTP/1.1", "method": "DELETE", "queryString": [], - "url": "https://api.datadoghq.com/api/v2/datasets/60ee6562-48f5-455f-bdb4-fd3f5f899978" + "url": "https://api.datadoghq.com/api/v2/datasets/d7eacc0a-68a8-4511-8a9e-81c275a3cfc4" }, "response": { "bodySize": 0, @@ -93,17 +93,17 @@ "value": "application/json" } ], - "headersSize": 657, + "headersSize": 658, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 204, "statusText": "No Content" }, - "startedDateTime": "2025-07-29T20:35:58.621Z", - "time": 185 + "startedDateTime": "2026-03-26T21:30:10.118Z", + "time": 245 }, { - "_id": "e6d82f135ad34466edde778425f3614b", + "_id": "25f5bfcda85b825f12952b7da296afdb", "_order": 1, "cache": {}, "request": { @@ -120,14 +120,14 @@ "httpVersion": "HTTP/1.1", "method": "DELETE", "queryString": [], - "url": "https://api.datadoghq.com/api/v2/datasets/60ee6562-48f5-455f-bdb4-fd3f5f899978" + "url": "https://api.datadoghq.com/api/v2/datasets/d7eacc0a-68a8-4511-8a9e-81c275a3cfc4" }, "response": { "bodySize": 109, "content": { "mimeType": "application/json", "size": 109, - "text": "{\"errors\":[\"Invalid request: [DatasetNotFound] dataset \\\"60ee6562-48f5-455f-bdb4-fd3f5f899978\\\" not found\"]}\n" + "text": "{\"errors\":[\"Invalid request: [DatasetNotFound] dataset \\\"d7eacc0a-68a8-4511-8a9e-81c275a3cfc4\\\" not found\"]}\n" }, "cookies": [], "headers": [ @@ -136,14 +136,14 @@ "value": "application/json" } ], - "headersSize": 678, + "headersSize": 679, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 404, "statusText": "Not Found" }, - "startedDateTime": "2025-07-29T20:35:58.814Z", - "time": 175 + "startedDateTime": "2026-03-26T21:30:10.369Z", + "time": 250 } ], "pages": [], diff --git a/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Not-Found-response_835176097/frozen.json b/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Not-Found-response_835176097/frozen.json new file mode 100644 index 000000000000..8f0f157867cb --- /dev/null +++ b/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Not-Found-response_835176097/frozen.json @@ -0,0 +1 @@ +"2026-03-26T21:30:10.625Z" diff --git a/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Not-Found-response_1477191432/recording.har b/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Not-Found-response_835176097/recording.har similarity index 77% rename from cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Not-Found-response_1477191432/recording.har rename to cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Not-Found-response_835176097/recording.har index ca39c540e334..faaa77123d8e 100644 --- a/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Not-Found-response_1477191432/recording.har +++ b/cassettes/v2/Data-Access-Controls_1094776657/Delete-a-Data-Access-Control-dataset-returns-Not-Found-response_835176097/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "Datasets/Delete a dataset returns \"Not Found\" response", + "_recordingName": "Data Access Controls/Delete a Data Access Control dataset returns \"Not Found\" response", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -28,11 +28,11 @@ "url": "https://api.datadoghq.com/api/v2/datasets/00000000-0000-0000-0000-000000000000" }, "response": { - "bodySize": 109, + "bodySize": 115, "content": { "mimeType": "application/json", - "size": 109, - "text": "{\"errors\":[\"Invalid request: [DatasetNotFound] dataset \\\"00000000-0000-0000-0000-000000000000\\\" not found\"]}\n" + "size": 115, + "text": "{\"errors\":[\"Invalid request: [DatasetNotFound] failed to fetch dataset \\\"00000000-0000-0000-0000-000000000000\\\"\"]}\n" }, "cookies": [], "headers": [ @@ -41,14 +41,14 @@ "value": "application/json" } ], - "headersSize": 678, + "headersSize": 679, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 404, "statusText": "Not Found" }, - "startedDateTime": "2025-07-29T20:35:59.000Z", - "time": 172 + "startedDateTime": "2026-03-26T21:30:10.627Z", + "time": 207 } ], "pages": [], diff --git a/cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-Bad-Request-response_1025030887/frozen.json b/cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-Bad-Request-response_1025030887/frozen.json new file mode 100644 index 000000000000..fd8325bd1835 --- /dev/null +++ b/cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-Bad-Request-response_1025030887/frozen.json @@ -0,0 +1 @@ +"2026-03-26T21:30:10.839Z" diff --git a/cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-Bad-Request-response_4202968422/recording.har b/cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-Bad-Request-response_1025030887/recording.har similarity index 86% rename from cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-Bad-Request-response_4202968422/recording.har rename to cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-Bad-Request-response_1025030887/recording.har index f76e99c1f7f0..9bbb350029e3 100644 --- a/cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-Bad-Request-response_4202968422/recording.har +++ b/cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-Bad-Request-response_1025030887/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "Datasets/Edit a dataset returns \"Bad Request\" response", + "_recordingName": "Data Access Controls/Edit a Data Access Control dataset returns \"Bad Request\" response", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -46,14 +46,14 @@ "value": "application/json" } ], - "headersSize": 675, + "headersSize": 676, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 400, "statusText": "Bad Request" }, - "startedDateTime": "2025-07-29T20:35:59.183Z", - "time": 206 + "startedDateTime": "2026-03-26T21:30:10.841Z", + "time": 203 } ], "pages": [], diff --git a/cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-OK-response_1680409091/frozen.json b/cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-OK-response_1680409091/frozen.json new file mode 100644 index 000000000000..9419978be59e --- /dev/null +++ b/cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-OK-response_1680409091/frozen.json @@ -0,0 +1 @@ +"2026-03-26T21:30:11.049Z" diff --git a/cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-OK-response_1996941164/recording.har b/cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-OK-response_1680409091/recording.har similarity index 65% rename from cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-OK-response_1996941164/recording.har rename to cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-OK-response_1680409091/recording.har index 0fa141359514..e759131aba9d 100644 --- a/cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-OK-response_1996941164/recording.har +++ b/cassettes/v2/Data-Access-Controls_1094776657/Edit-a-Data-Access-Control-dataset-returns-OK-response_1680409091/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "Datasets/Edit a dataset returns \"OK\" response", + "_recordingName": "Data Access Controls/Edit a Data Access Control dataset returns \"OK\" response", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -8,11 +8,11 @@ }, "entries": [ { - "_id": "32c558cf4a2ef914f443ab94000addc9", + "_id": "9afbe4de1a01216793a5958a7f6a808d", "_order": 0, "cache": {}, "request": { - "bodySize": 210, + "bodySize": 203, "cookies": [], "headers": [ { @@ -32,17 +32,17 @@ "postData": { "mimeType": "application/json", "params": [], - "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit Dataset\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"metrics\"}]},\"type\":\"dataset\"}}" + "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit DAC\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"logs\"}]},\"type\":\"dataset\"}}" }, "queryString": [], "url": "https://api.datadoghq.com/api/v2/datasets" }, "response": { - "bodySize": 255, + "bodySize": 248, "content": { "mimeType": "application/json", - "size": 255, - "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"2bf848a1-b18a-4602-8348-814a53862c52\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + "size": 248, + "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"be869093-c62b-4ed1-87e8-7fb047e65f3d\",\"attributes\":{\"name\":\"Security Audit DAC\",\"product_filters\":[{\"product\":\"logs\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" }, "cookies": [], "headers": [ @@ -57,15 +57,15 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2025-07-29T20:35:59.403Z", - "time": 187 + "startedDateTime": "2026-03-26T21:30:11.051Z", + "time": 239 }, { - "_id": "3dd90d49904250c7d2c0d10377768bbb", + "_id": "bf306df680a5c1e043af4d4fdf158b3c", "_order": 0, "cache": {}, "request": { - "bodySize": 210, + "bodySize": 203, "cookies": [], "headers": [ { @@ -85,17 +85,17 @@ "postData": { "mimeType": "application/json", "params": [], - "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit Dataset\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:1234\"],\"product\":\"metrics\"}]},\"type\":\"dataset\"}}" + "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit DAC\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:1234\"],\"product\":\"logs\"}]},\"type\":\"dataset\"}}" }, "queryString": [], - "url": "https://api.datadoghq.com/api/v2/datasets/2bf848a1-b18a-4602-8348-814a53862c52" + "url": "https://api.datadoghq.com/api/v2/datasets/be869093-c62b-4ed1-87e8-7fb047e65f3d" }, "response": { - "bodySize": 255, + "bodySize": 248, "content": { "mimeType": "application/json", - "size": 255, - "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"2bf848a1-b18a-4602-8348-814a53862c52\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:1234\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + "size": 248, + "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"be869093-c62b-4ed1-87e8-7fb047e65f3d\",\"attributes\":{\"name\":\"Security Audit DAC\",\"product_filters\":[{\"product\":\"logs\",\"filters\":[\"@application.id:1234\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" }, "cookies": [], "headers": [ @@ -110,11 +110,11 @@ "status": 200, "statusText": "OK" }, - "startedDateTime": "2025-07-29T20:35:59.599Z", - "time": 216 + "startedDateTime": "2026-03-26T21:30:11.295Z", + "time": 288 }, { - "_id": "202139393ba18fe0e52d054b00f716c1", + "_id": "d68a6e1f621753ed2b269ca980f863d6", "_order": 0, "cache": {}, "request": { @@ -131,7 +131,7 @@ "httpVersion": "HTTP/1.1", "method": "DELETE", "queryString": [], - "url": "https://api.datadoghq.com/api/v2/datasets/2bf848a1-b18a-4602-8348-814a53862c52" + "url": "https://api.datadoghq.com/api/v2/datasets/be869093-c62b-4ed1-87e8-7fb047e65f3d" }, "response": { "bodySize": 0, @@ -152,8 +152,8 @@ "status": 204, "statusText": "No Content" }, - "startedDateTime": "2025-07-29T20:35:59.820Z", - "time": 183 + "startedDateTime": "2026-03-26T21:30:11.586Z", + "time": 279 } ], "pages": [], diff --git a/cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-Bad-Request-response_3714207895/frozen.json b/cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-Bad-Request-response_3714207895/frozen.json new file mode 100644 index 000000000000..942ae472d252 --- /dev/null +++ b/cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-Bad-Request-response_3714207895/frozen.json @@ -0,0 +1 @@ +"2026-03-26T21:30:11.869Z" diff --git a/cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-Bad-Request-response_721770438/recording.har b/cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-Bad-Request-response_3714207895/recording.har similarity index 85% rename from cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-Bad-Request-response_721770438/recording.har rename to cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-Bad-Request-response_3714207895/recording.har index 7698fcc5ef83..68201ede04ea 100644 --- a/cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-Bad-Request-response_721770438/recording.har +++ b/cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-Bad-Request-response_3714207895/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "Datasets/Get a single dataset by ID returns \"Bad Request\" response", + "_recordingName": "Data Access Controls/Get a Data Access Control dataset by ID returns \"Bad Request\" response", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -41,14 +41,14 @@ "value": "application/json" } ], - "headersSize": 676, + "headersSize": 675, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 400, "statusText": "Bad Request" }, - "startedDateTime": "2025-07-29T20:36:00.013Z", - "time": 164 + "startedDateTime": "2026-03-26T21:30:11.882Z", + "time": 207 } ], "pages": [], diff --git a/cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-OK-response_3849367923/frozen.json b/cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-OK-response_3849367923/frozen.json new file mode 100644 index 000000000000..7af0fd8d21e5 --- /dev/null +++ b/cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-OK-response_3849367923/frozen.json @@ -0,0 +1 @@ +"2026-03-26T21:30:12.094Z" diff --git a/cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-OK-response_3806328524/recording.har b/cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-OK-response_3849367923/recording.har similarity index 64% rename from cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-OK-response_3806328524/recording.har rename to cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-OK-response_3849367923/recording.har index 947f0cef5f23..a44c4cf97418 100644 --- a/cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-OK-response_3806328524/recording.har +++ b/cassettes/v2/Data-Access-Controls_1094776657/Get-a-Data-Access-Control-dataset-by-ID-returns-OK-response_3849367923/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "Datasets/Get a single dataset by ID returns \"OK\" response", + "_recordingName": "Data Access Controls/Get a Data Access Control dataset by ID returns \"OK\" response", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -8,11 +8,11 @@ }, "entries": [ { - "_id": "32c558cf4a2ef914f443ab94000addc9", + "_id": "9afbe4de1a01216793a5958a7f6a808d", "_order": 0, "cache": {}, "request": { - "bodySize": 210, + "bodySize": 203, "cookies": [], "headers": [ { @@ -32,17 +32,17 @@ "postData": { "mimeType": "application/json", "params": [], - "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit Dataset\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"metrics\"}]},\"type\":\"dataset\"}}" + "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit DAC\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"logs\"}]},\"type\":\"dataset\"}}" }, "queryString": [], "url": "https://api.datadoghq.com/api/v2/datasets" }, "response": { - "bodySize": 255, + "bodySize": 248, "content": { "mimeType": "application/json", - "size": 255, - "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"9e576299-3cc1-4145-8aad-67a1ab914829\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + "size": 248, + "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"ad02f467-8bdc-42d6-85b5-d538508741bc\",\"attributes\":{\"name\":\"Security Audit DAC\",\"product_filters\":[{\"product\":\"logs\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" }, "cookies": [], "headers": [ @@ -51,17 +51,17 @@ "value": "application/json" } ], - "headersSize": 679, + "headersSize": 678, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2025-07-29T20:36:00.189Z", - "time": 173 + "startedDateTime": "2026-03-26T21:30:12.096Z", + "time": 220 }, { - "_id": "5f6432cf6e61c956e2a57822c9c7a3ac", + "_id": "fe1a484fd6c5d88232b3a96cdcf8c7d1", "_order": 0, "cache": {}, "request": { @@ -78,14 +78,14 @@ "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [], - "url": "https://api.datadoghq.com/api/v2/datasets/9e576299-3cc1-4145-8aad-67a1ab914829" + "url": "https://api.datadoghq.com/api/v2/datasets/ad02f467-8bdc-42d6-85b5-d538508741bc" }, "response": { - "bodySize": 255, + "bodySize": 248, "content": { "mimeType": "application/json", - "size": 255, - "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"9e576299-3cc1-4145-8aad-67a1ab914829\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + "size": 248, + "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"ad02f467-8bdc-42d6-85b5-d538508741bc\",\"attributes\":{\"name\":\"Security Audit DAC\",\"product_filters\":[{\"product\":\"logs\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" }, "cookies": [], "headers": [ @@ -94,17 +94,17 @@ "value": "application/json" } ], - "headersSize": 676, + "headersSize": 675, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2025-07-29T20:36:00.367Z", - "time": 160 + "startedDateTime": "2026-03-26T21:30:12.321Z", + "time": 184 }, { - "_id": "347efd0618b898bdc9c7745a1d2f53cf", + "_id": "ea381fb6be6ae0e211273919bcf9279c", "_order": 0, "cache": {}, "request": { @@ -121,7 +121,7 @@ "httpVersion": "HTTP/1.1", "method": "DELETE", "queryString": [], - "url": "https://api.datadoghq.com/api/v2/datasets/9e576299-3cc1-4145-8aad-67a1ab914829" + "url": "https://api.datadoghq.com/api/v2/datasets/ad02f467-8bdc-42d6-85b5-d538508741bc" }, "response": { "bodySize": 0, @@ -136,14 +136,14 @@ "value": "application/json" } ], - "headersSize": 658, + "headersSize": 657, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 204, "statusText": "No Content" }, - "startedDateTime": "2025-07-29T20:36:00.534Z", - "time": 173 + "startedDateTime": "2026-03-26T21:30:12.509Z", + "time": 234 } ], "pages": [], diff --git a/cassettes/v2/Data-Access-Controls_1094776657/Get-all-Data-Access-Control-datasets-returns-OK-response_334834662/frozen.json b/cassettes/v2/Data-Access-Controls_1094776657/Get-all-Data-Access-Control-datasets-returns-OK-response_334834662/frozen.json new file mode 100644 index 000000000000..527b000f64f9 --- /dev/null +++ b/cassettes/v2/Data-Access-Controls_1094776657/Get-all-Data-Access-Control-datasets-returns-OK-response_334834662/frozen.json @@ -0,0 +1 @@ +"2026-03-26T21:30:12.747Z" diff --git a/cassettes/v2/Datasets_304632144/Get-all-datasets-returns-OK-response_3243326099/recording.har b/cassettes/v2/Data-Access-Controls_1094776657/Get-all-Data-Access-Control-datasets-returns-OK-response_334834662/recording.har similarity index 52% rename from cassettes/v2/Datasets_304632144/Get-all-datasets-returns-OK-response_3243326099/recording.har rename to cassettes/v2/Data-Access-Controls_1094776657/Get-all-Data-Access-Control-datasets-returns-OK-response_334834662/recording.har index a2adbf30e7b2..b0e60ae6efb2 100644 --- a/cassettes/v2/Datasets_304632144/Get-all-datasets-returns-OK-response_3243326099/recording.har +++ b/cassettes/v2/Data-Access-Controls_1094776657/Get-all-Data-Access-Control-datasets-returns-OK-response_334834662/recording.har @@ -1,6 +1,6 @@ { "log": { - "_recordingName": "Datasets/Get all datasets returns \"OK\" response", + "_recordingName": "Data Access Controls/Get all Data Access Control datasets returns \"OK\" response", "creator": { "comment": "persister:fs", "name": "Polly.JS", @@ -8,11 +8,11 @@ }, "entries": [ { - "_id": "32c558cf4a2ef914f443ab94000addc9", + "_id": "9afbe4de1a01216793a5958a7f6a808d", "_order": 0, "cache": {}, "request": { - "bodySize": 210, + "bodySize": 203, "cookies": [], "headers": [ { @@ -32,17 +32,17 @@ "postData": { "mimeType": "application/json", "params": [], - "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit Dataset\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"metrics\"}]},\"type\":\"dataset\"}}" + "text": "{\"data\":{\"attributes\":{\"name\":\"Security Audit DAC\",\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"product_filters\":[{\"filters\":[\"@application.id:ABCD\"],\"product\":\"logs\"}]},\"type\":\"dataset\"}}" }, "queryString": [], "url": "https://api.datadoghq.com/api/v2/datasets" }, "response": { - "bodySize": 255, + "bodySize": 248, "content": { "mimeType": "application/json", - "size": 255, - "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"b0f617b4-affb-4411-970a-2c157933514c\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" + "size": 248, + "text": "{\"data\":{\"type\":\"dataset\",\"id\":\"2e6e3a20-1ada-4a78-b583-d08fe4e3e8ea\",\"attributes\":{\"name\":\"Security Audit DAC\",\"product_filters\":[{\"product\":\"logs\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"]}}}\n" }, "cookies": [], "headers": [ @@ -51,14 +51,14 @@ "value": "application/json" } ], - "headersSize": 679, + "headersSize": 678, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2025-07-29T20:36:00.717Z", - "time": 177 + "startedDateTime": "2026-03-26T21:30:12.750Z", + "time": 240 }, { "_id": "c38493f7b33f3354897ce07393c8ebdf", @@ -74,18 +74,18 @@ "value": "application/json" } ], - "headersSize": 503, + "headersSize": 502, "httpVersion": "HTTP/1.1", "method": "GET", "queryString": [], "url": "https://api.datadoghq.com/api/v2/datasets" }, "response": { - "bodySize": 351, + "bodySize": 1479, "content": { "mimeType": "application/json", - "size": 351, - "text": "{\"data\":[{\"type\":\"dataset\",\"id\":\"b0f617b4-affb-4411-970a-2c157933514c\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"created_by\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"created_at\":\"2025-07-29T20:36:00.94442Z\"}}]}\n" + "size": 1479, + "text": "{\"data\":[{\"type\":\"dataset\",\"id\":\"98648aa9-bf46-45b5-af42-b8466a42108c\",\"attributes\":{\"name\":\"HR Dataset\",\"product_filters\":[{\"product\":\"rum\",\"filters\":[\"@application.id:123\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"created_by\":\"5fc21484-7314-11f0-86cc-a2f12af268bf\",\"created_at\":\"2025-08-27T15:05:18.148596Z\"}},{\"type\":\"dataset\",\"id\":\"2e6e3a20-1ada-4a78-b583-d08fe4e3e8ea\",\"attributes\":{\"name\":\"Security Audit DAC\",\"product_filters\":[{\"product\":\"logs\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":\"2026-03-26T21:30:12.944938Z\"}},{\"type\":\"dataset\",\"id\":\"9559049b-bcbc-420d-9f33-38c426cf1541\",\"attributes\":{\"name\":\"Security Audit Dataset\",\"product_filters\":[{\"product\":\"metrics\",\"filters\":[\"@application.id:ABCD\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\"],\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":\"2025-07-31T17:26:56.804551Z\"}},{\"type\":\"dataset\",\"id\":\"ce9d9376-61bd-437f-93cc-43b5f754c92d\",\"attributes\":{\"name\":\"tf-test-Update-1773232609-updated\",\"product_filters\":[{\"product\":\"apm\",\"filters\":[\"service:test\"]},{\"product\":\"rum\",\"filters\":[\"@application.id:ce9843b0-7a45-453c-a831-55dd15f85141\"]}],\"principals\":[\"role:94172442-be03-11e9-a77a-3b7612558ac1\",\"team:4ca6f4c0-88e4-4d42-b7bd-dea73da5c59e\"],\"created_by\":\"9919ec9b-ebc7-49ee-8dc8-03626e717cca\",\"created_at\":\"2026-03-11T12:36:50.541349Z\"}}]}\n" }, "cookies": [], "headers": [ @@ -94,17 +94,17 @@ "value": "application/json" } ], - "headersSize": 675, + "headersSize": 676, "httpVersion": "HTTP/1.1", "redirectURL": "", "status": 200, "statusText": "OK" }, - "startedDateTime": "2025-07-29T20:36:00.901Z", - "time": 155 + "startedDateTime": "2026-03-26T21:30:12.995Z", + "time": 290 }, { - "_id": "c45d65527feb2f60bba655c4c2d537ff", + "_id": "8637430ba929622c3a43bc994905da50", "_order": 0, "cache": {}, "request": { @@ -121,7 +121,7 @@ "httpVersion": "HTTP/1.1", "method": "DELETE", "queryString": [], - "url": "https://api.datadoghq.com/api/v2/datasets/b0f617b4-affb-4411-970a-2c157933514c" + "url": "https://api.datadoghq.com/api/v2/datasets/2e6e3a20-1ada-4a78-b583-d08fe4e3e8ea" }, "response": { "bodySize": 0, @@ -142,8 +142,8 @@ "status": 204, "statusText": "No Content" }, - "startedDateTime": "2025-07-29T20:36:01.062Z", - "time": 195 + "startedDateTime": "2026-03-26T21:30:13.289Z", + "time": 233 } ], "pages": [], diff --git a/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Bad-Request-response_430521186/frozen.json b/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Bad-Request-response_430521186/frozen.json deleted file mode 100644 index 55e9aafcc29d..000000000000 --- a/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Bad-Request-response_430521186/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2025-07-29T20:35:57.144Z" diff --git a/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Conflict-response_2550608988/frozen.json b/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Conflict-response_2550608988/frozen.json deleted file mode 100644 index 0c6cb533dfa1..000000000000 --- a/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-Conflict-response_2550608988/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2025-07-29T20:35:57.324Z" diff --git a/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-OK-response_1489201120/frozen.json b/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-OK-response_1489201120/frozen.json deleted file mode 100644 index efae8001ea8b..000000000000 --- a/cassettes/v2/Datasets_304632144/Create-a-dataset-returns-OK-response_1489201120/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2025-07-29T20:35:57.839Z" diff --git a/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Bad-Request-response_3463824271/frozen.json b/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Bad-Request-response_3463824271/frozen.json deleted file mode 100644 index 607e76f1f417..000000000000 --- a/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Bad-Request-response_3463824271/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2025-07-29T20:35:58.251Z" diff --git a/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-No-Content-response_2964057451/frozen.json b/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-No-Content-response_2964057451/frozen.json deleted file mode 100644 index f099b5cd8e2f..000000000000 --- a/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-No-Content-response_2964057451/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2025-07-29T20:35:58.429Z" diff --git a/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Not-Found-response_1477191432/frozen.json b/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Not-Found-response_1477191432/frozen.json deleted file mode 100644 index 098dba628d46..000000000000 --- a/cassettes/v2/Datasets_304632144/Delete-a-dataset-returns-Not-Found-response_1477191432/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2025-07-29T20:35:58.996Z" diff --git a/cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-Bad-Request-response_4202968422/frozen.json b/cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-Bad-Request-response_4202968422/frozen.json deleted file mode 100644 index 8b9044fc0384..000000000000 --- a/cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-Bad-Request-response_4202968422/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2025-07-29T20:35:59.180Z" diff --git a/cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-OK-response_1996941164/frozen.json b/cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-OK-response_1996941164/frozen.json deleted file mode 100644 index b508eb93c6ed..000000000000 --- a/cassettes/v2/Datasets_304632144/Edit-a-dataset-returns-OK-response_1996941164/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2025-07-29T20:35:59.399Z" diff --git a/cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-Bad-Request-response_721770438/frozen.json b/cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-Bad-Request-response_721770438/frozen.json deleted file mode 100644 index 1c9b7abc9e42..000000000000 --- a/cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-Bad-Request-response_721770438/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2025-07-29T20:36:00.009Z" diff --git a/cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-OK-response_3806328524/frozen.json b/cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-OK-response_3806328524/frozen.json deleted file mode 100644 index 1ec027045845..000000000000 --- a/cassettes/v2/Datasets_304632144/Get-a-single-dataset-by-ID-returns-OK-response_3806328524/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2025-07-29T20:36:00.186Z" diff --git a/cassettes/v2/Datasets_304632144/Get-all-datasets-returns-OK-response_3243326099/frozen.json b/cassettes/v2/Datasets_304632144/Get-all-datasets-returns-OK-response_3243326099/frozen.json deleted file mode 100644 index a63c849bc5b0..000000000000 --- a/cassettes/v2/Datasets_304632144/Get-all-datasets-returns-OK-response_3243326099/frozen.json +++ /dev/null @@ -1 +0,0 @@ -"2025-07-29T20:36:00.713Z" diff --git a/features/v2/datasets.feature b/features/v2/data_access_controls.feature similarity index 60% rename from features/v2/datasets.feature rename to features/v2/data_access_controls.feature index 2e089dd01818..d98e2a182aa6 100644 --- a/features/v2/datasets.feature +++ b/features/v2/data_access_controls.feature @@ -1,123 +1,112 @@ -@endpoint(datasets) @endpoint(datasets-v2) -Feature: Datasets - Data Access Controls in Datadog is a feature that allows administrators - and access managers to regulate access to sensitive data. By defining - Restricted Datasets, you can ensure that only specific teams or roles can - view certain types of telemetry (for example, logs, traces, metrics, and - RUM data). +@endpoint(data-access-controls) @endpoint(data-access-controls-v2) +Feature: Data Access Controls + Manage [Data Access + Controls](https://docs.datadoghq.com/account_management/rbac/data_access/) + programmatically using Datasets. Data Access Controls in Datadog allows + administrators and access managers to regulate access to sensitive data. + By defining Restricted Datasets, you can ensure that only specific teams + or roles can view certain types of telemetry (for example, logs, traces, + metrics, and RUM data). Background: Given a valid "apiKeyAuth" key in the system And a valid "appKeyAuth" key in the system - And an instance of "Datasets" API + And an instance of "DataAccessControls" API @skip-go @skip-java @skip-python @skip-ruby @skip-rust @skip-terraform-config @skip-typescript @skip-validation @team:DataDog/aaa-granular-access - Scenario: Create a dataset returns "Bad Request" response + Scenario: Create a Data Access Control dataset returns "Bad Request" response Given new "CreateDataset" request - And operation "CreateDataset" enabled And body with value {"test": "bad_request"} When the request is sent Then the response status is 400 Bad Request @skip-terraform-config @team:DataDog/aaa-granular-access - Scenario: Create a dataset returns "Conflict" response + Scenario: Create a Data Access Control dataset returns "Conflict" response Given there is a valid "dataset" in the system - And operation "CreateDataset" enabled And new "CreateDataset" request - And body with value {"data": {"attributes": {"name": "Security Audit Dataset", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "metrics"}]}, "type": "dataset"}} + And body with value {"data": {"attributes": {"name": "Security Audit DAC", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "logs"}]}, "type": "dataset"}} When the request is sent Then the response status is 409 Conflict @skip-terraform-config @team:DataDog/aaa-granular-access - Scenario: Create a dataset returns "OK" response + Scenario: Create a Data Access Control dataset returns "OK" response Given new "CreateDataset" request - And operation "CreateDataset" enabled - And body with value {"data": {"attributes": {"name": "Security Audit Dataset", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "metrics"}]}, "type": "dataset"}} + And body with value {"data": {"attributes": {"name": "Security Audit DAC", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:ABCD"], "product": "logs"}]}, "type": "dataset"}} When the request is sent Then the response status is 200 OK @skip-terraform-config @team:DataDog/aaa-granular-access - Scenario: Delete a dataset returns "Bad Request" response + Scenario: Delete a Data Access Control dataset returns "Bad Request" response Given new "DeleteDataset" request - And operation "DeleteDataset" enabled And request contains "dataset_id" parameter with value "malformed_id" When the request is sent Then the response status is 400 Bad Request @skip-terraform-config @team:DataDog/aaa-granular-access - Scenario: Delete a dataset returns "No Content" response + Scenario: Delete a Data Access Control dataset returns "No Content" response Given there is a valid "dataset" in the system - And operation "DeleteDataset" enabled And new "DeleteDataset" request And request contains "dataset_id" parameter from "dataset.data.id" When the request is sent Then the response status is 204 No Content @skip-terraform-config @team:DataDog/aaa-granular-access - Scenario: Delete a dataset returns "Not Found" response + Scenario: Delete a Data Access Control dataset returns "Not Found" response Given new "DeleteDataset" request - And operation "DeleteDataset" enabled And request contains "dataset_id" parameter with value "00000000-0000-0000-0000-000000000000" When the request is sent Then the response status is 404 Not Found @skip-go @skip-java @skip-python @skip-ruby @skip-rust @skip-terraform-config @skip-typescript @skip-validation @team:DataDog/aaa-granular-access - Scenario: Edit a dataset returns "Bad Request" response + Scenario: Edit a Data Access Control dataset returns "Bad Request" response Given new "UpdateDataset" request - And operation "UpdateDataset" enabled And request contains "dataset_id" parameter with value "malformed_id" When the request is sent Then the response status is 400 Bad Request @skip @skip-terraform-config @team:DataDog/aaa-granular-access - Scenario: Edit a dataset returns "Not Found" response + Scenario: Edit a Data Access Control dataset returns "Not Found" response Given there is a valid "dataset" in the system - And operation "UpdateDataset" enabled And new "UpdateDataset" request And request contains "dataset_id" parameter from "dataset.data.id" - And body with value {"data": {"attributes": {"name": "Security Audit Dataset", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:1234"], "product": "metrics"}]}, "type": "dataset"}} + And body with value {"data": {"attributes": {"name": "Security Audit DAC", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:1234"], "product": "logs"}]}, "type": "dataset"}} When the request is sent Then the response status is 404 Not Found @skip-terraform-config @team:DataDog/aaa-granular-access - Scenario: Edit a dataset returns "OK" response + Scenario: Edit a Data Access Control dataset returns "OK" response Given there is a valid "dataset" in the system - And operation "UpdateDataset" enabled And new "UpdateDataset" request And request contains "dataset_id" parameter from "dataset.data.id" - And body with value {"data": {"attributes": {"name": "Security Audit Dataset", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:1234"], "product": "metrics"}]}, "type": "dataset"}} + And body with value {"data": {"attributes": {"name": "Security Audit DAC", "principals": ["role:94172442-be03-11e9-a77a-3b7612558ac1"], "product_filters": [{"filters": ["@application.id:1234"], "product": "logs"}]}, "type": "dataset"}} When the request is sent Then the response status is 200 OK @skip-terraform-config @team:DataDog/aaa-granular-access - Scenario: Get a single dataset by ID returns "Bad Request" response + Scenario: Get a Data Access Control dataset by ID returns "Bad Request" response Given new "GetDataset" request - And operation "GetDataset" enabled And request contains "dataset_id" parameter with value "malformed_id" When the request is sent Then the response status is 400 Bad Request @skip @skip-terraform-config @team:DataDog/aaa-granular-access - Scenario: Get a single dataset by ID returns "Not Found" response - Given operation "GetDataset" enabled - And new "GetDataset" request + Scenario: Get a Data Access Control dataset by ID returns "Not Found" response + Given new "GetDataset" request And request contains "dataset_id" parameter with value "00000000-0000-0000-0000-000000000000" When the request is sent Then the response status is 404 Not Found @skip-terraform-config @team:DataDog/aaa-granular-access - Scenario: Get a single dataset by ID returns "OK" response + Scenario: Get a Data Access Control dataset by ID returns "OK" response Given there is a valid "dataset" in the system - And operation "GetDataset" enabled And new "GetDataset" request And request contains "dataset_id" parameter from "dataset.data.id" When the request is sent Then the response status is 200 OK @skip-terraform-config @team:DataDog/aaa-granular-access - Scenario: Get all datasets returns "OK" response + Scenario: Get all Data Access Control datasets returns "OK" response Given there is a valid "dataset" in the system - And operation "GetAllDatasets" enabled And new "GetAllDatasets" request When the request is sent Then the response status is 200 OK diff --git a/features/v2/given.json b/features/v2/given.json index 6c42beffa17f..af604e258cde 100644 --- a/features/v2/given.json +++ b/features/v2/given.json @@ -352,12 +352,12 @@ { "name": "body", "origin": "request", - "value": "{\n \"data\": {\n \"attributes\": {\n \"name\": \"Security Audit Dataset\",\n \"principals\": [\n \"role:94172442-be03-11e9-a77a-3b7612558ac1\"\n ],\n \"product_filters\": [\n {\n \"filters\": [\n \"@application.id:ABCD\"\n ],\n \"product\": \"metrics\"\n }\n ]\n },\n \"type\": \"dataset\"\n }\n}" + "value": "{\n \"data\": {\n \"attributes\": {\n \"name\": \"Security Audit DAC\",\n \"principals\": [\n \"role:94172442-be03-11e9-a77a-3b7612558ac1\"\n ],\n \"product_filters\": [\n {\n \"filters\": [\n \"@application.id:ABCD\"\n ],\n \"product\": \"logs\"\n }\n ]\n },\n \"type\": \"dataset\"\n }\n}" } ], "step": "there is a valid \"dataset\" in the system", "key": "dataset", - "tag": "Datasets", + "tag": "Data Access Controls", "operationId": "CreateDataset" }, { diff --git a/features/v2/undo.json b/features/v2/undo.json index dcdc0219f9ca..fd5768703de8 100644 --- a/features/v2/undo.json +++ b/features/v2/undo.json @@ -1471,13 +1471,13 @@ } }, "GetAllDatasets": { - "tag": "Datasets", + "tag": "Data Access Controls", "undo": { "type": "safe" } }, "CreateDataset": { - "tag": "Datasets", + "tag": "Data Access Controls", "undo": { "operationId": "DeleteDataset", "parameters": [ @@ -1490,19 +1490,19 @@ } }, "DeleteDataset": { - "tag": "Datasets", + "tag": "Data Access Controls", "undo": { "type": "idempotent" } }, "GetDataset": { - "tag": "Datasets", + "tag": "Data Access Controls", "undo": { "type": "safe" } }, "UpdateDataset": { - "tag": "Datasets", + "tag": "Data Access Controls", "undo": { "type": "idempotent" } diff --git a/packages/datadog-api-client/README.md b/packages/datadog-api-client/README.md index b66c358ba359..9325947cfc04 100644 --- a/packages/datadog-api-client/README.md +++ b/packages/datadog-api-client/README.md @@ -379,8 +379,8 @@ apiInstance | CSM Threats | @datadog/datadog-api-client-csm-threats | [README.md](../../services/csm-threats/README.md) | | Dashboard Lists | @datadog/datadog-api-client-dashboard-lists | [README.md](../../services/dashboard-lists/README.md) | | Dashboards | @datadog/datadog-api-client-dashboards | [README.md](../../services/dashboards/README.md) | +| Data Access Controls | @datadog/datadog-api-client-data-access-controls | [README.md](../../services/data-access-controls/README.md) | | Data Deletion | @datadog/datadog-api-client-data-deletion | [README.md](../../services/data-deletion/README.md) | -| Datasets | @datadog/datadog-api-client-datasets | [README.md](../../services/datasets/README.md) | | Deployment Gates | @datadog/datadog-api-client-deployment-gates | [README.md](../../services/deployment-gates/README.md) | | Domain Allowlist | @datadog/datadog-api-client-domain-allowlist | [README.md](../../services/domain-allowlist/README.md) | | DORA Metrics | @datadog/datadog-api-client-dora-metrics | [README.md](../../services/dora-metrics/README.md) | diff --git a/private/bdd_runner/src/support/scenarios_model_mapping.ts b/private/bdd_runner/src/support/scenarios_model_mapping.ts index 5d2887effac2..b6067918a5fb 100644 --- a/private/bdd_runner/src/support/scenarios_model_mapping.ts +++ b/private/bdd_runner/src/support/scenarios_model_mapping.ts @@ -5750,24 +5750,24 @@ export const ScenariosModelMappings: { [key: string]: OperationMapping } = { }, operationResponseType: "DashboardListDeleteItemsResponse", }, - "DatasetsApi.V2.GetAllDatasets": { + "DataAccessControlsApi.V2.GetAllDatasets": { operationResponseType: "DatasetResponseMulti", }, - "DatasetsApi.V2.CreateDataset": { + "DataAccessControlsApi.V2.CreateDataset": { body: { type: "DatasetCreateRequest", format: "", }, operationResponseType: "DatasetResponseSingle", }, - "DatasetsApi.V2.GetDataset": { + "DataAccessControlsApi.V2.GetDataset": { datasetId: { type: "string", format: "", }, operationResponseType: "DatasetResponseSingle", }, - "DatasetsApi.V2.UpdateDataset": { + "DataAccessControlsApi.V2.UpdateDataset": { datasetId: { type: "string", format: "", @@ -5778,7 +5778,7 @@ export const ScenariosModelMappings: { [key: string]: OperationMapping } = { }, operationResponseType: "DatasetResponseSingle", }, - "DatasetsApi.V2.DeleteDataset": { + "DataAccessControlsApi.V2.DeleteDataset": { datasetId: { type: "string", format: "", diff --git a/services/data_access_controls/.yarnrc.yml b/services/data_access_controls/.yarnrc.yml new file mode 100644 index 000000000000..3186f3f0795a --- /dev/null +++ b/services/data_access_controls/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/services/data_access_controls/README.md b/services/data_access_controls/README.md new file mode 100644 index 000000000000..6ed19ce99d0e --- /dev/null +++ b/services/data_access_controls/README.md @@ -0,0 +1,40 @@ +# @datadog/datadog-api-client-data-access-controls + +## Description + +Manage [Data Access Controls](https://docs.datadoghq.com/account_management/rbac/data_access/) +programmatically using Datasets. + +Data Access Controls in Datadog allows administrators and access managers to regulate +access to sensitive data. By defining Restricted Datasets, you can ensure that only specific teams or roles can +view certain types of telemetry (for example, logs, traces, metrics, and RUM data). + +## Navigation + +- [Installation](#installation) +- [Getting Started](#getting-started) + +## Installation + +```sh +# NPM +npm install @datadog/datadog-api-client-data-access-controls +# Yarn +yarn add @datadog/datadog-api-client-data-access-controls +``` + +## Getting Started +```ts +import { createConfiguration } from "@datadog/datadog-api-client"; +import { DataAccessControlsApiV2 } from "@datadog/datadog-api-client-data-access-controls"; +import { v2 } from "@datadog/datadog-api-client-data-access-controls"; + +const configuration = createConfiguration(); +const apiInstance = new DataAccessControlsApiV2(configuration); + +apiInstance.getAllDatasets().then((data) => { + console.log("API called successfully. Returned data: " + JSON.stringify(data)); +}).catch((error) => { + console.error("Error calling API: " + error); +}); +``` \ No newline at end of file diff --git a/services/data_access_controls/package.json b/services/data_access_controls/package.json new file mode 100644 index 000000000000..9b5108c42066 --- /dev/null +++ b/services/data_access_controls/package.json @@ -0,0 +1,43 @@ +{ + "name": "@datadog/datadog-api-client-data-access-controls", + "description": "", + "author": "", + "keywords": [ + "api", + "fetch", + "typescript" + ], + "license": "Apache-2.0", + "licenses": [ + { + "type": "Apache-2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/DataDog/datadog-api-client-typescript.git", + "directory": "services/data-access-controls" + }, + "files": [ + "dist/**/*" + ], + "main": "./dist/index.js", + "typings": "./dist/index.d.ts", + "scripts": { + "prepack": "yarn workspace @datadog/datadog-api-client build && yarn build", + "build": "yarn generate-version-files && tsc", + "generate-version-files": "node -p \"'export const version = ' + JSON.stringify(require('./package.json').version)\" > src/version.ts" + }, + "dependencies": { + "@datadog/datadog-api-client": "^2.0.0-beta.2" + }, + "devDependencies": { + "typescript": "5.8.3" + }, + "engines": { + "node": ">=18.0.0" + }, + "version": "0.0.1", + "packageManager": "yarn@4.9.1" +} diff --git a/services/data_access_controls/src/index.ts b/services/data_access_controls/src/index.ts new file mode 100644 index 000000000000..89c644d1d795 --- /dev/null +++ b/services/data_access_controls/src/index.ts @@ -0,0 +1,3 @@ +export * as v2 from "./v2"; + +export { DataAccessControlsApi as DataAccessControlsApiV2 } from "./v2/DataAccessControlsApi"; diff --git a/services/data_access_controls/src/v2/DataAccessControlsApi.ts b/services/data_access_controls/src/v2/DataAccessControlsApi.ts new file mode 100644 index 000000000000..335c3e5d0ef1 --- /dev/null +++ b/services/data_access_controls/src/v2/DataAccessControlsApi.ts @@ -0,0 +1,726 @@ +import { + ApiException, + BaseAPIRequestFactory, + BaseServerConfiguration, + buildUserAgent, + Configuration, + createConfiguration, + deserialize, + getPreferredMediaType, + HttpMethod, + isBrowser, + logger, + normalizeMediaType, + parse, + RequiredError, + RequestContext, + ResponseContext, + serialize, + ServerConfiguration, + stringify, + applySecurityAuthentication, +} from "@datadog/datadog-api-client"; + +import { TypingInfo } from "./models/TypingInfo"; +import { APIErrorResponse } from "./models/APIErrorResponse"; +import { DatasetCreateRequest } from "./models/DatasetCreateRequest"; +import { DatasetResponseMulti } from "./models/DatasetResponseMulti"; +import { DatasetResponseSingle } from "./models/DatasetResponseSingle"; +import { DatasetUpdateRequest } from "./models/DatasetUpdateRequest"; +import { version } from "../version"; + +export class DataAccessControlsApiRequestFactory extends BaseAPIRequestFactory { + public userAgent: string | undefined; + + public constructor(configuration: Configuration) { + super(configuration); + if (!isBrowser) { + this.userAgent = buildUserAgent("data-access-controls", version); + } + } + public async createDataset( + body: DatasetCreateRequest, + _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", "createDataset"); + } + + // Path Params + const localVarPath = "/api/v2/datasets"; + + // Make Request Context + const { server, overrides } = _config.getServerAndOverrides( + "DataAccessControlsApi.v2.createDataset", + DataAccessControlsApi.operationServers, + ); + const requestContext = server.makeRequestContext( + localVarPath, + HttpMethod.POST, + 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, "DatasetCreateRequest", ""), + contentType, + ); + requestContext.setBody(serializedBody); + + // Apply auth methods + applySecurityAuthentication(_config, requestContext, [ + "apiKeyAuth", + "appKeyAuth", + "AuthZ", + ]); + + return requestContext; + } + + public async deleteDataset( + datasetId: string, + _options?: Configuration, + ): Promise { + const _config = _options || this.configuration; + + // verify required parameter 'datasetId' is not null or undefined + if (datasetId === null || datasetId === undefined) { + throw new RequiredError("datasetId", "deleteDataset"); + } + + // Path Params + const localVarPath = "/api/v2/datasets/{dataset_id}".replace( + "{dataset_id}", + encodeURIComponent(String(datasetId)), + ); + + // Make Request Context + const { server, overrides } = _config.getServerAndOverrides( + "DataAccessControlsApi.v2.deleteDataset", + DataAccessControlsApi.operationServers, + ); + const requestContext = server.makeRequestContext( + localVarPath, + HttpMethod.DELETE, + overrides, + ); + requestContext.setHeaderParam("Accept", "*/*"); + requestContext.setHttpConfig(_config.httpConfig); + + // Set User-Agent + if (this.userAgent) { + requestContext.setHeaderParam("User-Agent", this.userAgent); + } + + // Apply auth methods + applySecurityAuthentication(_config, requestContext, [ + "apiKeyAuth", + "appKeyAuth", + "AuthZ", + ]); + + return requestContext; + } + + public async getAllDatasets( + _options?: Configuration, + ): Promise { + const _config = _options || this.configuration; + + // Path Params + const localVarPath = "/api/v2/datasets"; + + // Make Request Context + const { server, overrides } = _config.getServerAndOverrides( + "DataAccessControlsApi.v2.getAllDatasets", + DataAccessControlsApi.operationServers, + ); + const requestContext = server.makeRequestContext( + localVarPath, + HttpMethod.GET, + overrides, + ); + requestContext.setHeaderParam("Accept", "application/json"); + requestContext.setHttpConfig(_config.httpConfig); + + // Set User-Agent + if (this.userAgent) { + requestContext.setHeaderParam("User-Agent", this.userAgent); + } + + // Apply auth methods + applySecurityAuthentication(_config, requestContext, [ + "apiKeyAuth", + "appKeyAuth", + "AuthZ", + ]); + + return requestContext; + } + + public async getDataset( + datasetId: string, + _options?: Configuration, + ): Promise { + const _config = _options || this.configuration; + + // verify required parameter 'datasetId' is not null or undefined + if (datasetId === null || datasetId === undefined) { + throw new RequiredError("datasetId", "getDataset"); + } + + // Path Params + const localVarPath = "/api/v2/datasets/{dataset_id}".replace( + "{dataset_id}", + encodeURIComponent(String(datasetId)), + ); + + // Make Request Context + const { server, overrides } = _config.getServerAndOverrides( + "DataAccessControlsApi.v2.getDataset", + DataAccessControlsApi.operationServers, + ); + const requestContext = server.makeRequestContext( + localVarPath, + HttpMethod.GET, + overrides, + ); + requestContext.setHeaderParam("Accept", "application/json"); + requestContext.setHttpConfig(_config.httpConfig); + + // Set User-Agent + if (this.userAgent) { + requestContext.setHeaderParam("User-Agent", this.userAgent); + } + + // Apply auth methods + applySecurityAuthentication(_config, requestContext, [ + "apiKeyAuth", + "appKeyAuth", + "AuthZ", + ]); + + return requestContext; + } + + public async updateDataset( + datasetId: string, + body: DatasetUpdateRequest, + _options?: Configuration, + ): Promise { + const _config = _options || this.configuration; + + // verify required parameter 'datasetId' is not null or undefined + if (datasetId === null || datasetId === undefined) { + throw new RequiredError("datasetId", "updateDataset"); + } + + // verify required parameter 'body' is not null or undefined + if (body === null || body === undefined) { + throw new RequiredError("body", "updateDataset"); + } + + // Path Params + const localVarPath = "/api/v2/datasets/{dataset_id}".replace( + "{dataset_id}", + encodeURIComponent(String(datasetId)), + ); + + // Make Request Context + const { server, overrides } = _config.getServerAndOverrides( + "DataAccessControlsApi.v2.updateDataset", + DataAccessControlsApi.operationServers, + ); + const requestContext = server.makeRequestContext( + localVarPath, + HttpMethod.PUT, + 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, "DatasetUpdateRequest", ""), + contentType, + ); + requestContext.setBody(serializedBody); + + // Apply auth methods + applySecurityAuthentication(_config, requestContext, [ + "apiKeyAuth", + "appKeyAuth", + "AuthZ", + ]); + + return requestContext; + } +} + +export class DataAccessControlsApiResponseProcessor { + /** + * 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 createDataset + * @throws ApiException if the response code was not in [200, 299] + */ + public async createDataset( + response: ResponseContext, + ): Promise { + const contentType = normalizeMediaType(response.headers["content-type"]); + if (response.httpStatusCode === 200) { + const body: DatasetResponseSingle = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "DatasetResponseSingle", + ) as DatasetResponseSingle; + return body; + } + if ( + response.httpStatusCode === 400 || + response.httpStatusCode === 403 || + response.httpStatusCode === 409 || + 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: DatasetResponseSingle = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "DatasetResponseSingle", + "", + ) as DatasetResponseSingle; + 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 deleteDataset + * @throws ApiException if the response code was not in [200, 299] + */ + public async deleteDataset(response: ResponseContext): Promise { + const contentType = normalizeMediaType(response.headers["content-type"]); + if (response.httpStatusCode === 204) { + return; + } + if ( + response.httpStatusCode === 400 || + response.httpStatusCode === 403 || + response.httpStatusCode === 404 || + 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) { + return; + } + + 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 getAllDatasets + * @throws ApiException if the response code was not in [200, 299] + */ + public async getAllDatasets( + response: ResponseContext, + ): Promise { + const contentType = normalizeMediaType(response.headers["content-type"]); + if (response.httpStatusCode === 200) { + const body: DatasetResponseMulti = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "DatasetResponseMulti", + ) as DatasetResponseMulti; + return body; + } + if (response.httpStatusCode === 403 || 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: DatasetResponseMulti = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "DatasetResponseMulti", + "", + ) as DatasetResponseMulti; + 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 getDataset + * @throws ApiException if the response code was not in [200, 299] + */ + public async getDataset( + response: ResponseContext, + ): Promise { + const contentType = normalizeMediaType(response.headers["content-type"]); + if (response.httpStatusCode === 200) { + const body: DatasetResponseSingle = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "DatasetResponseSingle", + ) as DatasetResponseSingle; + return body; + } + if ( + response.httpStatusCode === 400 || + response.httpStatusCode === 403 || + response.httpStatusCode === 404 || + 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: DatasetResponseSingle = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "DatasetResponseSingle", + "", + ) as DatasetResponseSingle; + 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 updateDataset + * @throws ApiException if the response code was not in [200, 299] + */ + public async updateDataset( + response: ResponseContext, + ): Promise { + const contentType = normalizeMediaType(response.headers["content-type"]); + if (response.httpStatusCode === 200) { + const body: DatasetResponseSingle = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "DatasetResponseSingle", + ) as DatasetResponseSingle; + return body; + } + if ( + response.httpStatusCode === 400 || + response.httpStatusCode === 403 || + response.httpStatusCode === 404 || + 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: DatasetResponseSingle = deserialize( + parse(await response.body.text(), contentType), + TypingInfo, + "DatasetResponseSingle", + "", + ) as DatasetResponseSingle; + return body; + } + + const body = (await response.body.text()) || ""; + throw new ApiException( + response.httpStatusCode, + 'Unknown API Status Code!\nBody: "' + body + '"', + ); + } +} + +export interface DataAccessControlsApiCreateDatasetRequest { + /** + * Dataset payload + * @type DatasetCreateRequest + */ + body: DatasetCreateRequest; +} + +export interface DataAccessControlsApiDeleteDatasetRequest { + /** + * The ID of a defined dataset. + * @type string + */ + datasetId: string; +} + +export interface DataAccessControlsApiGetDatasetRequest { + /** + * The ID of a defined dataset. + * @type string + */ + datasetId: string; +} + +export interface DataAccessControlsApiUpdateDatasetRequest { + /** + * The ID of a defined dataset. + * @type string + */ + datasetId: string; + /** + * Dataset payload + * @type DatasetUpdateRequest + */ + body: DatasetUpdateRequest; +} + +export class DataAccessControlsApi { + private requestFactory: DataAccessControlsApiRequestFactory; + private responseProcessor: DataAccessControlsApiResponseProcessor; + private configuration: Configuration; + + static operationServers: { [key: string]: BaseServerConfiguration[] } = {}; + + public constructor( + configuration?: Configuration, + requestFactory?: DataAccessControlsApiRequestFactory, + responseProcessor?: DataAccessControlsApiResponseProcessor, + ) { + this.configuration = configuration || createConfiguration(); + this.requestFactory = + requestFactory || + new DataAccessControlsApiRequestFactory(this.configuration); + this.responseProcessor = + responseProcessor || new DataAccessControlsApiResponseProcessor(); + } + + /** + * Create a dataset with the configurations in the request. + * @param param The request object + */ + public createDataset( + param: DataAccessControlsApiCreateDatasetRequest, + options?: Configuration, + ): Promise { + const requestContextPromise = this.requestFactory.createDataset( + param.body, + options, + ); + return requestContextPromise.then((requestContext) => { + return this.configuration.httpApi + .send(requestContext) + .then((responseContext) => { + return this.responseProcessor.createDataset(responseContext); + }); + }); + } + + /** + * Deletes the dataset associated with the ID. + * @param param The request object + */ + public deleteDataset( + param: DataAccessControlsApiDeleteDatasetRequest, + options?: Configuration, + ): Promise { + const requestContextPromise = this.requestFactory.deleteDataset( + param.datasetId, + options, + ); + return requestContextPromise.then((requestContext) => { + return this.configuration.httpApi + .send(requestContext) + .then((responseContext) => { + return this.responseProcessor.deleteDataset(responseContext); + }); + }); + } + + /** + * Get all datasets that have been configured for an organization. + * @param param The request object + */ + public getAllDatasets( + options?: Configuration, + ): Promise { + const requestContextPromise = this.requestFactory.getAllDatasets(options); + return requestContextPromise.then((requestContext) => { + return this.configuration.httpApi + .send(requestContext) + .then((responseContext) => { + return this.responseProcessor.getAllDatasets(responseContext); + }); + }); + } + + /** + * Retrieves the dataset associated with the ID. + * @param param The request object + */ + public getDataset( + param: DataAccessControlsApiGetDatasetRequest, + options?: Configuration, + ): Promise { + const requestContextPromise = this.requestFactory.getDataset( + param.datasetId, + options, + ); + return requestContextPromise.then((requestContext) => { + return this.configuration.httpApi + .send(requestContext) + .then((responseContext) => { + return this.responseProcessor.getDataset(responseContext); + }); + }); + } + + /** + * Edits the dataset associated with the ID. + * @param param The request object + */ + public updateDataset( + param: DataAccessControlsApiUpdateDatasetRequest, + options?: Configuration, + ): Promise { + const requestContextPromise = this.requestFactory.updateDataset( + param.datasetId, + param.body, + options, + ); + return requestContextPromise.then((requestContext) => { + return this.configuration.httpApi + .send(requestContext) + .then((responseContext) => { + return this.responseProcessor.updateDataset(responseContext); + }); + }); + } +} diff --git a/services/data_access_controls/src/v2/index.ts b/services/data_access_controls/src/v2/index.ts new file mode 100644 index 000000000000..f5910ccd4ec2 --- /dev/null +++ b/services/data_access_controls/src/v2/index.ts @@ -0,0 +1,19 @@ +export { + DataAccessControlsApiCreateDatasetRequest, + DataAccessControlsApiDeleteDatasetRequest, + DataAccessControlsApiGetDatasetRequest, + DataAccessControlsApiUpdateDatasetRequest, + DataAccessControlsApi, +} from "./DataAccessControlsApi"; + +export { APIErrorResponse } from "./models/APIErrorResponse"; +export { DatasetAttributesRequest } from "./models/DatasetAttributesRequest"; +export { DatasetAttributesResponse } from "./models/DatasetAttributesResponse"; +export { DatasetCreateRequest } from "./models/DatasetCreateRequest"; +export { DatasetRequest } from "./models/DatasetRequest"; +export { DatasetResponse } from "./models/DatasetResponse"; +export { DatasetResponseMulti } from "./models/DatasetResponseMulti"; +export { DatasetResponseSingle } from "./models/DatasetResponseSingle"; +export { DatasetType } from "./models/DatasetType"; +export { DatasetUpdateRequest } from "./models/DatasetUpdateRequest"; +export { FiltersPerProduct } from "./models/FiltersPerProduct"; diff --git a/services/data_access_controls/src/v2/models/APIErrorResponse.ts b/services/data_access_controls/src/v2/models/APIErrorResponse.ts new file mode 100644 index 000000000000..58d6c35b80f0 --- /dev/null +++ b/services/data_access_controls/src/v2/models/APIErrorResponse.ts @@ -0,0 +1,45 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +/** + * API error response. + */ +export class APIErrorResponse { + /** + * A list of errors. + */ + "errors": 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 = { + errors: { + baseName: "errors", + type: "Array", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return APIErrorResponse.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/data_access_controls/src/v2/models/DatasetAttributesRequest.ts b/services/data_access_controls/src/v2/models/DatasetAttributesRequest.ts new file mode 100644 index 000000000000..f55380875b3f --- /dev/null +++ b/services/data_access_controls/src/v2/models/DatasetAttributesRequest.ts @@ -0,0 +1,65 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { FiltersPerProduct } from "./FiltersPerProduct"; + +/** + * Dataset metadata and configurations. + */ +export class DatasetAttributesRequest { + /** + * Name of the dataset. + */ + "name": string; + /** + * List of access principals, formatted as `principal_type:id`. Principal can be 'team' or 'role'. + */ + "principals": Array; + /** + * List of product-specific filters. + */ + "productFilters": 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 = { + name: { + baseName: "name", + type: "string", + required: true, + }, + principals: { + baseName: "principals", + type: "Array", + required: true, + }, + productFilters: { + baseName: "product_filters", + type: "Array", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return DatasetAttributesRequest.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/data_access_controls/src/v2/models/DatasetAttributesResponse.ts b/services/data_access_controls/src/v2/models/DatasetAttributesResponse.ts new file mode 100644 index 000000000000..7eb380f5a9cd --- /dev/null +++ b/services/data_access_controls/src/v2/models/DatasetAttributesResponse.ts @@ -0,0 +1,80 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { FiltersPerProduct } from "./FiltersPerProduct"; + +/** + * Dataset metadata and configuration(s). + */ +export class DatasetAttributesResponse { + /** + * Timestamp when the dataset was created. + */ + "createdAt"?: Date; + /** + * Unique ID of the user who created the dataset. + */ + "createdBy"?: string; + /** + * Name of the dataset. + */ + "name"?: string; + /** + * List of access principals, formatted as `principal_type:id`. Principal can be 'team' or 'role'. + */ + "principals"?: Array; + /** + * List of product-specific filters. + */ + "productFilters"?: 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 = { + createdAt: { + baseName: "created_at", + type: "Date", + format: "date-time", + }, + createdBy: { + baseName: "created_by", + type: "string", + format: "uuid", + }, + name: { + baseName: "name", + type: "string", + }, + principals: { + baseName: "principals", + type: "Array", + }, + productFilters: { + baseName: "product_filters", + type: "Array", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return DatasetAttributesResponse.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/data_access_controls/src/v2/models/DatasetCreateRequest.ts b/services/data_access_controls/src/v2/models/DatasetCreateRequest.ts new file mode 100644 index 000000000000..ed6d2567e9d2 --- /dev/null +++ b/services/data_access_controls/src/v2/models/DatasetCreateRequest.ts @@ -0,0 +1,57 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { DatasetRequest } from "./DatasetRequest"; + +/** + * Create request for a dataset. + */ +export class DatasetCreateRequest { + /** + * **Datasets Object Constraints** + * - **Tag limit per dataset**: + * - Each restricted dataset supports a maximum of 10 key:value pairs per product. + * + * - **Tag key rules per telemetry type**: + * - Only one tag key or attribute may be used to define access within a single telemetry type. + * - The same or different tag key may be used across different telemetry types. + * + * - **Tag value uniqueness**: + * - Tag values must be unique within a single dataset. + * - A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. + */ + "data": DatasetRequest; + /** + * 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: "DatasetRequest", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return DatasetCreateRequest.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/data_access_controls/src/v2/models/DatasetRequest.ts b/services/data_access_controls/src/v2/models/DatasetRequest.ts new file mode 100644 index 000000000000..8708a476384d --- /dev/null +++ b/services/data_access_controls/src/v2/models/DatasetRequest.ts @@ -0,0 +1,67 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { DatasetAttributesRequest } from "./DatasetAttributesRequest"; +import { DatasetType } from "./DatasetType"; + +/** + * **Datasets Object Constraints** + * - **Tag limit per dataset**: + * - Each restricted dataset supports a maximum of 10 key:value pairs per product. + * + * - **Tag key rules per telemetry type**: + * - Only one tag key or attribute may be used to define access within a single telemetry type. + * - The same or different tag key may be used across different telemetry types. + * + * - **Tag value uniqueness**: + * - Tag values must be unique within a single dataset. + * - A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. + */ +export class DatasetRequest { + /** + * Dataset metadata and configurations. + */ + "attributes": DatasetAttributesRequest; + /** + * Resource type, always set to `dataset`. + */ + "type": DatasetType; + /** + * 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: "DatasetAttributesRequest", + required: true, + }, + type: { + baseName: "type", + type: "DatasetType", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return DatasetRequest.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/data_access_controls/src/v2/models/DatasetResponse.ts b/services/data_access_controls/src/v2/models/DatasetResponse.ts new file mode 100644 index 000000000000..35f0884826a3 --- /dev/null +++ b/services/data_access_controls/src/v2/models/DatasetResponse.ts @@ -0,0 +1,73 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { DatasetAttributesResponse } from "./DatasetAttributesResponse"; +import { DatasetType } from "./DatasetType"; + +/** + * **Datasets Object Constraints** + * - **Tag Limit per Dataset**: + * - Each restricted dataset supports a maximum of 10 key:value pairs per product. + * + * - **Tag Key Rules per Telemetry Type**: + * - Only one tag key or attribute may be used to define access within a single telemetry type. + * - The same or different tag key may be used across different telemetry types. + * + * - **Tag Value Uniqueness**: + * - Tag values must be unique within a single dataset. + * - A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. + */ +export class DatasetResponse { + /** + * Dataset metadata and configuration(s). + */ + "attributes"?: DatasetAttributesResponse; + /** + * Unique identifier for the dataset. + */ + "id"?: string; + /** + * Resource type, always set to `dataset`. + */ + "type"?: DatasetType; + /** + * 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: "DatasetAttributesResponse", + }, + id: { + baseName: "id", + type: "string", + }, + type: { + baseName: "type", + type: "DatasetType", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return DatasetResponse.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/data_access_controls/src/v2/models/DatasetResponseMulti.ts b/services/data_access_controls/src/v2/models/DatasetResponseMulti.ts new file mode 100644 index 000000000000..908663aa565d --- /dev/null +++ b/services/data_access_controls/src/v2/models/DatasetResponseMulti.ts @@ -0,0 +1,46 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { DatasetResponse } from "./DatasetResponse"; + +/** + * Response containing a list of datasets. + */ +export class DatasetResponseMulti { + /** + * The list of datasets returned in response. + */ + "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", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return DatasetResponseMulti.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/data_access_controls/src/v2/models/DatasetResponseSingle.ts b/services/data_access_controls/src/v2/models/DatasetResponseSingle.ts new file mode 100644 index 000000000000..316a8d7812f2 --- /dev/null +++ b/services/data_access_controls/src/v2/models/DatasetResponseSingle.ts @@ -0,0 +1,56 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { DatasetResponse } from "./DatasetResponse"; + +/** + * Response containing a single dataset object. + */ +export class DatasetResponseSingle { + /** + * **Datasets Object Constraints** + * - **Tag Limit per Dataset**: + * - Each restricted dataset supports a maximum of 10 key:value pairs per product. + * + * - **Tag Key Rules per Telemetry Type**: + * - Only one tag key or attribute may be used to define access within a single telemetry type. + * - The same or different tag key may be used across different telemetry types. + * + * - **Tag Value Uniqueness**: + * - Tag values must be unique within a single dataset. + * - A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. + */ + "data"?: DatasetResponse; + /** + * 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: "DatasetResponse", + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return DatasetResponseSingle.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/data_access_controls/src/v2/models/DatasetType.ts b/services/data_access_controls/src/v2/models/DatasetType.ts new file mode 100644 index 000000000000..adc0f7bcbfd7 --- /dev/null +++ b/services/data_access_controls/src/v2/models/DatasetType.ts @@ -0,0 +1,7 @@ +import { UnparsedObject } from "@datadog/datadog-api-client"; + +/** + * Resource type, always set to `dataset`. + */ +export type DatasetType = typeof DATASET | UnparsedObject; +export const DATASET = "dataset"; diff --git a/services/data_access_controls/src/v2/models/DatasetUpdateRequest.ts b/services/data_access_controls/src/v2/models/DatasetUpdateRequest.ts new file mode 100644 index 000000000000..157d304abac4 --- /dev/null +++ b/services/data_access_controls/src/v2/models/DatasetUpdateRequest.ts @@ -0,0 +1,57 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +import { DatasetRequest } from "./DatasetRequest"; + +/** + * Edit request for a dataset. + */ +export class DatasetUpdateRequest { + /** + * **Datasets Object Constraints** + * - **Tag limit per dataset**: + * - Each restricted dataset supports a maximum of 10 key:value pairs per product. + * + * - **Tag key rules per telemetry type**: + * - Only one tag key or attribute may be used to define access within a single telemetry type. + * - The same or different tag key may be used across different telemetry types. + * + * - **Tag value uniqueness**: + * - Tag values must be unique within a single dataset. + * - A tag value used in one dataset cannot be reused in another dataset of the same telemetry type. + */ + "data": DatasetRequest; + /** + * 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: "DatasetRequest", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return DatasetUpdateRequest.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/data_access_controls/src/v2/models/FiltersPerProduct.ts b/services/data_access_controls/src/v2/models/FiltersPerProduct.ts new file mode 100644 index 000000000000..3856a6814737 --- /dev/null +++ b/services/data_access_controls/src/v2/models/FiltersPerProduct.ts @@ -0,0 +1,58 @@ +import { AttributeTypeMap } from "@datadog/datadog-api-client"; + +/** + * Product-specific filters for the dataset. + */ +export class FiltersPerProduct { + /** + * Defines the list of tag-based filters used to restrict access to telemetry data for a specific product. + * These filters act as access control rules. Each filter must follow the tag query syntax used by + * Datadog (such as `@tag.key:value`), and only one tag or attribute may be used to define the access strategy + * per telemetry type. + */ + "filters": Array; + /** + * Name of the product the dataset is for. Possible values are 'apm', 'rum', + * 'metrics', 'logs', 'error_tracking', 'cloud_cost', and 'sd_repoinfo'. + */ + "product": 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 = { + filters: { + baseName: "filters", + type: "Array", + required: true, + }, + product: { + baseName: "product", + type: "string", + required: true, + }, + additionalProperties: { + baseName: "additionalProperties", + type: "{ [key: string]: any; }", + }, + }; + + /** + * @ignore + */ + static getAttributeTypeMap(): AttributeTypeMap { + return FiltersPerProduct.attributeTypeMap; + } + + public constructor() {} +} diff --git a/services/data_access_controls/src/v2/models/TypingInfo.ts b/services/data_access_controls/src/v2/models/TypingInfo.ts new file mode 100644 index 000000000000..5f7184fbd922 --- /dev/null +++ b/services/data_access_controls/src/v2/models/TypingInfo.ts @@ -0,0 +1,31 @@ +import { ModelTypingInfo } from "@datadog/datadog-api-client"; + +import { APIErrorResponse } from "./APIErrorResponse"; +import { DatasetAttributesRequest } from "./DatasetAttributesRequest"; +import { DatasetAttributesResponse } from "./DatasetAttributesResponse"; +import { DatasetCreateRequest } from "./DatasetCreateRequest"; +import { DatasetRequest } from "./DatasetRequest"; +import { DatasetResponse } from "./DatasetResponse"; +import { DatasetResponseMulti } from "./DatasetResponseMulti"; +import { DatasetResponseSingle } from "./DatasetResponseSingle"; +import { DatasetUpdateRequest } from "./DatasetUpdateRequest"; +import { FiltersPerProduct } from "./FiltersPerProduct"; + +export const TypingInfo: ModelTypingInfo = { + enumsMap: { + DatasetType: ["dataset"], + }, + oneOfMap: {}, + typeMap: { + APIErrorResponse: APIErrorResponse, + DatasetAttributesRequest: DatasetAttributesRequest, + DatasetAttributesResponse: DatasetAttributesResponse, + DatasetCreateRequest: DatasetCreateRequest, + DatasetRequest: DatasetRequest, + DatasetResponse: DatasetResponse, + DatasetResponseMulti: DatasetResponseMulti, + DatasetResponseSingle: DatasetResponseSingle, + DatasetUpdateRequest: DatasetUpdateRequest, + FiltersPerProduct: FiltersPerProduct, + }, +}; diff --git a/services/data_access_controls/tsconfig.json b/services/data_access_controls/tsconfig.json new file mode 100644 index 000000000000..d6c32bfb893c --- /dev/null +++ b/services/data_access_controls/tsconfig.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "strict": true, + /* Basic Options */ + "target": "es6", + "module": "commonjs", + "moduleResolution": "node", + "declaration": true, + + "esModuleInterop": true, + "resolveJsonModule": true, + + "noImplicitAny": true, + "noImplicitThis": true, + + /* Additional Checks */ + "noUnusedLocals": false /* Report errors on unused locals. */, // TODO: reenable (unused imports!) + "noUnusedParameters": false /* Report errors on unused parameters. */, // TODO: set to true again + "noImplicitReturns": true /* Report error when not all code paths in function return a value. */, + "noFallthroughCasesInSwitch": true /* Report errors for fallthrough cases in switch statement. */, + + "sourceMap": true, + "outDir": "./dist", + "lib": ["es6", "es7"] + }, + "exclude": ["dist", "node_modules", "tests"], + "include": ["src"] +} diff --git a/yarn.lock b/yarn.lock index 6baa68579bd7..11429f1f251c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -550,6 +550,15 @@ __metadata: languageName: unknown linkType: soft +"@datadog/datadog-api-client-data-access-controls@workspace:services/data_access_controls": + version: 0.0.0-use.local + resolution: "@datadog/datadog-api-client-data-access-controls@workspace:services/data_access_controls" + dependencies: + "@datadog/datadog-api-client": "npm:^2.0.0-beta.2" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + "@datadog/datadog-api-client-data-deletion@workspace:services/data_deletion": version: 0.0.0-use.local resolution: "@datadog/datadog-api-client-data-deletion@workspace:services/data_deletion"