Skip to content

Commit 3298aa0

Browse files
authored
Merge branch 'v2' into release/batch-1
2 parents f504111 + af79cdb commit 3298aa0

File tree

23 files changed

+180
-181
lines changed

23 files changed

+180
-181
lines changed

DEVELOPMENT.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Setup
44

5-
Developing on this project requires Node 10+, and the Yarn.
5+
Developing on this project requires Node 18+, and the Yarn.
66

77
## Testing
88

@@ -33,11 +33,11 @@ All test scenarios as automatically generated and located in `features/v*/` fold
3333

3434
### Step definitions
3535

36-
Implement new steps in `features/step_definitions/request_steps.ts`.
36+
Implement new steps in `private/bdd_runner/src/step_definitions/request_steps.ts`.
3737

3838
### Support files
3939

40-
Various support files are located in `features/support` directory:
40+
Various support files are located in `private/bdd_runner/src/support` directory:
4141

4242
- `given.ts`: implementation for `x-given` extension;
4343
- `hooks.ts`: logic for skipping tests based on tags and other `Before` and `After` hooks;

README.md

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,23 @@
1-
# Node.js Datadog API Client
1+
# Node.js Datadog API Client V2
22

33
[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
44

5-
This repository contains a Node.js API client for the [Datadog API](https://docs.datadoghq.com/api/).
5+
This repository contains the V2 rewrite of the TypeScript API client for the [Datadog API](https://docs.datadoghq.com/api/). The client is organized into logical API groups for better maintainability and usability.
66

77
## How to install
88

9-
The package is under [@datadog/datadog-api-client](https://www.npmjs.com/package/@datadog/datadog-api-client) and can be installed through NPM or Yarn:
10-
11-
```sh
12-
# NPM
13-
npm install @datadog/datadog-api-client
14-
15-
# Yarn
16-
yarn add @datadog/datadog-api-client
17-
```
9+
For detailed installation instructions, please refer to the README.md file in each client's directory under `services/{client}/`.
1810

1911
## Getting Started
2012

2113
Here's an example getting a monitor:
2214

2315
```typescript
24-
import { client, v1 } from '@datadog/datadog-api-client';
16+
import { v1 } from '@datadog/datadog-api-client-monitors';
2517

26-
const configuration = client.createConfiguration();
27-
const apiInstance = new v1.MonitorsApi(configuration);
18+
const apiInstance = new v1.MonitorsApiV1();
2819

29-
let params:v1.MonitorsApiGetMonitorRequest = {
20+
let params: v1.MonitorsApiGetMonitorRequest = {
3021
// number | The ID of the monitor
3122
monitorId: 1,
3223
};
@@ -43,7 +34,8 @@ By default the library will use the `DD_API_KEY` and `DD_APP_KEY` environment va
4334
To provide your own set of credentials, you need to set the appropriate keys on the configuration:
4435

4536
```typescript
46-
import { client } from '@datadog/datadog-api-client';
37+
import { createConfiguration } from '@datadog/datadog-api-client';
38+
import { v1 } from '@datadog/datadog-api-client-monitors';
4739

4840
const configurationOpts = {
4941
authMethods: {
@@ -52,7 +44,8 @@ const configurationOpts = {
5244
},
5345
};
5446

55-
const configuration = client.createConfiguration(configurationOpts);
47+
const configuration = createConfiguration(configurationOpts);
48+
const apiInstance = new v1.MonitorsApiV1(configuration);
5649
```
5750

5851
### Unstable Endpoints
@@ -70,9 +63,9 @@ where `<operationName>` is the name of the method used to interact with that end
7063
When talking to a different server, like the `eu` instance, change the server variables:
7164

7265
```typescript
73-
import { client } from '@datadog/datadog-api-client';
66+
import { createConfiguration } from '@datadog/datadog-api-client';
7467

75-
const configuration = client.createConfiguration();
68+
const configuration = createConfiguration();
7669

7770
configuration.setServerVariables({
7871
site: "datadoghq.eu"
@@ -85,40 +78,40 @@ If you want to disable GZIP compressed responses, set the `compress` flag
8578
on your configuration options:
8679

8780
```typescript
88-
import { client } from '@datadog/datadog-api-client';
81+
import { createConfiguration } from '@datadog/datadog-api-client';
8982
const configurationOpts = {
9083
httpConfig: {
9184
compress: false
9285
},
9386
};
9487

95-
const configuration = client.createConfiguration(configurationOpts);
88+
const configuration = createConfiguration(configurationOpts);
9689
```
9790

9891
### Enable requests logging
9992

10093
If you want to enable requests logging, set the `debug` flag on your configuration object:
10194

10295
```typescript
103-
import { client } from '@datadog/datadog-api-client';
96+
import { createConfiguration } from '@datadog/datadog-api-client';
10497
const configurationOpts = {
10598
debug: true
10699
};
107100

108-
const configuration = client.createConfiguration(configurationOpts);
101+
const configuration = createConfiguration(configurationOpts);
109102
```
110103

111104
### Enable retry
112105

113106
To enable the client to retry when rate limited (status 429) or status 500 and above:
114107

115108
```typescript
116-
import { client } from '@datadog/datadog-api-client';
109+
import { createConfiguration } from '@datadog/datadog-api-client';
117110
const configurationOpts = {
118111
enableRetry: true
119112
};
120113

121-
const configuration = client.createConfiguration(configurationOpts);
114+
const configuration = createConfiguration(configurationOpts);
122115
```
123116
The interval between 2 retry attempts will be the value of the x-ratelimit-reset response header when available. If not, it will be :
124117

@@ -139,7 +132,9 @@ controller, for example the one implemented by
139132
then pass the `signal method to the HTTP configuration options:
140133

141134
```typescript
142-
import { client, v1 } from '@datadog/datadog-api-client';
135+
import { createConfiguration } from '@datadog/datadog-api-client';
136+
import { v1 } from '@datadog/datadog-api-client-monitors'
137+
143138
import AbortController from 'abort-controller';
144139

145140
const controller = new AbortController();
@@ -153,7 +148,7 @@ const configurationOpts = {
153148
},
154149
};
155150

156-
const configuration = client.createConfiguration(configurationOpts);
151+
const configuration = createConfiguration(configurationOpts);
157152

158153
const apiInstance = new v1.MonitorsApi(configuration);
159154
apiInstance.listMonitors().then((data: v1.Monitor[]) => {
@@ -167,10 +162,11 @@ Several listing operations have a pagination method to help consume all the item
167162
For example, to retrieve all your incidents:
168163

169164
```typescript
170-
import { client, v2 } from "@datadog/datadog-api-client";
165+
import { createConfiguration } from "@datadog/datadog-api-client";
166+
import { v2 } from "@datadog/datadog-api-client-incidents";
171167

172168
async function main() {
173-
const configuration = client.createConfiguration();
169+
const configuration = createConfiguration();
174170
configuration.unstableOperations["v2.listIncidents"] = true;
175171
const apiInstance = new v2.IncidentsApi(configuration);
176172

@@ -191,13 +187,14 @@ For example, using `zstd.ts` package:
191187

192188
```typescript
193189
import { compressSync } from 'zstd.ts'
194-
import { client, v2 } from "@datadog/datadog-api-client";
190+
import { createConfiguration } from "@datadog/datadog-api-client";
191+
import { v2 } from "@datadog/datadog-api-client-metrics";
195192

196193
async function main() {
197194
const configurationOpts = {
198195
zstdCompressorCallback: (body: string) => compressSync({input: Buffer.from(body, "utf8")})
199196
}
200-
const configuration = client.createConfiguration(configurationOpts);
197+
const configuration = createConfiguration(configurationOpts);
201198
const apiInstance = new v2.MetricsApi(configuration);
202199
const params: v2.MetricsApiSubmitMetricsRequest = {
203200
body: {
@@ -236,14 +233,16 @@ import pako from "pako";
236233
import bufferFrom from "buffer-from";
237234
import fetch from "node-fetch";
238235
import { HttpsProxyAgent } from "https-proxy-agent";
239-
import { v1, client } from "@datadog/datadog-api-client";
236+
237+
import { createConfiguration, ResponseContext, RequestContext, HttpLibrary } from "@datadog/datadog-api-client";
238+
import { v1 } from "@datadog/datadog-api-client";
240239

241240
const proxyAgent = new HttpsProxyAgent('http://127.0.0.11:3128');
242241

243-
class HttpLibraryWithProxy implements client.HttpLibrary {
242+
class HttpLibraryWithProxy implements HttpLibrary {
244243
public debug = false;
245244

246-
public send(request: client.RequestContext): Promise<client.ResponseContext> {
245+
public send(request: RequestContext): Promise<ResponseContext> {
247246
const method = request.getHttpMethod().toString();
248247
let body = request.getBody();
249248

@@ -278,15 +277,15 @@ class HttpLibraryWithProxy implements client.HttpLibrary {
278277
text: () => resp.text(),
279278
binary: () => resp.buffer(),
280279
};
281-
const response = new client.ResponseContext(resp.status, headers, body);
280+
const response = new ResponseContext(resp.status, headers, body);
282281
return response;
283282
});
284283

285284
return resultPromise;
286285
}
287286
}
288287

289-
const configuration = client.createConfiguration({httpApi: new HttpLibraryWithProxy()});
288+
const configuration = createConfiguration({httpApi: new HttpLibraryWithProxy()});
290289
const apiInstance = new v1.DashboardsApi(configuration);
291290

292291
apiInstance
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
"2025-02-04T04:58:32.931Z"
1+
"2025-05-26T17:23:42.973Z"

cassettes/v2/Workflow-Automation_3507381207/Create-a-Workflow-returns-Bad-request-response_2263290237/recording.har

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"value": "application/json"
2727
}
2828
],
29-
"headersSize": 539,
29+
"headersSize": 558,
3030
"httpVersion": "HTTP/1.1",
3131
"method": "POST",
3232
"postData": {
@@ -38,11 +38,11 @@
3838
"url": "https://api.datadoghq.com/api/v2/workflows"
3939
},
4040
"response": {
41-
"bodySize": 85,
41+
"bodySize": 179,
4242
"content": {
4343
"mimeType": "application/vnd.api+json",
44-
"size": 85,
45-
"text": "{\"errors\":[{\"detail\":\"workflow description exceeds size limit of [300] characters\"}]}"
44+
"size": 179,
45+
"text": "{\"errors\":[{\"detail\":\"workflow description exceeds size limit of [300] characters\"},{\"detail\":\"spec is invalid\"},{\"detail\":\"no trigger found. At least one trigger is required.\"}]}"
4646
},
4747
"cookies": [],
4848
"headers": [
@@ -51,14 +51,14 @@
5151
"value": "application/vnd.api+json"
5252
}
5353
],
54-
"headersSize": 660,
54+
"headersSize": 656,
5555
"httpVersion": "HTTP/1.1",
5656
"redirectURL": "",
5757
"status": 400,
5858
"statusText": "Bad Request"
5959
},
60-
"startedDateTime": "2025-02-04T04:58:32.940Z",
61-
"time": 167
60+
"startedDateTime": "2025-05-26T17:23:42.977Z",
61+
"time": 102
6262
}
6363
],
6464
"pages": [],
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
"2025-02-04T04:58:33.114Z"
1+
"2025-05-26T17:23:43.084Z"

cassettes/v2/Workflow-Automation_3507381207/Create-a-Workflow-returns-Successfully-created-a-workflow-response_1639570320/recording.har

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
},
99
"entries": [
1010
{
11-
"_id": "4ea99b6c255c11413fea0a5165d54bd7",
11+
"_id": "fec91cc962029b2d77bb53fe2e45b9c4",
1212
"_order": 0,
1313
"cache": {},
1414
"request": {
15-
"bodySize": 981,
15+
"bodySize": 960,
1616
"cookies": [],
1717
"headers": [
1818
{
@@ -26,23 +26,23 @@
2626
"value": "application/json"
2727
}
2828
],
29-
"headersSize": 539,
29+
"headersSize": 558,
3030
"httpVersion": "HTTP/1.1",
3131
"method": "POST",
3232
"postData": {
3333
"mimeType": "application/json",
3434
"params": [],
35-
"text": "{\"data\":{\"attributes\":{\"description\":\"A sample workflow.\",\"name\":\"Example Workflow\",\"published\":true,\"spec\":{\"connectionEnvs\":[{\"connections\":[{\"connectionId\":\"11111111-1111-1111-1111-111111111111\",\"label\":\"INTEGRATION_DATADOG\"}],\"env\":\"default\"}],\"handle\":\"my-handle\",\"inputSchema\":{\"parameters\":[{\"defaultValue\":\"default\",\"name\":\"input\",\"type\":\"STRING\"}]},\"outputSchema\":{\"parameters\":[{\"name\":\"output\",\"type\":\"ARRAY_OBJECT\",\"value\":\"outputValue\"}]},\"steps\":[{\"actionId\":\"com.datadoghq.dd.monitor.listMonitors\",\"connectionLabel\":\"INTEGRATION_DATADOG\",\"name\":\"Step1\",\"outboundEdges\":[{\"branchName\":\"main\",\"nextStepName\":\"Step2\"}],\"parameters\":[{\"name\":\"tags\",\"value\":\"service:monitoring\"}]},{\"actionId\":\"com.datadoghq.core.noop\",\"name\":\"Step2\"}],\"triggers\":[{\"monitorTrigger\":{\"rateLimit\":{\"count\":1,\"interval\":\"3600s\"}},\"startStepNames\":[\"Step1\"]},{\"githubWebhookTrigger\":{},\"startStepNames\":[\"Step1\"]}]},\"tags\":[\"team:infra\",\"service:monitoring\",\"foo:bar\"]},\"type\":\"workflows\"}}"
35+
"text": "{\"data\":{\"attributes\":{\"description\":\"A sample workflow.\",\"name\":\"Example Workflow\",\"published\":true,\"spec\":{\"connectionEnvs\":[{\"connections\":[{\"connectionId\":\"11111111-1111-1111-1111-111111111111\",\"label\":\"INTEGRATION_DATADOG\"}],\"env\":\"default\"}],\"inputSchema\":{\"parameters\":[{\"defaultValue\":\"default\",\"name\":\"input\",\"type\":\"STRING\"}]},\"outputSchema\":{\"parameters\":[{\"name\":\"output\",\"type\":\"ARRAY_OBJECT\",\"value\":\"outputValue\"}]},\"steps\":[{\"actionId\":\"com.datadoghq.dd.monitor.listMonitors\",\"connectionLabel\":\"INTEGRATION_DATADOG\",\"name\":\"Step1\",\"outboundEdges\":[{\"branchName\":\"main\",\"nextStepName\":\"Step2\"}],\"parameters\":[{\"name\":\"tags\",\"value\":\"service:monitoring\"}]},{\"actionId\":\"com.datadoghq.core.noop\",\"name\":\"Step2\"}],\"triggers\":[{\"monitorTrigger\":{\"rateLimit\":{\"count\":1,\"interval\":\"3600s\"}},\"startStepNames\":[\"Step1\"]},{\"githubWebhookTrigger\":{},\"startStepNames\":[\"Step1\"]}]},\"tags\":[\"team:infra\",\"service:monitoring\",\"foo:bar\"]},\"type\":\"workflows\"}}"
3636
},
3737
"queryString": [],
3838
"url": "https://api.datadoghq.com/api/v2/workflows"
3939
},
4040
"response": {
41-
"bodySize": 1285,
41+
"bodySize": 1280,
4242
"content": {
4343
"mimeType": "application/vnd.api+json",
44-
"size": 1285,
45-
"text": "{\"data\":{\"id\":\"cb8dd95a-1463-495d-99d6-95efcd86e74e\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-02-04T04:58:33.224986Z\",\"description\":\"A sample workflow.\",\"name\":\"Example Workflow\",\"published\":true,\"spec\":{\"triggers\":[{\"startStepNames\":[\"Step1\"],\"monitorTrigger\":{\"rateLimit\":{\"count\":1,\"interval\":\"3600s\"}}},{\"startStepNames\":[\"Step1\"],\"githubWebhookTrigger\":{}}],\"steps\":[{\"name\":\"Step1\",\"actionId\":\"com.datadoghq.dd.monitor.listMonitors\",\"connectionLabel\":\"INTEGRATION_DATADOG\",\"parameters\":[{\"name\":\"tags\",\"value\":\"service:monitoring\"}],\"outboundEdges\":[{\"nextStepName\":\"Step2\",\"branchName\":\"main\"}]},{\"name\":\"Step2\",\"actionId\":\"com.datadoghq.core.noop\"}],\"handle\":\"my-handle\",\"connectionEnvs\":[{\"env\":\"default\",\"connections\":[{\"connectionId\":\"11111111-1111-1111-1111-111111111111\",\"label\":\"INTEGRATION_DATADOG\"}]}],\"inputSchema\":{\"parameters\":[{\"name\":\"input\",\"type\":\"STRING\",\"defaultValue\":\"default\"}]},\"outputSchema\":{\"parameters\":[{\"name\":\"output\",\"type\":\"ARRAY_OBJECT\",\"value\":\"outputValue\"}]}},\"tags\":[\"foo:bar\",\"team:infra\",\"service:monitoring\"],\"updatedAt\":\"2025-02-04T04:58:33.224986Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}"
44+
"size": 1280,
45+
"text": "{\"data\":{\"id\":\"c850935f-15fc-4e5b-8903-d68066c5343a\",\"type\":\"workflows\",\"attributes\":{\"createdAt\":\"2025-05-26T17:23:43.255617Z\",\"description\":\"A sample workflow.\",\"name\":\"Example Workflow\",\"published\":true,\"spec\":{\"triggers\":[{\"startStepNames\":[\"Step1\"],\"monitorTrigger\":{\"rateLimit\":{\"count\":1,\"interval\":\"3600s\"}}},{\"startStepNames\":[\"Step1\"],\"githubWebhookTrigger\":{}}],\"steps\":[{\"name\":\"Step1\",\"actionId\":\"com.datadoghq.dd.monitor.listMonitors\",\"connectionLabel\":\"INTEGRATION_DATADOG\",\"parameters\":[{\"name\":\"tags\",\"value\":\"service:monitoring\"}],\"outboundEdges\":[{\"nextStepName\":\"Step2\",\"branchName\":\"main\"}]},{\"name\":\"Step2\",\"actionId\":\"com.datadoghq.core.noop\"}],\"connectionEnvs\":[{\"env\":\"default\",\"connections\":[{\"connectionId\":\"11111111-1111-1111-1111-111111111111\",\"label\":\"INTEGRATION_DATADOG\"}]}],\"inputSchema\":{\"parameters\":[{\"name\":\"input\",\"type\":\"STRING\",\"defaultValue\":\"default\"}]},\"outputSchema\":{\"parameters\":[{\"name\":\"output\",\"type\":\"ARRAY_OBJECT\",\"value\":\"outputValue\"}]}},\"tags\":[\"foo:bar\",\"service:monitoring\",\"team:infra\"],\"updatedAt\":\"2025-05-26T17:23:43.255617Z\"},\"relationships\":{\"creator\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}},\"owner\":{\"data\":{\"id\":\"3ad549bf-eba0-11e9-a77a-0705486660d0\",\"type\":\"users\"}}}}}"
4646
},
4747
"cookies": [],
4848
"headers": [
@@ -51,17 +51,17 @@
5151
"value": "application/vnd.api+json"
5252
}
5353
],
54-
"headersSize": 662,
54+
"headersSize": 657,
5555
"httpVersion": "HTTP/1.1",
5656
"redirectURL": "",
5757
"status": 201,
5858
"statusText": "Created"
5959
},
60-
"startedDateTime": "2025-02-04T04:58:33.117Z",
61-
"time": 119
60+
"startedDateTime": "2025-05-26T17:23:43.086Z",
61+
"time": 207
6262
},
6363
{
64-
"_id": "9384953c7e69c85a3baf0296d8482df5",
64+
"_id": "453a84c4ac476fa849ae639041414e15",
6565
"_order": 0,
6666
"cache": {},
6767
"request": {
@@ -74,11 +74,11 @@
7474
"value": "*/*"
7575
}
7676
],
77-
"headersSize": 512,
77+
"headersSize": 531,
7878
"httpVersion": "HTTP/1.1",
7979
"method": "DELETE",
8080
"queryString": [],
81-
"url": "https://api.datadoghq.com/api/v2/workflows/cb8dd95a-1463-495d-99d6-95efcd86e74e"
81+
"url": "https://api.datadoghq.com/api/v2/workflows/c850935f-15fc-4e5b-8903-d68066c5343a"
8282
},
8383
"response": {
8484
"bodySize": 0,
@@ -88,14 +88,14 @@
8888
},
8989
"cookies": [],
9090
"headers": [],
91-
"headersSize": 600,
91+
"headersSize": 595,
9292
"httpVersion": "HTTP/1.1",
9393
"redirectURL": "",
9494
"status": 204,
9595
"statusText": "No Content"
9696
},
97-
"startedDateTime": "2025-02-04T04:58:33.243Z",
98-
"time": 92
97+
"startedDateTime": "2025-05-26T17:23:43.304Z",
98+
"time": 128
9999
}
100100
],
101101
"pages": [],
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
"2025-02-04T04:58:33.338Z"
1+
"2025-05-26T17:23:43.439Z"

0 commit comments

Comments
 (0)