@icure/api 8.6.15 → 8.6.17
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/icc-api/api/XHR.d.ts +7 -2
- package/icc-api/api/XHR.js +29 -3
- package/icc-api/api/XHR.js.map +1 -1
- package/package.json +1 -1
package/icc-api/api/XHR.d.ts
CHANGED
|
@@ -9,7 +9,12 @@ export declare namespace XHR {
|
|
|
9
9
|
statusCode: number;
|
|
10
10
|
contentType: string;
|
|
11
11
|
body: JSON | Array<JSON> | any;
|
|
12
|
-
|
|
12
|
+
responseHeaders: {
|
|
13
|
+
[key: string]: string[];
|
|
14
|
+
};
|
|
15
|
+
constructor(status: number, contentType: string, body: JSON | Array<JSON> | any, responseHeaders?: {
|
|
16
|
+
[key: string]: string[];
|
|
17
|
+
});
|
|
13
18
|
}
|
|
14
19
|
class XHRError extends Error {
|
|
15
20
|
statusCode: number;
|
|
@@ -19,5 +24,5 @@ export declare namespace XHR {
|
|
|
19
24
|
url: string;
|
|
20
25
|
constructor(url: string, message: string, status: number, errorCode: string, headers: Headers);
|
|
21
26
|
}
|
|
22
|
-
function sendCommand(method: string, url: string, headers: Array<Header> | null, data?: string | any, fetchImpl?: (input: RequestInfo, init?: RequestInit) => Promise<Response>, contentTypeOverride?: 'application/json' | 'text/plain' | 'application/octet-stream', headerProvider?: AuthService, minimumAuthenticationClass?: number | undefined, tryHardToParseJson?: boolean): Promise<Data>;
|
|
27
|
+
function sendCommand(method: string, url: string, headers: Array<Header> | null, data?: string | any, fetchImpl?: (input: RequestInfo, init?: RequestInit) => Promise<Response>, contentTypeOverride?: 'application/json' | 'text/plain' | 'application/octet-stream', headerProvider?: AuthService, minimumAuthenticationClass?: number | undefined, tryHardToParseJson?: boolean, collectHeaders?: string[]): Promise<Data>;
|
|
23
28
|
}
|
package/icc-api/api/XHR.js
CHANGED
|
@@ -23,10 +23,11 @@ var XHR;
|
|
|
23
23
|
}
|
|
24
24
|
XHR.Header = Header;
|
|
25
25
|
class Data {
|
|
26
|
-
constructor(status, contentType, body) {
|
|
26
|
+
constructor(status, contentType, body, responseHeaders = {}) {
|
|
27
27
|
this.statusCode = status;
|
|
28
28
|
this.contentType = contentType;
|
|
29
29
|
this.body = body;
|
|
30
|
+
this.responseHeaders = responseHeaders;
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
XHR.Data = Data;
|
|
@@ -65,7 +66,7 @@ var XHR;
|
|
|
65
66
|
? window.fetch
|
|
66
67
|
: typeof self !== 'undefined'
|
|
67
68
|
? self.fetch
|
|
68
|
-
: fetch, contentTypeOverride, headerProvider = new NoAuthService_1.NoAuthService(), minimumAuthenticationClass = undefined, tryHardToParseJson = false) {
|
|
69
|
+
: fetch, contentTypeOverride, headerProvider = new NoAuthService_1.NoAuthService(), minimumAuthenticationClass = undefined, tryHardToParseJson = false, collectHeaders = []) {
|
|
69
70
|
const authHeaders = yield headerProvider.getAuthHeaders(minimumAuthenticationClass);
|
|
70
71
|
const contentType = headers && headers.find((it) => (it.header ? it.header.toLowerCase() === 'content-type' : false));
|
|
71
72
|
const clientTimeout = headers && headers.find((it) => (it.header ? it.header.toUpperCase() === 'X-CLIENT-SIDE-TIMEOUT' : false));
|
|
@@ -119,7 +120,32 @@ var XHR;
|
|
|
119
120
|
})) : response.json()
|
|
120
121
|
: ct.startsWith('application/xml') || ct.startsWith('text/')
|
|
121
122
|
? response.text()
|
|
122
|
-
: response.arrayBuffer()).then((d) =>
|
|
123
|
+
: response.arrayBuffer()).then((d) => {
|
|
124
|
+
const responseHeaders = {};
|
|
125
|
+
if (collectHeaders.length) {
|
|
126
|
+
const prefixPatterns = [];
|
|
127
|
+
for (const h of collectHeaders) {
|
|
128
|
+
if (h.endsWith('*')) {
|
|
129
|
+
prefixPatterns.push(h.slice(0, -1).toLowerCase());
|
|
130
|
+
}
|
|
131
|
+
else if (response.headers.has(h)) {
|
|
132
|
+
responseHeaders[h] = [response.headers.get(h)];
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (prefixPatterns.length) {
|
|
136
|
+
response.headers.forEach((value, key) => {
|
|
137
|
+
const lowerKey = key.toLowerCase();
|
|
138
|
+
if (prefixPatterns.some((prefix) => lowerKey.startsWith(prefix))) {
|
|
139
|
+
if (!responseHeaders[key]) {
|
|
140
|
+
responseHeaders[key] = [];
|
|
141
|
+
}
|
|
142
|
+
responseHeaders[key].push(value);
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return new Data(response.status, ct, d, responseHeaders);
|
|
148
|
+
});
|
|
123
149
|
}
|
|
124
150
|
});
|
|
125
151
|
});
|
package/icc-api/api/XHR.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XHR.js","sourceRoot":"","sources":["../../../icc-api/api/XHR.ts"],"names":[],"mappings":"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","sourcesContent":["import {ua2b64, ua2string} from '../model/ModelHelper'\nimport {NoAuthService} from '../../icc-x-api/auth/NoAuthService'\nimport {AuthService} from '../../icc-x-api/auth/AuthService'\nimport {ua2utf8} from \"../../icc-x-api\"\n\nexport namespace XHR {\n export class Header {\n header: string\n data: string\n\n constructor(header: string, data: string) {\n this.header = header\n this.data = data\n }\n }\n\n export class Data {\n statusCode: number\n contentType: string\n body: JSON | Array<JSON> | any //stream bytes|json|array<json>\n\n constructor(status: number, contentType: string, body: JSON | Array<JSON> | any) {\n this.statusCode = status\n this.contentType = contentType\n this.body = body\n }\n }\n\n export class XHRError extends Error {\n statusCode: number\n errorCode: string\n headers: Headers\n message: string\n url: string\n\n constructor(url: string, message: string, status: number, errorCode: string, headers: Headers) {\n super(message)\n this.url = url\n this.statusCode = status\n this.message = message\n this.errorCode = errorCode\n this.headers = headers\n }\n }\n\n function fetchWithTimeout(\n url: string,\n init: RequestInit,\n timeout = 10000,\n fetchImpl: (input: RequestInfo, init?: RequestInit) => Promise<Response> = typeof window !== 'undefined'\n ? window.fetch\n : typeof self !== 'undefined'\n ? self.fetch\n : fetch\n ): Promise<Response> {\n return new Promise((resolve, reject) => {\n // Set timeout timer\n let timer = setTimeout(() => reject({message: 'Request timed out', status: 'Request timed out'}), timeout)\n fetchImpl(url, init)\n .then((response) => {\n clearTimeout(timer)\n resolve(response)\n })\n .catch((err) => {\n clearTimeout(timer)\n reject(err)\n })\n })\n }\n\n export async function sendCommand(\n method: string,\n url: string,\n headers: Array<Header> | null,\n data: string | any = '',\n fetchImpl: (input: RequestInfo, init?: RequestInit) => Promise<Response> = typeof window !== 'undefined'\n ? window.fetch\n : typeof self !== 'undefined'\n ? self.fetch\n : fetch,\n contentTypeOverride?: 'application/json' | 'text/plain' | 'application/octet-stream',\n headerProvider: AuthService = new NoAuthService(),\n minimumAuthenticationClass: number | undefined = undefined,\n tryHardToParseJson: boolean = false\n ): Promise<Data> {\n const authHeaders = await headerProvider.getAuthHeaders(minimumAuthenticationClass)\n const contentType = headers && headers.find((it) => (it.header ? it.header.toLowerCase() === 'content-type' : false))\n const clientTimeout = headers && headers.find((it) => (it.header ? it.header.toUpperCase() === 'X-CLIENT-SIDE-TIMEOUT' : false))\n const timeout = clientTimeout ? Number(clientTimeout.data) : 600000\n return fetchWithTimeout(\n url,\n Object.assign(\n {\n method: method,\n credentials: 'include' as RequestCredentials,\n headers: (headers ?? [])\n .concat(authHeaders)\n .filter(\n (h) =>\n (h.header?.toLowerCase() !== 'content-type' || h.data !== 'multipart/form-data') &&\n h.header?.toUpperCase() !== 'X-CLIENT-SIDE-TIMEOUT' &&\n h.header?.toLowerCase() !== 'force-authentication'\n )\n .reduce(\n (acc: { [key: string]: string }, h) => {\n acc[h.header] = h.data\n return acc\n },\n {'X-Requested-With': 'XMLHttpRequest'}\n ),\n },\n method === 'POST' || method === 'PUT'\n ? {\n body:\n !contentType || contentType.data === 'application/json'\n ? JSON.stringify(data, (k, v) => {\n return v instanceof ArrayBuffer || v instanceof Uint8Array ? ua2b64(v) : v\n })\n : data,\n }\n : {}\n ),\n timeout,\n fetchImpl\n ).then(async function (response) {\n if (response.status === 401) {\n headerProvider.invalidateHeader(new XHRError(url, await response.text(), response.status, response.statusText, response.headers))\n const requiredAuthLevelHeader = response.headers.get('Icure-Minimum-Required-Auth-Level')\n return sendCommand(\n method,\n url,\n headers,\n data,\n fetchImpl,\n contentTypeOverride,\n headerProvider,\n requiredAuthLevelHeader ? parseInt(requiredAuthLevelHeader) : undefined,\n tryHardToParseJson\n )\n } else if (response.status >= 400) {\n const error: {\n error: string\n message: string\n status: number\n } = {error: response.statusText, message: await response.text(), status: response.status}\n console.warn(`XHR Error: ${method} ${url} - ${error.status} - ${error.error}`, error.message)\n throw new XHRError(url, error.message, error.status, error.error, response.headers)\n } else {\n const ct = contentTypeOverride || response.headers.get('content-type') || 'text/plain'\n return (\n ct.startsWith('application/json')\n ? tryHardToParseJson ? response.arrayBuffer().then(async (ab) => {\n try {\n return JSON.parse(ua2utf8(ab))\n } catch (e) {\n console.warn('Error parsing JSON fallback on ua2string', e)\n return JSON.parse(ua2string(ab).replace(/[\\u0000-\\u001F\\u007F-\\u009F]/g, \"\"))\n }\n }) : response.json()\n : ct.startsWith('application/xml') || ct.startsWith('text/')\n ? response.text()\n : response.arrayBuffer()\n ).then((d) => new Data(response.status, ct, d))\n }\n })\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"XHR.js","sourceRoot":"","sources":["../../../icc-api/api/XHR.ts"],"names":[],"mappings":"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","sourcesContent":["import {ua2b64, ua2string} from '../model/ModelHelper'\nimport {NoAuthService} from '../../icc-x-api/auth/NoAuthService'\nimport {AuthService} from '../../icc-x-api/auth/AuthService'\nimport {ua2utf8} from \"../../icc-x-api\"\n\nexport namespace XHR {\n export class Header {\n header: string\n data: string\n\n constructor(header: string, data: string) {\n this.header = header\n this.data = data\n }\n }\n\n export class Data {\n statusCode: number\n contentType: string\n body: JSON | Array<JSON> | any //stream bytes|json|array<json>\n responseHeaders: {[key: string]: string[]}\n\n constructor(status: number, contentType: string, body: JSON | Array<JSON> | any, responseHeaders: {[key: string]: string[]} = {}) {\n this.statusCode = status\n this.contentType = contentType\n this.body = body\n this.responseHeaders = responseHeaders\n }\n }\n\n export class XHRError extends Error {\n statusCode: number\n errorCode: string\n headers: Headers\n message: string\n url: string\n\n constructor(url: string, message: string, status: number, errorCode: string, headers: Headers) {\n super(message)\n this.url = url\n this.statusCode = status\n this.message = message\n this.errorCode = errorCode\n this.headers = headers\n }\n }\n\n function fetchWithTimeout(\n url: string,\n init: RequestInit,\n timeout = 10000,\n fetchImpl: (input: RequestInfo, init?: RequestInit) => Promise<Response> = typeof window !== 'undefined'\n ? window.fetch\n : typeof self !== 'undefined'\n ? self.fetch\n : fetch\n ): Promise<Response> {\n return new Promise((resolve, reject) => {\n // Set timeout timer\n let timer = setTimeout(() => reject({message: 'Request timed out', status: 'Request timed out'}), timeout)\n fetchImpl(url, init)\n .then((response) => {\n clearTimeout(timer)\n resolve(response)\n })\n .catch((err) => {\n clearTimeout(timer)\n reject(err)\n })\n })\n }\n\n export async function sendCommand(\n method: string,\n url: string,\n headers: Array<Header> | null,\n data: string | any = '',\n fetchImpl: (input: RequestInfo, init?: RequestInit) => Promise<Response> = typeof window !== 'undefined'\n ? window.fetch\n : typeof self !== 'undefined'\n ? self.fetch\n : fetch,\n contentTypeOverride?: 'application/json' | 'text/plain' | 'application/octet-stream',\n headerProvider: AuthService = new NoAuthService(),\n minimumAuthenticationClass: number | undefined = undefined,\n tryHardToParseJson: boolean = false,\n collectHeaders: string[] = []\n ): Promise<Data> {\n const authHeaders = await headerProvider.getAuthHeaders(minimumAuthenticationClass)\n const contentType = headers && headers.find((it) => (it.header ? it.header.toLowerCase() === 'content-type' : false))\n const clientTimeout = headers && headers.find((it) => (it.header ? it.header.toUpperCase() === 'X-CLIENT-SIDE-TIMEOUT' : false))\n const timeout = clientTimeout ? Number(clientTimeout.data) : 600000\n return fetchWithTimeout(\n url,\n Object.assign(\n {\n method: method,\n credentials: 'include' as RequestCredentials,\n headers: (headers ?? [])\n .concat(authHeaders)\n .filter(\n (h) =>\n (h.header?.toLowerCase() !== 'content-type' || h.data !== 'multipart/form-data') &&\n h.header?.toUpperCase() !== 'X-CLIENT-SIDE-TIMEOUT' &&\n h.header?.toLowerCase() !== 'force-authentication'\n )\n .reduce(\n (acc: { [key: string]: string }, h) => {\n acc[h.header] = h.data\n return acc\n },\n {'X-Requested-With': 'XMLHttpRequest'}\n ),\n },\n method === 'POST' || method === 'PUT'\n ? {\n body:\n !contentType || contentType.data === 'application/json'\n ? JSON.stringify(data, (k, v) => {\n return v instanceof ArrayBuffer || v instanceof Uint8Array ? ua2b64(v) : v\n })\n : data,\n }\n : {}\n ),\n timeout,\n fetchImpl\n ).then(async function (response) {\n if (response.status === 401) {\n headerProvider.invalidateHeader(new XHRError(url, await response.text(), response.status, response.statusText, response.headers))\n const requiredAuthLevelHeader = response.headers.get('Icure-Minimum-Required-Auth-Level')\n return sendCommand(\n method,\n url,\n headers,\n data,\n fetchImpl,\n contentTypeOverride,\n headerProvider,\n requiredAuthLevelHeader ? parseInt(requiredAuthLevelHeader) : undefined,\n tryHardToParseJson\n )\n } else if (response.status >= 400) {\n const error: {\n error: string\n message: string\n status: number\n } = {error: response.statusText, message: await response.text(), status: response.status}\n console.warn(`XHR Error: ${method} ${url} - ${error.status} - ${error.error}`, error.message)\n throw new XHRError(url, error.message, error.status, error.error, response.headers)\n } else {\n const ct = contentTypeOverride || response.headers.get('content-type') || 'text/plain'\n return (\n ct.startsWith('application/json')\n ? tryHardToParseJson ? response.arrayBuffer().then(async (ab) => {\n try {\n return JSON.parse(ua2utf8(ab))\n } catch (e) {\n console.warn('Error parsing JSON fallback on ua2string', e)\n return JSON.parse(ua2string(ab).replace(/[\\u0000-\\u001F\\u007F-\\u009F]/g, \"\"))\n }\n }) : response.json()\n : ct.startsWith('application/xml') || ct.startsWith('text/')\n ? response.text()\n : response.arrayBuffer()\n ).then((d) => {\n const responseHeaders: { [key: string]: string[] } = {}\n if (collectHeaders.length) {\n const prefixPatterns: string[] = []\n for (const h of collectHeaders) {\n if (h.endsWith('*')) {\n prefixPatterns.push(h.slice(0, -1).toLowerCase())\n } else if (response.headers.has(h)) {\n responseHeaders[h] = [response.headers.get(h)!]\n }\n }\n if (prefixPatterns.length) {\n response.headers.forEach((value, key) => {\n const lowerKey = key.toLowerCase()\n if (prefixPatterns.some((prefix) => lowerKey.startsWith(prefix))) {\n if (!responseHeaders[key]) {\n responseHeaders[key] = []\n }\n responseHeaders[key].push(value)\n }\n })\n }\n }\n return new Data(response.status, ct, d, responseHeaders)\n })\n }\n })\n }\n}\n"]}
|