@resolution/jira-api-client 0.1.0 → 0.1.2
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/CHANGELOG.md +22 -0
- package/package.json +10 -3
- package/.eslintrc.js +0 -3
- package/config/api-typescript-generator.config.ts +0 -91
- package/config/compare-schemas.ts +0 -307
- package/src/index.ts +0 -47
- package/src/openapi/platform/base-jira-platform-api-client.ts +0 -2298
- package/src/openapi/platform/core/common-http-client.ts +0 -723
- package/src/openapi/platform/core/common-http-service.ts +0 -22
- package/src/openapi/platform/core/common-validation-schema-storage.ts +0 -105
- package/src/openapi/platform/models/announcement-banner.ts +0 -59
- package/src/openapi/platform/models/app-data-policies.ts +0 -79
- package/src/openapi/platform/models/app-migration.ts +0 -172
- package/src/openapi/platform/models/app-properties.ts +0 -32
- package/src/openapi/platform/models/audit-records.ts +0 -140
- package/src/openapi/platform/models/avatars.ts +0 -48
- package/src/openapi/platform/models/classification-levels.ts +0 -58
- package/src/openapi/platform/models/common.ts +0 -2669
- package/src/openapi/platform/models/dashboards.ts +0 -849
- package/src/openapi/platform/models/dynamic-modules.ts +0 -121
- package/src/openapi/platform/models/filter-sharing.ts +0 -103
- package/src/openapi/platform/models/filters.ts +0 -319
- package/src/openapi/platform/models/group-and-user-picker.ts +0 -85
- package/src/openapi/platform/models/groups.ts +0 -247
- package/src/openapi/platform/models/issue-attachments.ts +0 -290
- package/src/openapi/platform/models/issue-comment-properties.ts +0 -27
- package/src/openapi/platform/models/issue-comments.ts +0 -91
- package/src/openapi/platform/models/issue-custom-field-configuration-apps.ts +0 -96
- package/src/openapi/platform/models/issue-custom-field-contexts.ts +0 -1072
- package/src/openapi/platform/models/issue-custom-field-options-apps.ts +0 -273
- package/src/openapi/platform/models/issue-custom-field-options.ts +0 -283
- package/src/openapi/platform/models/issue-custom-field-values-apps.ts +0 -118
- package/src/openapi/platform/models/issue-field-configurations.ts +0 -435
- package/src/openapi/platform/models/issue-fields.ts +0 -392
- package/src/openapi/platform/models/issue-link-types.ts +0 -28
- package/src/openapi/platform/models/issue-links.ts +0 -185
- package/src/openapi/platform/models/issue-notification-schemes.ts +0 -370
- package/src/openapi/platform/models/issue-priorities.ts +0 -196
- package/src/openapi/platform/models/issue-properties.ts +0 -259
- package/src/openapi/platform/models/issue-remote-links.ts +0 -207
- package/src/openapi/platform/models/issue-resolutions.ts +0 -180
- package/src/openapi/platform/models/issue-search.ts +0 -367
- package/src/openapi/platform/models/issue-security-level.ts +0 -76
- package/src/openapi/platform/models/issue-security-schemes.ts +0 -496
- package/src/openapi/platform/models/issue-type-schemes.ts +0 -290
- package/src/openapi/platform/models/issue-type-screen-schemes.ts +0 -286
- package/src/openapi/platform/models/issue-types.ts +0 -66
- package/src/openapi/platform/models/issue-votes.ts +0 -38
- package/src/openapi/platform/models/issue-watchers.ts +0 -67
- package/src/openapi/platform/models/issue-worklogs.ts +0 -190
- package/src/openapi/platform/models/issues.ts +0 -1268
- package/src/openapi/platform/models/jira-expressions.ts +0 -578
- package/src/openapi/platform/models/jira-settings.ts +0 -118
- package/src/openapi/platform/models/jql-functions-apps.ts +0 -128
- package/src/openapi/platform/models/jql.ts +0 -783
- package/src/openapi/platform/models/labels.ts +0 -42
- package/src/openapi/platform/models/license-metrics.ts +0 -68
- package/src/openapi/platform/models/myself.ts +0 -29
- package/src/openapi/platform/models/permission-schemes.ts +0 -89
- package/src/openapi/platform/models/permissions.ts +0 -308
- package/src/openapi/platform/models/priority-schemes.ts +0 -527
- package/src/openapi/platform/models/project-avatars.ts +0 -29
- package/src/openapi/platform/models/project-classification-levels.ts +0 -24
- package/src/openapi/platform/models/project-components.ts +0 -231
- package/src/openapi/platform/models/project-email.ts +0 -27
- package/src/openapi/platform/models/project-features.ts +0 -78
- package/src/openapi/platform/models/project-permission-schemes.ts +0 -43
- package/src/openapi/platform/models/project-role-actors.ts +0 -107
- package/src/openapi/platform/models/project-roles.ts +0 -76
- package/src/openapi/platform/models/project-types.ts +0 -36
- package/src/openapi/platform/models/project-versions.ts +0 -216
- package/src/openapi/platform/models/projects.ts +0 -429
- package/src/openapi/platform/models/screen-schemes.ts +0 -192
- package/src/openapi/platform/models/screen-tab-fields.ts +0 -45
- package/src/openapi/platform/models/screens.ts +0 -171
- package/src/openapi/platform/models/server-info.ts +0 -100
- package/src/openapi/platform/models/service-registry.ts +0 -68
- package/src/openapi/platform/models/status.ts +0 -229
- package/src/openapi/platform/models/time-tracking.ts +0 -38
- package/src/openapi/platform/models/ui-modifications-apps.ts +0 -229
- package/src/openapi/platform/models/user-search.ts +0 -69
- package/src/openapi/platform/models/users.ts +0 -121
- package/src/openapi/platform/models/webhooks.ts +0 -307
- package/src/openapi/platform/models/workflow-scheme-drafts.ts +0 -58
- package/src/openapi/platform/models/workflow-scheme-project-associations.ts +0 -68
- package/src/openapi/platform/models/workflow-schemes.ts +0 -545
- package/src/openapi/platform/models/workflow-transition-properties.ts +0 -33
- package/src/openapi/platform/models/workflow-transition-rules.ts +0 -261
- package/src/openapi/platform/models/workflows.ts +0 -1943
- package/src/openapi/platform/services/announcement-banner-service.ts +0 -142
- package/src/openapi/platform/services/app-data-policies-service.ts +0 -136
- package/src/openapi/platform/services/app-migration-service.ts +0 -289
- package/src/openapi/platform/services/app-properties-service.ts +0 -441
- package/src/openapi/platform/services/application-roles-service.ts +0 -247
- package/src/openapi/platform/services/audit-records-service.ts +0 -164
- package/src/openapi/platform/services/avatars-service.ts +0 -769
- package/src/openapi/platform/services/classification-levels-service.ts +0 -131
- package/src/openapi/platform/services/dashboards-service.ts +0 -1721
- package/src/openapi/platform/services/dynamic-modules-service.ts +0 -127
- package/src/openapi/platform/services/filter-sharing-service.ts +0 -687
- package/src/openapi/platform/services/filters-service.ts +0 -1901
- package/src/openapi/platform/services/group-and-user-picker-service.ts +0 -224
- package/src/openapi/platform/services/groups-service.ts +0 -751
- package/src/openapi/platform/services/issue-attachments-service.ts +0 -900
- package/src/openapi/platform/services/issue-comment-properties-service.ts +0 -324
- package/src/openapi/platform/services/issue-comments-service.ts +0 -812
- package/src/openapi/platform/services/issue-custom-field-configuration-apps-service.ts +0 -277
- package/src/openapi/platform/services/issue-custom-field-contexts-service.ts +0 -1339
- package/src/openapi/platform/services/issue-custom-field-options-apps-service.ts +0 -994
- package/src/openapi/platform/services/issue-custom-field-options-service.ts +0 -651
- package/src/openapi/platform/services/issue-custom-field-values-apps-service.ts +0 -201
- package/src/openapi/platform/services/issue-field-configurations-service.ts +0 -1294
- package/src/openapi/platform/services/issue-fields-service.ts +0 -837
- package/src/openapi/platform/services/issue-link-types-service.ts +0 -360
- package/src/openapi/platform/services/issue-links-service.ts +0 -345
- package/src/openapi/platform/services/issue-navigator-settings-service.ts +0 -119
- package/src/openapi/platform/services/issue-notification-schemes-service.ts +0 -1209
- package/src/openapi/platform/services/issue-priorities-service.ts +0 -575
- package/src/openapi/platform/services/issue-properties-service.ts +0 -606
- package/src/openapi/platform/services/issue-remote-links-service.ts +0 -597
- package/src/openapi/platform/services/issue-resolutions-service.ts +0 -534
- package/src/openapi/platform/services/issue-search-service.ts +0 -1139
- package/src/openapi/platform/services/issue-security-level-service.ts +0 -250
- package/src/openapi/platform/services/issue-security-schemes-service.ts +0 -1240
- package/src/openapi/platform/services/issue-type-properties-service.ts +0 -325
- package/src/openapi/platform/services/issue-type-schemes-service.ts +0 -940
- package/src/openapi/platform/services/issue-type-screen-schemes-service.ts +0 -994
- package/src/openapi/platform/services/issue-types-service.ts +0 -679
- package/src/openapi/platform/services/issue-votes-service.ts +0 -221
- package/src/openapi/platform/services/issue-watchers-service.ts +0 -331
- package/src/openapi/platform/services/issue-worklog-properties-service.ts +0 -348
- package/src/openapi/platform/services/issue-worklogs-service.ts +0 -1089
- package/src/openapi/platform/services/issues-service.ts +0 -3346
- package/src/openapi/platform/services/jira-expressions-service.ts +0 -407
- package/src/openapi/platform/services/jira-settings-service.ts +0 -415
- package/src/openapi/platform/services/jql-functions-apps-service.ts +0 -219
- package/src/openapi/platform/services/jql-service.ts +0 -896
- package/src/openapi/platform/services/labels-service.ts +0 -89
- package/src/openapi/platform/services/license-metrics-service.ts +0 -216
- package/src/openapi/platform/services/myself-service.ts +0 -520
- package/src/openapi/platform/services/permission-schemes-service.ts +0 -926
- package/src/openapi/platform/services/permissions-service.ts +0 -407
- package/src/openapi/platform/services/priority-schemes-service.ts +0 -1001
- package/src/openapi/platform/services/project-avatars-service.ts +0 -341
- package/src/openapi/platform/services/project-categories-service.ts +0 -318
- package/src/openapi/platform/services/project-classification-levels-service.ts +0 -232
- package/src/openapi/platform/services/project-components-service.ts +0 -1332
- package/src/openapi/platform/services/project-email-service.ts +0 -161
- package/src/openapi/platform/services/project-features-service.ts +0 -207
- package/src/openapi/platform/services/project-key-and-name-validation-service.ts +0 -200
- package/src/openapi/platform/services/project-permission-schemes-service.ts +0 -384
- package/src/openapi/platform/services/project-properties-service.ts +0 -320
- package/src/openapi/platform/services/project-role-actors-service.ts +0 -627
- package/src/openapi/platform/services/project-roles-service.ts +0 -867
- package/src/openapi/platform/services/project-types-service.ts +0 -297
- package/src/openapi/platform/services/project-versions-service.ts +0 -1287
- package/src/openapi/platform/services/projects-service.ts +0 -2196
- package/src/openapi/platform/services/screen-schemes-service.ts +0 -334
- package/src/openapi/platform/services/screen-tab-fields-service.ts +0 -276
- package/src/openapi/platform/services/screen-tabs-service.ts +0 -421
- package/src/openapi/platform/services/screens-service.ts +0 -528
- package/src/openapi/platform/services/server-info-service.ts +0 -88
- package/src/openapi/platform/services/service-registry-service.ts +0 -89
- package/src/openapi/platform/services/status-service.ts +0 -498
- package/src/openapi/platform/services/tasks-service.ts +0 -159
- package/src/openapi/platform/services/time-tracking-service.ts +0 -386
- package/src/openapi/platform/services/ui-modifications-apps-service.ts +0 -403
- package/src/openapi/platform/services/user-properties-service.ts +0 -413
- package/src/openapi/platform/services/user-search-service.ts +0 -1214
- package/src/openapi/platform/services/users-service.ts +0 -1108
- package/src/openapi/platform/services/webhooks-service.ts +0 -458
- package/src/openapi/platform/services/workflow-scheme-drafts-service.ts +0 -1313
- package/src/openapi/platform/services/workflow-scheme-project-associations-service.ts +0 -189
- package/src/openapi/platform/services/workflow-schemes-service.ts +0 -1617
- package/src/openapi/platform/services/workflow-status-categories-service.ts +0 -151
- package/src/openapi/platform/services/workflow-statuses-service.ts +0 -176
- package/src/openapi/platform/services/workflow-transition-properties-service.ts +0 -388
- package/src/openapi/platform/services/workflow-transition-rules-service.ts +0 -485
- package/src/openapi/platform/services/workflows-service.ts +0 -3477
- package/src/openapi/platform/validation-schema-storage.ts +0 -186
- package/src/openapi/software/base-jira-software-api-client.ts +0 -447
- package/src/openapi/software/core/common-http-client.ts +0 -723
- package/src/openapi/software/core/common-http-service.ts +0 -22
- package/src/openapi/software/core/common-validation-schema-storage.ts +0 -105
- package/src/openapi/software/models/board.ts +0 -918
- package/src/openapi/software/services/backlog-service.ts +0 -160
- package/src/openapi/software/services/board-service.ts +0 -4189
- package/src/openapi/software/services/builds-service.ts +0 -571
- package/src/openapi/software/services/deployments-service.ts +0 -403
- package/src/openapi/software/services/dev-ops-components-service.ts +0 -371
- package/src/openapi/software/services/development-information-service.ts +0 -2357
- package/src/openapi/software/services/epic-service.ts +0 -854
- package/src/openapi/software/services/feature-flags-service.ts +0 -303
- package/src/openapi/software/services/issue-service.ts +0 -529
- package/src/openapi/software/services/operations-service.ts +0 -741
- package/src/openapi/software/services/remote-links-service.ts +0 -653
- package/src/openapi/software/services/security-information-service.ts +0 -495
- package/src/openapi/software/services/sprint-service.ts +0 -969
- package/src/openapi/software/validation-schema-storage.ts +0 -186
- package/tsconfig.build.json +0 -7
- package/tsconfig.json +0 -4
|
@@ -1,723 +0,0 @@
|
|
|
1
|
-
// DO NOT EDIT!
|
|
2
|
-
// This file is generated by "api-typescript-generator".
|
|
3
|
-
// To update this file run "yarn build:openapi".
|
|
4
|
-
export interface CommonHttpClientOptions {
|
|
5
|
-
baseUrl: string;
|
|
6
|
-
errorClass: {
|
|
7
|
-
new (
|
|
8
|
-
url: URL,
|
|
9
|
-
request: CommonHttpClientFetchRequest | undefined,
|
|
10
|
-
response: CommonHttpClientFetchResponse | undefined,
|
|
11
|
-
options: CommonHttpClientOptions | undefined,
|
|
12
|
-
message: string,
|
|
13
|
-
): Error;
|
|
14
|
-
};
|
|
15
|
-
headers?: CommonHttpClientRequestHeaders;
|
|
16
|
-
preprocessRequest?: (
|
|
17
|
-
request: CommonHttpClientRequest,
|
|
18
|
-
) => Promise<CommonHttpClientRequest>;
|
|
19
|
-
preprocessFetchResponse?: (
|
|
20
|
-
response: CommonHttpClientFetchResponse,
|
|
21
|
-
request: CommonHttpClientFetchRequest,
|
|
22
|
-
) => Promise<CommonHttpClientFetchResponse>;
|
|
23
|
-
fetch?: (
|
|
24
|
-
url: URL,
|
|
25
|
-
request: CommonHttpClientFetchRequest,
|
|
26
|
-
) => Promise<CommonHttpClientFetchResponse>;
|
|
27
|
-
binaryResponseType: "blob" | "readableStream";
|
|
28
|
-
formatHttpErrorMessage?: (
|
|
29
|
-
response: CommonHttpClientFetchResponse,
|
|
30
|
-
request: CommonHttpClientFetchRequest,
|
|
31
|
-
) => string;
|
|
32
|
-
}
|
|
33
|
-
export interface CommonHttpClientRequestHeaders {
|
|
34
|
-
[headerName: string]: string | undefined | null;
|
|
35
|
-
}
|
|
36
|
-
export interface CommonHttpClientFetchRequestHeaders {
|
|
37
|
-
[headerName: string]: string;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
/**
|
|
41
|
-
* Request prepared for the fetch function.
|
|
42
|
-
*/
|
|
43
|
-
export interface CommonHttpClientFetchRequest {
|
|
44
|
-
/**
|
|
45
|
-
* HTTP Method.
|
|
46
|
-
*/
|
|
47
|
-
method:
|
|
48
|
-
| "GET"
|
|
49
|
-
| "HEAD"
|
|
50
|
-
| "POST"
|
|
51
|
-
| "PUT"
|
|
52
|
-
| "DELETE"
|
|
53
|
-
| "CONNECT"
|
|
54
|
-
| "OPTIONS"
|
|
55
|
-
| "PATCH";
|
|
56
|
-
/**
|
|
57
|
-
* Request headers.
|
|
58
|
-
*/
|
|
59
|
-
headers: CommonHttpClientFetchRequestHeaders;
|
|
60
|
-
/**
|
|
61
|
-
* Request body.
|
|
62
|
-
*/
|
|
63
|
-
body?: BodyInit;
|
|
64
|
-
/**
|
|
65
|
-
* Cache mode.
|
|
66
|
-
*/
|
|
67
|
-
cache:
|
|
68
|
-
| "default"
|
|
69
|
-
| "force-cache"
|
|
70
|
-
| "no-cache"
|
|
71
|
-
| "no-store"
|
|
72
|
-
| "only-if-cached"
|
|
73
|
-
| "reload";
|
|
74
|
-
/**
|
|
75
|
-
* Credentials mode.
|
|
76
|
-
*/
|
|
77
|
-
credentials: "include" | "omit" | "same-origin";
|
|
78
|
-
/**
|
|
79
|
-
* Redirect mode.
|
|
80
|
-
*/
|
|
81
|
-
redirect: "error" | "follow" | "manual";
|
|
82
|
-
/**
|
|
83
|
-
* Custom request properties. Can be used to pass metadata to the fetch function.
|
|
84
|
-
*/
|
|
85
|
-
customRequestProps?: Record<string, unknown>;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
/**
|
|
89
|
-
* Request in terms of OpenAPI.
|
|
90
|
-
*/
|
|
91
|
-
export type CommonHttpClientRequest = Omit<
|
|
92
|
-
CommonHttpClientFetchRequest,
|
|
93
|
-
"body" | "headers" | "cache" | "credentials" | "redirect"
|
|
94
|
-
> & {
|
|
95
|
-
/**
|
|
96
|
-
* Path to the resource.
|
|
97
|
-
*/
|
|
98
|
-
path: string;
|
|
99
|
-
/**
|
|
100
|
-
* Path parameters, i.e. {id}.
|
|
101
|
-
*/
|
|
102
|
-
pathParams?: Record<string, unknown>;
|
|
103
|
-
/**
|
|
104
|
-
* Query parameters.
|
|
105
|
-
*/
|
|
106
|
-
query?: Record<string, unknown>;
|
|
107
|
-
/**
|
|
108
|
-
* Request body.
|
|
109
|
-
*/
|
|
110
|
-
body?: unknown;
|
|
111
|
-
/**
|
|
112
|
-
* Request headers.
|
|
113
|
-
*/
|
|
114
|
-
headers?: CommonHttpClientRequestHeaders;
|
|
115
|
-
} & Partial<
|
|
116
|
-
Pick<CommonHttpClientFetchRequest, "cache" | "credentials" | "redirect">
|
|
117
|
-
>;
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* Response of the fetch function.
|
|
121
|
-
*/
|
|
122
|
-
export interface CommonHttpClientFetchResponse {
|
|
123
|
-
/**
|
|
124
|
-
* HTTP status code.
|
|
125
|
-
*/
|
|
126
|
-
status: number;
|
|
127
|
-
/**
|
|
128
|
-
* HTTP status code explanation.
|
|
129
|
-
*/
|
|
130
|
-
statusText: string;
|
|
131
|
-
/**
|
|
132
|
-
* Response body.
|
|
133
|
-
*/
|
|
134
|
-
body: CommonHttpClientFetchResponseBody;
|
|
135
|
-
/**
|
|
136
|
-
* Whether the request was successful. True for 2xx status codes.
|
|
137
|
-
*/
|
|
138
|
-
ok: boolean;
|
|
139
|
-
/**
|
|
140
|
-
* The final URL of the request (after redirects).
|
|
141
|
-
*/
|
|
142
|
-
url: string;
|
|
143
|
-
/**
|
|
144
|
-
* Response headers.
|
|
145
|
-
*/
|
|
146
|
-
headers: CommonHttpClientResponseHeaders;
|
|
147
|
-
/**
|
|
148
|
-
* Custom request properties. Can be used to pass metadata outside the fetch function.
|
|
149
|
-
*/
|
|
150
|
-
customRequestProps?: Record<string, unknown>;
|
|
151
|
-
}
|
|
152
|
-
export type CommonHttpClientResponseHeaders = Record<string, string> & {
|
|
153
|
-
"set-cookie"?: string[];
|
|
154
|
-
};
|
|
155
|
-
export type CommonHttpClientFetchResponseBody =
|
|
156
|
-
| {
|
|
157
|
-
type: "json";
|
|
158
|
-
data: unknown;
|
|
159
|
-
}
|
|
160
|
-
| {
|
|
161
|
-
type: "blob";
|
|
162
|
-
data: Blob;
|
|
163
|
-
}
|
|
164
|
-
| {
|
|
165
|
-
type: "readableStream";
|
|
166
|
-
data: ReadableStream<Uint8Array>;
|
|
167
|
-
};
|
|
168
|
-
export interface CommonHttpClientResponse<T> {
|
|
169
|
-
status: number;
|
|
170
|
-
mediaType?: string;
|
|
171
|
-
body: T;
|
|
172
|
-
response: CommonHttpClientFetchResponse;
|
|
173
|
-
}
|
|
174
|
-
export class CommonHttpClientError extends Error {
|
|
175
|
-
public readonly url: URL;
|
|
176
|
-
public readonly request: CommonHttpClientFetchRequest | undefined;
|
|
177
|
-
public readonly response: CommonHttpClientFetchResponse | undefined;
|
|
178
|
-
public readonly options: CommonHttpClientOptions | undefined;
|
|
179
|
-
constructor(
|
|
180
|
-
url: URL,
|
|
181
|
-
request: CommonHttpClientFetchRequest | undefined,
|
|
182
|
-
response: CommonHttpClientFetchResponse | undefined,
|
|
183
|
-
options: CommonHttpClientOptions | undefined,
|
|
184
|
-
message: string,
|
|
185
|
-
) {
|
|
186
|
-
super(message);
|
|
187
|
-
this.name = "OpenApiClientError";
|
|
188
|
-
this.url = url;
|
|
189
|
-
this.request = request;
|
|
190
|
-
this.response = response;
|
|
191
|
-
this.options = options;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
const jsonContentTypeRegExp = /^application\/(\w+\+)?json/;
|
|
195
|
-
function readableStreamToBlob(
|
|
196
|
-
stream: ReadableStream<Uint8Array>,
|
|
197
|
-
): Promise<Blob> {
|
|
198
|
-
const chunks: Uint8Array[] = [];
|
|
199
|
-
const reader = stream.getReader();
|
|
200
|
-
return new Promise((resolve, reject) => {
|
|
201
|
-
reader.read().then(function process({ done, value }) {
|
|
202
|
-
if (value) {
|
|
203
|
-
chunks.push(value);
|
|
204
|
-
}
|
|
205
|
-
if (done) {
|
|
206
|
-
resolve(new Blob(chunks));
|
|
207
|
-
return;
|
|
208
|
-
}
|
|
209
|
-
reader.read().then(process, reject);
|
|
210
|
-
}, reject);
|
|
211
|
-
});
|
|
212
|
-
}
|
|
213
|
-
async function convertResponseBody(
|
|
214
|
-
body: CommonHttpClientFetchResponseBody,
|
|
215
|
-
destType: CommonHttpClientFetchResponseBody["type"],
|
|
216
|
-
): Promise<CommonHttpClientFetchResponseBody> {
|
|
217
|
-
if (body.type === destType) {
|
|
218
|
-
return body;
|
|
219
|
-
}
|
|
220
|
-
if (body.type === "json") {
|
|
221
|
-
const blob = new Blob([JSON.stringify(body.data)]);
|
|
222
|
-
if (destType === "blob") {
|
|
223
|
-
return {
|
|
224
|
-
type: "blob",
|
|
225
|
-
data: blob,
|
|
226
|
-
};
|
|
227
|
-
} else if (destType === "readableStream") {
|
|
228
|
-
return {
|
|
229
|
-
type: "readableStream",
|
|
230
|
-
data: blob.stream(),
|
|
231
|
-
};
|
|
232
|
-
} else {
|
|
233
|
-
throw new Error("Invalid destination type.");
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
if (body.type === "blob") {
|
|
237
|
-
if (destType === "json") {
|
|
238
|
-
return {
|
|
239
|
-
type: "json",
|
|
240
|
-
data: JSON.parse(await body.data.text()),
|
|
241
|
-
};
|
|
242
|
-
} else if (destType === "readableStream") {
|
|
243
|
-
return {
|
|
244
|
-
type: "readableStream",
|
|
245
|
-
data: body.data.stream(),
|
|
246
|
-
};
|
|
247
|
-
} else {
|
|
248
|
-
throw new Error("Invalid destination type.");
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
if (body.type === "readableStream") {
|
|
252
|
-
if (destType === "json") {
|
|
253
|
-
return {
|
|
254
|
-
type: "json",
|
|
255
|
-
data: JSON.parse(await (await readableStreamToBlob(body.data)).text()),
|
|
256
|
-
};
|
|
257
|
-
} else if (destType === "blob") {
|
|
258
|
-
return {
|
|
259
|
-
type: "blob",
|
|
260
|
-
data: await readableStreamToBlob(body.data),
|
|
261
|
-
};
|
|
262
|
-
} else {
|
|
263
|
-
throw new Error("Invalid destination type.");
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
throw new Error("Invalid response body type.");
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
/**
|
|
270
|
-
* `extends unknown` is a trick to split the union into individual types.
|
|
271
|
-
*/
|
|
272
|
-
type ResponseByMediaType<
|
|
273
|
-
T extends CommonHttpClientResponse<unknown>,
|
|
274
|
-
K extends string,
|
|
275
|
-
> = T extends unknown
|
|
276
|
-
? ((a: T) => void) extends (a: {
|
|
277
|
-
mediaType: K;
|
|
278
|
-
status: infer _Status;
|
|
279
|
-
body: infer _Body;
|
|
280
|
-
response: CommonHttpClientFetchResponse;
|
|
281
|
-
}) => void
|
|
282
|
-
? T
|
|
283
|
-
: never
|
|
284
|
-
: never;
|
|
285
|
-
export function checkReponseMediaType<
|
|
286
|
-
T extends CommonHttpClientResponse<unknown>,
|
|
287
|
-
K extends string,
|
|
288
|
-
>(
|
|
289
|
-
response: T,
|
|
290
|
-
mediaType: K,
|
|
291
|
-
): response is ResponseByMediaType<T, K> extends never
|
|
292
|
-
? ResponseByMediaType<T, "*/*">
|
|
293
|
-
: ResponseByMediaType<T, K> {
|
|
294
|
-
return response.mediaType === mediaType;
|
|
295
|
-
}
|
|
296
|
-
export function isJsonMediaType(mediaType: string): boolean {
|
|
297
|
-
return Boolean(mediaType.match(jsonContentTypeRegExp));
|
|
298
|
-
}
|
|
299
|
-
type AsCreatedResponseFunction<
|
|
300
|
-
KCreated extends string,
|
|
301
|
-
KOther extends string,
|
|
302
|
-
> = <T extends CommonHttpClientResponse<unknown>>(
|
|
303
|
-
response: T,
|
|
304
|
-
) =>
|
|
305
|
-
| ({
|
|
306
|
-
[K in KCreated]: Extract<
|
|
307
|
-
T,
|
|
308
|
-
{
|
|
309
|
-
status: 201;
|
|
310
|
-
}
|
|
311
|
-
>["body"];
|
|
312
|
-
} & {
|
|
313
|
-
created: true;
|
|
314
|
-
})
|
|
315
|
-
| ({
|
|
316
|
-
[K in KOther]: Extract<
|
|
317
|
-
T,
|
|
318
|
-
{
|
|
319
|
-
status: 200;
|
|
320
|
-
}
|
|
321
|
-
>["body"];
|
|
322
|
-
} & {
|
|
323
|
-
created: false;
|
|
324
|
-
});
|
|
325
|
-
export function asCreatedResponse<KCreated extends string>(
|
|
326
|
-
keyCreated: KCreated,
|
|
327
|
-
): AsCreatedResponseFunction<KCreated, KCreated>;
|
|
328
|
-
export function asCreatedResponse<
|
|
329
|
-
KCreated extends string,
|
|
330
|
-
KOther extends string,
|
|
331
|
-
>(
|
|
332
|
-
keyCreated: KCreated,
|
|
333
|
-
keyOther: KOther,
|
|
334
|
-
): AsCreatedResponseFunction<KCreated, KOther>;
|
|
335
|
-
export function asCreatedResponse(
|
|
336
|
-
...keys: [string] | [string, string]
|
|
337
|
-
): AsCreatedResponseFunction<string, string> {
|
|
338
|
-
const keyCreated = keys[0];
|
|
339
|
-
const keyOther = keys[1] ?? keyCreated;
|
|
340
|
-
return (response: CommonHttpClientResponse<unknown>) => {
|
|
341
|
-
if (response.status === 201) {
|
|
342
|
-
return {
|
|
343
|
-
created: true,
|
|
344
|
-
[keyCreated]: response.body,
|
|
345
|
-
};
|
|
346
|
-
} else {
|
|
347
|
-
return {
|
|
348
|
-
created: false,
|
|
349
|
-
[keyOther]: response.body,
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
};
|
|
353
|
-
}
|
|
354
|
-
export const getBody = <T>({ body }: CommonHttpClientResponse<T>): T => body;
|
|
355
|
-
export const castResponse =
|
|
356
|
-
<T extends Omit<CommonHttpClientResponse<unknown>, "response">>() =>
|
|
357
|
-
(response: CommonHttpClientResponse<unknown>) =>
|
|
358
|
-
response as WithResponse<T>;
|
|
359
|
-
export const discardResult = (): void => {};
|
|
360
|
-
export type WithResponse<T> = T & {
|
|
361
|
-
response: CommonHttpClientFetchResponse;
|
|
362
|
-
};
|
|
363
|
-
export function createClientWithServices<
|
|
364
|
-
TOptions,
|
|
365
|
-
TClient extends {
|
|
366
|
-
getClient(): CommonHttpClient;
|
|
367
|
-
},
|
|
368
|
-
TServices extends Record<
|
|
369
|
-
string,
|
|
370
|
-
{
|
|
371
|
-
new (client: CommonHttpClient): unknown;
|
|
372
|
-
}
|
|
373
|
-
>,
|
|
374
|
-
>(
|
|
375
|
-
this: {
|
|
376
|
-
new (options?: TOptions): TClient;
|
|
377
|
-
},
|
|
378
|
-
services: TServices,
|
|
379
|
-
options?: TOptions,
|
|
380
|
-
): TClient & {
|
|
381
|
-
[K in keyof TServices as K extends string
|
|
382
|
-
? Uncapitalize<K extends `${infer TName}Service` ? TName : K>
|
|
383
|
-
: K]: InstanceType<TServices[K]>;
|
|
384
|
-
} {
|
|
385
|
-
const client = new this(options);
|
|
386
|
-
const extension: Record<string, unknown> = {};
|
|
387
|
-
for (const serviceName in services) {
|
|
388
|
-
if (Object.prototype.hasOwnProperty.call(services, serviceName)) {
|
|
389
|
-
extension[
|
|
390
|
-
serviceName
|
|
391
|
-
.replace(/[^\b]Service$/, "")
|
|
392
|
-
.replace(/^\w/, (s) => s.toLowerCase())
|
|
393
|
-
] = new services[serviceName](client.getClient());
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
return Object.assign(client, extension as never);
|
|
397
|
-
}
|
|
398
|
-
function getErrorMessage(e: unknown) {
|
|
399
|
-
return e instanceof Error ? e.message : String(e);
|
|
400
|
-
}
|
|
401
|
-
export class CommonHttpClient {
|
|
402
|
-
protected options: CommonHttpClientOptions;
|
|
403
|
-
constructor(options: CommonHttpClientOptions) {
|
|
404
|
-
this.options = options;
|
|
405
|
-
}
|
|
406
|
-
public setOptions(options: CommonHttpClientOptions) {
|
|
407
|
-
this.options = options;
|
|
408
|
-
}
|
|
409
|
-
public getOptions(): CommonHttpClientOptions {
|
|
410
|
-
return this.options;
|
|
411
|
-
}
|
|
412
|
-
protected getSearchParams(params: Record<string, unknown>): URLSearchParams {
|
|
413
|
-
const result = new URLSearchParams();
|
|
414
|
-
const process = (key: string, value: unknown) => {
|
|
415
|
-
if (value !== undefined && value !== null) {
|
|
416
|
-
if (Array.isArray(value)) {
|
|
417
|
-
for (const arrayVal of value) {
|
|
418
|
-
process(key, arrayVal);
|
|
419
|
-
}
|
|
420
|
-
} else if (typeof value === "object") {
|
|
421
|
-
for (const [subKey, subValue] of Object.entries(params)) {
|
|
422
|
-
process(`${key}[${subKey}]`, subValue);
|
|
423
|
-
}
|
|
424
|
-
} else {
|
|
425
|
-
result.append(key, String(value));
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
};
|
|
429
|
-
for (const [key, value] of Object.entries(params)) {
|
|
430
|
-
process(key, value);
|
|
431
|
-
}
|
|
432
|
-
return result;
|
|
433
|
-
}
|
|
434
|
-
protected buildUrlPath(request: CommonHttpClientRequest): string {
|
|
435
|
-
const pathParams = request.pathParams;
|
|
436
|
-
if (pathParams) {
|
|
437
|
-
return request.path.replace(
|
|
438
|
-
/\{(.*?)}/g,
|
|
439
|
-
(original, paramName: string) => {
|
|
440
|
-
if (Object.prototype.hasOwnProperty.call(pathParams, paramName)) {
|
|
441
|
-
return encodeURI(String(pathParams[paramName]));
|
|
442
|
-
}
|
|
443
|
-
return original;
|
|
444
|
-
},
|
|
445
|
-
);
|
|
446
|
-
}
|
|
447
|
-
return request.path;
|
|
448
|
-
}
|
|
449
|
-
protected buildUrl(request: CommonHttpClientRequest): URL {
|
|
450
|
-
const url = new URL(
|
|
451
|
-
this.buildUrlPath(request).replace(/^\//, ""),
|
|
452
|
-
this.options.baseUrl.replace(/\/?$/, "/"),
|
|
453
|
-
);
|
|
454
|
-
if (request.query) {
|
|
455
|
-
for (const [key, value] of this.getSearchParams(request.query)) {
|
|
456
|
-
url.searchParams.append(key, value);
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
return url;
|
|
460
|
-
}
|
|
461
|
-
protected async fetch(
|
|
462
|
-
url: URL,
|
|
463
|
-
request: CommonHttpClientFetchRequest,
|
|
464
|
-
): Promise<CommonHttpClientFetchResponse> {
|
|
465
|
-
const { ...requestProps } = request;
|
|
466
|
-
const requestInit: RequestInit = requestProps;
|
|
467
|
-
const response = await fetch(url, requestInit);
|
|
468
|
-
const body: CommonHttpClientFetchResponseBody = isJsonMediaType(
|
|
469
|
-
response.headers.get("content-type") ?? "",
|
|
470
|
-
)
|
|
471
|
-
? {
|
|
472
|
-
type: "json",
|
|
473
|
-
data: await response.json(),
|
|
474
|
-
}
|
|
475
|
-
: {
|
|
476
|
-
type: "blob",
|
|
477
|
-
data: await response.blob(),
|
|
478
|
-
};
|
|
479
|
-
const headers: CommonHttpClientResponseHeaders = {};
|
|
480
|
-
response.headers.forEach((value, key) => {
|
|
481
|
-
headers[key] = value;
|
|
482
|
-
});
|
|
483
|
-
if (
|
|
484
|
-
response.headers.has("set-cookie") &&
|
|
485
|
-
"getSetCookie" in response.headers
|
|
486
|
-
) {
|
|
487
|
-
headers["set-cookie"] = (
|
|
488
|
-
response.headers as {
|
|
489
|
-
getSetCookie(): string[];
|
|
490
|
-
}
|
|
491
|
-
).getSetCookie();
|
|
492
|
-
}
|
|
493
|
-
return {
|
|
494
|
-
status: response.status,
|
|
495
|
-
statusText: response.statusText,
|
|
496
|
-
body,
|
|
497
|
-
url: response.url,
|
|
498
|
-
headers,
|
|
499
|
-
ok: response.ok,
|
|
500
|
-
customRequestProps: request.customRequestProps,
|
|
501
|
-
};
|
|
502
|
-
}
|
|
503
|
-
public async request(
|
|
504
|
-
request: CommonHttpClientRequest,
|
|
505
|
-
): Promise<CommonHttpClientFetchResponse> {
|
|
506
|
-
try {
|
|
507
|
-
request = await this.preprocessRequest(request);
|
|
508
|
-
} catch (e) {
|
|
509
|
-
let url;
|
|
510
|
-
try {
|
|
511
|
-
url = this.buildUrl(request);
|
|
512
|
-
} catch (e) {
|
|
513
|
-
throw new this.options.errorClass(
|
|
514
|
-
new URL(request.path, this.options.baseUrl),
|
|
515
|
-
undefined,
|
|
516
|
-
undefined,
|
|
517
|
-
this.options,
|
|
518
|
-
`Error building request URL: ${getErrorMessage(e)}`,
|
|
519
|
-
);
|
|
520
|
-
}
|
|
521
|
-
throw new this.options.errorClass(
|
|
522
|
-
url,
|
|
523
|
-
undefined,
|
|
524
|
-
undefined,
|
|
525
|
-
this.options,
|
|
526
|
-
`preprocessRequest error: ${getErrorMessage(e)}`,
|
|
527
|
-
);
|
|
528
|
-
}
|
|
529
|
-
let url;
|
|
530
|
-
try {
|
|
531
|
-
url = this.buildUrl(request);
|
|
532
|
-
} catch (e) {
|
|
533
|
-
throw new this.options.errorClass(
|
|
534
|
-
new URL(request.path, this.options.baseUrl),
|
|
535
|
-
undefined,
|
|
536
|
-
undefined,
|
|
537
|
-
this.options,
|
|
538
|
-
`Error building request URL: ${getErrorMessage(e)}`,
|
|
539
|
-
);
|
|
540
|
-
}
|
|
541
|
-
const {
|
|
542
|
-
body,
|
|
543
|
-
path: _path,
|
|
544
|
-
pathParams: _pathParams,
|
|
545
|
-
query: _query,
|
|
546
|
-
headers: requestHeaders,
|
|
547
|
-
cache,
|
|
548
|
-
credentials,
|
|
549
|
-
redirect,
|
|
550
|
-
...otherRequestProps
|
|
551
|
-
} = request;
|
|
552
|
-
const headers = this.cleanupHeaders(requestHeaders);
|
|
553
|
-
const fetchRequest: CommonHttpClientFetchRequest = {
|
|
554
|
-
...otherRequestProps,
|
|
555
|
-
headers,
|
|
556
|
-
cache: cache ?? "default",
|
|
557
|
-
credentials: credentials ?? "same-origin",
|
|
558
|
-
redirect: redirect ?? "follow",
|
|
559
|
-
body: this.getRequestBody(request),
|
|
560
|
-
};
|
|
561
|
-
let fetchResponse: CommonHttpClientFetchResponse;
|
|
562
|
-
try {
|
|
563
|
-
if (this.options.fetch) {
|
|
564
|
-
fetchResponse = await this.options.fetch(url, fetchRequest);
|
|
565
|
-
} else {
|
|
566
|
-
fetchResponse = await this.fetch(url, fetchRequest);
|
|
567
|
-
}
|
|
568
|
-
} catch (e) {
|
|
569
|
-
throw new this.options.errorClass(
|
|
570
|
-
url,
|
|
571
|
-
fetchRequest,
|
|
572
|
-
undefined,
|
|
573
|
-
this.options,
|
|
574
|
-
getErrorMessage(e),
|
|
575
|
-
);
|
|
576
|
-
}
|
|
577
|
-
if (this.options.preprocessFetchResponse) {
|
|
578
|
-
try {
|
|
579
|
-
fetchResponse = await this.options.preprocessFetchResponse(
|
|
580
|
-
fetchResponse,
|
|
581
|
-
fetchRequest,
|
|
582
|
-
);
|
|
583
|
-
} catch (e) {
|
|
584
|
-
throw new this.options.errorClass(
|
|
585
|
-
url,
|
|
586
|
-
fetchRequest,
|
|
587
|
-
fetchResponse,
|
|
588
|
-
this.options,
|
|
589
|
-
`preprocessFetchResponse error: ${getErrorMessage(e)}`,
|
|
590
|
-
);
|
|
591
|
-
}
|
|
592
|
-
}
|
|
593
|
-
if (!fetchResponse.ok) {
|
|
594
|
-
throw new this.options.errorClass(
|
|
595
|
-
url,
|
|
596
|
-
fetchRequest,
|
|
597
|
-
fetchResponse,
|
|
598
|
-
this.options,
|
|
599
|
-
this.options.formatHttpErrorMessage
|
|
600
|
-
? this.options.formatHttpErrorMessage(fetchResponse, fetchRequest)
|
|
601
|
-
: `HTTP Error ${fetchResponse.status} (${fetchResponse.statusText})`,
|
|
602
|
-
);
|
|
603
|
-
}
|
|
604
|
-
return fetchResponse;
|
|
605
|
-
}
|
|
606
|
-
responseHandler(distribution: {
|
|
607
|
-
[statusCode: string]: {
|
|
608
|
-
[mediaType: string]: CommonHttpClientFetchResponseBody["type"];
|
|
609
|
-
};
|
|
610
|
-
}) {
|
|
611
|
-
return async (
|
|
612
|
-
response: CommonHttpClientFetchResponse,
|
|
613
|
-
): Promise<CommonHttpClientResponse<unknown>> => {
|
|
614
|
-
const body = response.body;
|
|
615
|
-
const contentType = response.headers["content-type"];
|
|
616
|
-
const mediaType = contentType
|
|
617
|
-
? contentType.replace(/;.*$/, "")
|
|
618
|
-
: undefined;
|
|
619
|
-
const mediaTypes = distribution[response.status] ?? {};
|
|
620
|
-
let destType;
|
|
621
|
-
if (mediaType) {
|
|
622
|
-
destType = mediaTypes[mediaType];
|
|
623
|
-
if (!destType) {
|
|
624
|
-
destType = mediaTypes[mediaType.replace(/\/.*$/, "/*")];
|
|
625
|
-
}
|
|
626
|
-
if (!destType) {
|
|
627
|
-
destType = mediaTypes[mediaType.replace(/^.*\//, "*/")];
|
|
628
|
-
}
|
|
629
|
-
if (!destType) {
|
|
630
|
-
destType = mediaTypes["*/*"];
|
|
631
|
-
}
|
|
632
|
-
} else {
|
|
633
|
-
destType = mediaTypes["*/*"];
|
|
634
|
-
}
|
|
635
|
-
if (!destType) {
|
|
636
|
-
let binaryBody;
|
|
637
|
-
try {
|
|
638
|
-
binaryBody = await convertResponseBody(
|
|
639
|
-
body,
|
|
640
|
-
this.options.binaryResponseType,
|
|
641
|
-
);
|
|
642
|
-
} catch (e) {
|
|
643
|
-
throw new this.options.errorClass(
|
|
644
|
-
new URL(response.url),
|
|
645
|
-
undefined,
|
|
646
|
-
response,
|
|
647
|
-
this.options,
|
|
648
|
-
`Error converting response body: ${getErrorMessage(e)}`,
|
|
649
|
-
);
|
|
650
|
-
}
|
|
651
|
-
return {
|
|
652
|
-
mediaType,
|
|
653
|
-
status: response.status,
|
|
654
|
-
body: binaryBody,
|
|
655
|
-
response,
|
|
656
|
-
};
|
|
657
|
-
}
|
|
658
|
-
try {
|
|
659
|
-
const convertedBody = await convertResponseBody(body, destType);
|
|
660
|
-
return {
|
|
661
|
-
mediaType,
|
|
662
|
-
status: response.status,
|
|
663
|
-
body: convertedBody.data,
|
|
664
|
-
response,
|
|
665
|
-
};
|
|
666
|
-
} catch (e) {
|
|
667
|
-
throw new this.options.errorClass(
|
|
668
|
-
new URL(response.url),
|
|
669
|
-
undefined,
|
|
670
|
-
response,
|
|
671
|
-
this.options,
|
|
672
|
-
`Error converting response body: ${getErrorMessage(e)}`,
|
|
673
|
-
);
|
|
674
|
-
}
|
|
675
|
-
};
|
|
676
|
-
}
|
|
677
|
-
private cleanupHeaders(
|
|
678
|
-
headers?: CommonHttpClientRequestHeaders,
|
|
679
|
-
): CommonHttpClientFetchRequestHeaders {
|
|
680
|
-
if (headers === undefined) {
|
|
681
|
-
return {};
|
|
682
|
-
}
|
|
683
|
-
return Object.fromEntries(
|
|
684
|
-
Object.entries(headers ?? {})
|
|
685
|
-
.filter(
|
|
686
|
-
(header): header is [string, string] =>
|
|
687
|
-
header[1] !== undefined && header[1] !== null,
|
|
688
|
-
)
|
|
689
|
-
.map(([key, value]) => [key.toLowerCase(), value]),
|
|
690
|
-
);
|
|
691
|
-
}
|
|
692
|
-
protected getRequestBody(
|
|
693
|
-
request: CommonHttpClientRequest,
|
|
694
|
-
): BodyInit | undefined {
|
|
695
|
-
if (request.body === undefined) {
|
|
696
|
-
return undefined;
|
|
697
|
-
}
|
|
698
|
-
for (const [key, value] of Object.entries(request.headers ?? {})) {
|
|
699
|
-
if (
|
|
700
|
-
key.toLowerCase() === "content-type" &&
|
|
701
|
-
value &&
|
|
702
|
-
isJsonMediaType(value)
|
|
703
|
-
) {
|
|
704
|
-
return JSON.stringify(request.body);
|
|
705
|
-
}
|
|
706
|
-
}
|
|
707
|
-
return request.body as BodyInit;
|
|
708
|
-
}
|
|
709
|
-
protected async preprocessRequest(
|
|
710
|
-
request: CommonHttpClientRequest,
|
|
711
|
-
): Promise<CommonHttpClientRequest> {
|
|
712
|
-
const requestWithHeaders = {
|
|
713
|
-
...request,
|
|
714
|
-
headers: {
|
|
715
|
-
...this.options.headers,
|
|
716
|
-
...this.cleanupHeaders(request.headers),
|
|
717
|
-
},
|
|
718
|
-
};
|
|
719
|
-
return this.options.preprocessRequest
|
|
720
|
-
? this.options.preprocessRequest(requestWithHeaders)
|
|
721
|
-
: requestWithHeaders;
|
|
722
|
-
}
|
|
723
|
-
}
|