@pipedream/postman 0.0.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/actions/create-environment/create-environment.mjs +91 -0
- package/actions/list-workspace-id-options/list-workspace-id-options.mjs +24 -0
- package/actions/run-monitor/run-monitor.mjs +32 -0
- package/actions/update-variable/update-variable.mjs +109 -0
- package/package.json +5 -5
- package/postman.app.mjs +139 -0
- package/sources/monitor-run-completed/monitor-run-completed.mjs +58 -0
- package/sources/monitor-run-completed/test-event.mjs +46 -0
package/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Overview
|
|
2
|
+
|
|
3
|
+
The Postman API enables you to automate tasks within your Postman collections, such as running collections, fetching and updating environments, and integrating your API development workflow into your CI/CD pipeline. Using Pipedream, you can harness this functionality to create custom workflows that trigger on various events, process data, and connect with other apps, extending the capabilities of your API testing and development processes.
|
|
4
|
+
|
|
5
|
+
# Example Use Cases
|
|
6
|
+
|
|
7
|
+
- **Scheduled Collection Runs**: Use Pipedream to schedule and run Postman collections at regular intervals. You can analyze the results, send alerts if a test fails, or even trigger other workflows based on those results.
|
|
8
|
+
|
|
9
|
+
- **Dynamic Environment Updates**: Automatically update Postman environment variables when changes occur in your apps. For instance, sync new user data from a CRM platform to Postman's environment, ensuring your API tests always use the latest data.
|
|
10
|
+
|
|
11
|
+
- **CI/CD Integration**: Connect your Postman tests with your CI/CD pipeline. After every code commit, use Pipedream to trigger a workflow that runs a specific Postman collection and reports the status back to your CI/CD tool, such as GitHub Actions, ensuring that only tested code gets deployed.
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import postman from "../../postman.app.mjs";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
key: "postman-create-environment",
|
|
5
|
+
name: "Create Environment",
|
|
6
|
+
description: "Creates a new environment in Postman. [See the documentation](https://learning.postman.com/docs/developer/postman-api/intro-api/)",
|
|
7
|
+
version: "0.0.2",
|
|
8
|
+
annotations: {
|
|
9
|
+
destructiveHint: false,
|
|
10
|
+
openWorldHint: true,
|
|
11
|
+
readOnlyHint: false,
|
|
12
|
+
},
|
|
13
|
+
type: "action",
|
|
14
|
+
props: {
|
|
15
|
+
postman,
|
|
16
|
+
workspaceId: {
|
|
17
|
+
propDefinition: [
|
|
18
|
+
postman,
|
|
19
|
+
"workspaceId",
|
|
20
|
+
],
|
|
21
|
+
optional: true,
|
|
22
|
+
},
|
|
23
|
+
environmentName: {
|
|
24
|
+
type: "string",
|
|
25
|
+
label: "New Environment Name",
|
|
26
|
+
description: "The name for the new environment",
|
|
27
|
+
},
|
|
28
|
+
variablesCount: {
|
|
29
|
+
type: "integer",
|
|
30
|
+
label: "Variables Quantity",
|
|
31
|
+
description: "The quantity of variables you want to create into the environment.",
|
|
32
|
+
reloadProps: true,
|
|
33
|
+
optional: true,
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
async additionalProps() {
|
|
37
|
+
const props = {};
|
|
38
|
+
if (this.variablesCount) {
|
|
39
|
+
for (var i = 1; i <= this.variablesCount; i++) {
|
|
40
|
+
props[`variableKey_${i}`] = {
|
|
41
|
+
type: "string",
|
|
42
|
+
label: `Variable Name ${i}`,
|
|
43
|
+
description: `The name for the variable ${i}`,
|
|
44
|
+
};
|
|
45
|
+
props[`variableValue_${i}`] = {
|
|
46
|
+
type: "string",
|
|
47
|
+
label: `Variable Value ${i}`,
|
|
48
|
+
description: `The value for the variable ${i}`,
|
|
49
|
+
};
|
|
50
|
+
props[`variableEnabled_${i}`] = {
|
|
51
|
+
type: "boolean",
|
|
52
|
+
label: `Variable Enabled ${i}`,
|
|
53
|
+
description: `Whether the variable ${i} is enabled or not.`,
|
|
54
|
+
};
|
|
55
|
+
props[`variableType_${i}`] = {
|
|
56
|
+
type: "string",
|
|
57
|
+
label: `Variable Type ${i}`,
|
|
58
|
+
description: `The type of the variable ${i}`,
|
|
59
|
+
options: [
|
|
60
|
+
"secret",
|
|
61
|
+
"default",
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return props;
|
|
67
|
+
},
|
|
68
|
+
async run({ $ }) {
|
|
69
|
+
const variables = [];
|
|
70
|
+
for (var i = 1; i <= this.variablesCount; i++) {
|
|
71
|
+
variables.push({
|
|
72
|
+
key: this[`variableKey_${i}`],
|
|
73
|
+
value: this[`variableValue_${i}`],
|
|
74
|
+
enabled: this[`variableEnabled_${i}`],
|
|
75
|
+
type: this[`variableType_${i}`],
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const response = await this.postman.createEnvironment({
|
|
80
|
+
$,
|
|
81
|
+
data: {
|
|
82
|
+
environment: {
|
|
83
|
+
name: this.environmentName,
|
|
84
|
+
values: variables,
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
$.export("$summary", `Successfully created a new environment with ID: ${response.environment?.id}`);
|
|
89
|
+
return response;
|
|
90
|
+
},
|
|
91
|
+
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import postman from "../../postman.app.mjs";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
key: "postman-list-workspace-id-options",
|
|
5
|
+
name: "List Workspace ID Options",
|
|
6
|
+
description: "Retrieves available options for the Workspace ID field.",
|
|
7
|
+
version: "0.0.1",
|
|
8
|
+
type: "action",
|
|
9
|
+
annotations: {
|
|
10
|
+
destructiveHint: false,
|
|
11
|
+
openWorldHint: true,
|
|
12
|
+
readOnlyHint: true,
|
|
13
|
+
},
|
|
14
|
+
props: {
|
|
15
|
+
postman,
|
|
16
|
+
},
|
|
17
|
+
async run({ $ }) {
|
|
18
|
+
const options = await postman.propDefinitions.workspaceId.options.call(this.postman);
|
|
19
|
+
$.export("$summary", `Successfully retrieved ${options.length} option${options.length === 1
|
|
20
|
+
? ""
|
|
21
|
+
: "s"}`);
|
|
22
|
+
return options;
|
|
23
|
+
},
|
|
24
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import postman from "../../postman.app.mjs";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
key: "postman-run-monitor",
|
|
5
|
+
name: "Run Monitor",
|
|
6
|
+
description: "Run a specific monitor in Postman. [See the documentation](https://learning.postman.com/docs/developer/postman-api/intro-api/)",
|
|
7
|
+
version: "0.0.2",
|
|
8
|
+
annotations: {
|
|
9
|
+
destructiveHint: false,
|
|
10
|
+
openWorldHint: true,
|
|
11
|
+
readOnlyHint: false,
|
|
12
|
+
},
|
|
13
|
+
type: "action",
|
|
14
|
+
props: {
|
|
15
|
+
postman,
|
|
16
|
+
monitorId: {
|
|
17
|
+
propDefinition: [
|
|
18
|
+
postman,
|
|
19
|
+
"monitorId",
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
async run({ $ }) {
|
|
24
|
+
const response = await this.postman.runMonitor({
|
|
25
|
+
$,
|
|
26
|
+
monitorId: this.monitorId,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
$.export("$summary", `Successfully executed monitor with ID: ${this.monitorId}`);
|
|
30
|
+
return response;
|
|
31
|
+
},
|
|
32
|
+
};
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import postman from "../../postman.app.mjs";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
key: "postman-update-variable",
|
|
5
|
+
name: "Update Environment Variable",
|
|
6
|
+
description: "Updates a specific environment variable in Postman. [See the documentation](https://learning.postman.com/docs/developer/postman-api/intro-api/)",
|
|
7
|
+
version: "0.0.2",
|
|
8
|
+
annotations: {
|
|
9
|
+
destructiveHint: true,
|
|
10
|
+
openWorldHint: true,
|
|
11
|
+
readOnlyHint: false,
|
|
12
|
+
},
|
|
13
|
+
type: "action",
|
|
14
|
+
props: {
|
|
15
|
+
postman,
|
|
16
|
+
workspaceId: {
|
|
17
|
+
propDefinition: [
|
|
18
|
+
postman,
|
|
19
|
+
"workspaceId",
|
|
20
|
+
],
|
|
21
|
+
optional: true,
|
|
22
|
+
},
|
|
23
|
+
environmentId: {
|
|
24
|
+
propDefinition: [
|
|
25
|
+
postman,
|
|
26
|
+
"environmentId",
|
|
27
|
+
({ workspaceId }) => ({
|
|
28
|
+
workspaceId,
|
|
29
|
+
}),
|
|
30
|
+
],
|
|
31
|
+
},
|
|
32
|
+
variable: {
|
|
33
|
+
propDefinition: [
|
|
34
|
+
postman,
|
|
35
|
+
"variable",
|
|
36
|
+
({ environmentId }) => ({
|
|
37
|
+
environmentId,
|
|
38
|
+
}),
|
|
39
|
+
],
|
|
40
|
+
reloadProps: true,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
async additionalProps() {
|
|
44
|
+
const props = {};
|
|
45
|
+
if (this.variable) {
|
|
46
|
+
const { environment: { values: variables } } = await this.postman.getEnvironment({
|
|
47
|
+
environmentId: this.environmentId,
|
|
48
|
+
});
|
|
49
|
+
const indexVar = variables.findIndex((variable) => variable.key === this.variable);
|
|
50
|
+
const variable = variables[indexVar];
|
|
51
|
+
|
|
52
|
+
props.variableValue = {
|
|
53
|
+
type: "string",
|
|
54
|
+
label: "Variable Value",
|
|
55
|
+
description: "The value for the variable",
|
|
56
|
+
};
|
|
57
|
+
props.variableEnabled = {
|
|
58
|
+
type: "boolean",
|
|
59
|
+
label: "Variable Enabled",
|
|
60
|
+
description: "Whether the variable is enabled or not.",
|
|
61
|
+
default: variable.enabled,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
return props;
|
|
65
|
+
},
|
|
66
|
+
async run({ $ }) {
|
|
67
|
+
const {
|
|
68
|
+
postman,
|
|
69
|
+
environmentId,
|
|
70
|
+
} = this;
|
|
71
|
+
|
|
72
|
+
const { environment } = await postman.getEnvironment({
|
|
73
|
+
$,
|
|
74
|
+
environmentId,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
const indexVar = environment.values.findIndex((variable) => variable.key === this.variable);
|
|
78
|
+
environment.values[indexVar] = {
|
|
79
|
+
...environment.values[indexVar],
|
|
80
|
+
value: this.variableValue,
|
|
81
|
+
enabled: this.variableEnabled,
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
// This step is to delete all variables and create them again.
|
|
85
|
+
// Without this step, the postman will only update the variables` initial value.
|
|
86
|
+
await postman.updateEnvironment({
|
|
87
|
+
$,
|
|
88
|
+
environmentId,
|
|
89
|
+
data: {
|
|
90
|
+
environment: {
|
|
91
|
+
values: [],
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
const response = await postman.updateEnvironment({
|
|
97
|
+
$,
|
|
98
|
+
environmentId,
|
|
99
|
+
data: {
|
|
100
|
+
environment: {
|
|
101
|
+
values: environment.values,
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
$.export("$summary", `Successfully updated the variable "${this.variable}" in environment ID ${this.environmentId}`);
|
|
107
|
+
return response;
|
|
108
|
+
},
|
|
109
|
+
};
|
package/package.json
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pipedream/postman",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Pipedream Postman Components",
|
|
5
|
-
"main": "
|
|
5
|
+
"main": "postman.app.mjs",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"pipedream",
|
|
8
8
|
"postman"
|
|
9
9
|
],
|
|
10
|
-
"files": [
|
|
11
|
-
"dist"
|
|
12
|
-
],
|
|
13
10
|
"homepage": "https://pipedream.com/apps/postman",
|
|
14
11
|
"author": "Pipedream <support@pipedream.com> (https://pipedream.com/)",
|
|
15
12
|
"publishConfig": {
|
|
16
13
|
"access": "public"
|
|
14
|
+
},
|
|
15
|
+
"dependencies": {
|
|
16
|
+
"@pipedream/platform": "^1.6.8"
|
|
17
17
|
}
|
|
18
18
|
}
|
package/postman.app.mjs
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { axios } from "@pipedream/platform";
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
type: "app",
|
|
5
|
+
app: "postman",
|
|
6
|
+
propDefinitions: {
|
|
7
|
+
environmentId: {
|
|
8
|
+
type: "string",
|
|
9
|
+
label: "Environment ID",
|
|
10
|
+
description: "The ID of the environment to be used.",
|
|
11
|
+
async options({ workspaceId }) {
|
|
12
|
+
const { environments } = await this.listEnvironments({
|
|
13
|
+
params: {
|
|
14
|
+
workspace: workspaceId,
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
return environments.map(({
|
|
18
|
+
id: value, name: label,
|
|
19
|
+
}) => ({
|
|
20
|
+
label,
|
|
21
|
+
value,
|
|
22
|
+
}));
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
monitorId: {
|
|
26
|
+
type: "string",
|
|
27
|
+
label: "Monitor ID",
|
|
28
|
+
description: "The ID of the monitor to run.",
|
|
29
|
+
async options() {
|
|
30
|
+
const { monitors } = await this.listMonitors();
|
|
31
|
+
return monitors.map(({
|
|
32
|
+
id: value, name: label,
|
|
33
|
+
}) => ({
|
|
34
|
+
label,
|
|
35
|
+
value,
|
|
36
|
+
}));
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
variable: {
|
|
40
|
+
type: "string",
|
|
41
|
+
label: "Variable",
|
|
42
|
+
description: "The varriable to be updated.",
|
|
43
|
+
async options({ environmentId }) {
|
|
44
|
+
const { environment: { values: variables } } = await this.getEnvironment({
|
|
45
|
+
environmentId,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
return variables.map(({ key }) => key);
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
workspaceId: {
|
|
52
|
+
type: "string",
|
|
53
|
+
label: "Workspace ID",
|
|
54
|
+
description: "The ID of the workspace to be used.",
|
|
55
|
+
async options() {
|
|
56
|
+
const { workspaces } = await this.listWorkspaces();
|
|
57
|
+
return workspaces.map(({
|
|
58
|
+
id: value, name: label,
|
|
59
|
+
}) => ({
|
|
60
|
+
label,
|
|
61
|
+
value,
|
|
62
|
+
}));
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
},
|
|
66
|
+
methods: {
|
|
67
|
+
_baseUrl() {
|
|
68
|
+
return "https://api.getpostman.com";
|
|
69
|
+
},
|
|
70
|
+
_headers() {
|
|
71
|
+
return {
|
|
72
|
+
"X-Api-Key": `${this.$auth.api_key}`,
|
|
73
|
+
"Accept": "application/vnd.api.v10+json",
|
|
74
|
+
};
|
|
75
|
+
},
|
|
76
|
+
_makeRequest({
|
|
77
|
+
$ = this, path, ...opts
|
|
78
|
+
}) {
|
|
79
|
+
return axios($, {
|
|
80
|
+
url: this._baseUrl() + path,
|
|
81
|
+
headers: this._headers(),
|
|
82
|
+
...opts,
|
|
83
|
+
});
|
|
84
|
+
},
|
|
85
|
+
getEnvironment({
|
|
86
|
+
environmentId, ...opts
|
|
87
|
+
}) {
|
|
88
|
+
return this._makeRequest({
|
|
89
|
+
path: `/environments/${environmentId}`,
|
|
90
|
+
...opts,
|
|
91
|
+
});
|
|
92
|
+
},
|
|
93
|
+
getMonitor({ monitorId }) {
|
|
94
|
+
return this._makeRequest({
|
|
95
|
+
path: `/monitors/${monitorId}`,
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
listEnvironments() {
|
|
99
|
+
return this._makeRequest({
|
|
100
|
+
path: "/environments",
|
|
101
|
+
});
|
|
102
|
+
},
|
|
103
|
+
listMonitors() {
|
|
104
|
+
return this._makeRequest({
|
|
105
|
+
path: "/monitors",
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
listWorkspaces() {
|
|
109
|
+
return this._makeRequest({
|
|
110
|
+
path: "/workspaces",
|
|
111
|
+
});
|
|
112
|
+
},
|
|
113
|
+
createEnvironment(opts = {}) {
|
|
114
|
+
return this._makeRequest({
|
|
115
|
+
method: "POST",
|
|
116
|
+
path: "/environments",
|
|
117
|
+
...opts,
|
|
118
|
+
});
|
|
119
|
+
},
|
|
120
|
+
updateEnvironment({
|
|
121
|
+
environmentId, ...opts
|
|
122
|
+
}) {
|
|
123
|
+
return this._makeRequest({
|
|
124
|
+
method: "PUT",
|
|
125
|
+
path: `/environments/${environmentId}`,
|
|
126
|
+
...opts,
|
|
127
|
+
});
|
|
128
|
+
},
|
|
129
|
+
runMonitor({
|
|
130
|
+
monitorId, ...opts
|
|
131
|
+
}) {
|
|
132
|
+
return this._makeRequest({
|
|
133
|
+
method: "POST",
|
|
134
|
+
path: `/monitors/${monitorId}/run`,
|
|
135
|
+
...opts,
|
|
136
|
+
});
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import postman from "../../postman.app.mjs";
|
|
2
|
+
import sampleEmit from "./test-event.mjs";
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
key: "postman-monitor-run-completed",
|
|
6
|
+
name: "New Monitor Run Completed",
|
|
7
|
+
description: "Emit new event when a monitor run is completed. [See the documentation](https://learning.postman.com/docs/monitoring-your-api/intro-monitors/)",
|
|
8
|
+
version: "0.0.1",
|
|
9
|
+
type: "source",
|
|
10
|
+
dedupe: "unique",
|
|
11
|
+
props: {
|
|
12
|
+
postman,
|
|
13
|
+
db: "$.service.db",
|
|
14
|
+
timer: {
|
|
15
|
+
type: "$.interface.timer",
|
|
16
|
+
default: {
|
|
17
|
+
intervalSeconds: 60,
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
monitorId: {
|
|
21
|
+
propDefinition: [
|
|
22
|
+
postman,
|
|
23
|
+
"monitorId",
|
|
24
|
+
],
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
methods: {
|
|
28
|
+
_getLastDate() {
|
|
29
|
+
return this.db.get("lastDate") || new Date("1970-01-01");
|
|
30
|
+
},
|
|
31
|
+
_setLastDate(lastDate) {
|
|
32
|
+
this.db.set("lastDate", lastDate);
|
|
33
|
+
},
|
|
34
|
+
async startEvent() {
|
|
35
|
+
const lastDate = this._getLastDate();
|
|
36
|
+
|
|
37
|
+
const { monitor } = await this.postman.getMonitor({
|
|
38
|
+
monitorId: this.monitorId,
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
if (monitor.lastRun?.status === "success" && new Date(monitor.lastRun.startedAt) > new Date(lastDate)) {
|
|
42
|
+
this._setLastDate(monitor.lastRun.startedAt);
|
|
43
|
+
this.emitEvent(monitor);
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
emitEvent(monitor) {
|
|
47
|
+
this.$emit(monitor, {
|
|
48
|
+
id: monitor.id + monitor.lastRun.startedAt,
|
|
49
|
+
summary: `Monitor Run Completed: ${monitor.name}`,
|
|
50
|
+
ts: Date.parse(monitor.lastRun.finishedAt),
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
async run() {
|
|
55
|
+
await this.startEvent();
|
|
56
|
+
},
|
|
57
|
+
sampleEmit,
|
|
58
|
+
};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
"id": "1e6b6cc1-c760-48e0-968f-4bfaeeae9af1",
|
|
3
|
+
"name": "Test Monitor",
|
|
4
|
+
"uid": "12345678-1e6b6cc1-c760-48e0-968f-4bfaeeae9af1",
|
|
5
|
+
"owner": 12345678,
|
|
6
|
+
"collectionUid": "12345678-12ece9e1-2abf-4edc-8e34-de66e74114d2",
|
|
7
|
+
"environmentUid": "12345678-5daabc50-8451-43f6-922d-96b403b4f28e",
|
|
8
|
+
"options": {
|
|
9
|
+
"strictSSL": true,
|
|
10
|
+
"followRedirects": true,
|
|
11
|
+
"requestTimeout": 3000,
|
|
12
|
+
"requestDelay": 0
|
|
13
|
+
},
|
|
14
|
+
"notifications": {
|
|
15
|
+
"onError": [
|
|
16
|
+
{
|
|
17
|
+
"email": "user@example.com"
|
|
18
|
+
}
|
|
19
|
+
],
|
|
20
|
+
"onFailure": [
|
|
21
|
+
{
|
|
22
|
+
"email": "user@example.com"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
},
|
|
26
|
+
"distribution": [],
|
|
27
|
+
"schedule": {
|
|
28
|
+
"cron": "0 0 * * * *",
|
|
29
|
+
"timezone": "America/Chicago",
|
|
30
|
+
"nextRun": "2022-06-18T05:00:00.000Z"
|
|
31
|
+
},
|
|
32
|
+
"lastRun": {
|
|
33
|
+
"status": "failed",
|
|
34
|
+
"startedAt": "2022-06-17T18:39:52.852Z",
|
|
35
|
+
"finishedAt": "2022-06-17T18:39:53.707Z"
|
|
36
|
+
},
|
|
37
|
+
"stats": {
|
|
38
|
+
"assertions": {
|
|
39
|
+
"total": 8,
|
|
40
|
+
"failed": 1
|
|
41
|
+
},
|
|
42
|
+
"requests": {
|
|
43
|
+
"total": 4
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|