@autometa/http 1.1.0 → 1.2.1
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 +19 -0
- package/dist/esm/index.js +4 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# @autometa/http
|
|
2
2
|
|
|
3
|
+
## 1.2.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies [6c4bb8d]
|
|
8
|
+
- @autometa/app@0.3.1
|
|
9
|
+
|
|
10
|
+
## 1.2.0
|
|
11
|
+
|
|
12
|
+
### Minor Changes
|
|
13
|
+
|
|
14
|
+
- 98d911f: feat: replace tsyringe with custom DI solution
|
|
15
|
+
|
|
16
|
+
### Patch Changes
|
|
17
|
+
|
|
18
|
+
- Updated dependencies [98d911f]
|
|
19
|
+
- @autometa/injection@0.1.0
|
|
20
|
+
- @autometa/app@0.3.0
|
|
21
|
+
|
|
3
22
|
## 1.1.0
|
|
4
23
|
|
|
5
24
|
### Minor Changes
|
package/dist/esm/index.js
CHANGED
|
@@ -50,10 +50,9 @@ var DerivedHTTPResponse = class extends HTTPResponse {
|
|
|
50
50
|
};
|
|
51
51
|
|
|
52
52
|
// src/http.ts
|
|
53
|
-
import { Fixture as Fixture2,
|
|
53
|
+
import { Fixture as Fixture2, INJECTION_SCOPE as INJECTION_SCOPE2 } from "@autometa/injection";
|
|
54
54
|
|
|
55
55
|
// src/http.builder.ts
|
|
56
|
-
import { Fixture, LIFE_CYCLE } from "@autometa/app";
|
|
57
56
|
import { AutomationError as AutomationError4 } from "@autometa/errors";
|
|
58
57
|
import { urlJoinP } from "url-join-ts";
|
|
59
58
|
|
|
@@ -277,6 +276,7 @@ ${JSON.stringify(data, null, 2)}`;
|
|
|
277
276
|
_result = new WeakMap();
|
|
278
277
|
|
|
279
278
|
// src/http.builder.ts
|
|
279
|
+
import { Fixture, INJECTION_SCOPE } from "@autometa/injection";
|
|
280
280
|
var _headers, _params, _url, _route, _method, _schemaMap, _responseType, _data, _requireSchema, _allowPlainText, _onBeforeSend, _onAfterSend;
|
|
281
281
|
var HTTPRequestBuilder = class {
|
|
282
282
|
constructor(map) {
|
|
@@ -456,7 +456,7 @@ _allowPlainText = new WeakMap();
|
|
|
456
456
|
_onBeforeSend = new WeakMap();
|
|
457
457
|
_onAfterSend = new WeakMap();
|
|
458
458
|
HTTPRequestBuilder = __decorateClass([
|
|
459
|
-
Fixture(
|
|
459
|
+
Fixture(INJECTION_SCOPE.TRANSIENT)
|
|
460
460
|
], HTTPRequestBuilder);
|
|
461
461
|
|
|
462
462
|
// src/http.ts
|
|
@@ -555,7 +555,7 @@ _onBeforeSend2 = new WeakMap();
|
|
|
555
555
|
_onAfterSend2 = new WeakMap();
|
|
556
556
|
_allowPlainText2 = new WeakMap();
|
|
557
557
|
HTTP = __decorateClass([
|
|
558
|
-
Fixture2(
|
|
558
|
+
Fixture2(INJECTION_SCOPE2.TRANSIENT)
|
|
559
559
|
], HTTP);
|
|
560
560
|
export {
|
|
561
561
|
DerivedHTTPResponse,
|
package/dist/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/http.response.ts","../../src/http.ts","../../src/http.builder.ts","../../src/schema.map.ts","../../src/transform-response.ts","../../src/axios-executor.ts"],"sourcesContent":["import { Method } from \"axios\";\n\nexport class HTTPResponse<T> {\n status: number;\n statusText: string;\n data: T;\n headers: Record<string, string>;\n request: {\n url: string;\n method: Method;\n };\n static derive<TOriginal, TDerived>(\n original: HTTPResponse<TOriginal>,\n data: TDerived\n ): HTTPResponse<TDerived>;\n static derive<TOriginal, TDerived>(\n original: HTTPResponse<TOriginal>,\n data: (original: TOriginal) => TDerived\n ): HTTPResponse<TDerived>;\n static derive<TOriginal, TDerived>(\n original: HTTPResponse<TOriginal>,\n data: TDerived | ((original: TOriginal) => TDerived)\n ) {\n const response = new DerivedHTTPResponse<TDerived, TOriginal>();\n if (typeof data === \"function\") {\n const fn = data as (original: TOriginal) => TDerived;\n response.data = fn(original.data);\n } else {\n response.data = data;\n }\n response.status = original.status;\n response.statusText = original.statusText;\n response.headers = original.headers;\n response.request = original.request;\n response.actual = original as HTTPResponse<TOriginal>;\n return response;\n }\n}\n\nexport class DerivedHTTPResponse<T, K> extends HTTPResponse<T> {\n actual: HTTPResponse<K>;\n}\n","import { Fixture, LIFE_CYCLE } from \"@autometa/app\";\nimport { HTTPRequestBuilder } from \"./http.builder\";\nimport { SchemaMap } from \"./schema.map\";\nimport { RequestHook, ResponseHook, SchemaParser, StatusCode } from \"./types\";\nexport type DynamicHeader = () => string;\n@Fixture(LIFE_CYCLE.Transient)\nexport class HTTP {\n #url: string;\n #route: string[] = [];\n #headers = new Map<string, string | DynamicHeader>();\n #requireSchema = false;\n #schemaMap: SchemaMap = new SchemaMap();\n #onBeforeSend: RequestHook[] = [];\n #onAfterSend: ResponseHook<unknown>[] = [];\n #allowPlainText = false;\n\n allowPlainText(value: boolean) {\n this.#allowPlainText = value;\n return this;\n }\n requireSchema(value: boolean) {\n this.#requireSchema = value;\n return this;\n }\n\n url(url: string) {\n this.#url = url;\n return this;\n }\n\n sharedOnBeforeSend(hook: RequestHook) {\n this.#onBeforeSend.push(hook);\n return this;\n }\n\n sharedOnReceiveResponse(hook: ResponseHook<unknown>) {\n this.#onAfterSend.push(hook);\n return this;\n }\n\n onBeforeSend(hook: RequestHook) {\n return this.builder().onBeforeSend(hook);\n }\n\n onReceiveResponse(hook: ResponseHook<unknown>) {\n return this.builder().onReceivedResponse(hook);\n }\n\n sharedSchema(parser: SchemaParser, ...codes: StatusCode[]): HTTP;\n sharedSchema(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): HTTP;\n sharedSchema(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.#schemaMap.register(parser, ...(args as any));\n return this;\n }\n\n schema(parser: SchemaParser, ...codes: StatusCode[]): HTTPRequestBuilder;\n schema(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): HTTPRequestBuilder;\n schema(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.builder().schema(parser, ...(args as any));\n }\n\n sharedRoute(...route: string[]) {\n this.#route.push(...route);\n return this;\n }\n\n param(name: string, value: string) {\n return this.builder().param(name, value);\n }\n\n params(dict: Record<string, string>) {\n return this.builder().params(dict);\n }\n\n data<T>(data: T) {\n return this.builder().data(data);\n }\n\n sharedHeader(name: string, value: string | DynamicHeader) {\n this.#headers.set(name, value);\n return this;\n }\n\n route(...route: (string | number | boolean)[]) {\n return this.builder().route(...route);\n }\n\n header<T>(name: string, value: T) {\n return this.builder().header(name, value);\n }\n\n headers(dict: Record<string, string>) {\n return this.builder().headers(dict);\n }\n\n get() {\n return this.builder().get();\n }\n\n private builder() {\n const headers = this.convertFactoriesToString();\n return new HTTPRequestBuilder(this.#schemaMap)\n .url(this.#url)\n .route(...this.#route)\n .allowPlainText(this.#allowPlainText)\n .headers(headers)\n .requireSchema(this.#requireSchema)\n .onBeforeSend(...this.#onBeforeSend)\n .onReceivedResponse(...this.#onAfterSend);\n }\n\n private convertFactoriesToString(){\n const dict: Record<string, string> = {};\n for (const [key, value] of this.#headers.entries()) {\n dict[key] = typeof value === \"string\" ? value : value();\n }\n return dict;\n }\n}\n","import { Fixture, LIFE_CYCLE } from \"@autometa/app\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { AxiosRequestConfig, Method, ResponseType } from \"axios\";\nimport { urlJoinP } from \"url-join-ts\";\nimport { HTTPResponse } from \"./http.response\";\nimport { SchemaMap } from \"./schema.map\";\nimport {\n RequestHook,\n RequestState,\n ResponseHook,\n SchemaParser,\n StatusCode\n} from \"./types\";\nimport { transformResponse } from \"./transform-response\";\nimport { AxiosExecutor } from \"./axios-executor\";\n\n@Fixture(LIFE_CYCLE.Transient)\nexport class HTTPRequestBuilder {\n #headers = new Map<string, string>();\n #params = new Map<string, unknown>();\n #url: string;\n #route: string[] = [];\n #method: Method;\n #schemaMap = new SchemaMap();\n #responseType: ResponseType | undefined = \"json\";\n #data: unknown;\n #requireSchema = false;\n #allowPlainText = false;\n #onBeforeSend: RequestHook[] = [];\n #onAfterSend: ResponseHook<unknown>[] = [];\n constructor(map: SchemaMap) {\n this.#schemaMap = new SchemaMap().including(map);\n }\n requireSchema(value: boolean) {\n this.#requireSchema = value;\n return this;\n }\n get currentState(): RequestState {\n const fullUrl = this.currentUrl;\n return {\n headers: Object.fromEntries(this.#headers),\n params: Object.fromEntries(this.#params),\n url: this.#url,\n route: this.#route,\n responseType: this.#responseType,\n data: this.#data,\n method: this.#method,\n fullUrl\n };\n }\n\n get currentUrl() {\n const params = Object.fromEntries(this.#params);\n return urlJoinP(this.#url, this.#route, params);\n }\n\n url(url: string) {\n this.#url = url;\n return this;\n }\n\n allowPlainText(value: boolean) {\n this.#allowPlainText = value;\n return this;\n }\n\n schema(parser: SchemaParser, ...codes: StatusCode[]): HTTPRequestBuilder;\n schema(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): HTTPRequestBuilder;\n\n schema(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n this.#schemaMap.register(parser, ...args);\n return this;\n }\n\n onBeforeSend(...hook: RequestHook[]) {\n this.#onBeforeSend.push(...hook);\n return this;\n }\n\n onReceivedResponse(...hook: ResponseHook<unknown>[]) {\n this.#onAfterSend.push(...hook);\n return this;\n }\n\n route(...route: (string | number | boolean)[]) {\n this.#route.push(...route.map((it) => `${it}`));\n return this;\n }\n\n header<T>(name: string, value: T) {\n const val = Array.isArray(value) ? value.join(\",\") : `${value}`;\n this.#headers.set(name, val);\n return this;\n }\n\n headers(dict: Record<string, string>) {\n Object.entries(dict).forEach(([name, value]) =>\n this.#headers.set(name, value)\n );\n return this;\n }\n\n param<T>(name: string, value: T) {\n this.#params.set(name, value);\n return this;\n }\n\n params(dict: Record<string, unknown>) {\n Object.entries(dict).forEach(([name, value]) => this.param(name, value));\n return this;\n }\n\n data<T>(data: T) {\n this.#data = data;\n return this;\n }\n\n async post<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"POST\");\n }\n\n async get<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"GET\");\n }\n\n async delete<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"DELETE\");\n }\n\n async put<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"PUT\");\n }\n\n async patch<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"PATCH\");\n }\n private async _request<T>(method: Method) {\n this.#method = method;\n\n const options: AxiosRequestConfig = this.constructOptions<T>(method);\n this.tryRunBeforeHooks();\n const executor = new AxiosExecutor(\n options,\n this.#schemaMap,\n this.currentState,\n this.#requireSchema\n );\n await executor.tryRequest<T>();\n if (executor.requestSucceeded && !executor.validationFailed) {\n const response = executor.getValidatedResponse<T>();\n this.tryRunAfterHooks<T>(response);\n return response;\n }\n if (executor.requestSucceeded) {\n const response = executor.getResponse<T>();\n // this.tryOnValidationFailed(response);\n this.tryRunAfterHooks<T>(response);\n }\n throw executor.error;\n }\n\n private constructOptions<T>(method: string): AxiosRequestConfig<T> {\n const url = this.currentUrl;\n const headers = this.#headers && Object.fromEntries(this.#headers);\n const responseType = this.#responseType;\n const data = this.#data as T;\n return {\n method,\n url,\n headers,\n data,\n responseType,\n validateStatus: function (status) {\n return status >= 100 && status < 500;\n },\n transformResponse: transformResponse.bind(null, this.#allowPlainText)\n };\n }\n\n private tryRunBeforeHooks() {\n let index = 0;\n try {\n for (const hook of this.#onBeforeSend) {\n hook(this.currentState);\n index++;\n }\n } catch (e) {\n const error = e as Error;\n const message = `HTTP Client 'onBeforeRequest' experienced an error at listener count ${index}`;\n throw new AutomationError(message, { cause: error });\n }\n }\n private tryRunAfterHooks<T>(response: HTTPResponse<T>) {\n let index = 0;\n try {\n for (const hook of this.#onAfterSend) {\n hook(response);\n index++;\n }\n } catch (e) {\n const error = e as Error;\n const message = `HTTP Client 'onRequestReceived' experienced an error at listener count ${index}`;\n throw new AutomationError(message, { cause: error });\n }\n }\n}\n","import { StatusCode, SchemaParser } from \"./types\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { StatusCodes } from \"@autometa/status-codes\";\n\nexport class SchemaMap {\n #children: SchemaMap[] = [];\n #map: Map<StatusCode, SchemaParser> = new Map();\n register(\n parser: SchemaParser,\n ...codes: StatusCode[]\n ): (typeof parser)[\"parse\"];\n register(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): (typeof parser)[\"parse\"];\n register(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ): (typeof parser)[\"parse\"];\n register(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n args.forEach((arg) => {\n if (typeof arg === \"number\") {\n this.registerSingle(parser, arg);\n } else {\n this.registerRange(parser, arg);\n }\n });\n return parser.parse;\n }\n\n registerSingle(parser: SchemaParser, ...codes: StatusCode[]) {\n codes.forEach((code) => {\n if (this.#map.has(code)) {\n throw new AutomationError(\n `Status code ${code} is already registered with a parser`\n );\n }\n assertIsStatusCode(code);\n this.#map.set(code, parser);\n });\n }\n\n including(map: SchemaMap) {\n this.#children.includes(map);\n return this;\n }\n registerRange(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ) {\n range.forEach(({ from, to }) => {\n assertIsStatusCode(from);\n assertIsStatusCode(to);\n for (let i = from; i <= to; i++) {\n if (!IsStatusCode(i)) {\n continue;\n }\n if (this.#map.has(i)) {\n throw new AutomationError(\n `Status code ${i} is already registered with a parser`\n );\n }\n this.#map.set(i, parser);\n }\n });\n }\n\n get(status: StatusCode): SchemaParser | undefined {\n assertIsStatusCode(status);\n const local = this.#map.get(status);\n if (local) {\n return local;\n }\n const nested = this.#children.find((it) => it.#map.has(status));\n return nested?.get(status);\n }\n\n validate<T>(status: StatusCode, response: T, strict: boolean): T {\n const parser = this.get(status);\n if (!parser) {\n if (!strict) {\n return response;\n }\n throw new AutomationError(\n `No schema parser registered for status code ${status} and 'requireSchema' is set to true`\n );\n }\n return parser.parse(response) as T;\n }\n}\n\nexport function assertIsStatusCode(value: number): asserts value is StatusCode {\n const result = Object.values(StatusCodes)\n .map((it) => it.status as number)\n .includes(value);\n if (!result) {\n throw new AutomationError(\n `Expected status code ${value} to be a valid status code, but it is not a known HTTP codeF`\n );\n }\n}\n\nexport function IsStatusCode(value: number): value is StatusCode {\n return Object.values(StatusCodes)\n .map((it) => it.status as number)\n .includes(value);\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport isJson from \"@stdlib/assert-is-json\";\nimport { highlight } from \"cli-highlight\";\n\nexport function transformResponse(\n allowPlainText: boolean,\n data: string | undefined | null\n) {\n if (data === null) {\n return null;\n }\n if (data === undefined) {\n return undefined;\n }\n if (data === \"\") {\n return data;\n }\n if (isJson(data)) {\n return JSON.parse(data);\n }\n if ([\"true\", \"false\"].includes(data)) {\n return JSON.parse(data);\n }\n if (/^\\d*\\.?\\d+$/.test(data)) {\n return JSON.parse(data);\n }\n\n if (allowPlainText) {\n return data;\n }\n const response = highlight(data, { language: \"html\" });\n const message = [\n `Could not parse a response as json, and this request was not configured to allow plain text responses.`,\n `To allow plain text responses, use the 'allowPlainText' method on the HTTP client.`,\n \" \",\n response\n ];\n throw new AutomationError(message.join(\"\\n\"));\n}\n","import axios, { AxiosRequestConfig, AxiosResponse } from \"axios\";\nimport { SchemaMap } from \"./schema.map\";\nimport type { RequestState, StatusCode } from \"./types\";\nimport { plainToInstance } from \"class-transformer\";\nimport { HTTPResponse } from \"./http.response\";\nimport { AutomationError } from \"@autometa/errors\";\ntype ExecutorState = {\n response: AxiosResponse<unknown>;\n validated: unknown;\n error: Error | undefined;\n};\nexport class AxiosExecutor {\n #result: ExecutorState = {} as ExecutorState;\n constructor(\n private options: AxiosRequestConfig,\n private schemaMap: SchemaMap,\n private requestState: RequestState,\n private requireSchema: boolean\n ) {}\n\n get error() {\n return this.#result.error;\n }\n get requestSucceeded() {\n return this.#result.response !== undefined;\n }\n\n get validationFailed() {\n return this.#result.validated === undefined;\n }\n\n async tryRequest<T>() {\n try {\n this.#result.response = await axios<T>(this.options);\n this.tryValidate();\n } catch (e) {\n if (this.#result.error) {\n return;\n }\n const { method, fullUrl, data, headers } = this.requestState;\n const body = JSON.stringify(data, null, 2);\n const headersString = JSON.stringify(headers, null, 2);\n const message = `Failed to send request to ${method}:${fullUrl}.\nheaders:\n${headersString}\n \nbody: \n${body}`;\n this.#result.error = new AutomationError(message, { cause: e as Error });\n }\n }\n\n async tryValidate() {\n const { status, data } = this.#result.response;\n const { method, fullUrl } = this.requestState;\n try {\n this.#result.validated = this.schemaMap.validate(\n status as StatusCode,\n data,\n this.requireSchema\n );\n } catch (e) {\n const error = e as Error;\n const message = `Failed to validate response from ${method}:${fullUrl}.\n \nProvided body was:\n${JSON.stringify(data, null, 2)}`;\n this.#result.error = new AutomationError(message, { cause: error });\n }\n }\n\n getValidatedResponse<T>() {\n const { status, statusText, headers } = this.#result.response;\n const { validated: data } = this.#result;\n const { fullUrl: url, method } = this.requestState;\n return plainToInstance(HTTPResponse, {\n status,\n statusText,\n headers,\n data,\n request: {\n url,\n method\n }\n }) as HTTPResponse<T>;\n }\n\n getResponse<T>() {\n const { status, statusText, headers, data } = this.#result.response;\n const { fullUrl: url, method } = this.requestState;\n return plainToInstance(\n HTTPResponse,\n {\n status,\n statusText,\n headers,\n data,\n request: {\n url,\n method\n }\n },\n { excludeExtraneousValues: true }\n ) as HTTPResponse<T>;\n }\n}\n"],"mappings":"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","names":["Fixture","LIFE_CYCLE","AutomationError","AutomationError","AutomationError","AutomationError","AutomationError","_url","_route","_headers","_requireSchema","_schemaMap","_onBeforeSend","_onAfterSend","_allowPlainText","Fixture","LIFE_CYCLE"]}
|
|
1
|
+
{"version":3,"sources":["../../src/http.response.ts","../../src/http.ts","../../src/http.builder.ts","../../src/schema.map.ts","../../src/transform-response.ts","../../src/axios-executor.ts"],"sourcesContent":["import { Method } from \"axios\";\n\nexport class HTTPResponse<T> {\n status: number;\n statusText: string;\n data: T;\n headers: Record<string, string>;\n request: {\n url: string;\n method: Method;\n };\n static derive<TOriginal, TDerived>(\n original: HTTPResponse<TOriginal>,\n data: TDerived\n ): HTTPResponse<TDerived>;\n static derive<TOriginal, TDerived>(\n original: HTTPResponse<TOriginal>,\n data: (original: TOriginal) => TDerived\n ): HTTPResponse<TDerived>;\n static derive<TOriginal, TDerived>(\n original: HTTPResponse<TOriginal>,\n data: TDerived | ((original: TOriginal) => TDerived)\n ) {\n const response = new DerivedHTTPResponse<TDerived, TOriginal>();\n if (typeof data === \"function\") {\n const fn = data as (original: TOriginal) => TDerived;\n response.data = fn(original.data);\n } else {\n response.data = data;\n }\n response.status = original.status;\n response.statusText = original.statusText;\n response.headers = original.headers;\n response.request = original.request;\n response.actual = original as HTTPResponse<TOriginal>;\n return response;\n }\n}\n\nexport class DerivedHTTPResponse<T, K> extends HTTPResponse<T> {\n actual: HTTPResponse<K>;\n}\n","import { Fixture, INJECTION_SCOPE } from \"@autometa/injection\";\nimport { HTTPRequestBuilder } from \"./http.builder\";\nimport { SchemaMap } from \"./schema.map\";\nimport { RequestHook, ResponseHook, SchemaParser, StatusCode } from \"./types\";\nexport type DynamicHeader = () => string;\n@Fixture(INJECTION_SCOPE.TRANSIENT)\nexport class HTTP {\n #url: string;\n #route: string[] = [];\n #headers = new Map<string, string | DynamicHeader>();\n #requireSchema = false;\n #schemaMap: SchemaMap = new SchemaMap();\n #onBeforeSend: RequestHook[] = [];\n #onAfterSend: ResponseHook<unknown>[] = [];\n #allowPlainText = false;\n\n allowPlainText(value: boolean) {\n this.#allowPlainText = value;\n return this;\n }\n requireSchema(value: boolean) {\n this.#requireSchema = value;\n return this;\n }\n\n url(url: string) {\n this.#url = url;\n return this;\n }\n\n sharedOnBeforeSend(hook: RequestHook) {\n this.#onBeforeSend.push(hook);\n return this;\n }\n\n sharedOnReceiveResponse(hook: ResponseHook<unknown>) {\n this.#onAfterSend.push(hook);\n return this;\n }\n\n onBeforeSend(hook: RequestHook) {\n return this.builder().onBeforeSend(hook);\n }\n\n onReceiveResponse(hook: ResponseHook<unknown>) {\n return this.builder().onReceivedResponse(hook);\n }\n\n sharedSchema(parser: SchemaParser, ...codes: StatusCode[]): HTTP;\n sharedSchema(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): HTTP;\n sharedSchema(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.#schemaMap.register(parser, ...(args as any));\n return this;\n }\n\n schema(parser: SchemaParser, ...codes: StatusCode[]): HTTPRequestBuilder;\n schema(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): HTTPRequestBuilder;\n schema(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.builder().schema(parser, ...(args as any));\n }\n\n sharedRoute(...route: string[]) {\n this.#route.push(...route);\n return this;\n }\n\n param(name: string, value: string) {\n return this.builder().param(name, value);\n }\n\n params(dict: Record<string, string>) {\n return this.builder().params(dict);\n }\n\n data<T>(data: T) {\n return this.builder().data(data);\n }\n\n sharedHeader(name: string, value: string | DynamicHeader) {\n this.#headers.set(name, value);\n return this;\n }\n\n route(...route: (string | number | boolean)[]) {\n return this.builder().route(...route);\n }\n\n header<T>(name: string, value: T) {\n return this.builder().header(name, value);\n }\n\n headers(dict: Record<string, string>) {\n return this.builder().headers(dict);\n }\n\n get() {\n return this.builder().get();\n }\n\n private builder() {\n const headers = this.convertFactoriesToString();\n return new HTTPRequestBuilder(this.#schemaMap)\n .url(this.#url)\n .route(...this.#route)\n .allowPlainText(this.#allowPlainText)\n .headers(headers)\n .requireSchema(this.#requireSchema)\n .onBeforeSend(...this.#onBeforeSend)\n .onReceivedResponse(...this.#onAfterSend);\n }\n\n private convertFactoriesToString() {\n const dict: Record<string, string> = {};\n for (const [key, value] of this.#headers.entries()) {\n dict[key] = typeof value === \"string\" ? value : value();\n }\n return dict;\n }\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport { AxiosRequestConfig, Method, ResponseType } from \"axios\";\nimport { urlJoinP } from \"url-join-ts\";\nimport { HTTPResponse } from \"./http.response\";\nimport { SchemaMap } from \"./schema.map\";\nimport {\n RequestHook,\n RequestState,\n ResponseHook,\n SchemaParser,\n StatusCode\n} from \"./types\";\nimport { transformResponse } from \"./transform-response\";\nimport { AxiosExecutor } from \"./axios-executor\";\nimport { Fixture, INJECTION_SCOPE } from \"@autometa/injection\";\n\n@Fixture(INJECTION_SCOPE.TRANSIENT)\nexport class HTTPRequestBuilder {\n #headers = new Map<string, string>();\n #params = new Map<string, unknown>();\n #url: string;\n #route: string[] = [];\n #method: Method;\n #schemaMap = new SchemaMap();\n #responseType: ResponseType | undefined = \"json\";\n #data: unknown;\n #requireSchema = false;\n #allowPlainText = false;\n #onBeforeSend: RequestHook[] = [];\n #onAfterSend: ResponseHook<unknown>[] = [];\n constructor(map: SchemaMap) {\n this.#schemaMap = new SchemaMap().including(map);\n }\n requireSchema(value: boolean) {\n this.#requireSchema = value;\n return this;\n }\n get currentState(): RequestState {\n const fullUrl = this.currentUrl;\n return {\n headers: Object.fromEntries(this.#headers),\n params: Object.fromEntries(this.#params),\n url: this.#url,\n route: this.#route,\n responseType: this.#responseType,\n data: this.#data,\n method: this.#method,\n fullUrl\n };\n }\n\n get currentUrl() {\n const params = Object.fromEntries(this.#params);\n return urlJoinP(this.#url, this.#route, params);\n }\n\n url(url: string) {\n this.#url = url;\n return this;\n }\n\n allowPlainText(value: boolean) {\n this.#allowPlainText = value;\n return this;\n }\n\n schema(parser: SchemaParser, ...codes: StatusCode[]): HTTPRequestBuilder;\n schema(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): HTTPRequestBuilder;\n\n schema(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n this.#schemaMap.register(parser, ...args);\n return this;\n }\n\n onBeforeSend(...hook: RequestHook[]) {\n this.#onBeforeSend.push(...hook);\n return this;\n }\n\n onReceivedResponse(...hook: ResponseHook<unknown>[]) {\n this.#onAfterSend.push(...hook);\n return this;\n }\n\n route(...route: (string | number | boolean)[]) {\n this.#route.push(...route.map((it) => `${it}`));\n return this;\n }\n\n header<T>(name: string, value: T) {\n const val = Array.isArray(value) ? value.join(\",\") : `${value}`;\n this.#headers.set(name, val);\n return this;\n }\n\n headers(dict: Record<string, string>) {\n Object.entries(dict).forEach(([name, value]) =>\n this.#headers.set(name, value)\n );\n return this;\n }\n\n param<T>(name: string, value: T) {\n this.#params.set(name, value);\n return this;\n }\n\n params(dict: Record<string, unknown>) {\n Object.entries(dict).forEach(([name, value]) => this.param(name, value));\n return this;\n }\n\n data<T>(data: T) {\n this.#data = data;\n return this;\n }\n\n async post<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"POST\");\n }\n\n async get<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"GET\");\n }\n\n async delete<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"DELETE\");\n }\n\n async put<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"PUT\");\n }\n\n async patch<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"PATCH\");\n }\n private async _request<T>(method: Method) {\n this.#method = method;\n\n const options: AxiosRequestConfig = this.constructOptions<T>(method);\n this.tryRunBeforeHooks();\n const executor = new AxiosExecutor(\n options,\n this.#schemaMap,\n this.currentState,\n this.#requireSchema\n );\n await executor.tryRequest<T>();\n if (executor.requestSucceeded && !executor.validationFailed) {\n const response = executor.getValidatedResponse<T>();\n this.tryRunAfterHooks<T>(response);\n return response;\n }\n if (executor.requestSucceeded) {\n const response = executor.getResponse<T>();\n // this.tryOnValidationFailed(response);\n this.tryRunAfterHooks<T>(response);\n }\n throw executor.error;\n }\n\n private constructOptions<T>(method: string): AxiosRequestConfig<T> {\n const url = this.currentUrl;\n const headers = this.#headers && Object.fromEntries(this.#headers);\n const responseType = this.#responseType;\n const data = this.#data as T;\n return {\n method,\n url,\n headers,\n data,\n responseType,\n validateStatus: function (status) {\n return status >= 100 && status < 500;\n },\n transformResponse: transformResponse.bind(null, this.#allowPlainText)\n };\n }\n\n private tryRunBeforeHooks() {\n let index = 0;\n try {\n for (const hook of this.#onBeforeSend) {\n hook(this.currentState);\n index++;\n }\n } catch (e) {\n const error = e as Error;\n const message = `HTTP Client 'onBeforeRequest' experienced an error at listener count ${index}`;\n throw new AutomationError(message, { cause: error });\n }\n }\n private tryRunAfterHooks<T>(response: HTTPResponse<T>) {\n let index = 0;\n try {\n for (const hook of this.#onAfterSend) {\n hook(response);\n index++;\n }\n } catch (e) {\n const error = e as Error;\n const message = `HTTP Client 'onRequestReceived' experienced an error at listener count ${index}`;\n throw new AutomationError(message, { cause: error });\n }\n }\n}\n","import { StatusCode, SchemaParser } from \"./types\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { StatusCodes } from \"@autometa/status-codes\";\n\nexport class SchemaMap {\n #children: SchemaMap[] = [];\n #map: Map<StatusCode, SchemaParser> = new Map();\n register(\n parser: SchemaParser,\n ...codes: StatusCode[]\n ): (typeof parser)[\"parse\"];\n register(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): (typeof parser)[\"parse\"];\n register(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ): (typeof parser)[\"parse\"];\n register(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n args.forEach((arg) => {\n if (typeof arg === \"number\") {\n this.registerSingle(parser, arg);\n } else {\n this.registerRange(parser, arg);\n }\n });\n return parser.parse;\n }\n\n registerSingle(parser: SchemaParser, ...codes: StatusCode[]) {\n codes.forEach((code) => {\n if (this.#map.has(code)) {\n throw new AutomationError(\n `Status code ${code} is already registered with a parser`\n );\n }\n assertIsStatusCode(code);\n this.#map.set(code, parser);\n });\n }\n\n including(map: SchemaMap) {\n this.#children.includes(map);\n return this;\n }\n registerRange(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ) {\n range.forEach(({ from, to }) => {\n assertIsStatusCode(from);\n assertIsStatusCode(to);\n for (let i = from; i <= to; i++) {\n if (!IsStatusCode(i)) {\n continue;\n }\n if (this.#map.has(i)) {\n throw new AutomationError(\n `Status code ${i} is already registered with a parser`\n );\n }\n this.#map.set(i, parser);\n }\n });\n }\n\n get(status: StatusCode): SchemaParser | undefined {\n assertIsStatusCode(status);\n const local = this.#map.get(status);\n if (local) {\n return local;\n }\n const nested = this.#children.find((it) => it.#map.has(status));\n return nested?.get(status);\n }\n\n validate<T>(status: StatusCode, response: T, strict: boolean): T {\n const parser = this.get(status);\n if (!parser) {\n if (!strict) {\n return response;\n }\n throw new AutomationError(\n `No schema parser registered for status code ${status} and 'requireSchema' is set to true`\n );\n }\n return parser.parse(response) as T;\n }\n}\n\nexport function assertIsStatusCode(value: number): asserts value is StatusCode {\n const result = Object.values(StatusCodes)\n .map((it) => it.status as number)\n .includes(value);\n if (!result) {\n throw new AutomationError(\n `Expected status code ${value} to be a valid status code, but it is not a known HTTP codeF`\n );\n }\n}\n\nexport function IsStatusCode(value: number): value is StatusCode {\n return Object.values(StatusCodes)\n .map((it) => it.status as number)\n .includes(value);\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport isJson from \"@stdlib/assert-is-json\";\nimport { highlight } from \"cli-highlight\";\n\nexport function transformResponse(\n allowPlainText: boolean,\n data: string | undefined | null\n) {\n if (data === null) {\n return null;\n }\n if (data === undefined) {\n return undefined;\n }\n if (data === \"\") {\n return data;\n }\n if (isJson(data)) {\n return JSON.parse(data);\n }\n if ([\"true\", \"false\"].includes(data)) {\n return JSON.parse(data);\n }\n if (/^\\d*\\.?\\d+$/.test(data)) {\n return JSON.parse(data);\n }\n\n if (allowPlainText) {\n return data;\n }\n const response = highlight(data, { language: \"html\" });\n const message = [\n `Could not parse a response as json, and this request was not configured to allow plain text responses.`,\n `To allow plain text responses, use the 'allowPlainText' method on the HTTP client.`,\n \" \",\n response\n ];\n throw new AutomationError(message.join(\"\\n\"));\n}\n","import axios, { AxiosRequestConfig, AxiosResponse } from \"axios\";\nimport { SchemaMap } from \"./schema.map\";\nimport type { RequestState, StatusCode } from \"./types\";\nimport { plainToInstance } from \"class-transformer\";\nimport { HTTPResponse } from \"./http.response\";\nimport { AutomationError } from \"@autometa/errors\";\ntype ExecutorState = {\n response: AxiosResponse<unknown>;\n validated: unknown;\n error: Error | undefined;\n};\nexport class AxiosExecutor {\n #result: ExecutorState = {} as ExecutorState;\n constructor(\n private options: AxiosRequestConfig,\n private schemaMap: SchemaMap,\n private requestState: RequestState,\n private requireSchema: boolean\n ) {}\n\n get error() {\n return this.#result.error;\n }\n get requestSucceeded() {\n return this.#result.response !== undefined;\n }\n\n get validationFailed() {\n return this.#result.validated === undefined;\n }\n\n async tryRequest<T>() {\n try {\n this.#result.response = await axios<T>(this.options);\n this.tryValidate();\n } catch (e) {\n if (this.#result.error) {\n return;\n }\n const { method, fullUrl, data, headers } = this.requestState;\n const body = JSON.stringify(data, null, 2);\n const headersString = JSON.stringify(headers, null, 2);\n const message = `Failed to send request to ${method}:${fullUrl}.\nheaders:\n${headersString}\n \nbody: \n${body}`;\n this.#result.error = new AutomationError(message, { cause: e as Error });\n }\n }\n\n async tryValidate() {\n const { status, data } = this.#result.response;\n const { method, fullUrl } = this.requestState;\n try {\n this.#result.validated = this.schemaMap.validate(\n status as StatusCode,\n data,\n this.requireSchema\n );\n } catch (e) {\n const error = e as Error;\n const message = `Failed to validate response from ${method}:${fullUrl}.\n \nProvided body was:\n${JSON.stringify(data, null, 2)}`;\n this.#result.error = new AutomationError(message, { cause: error });\n }\n }\n\n getValidatedResponse<T>() {\n const { status, statusText, headers } = this.#result.response;\n const { validated: data } = this.#result;\n const { fullUrl: url, method } = this.requestState;\n return plainToInstance(HTTPResponse, {\n status,\n statusText,\n headers,\n data,\n request: {\n url,\n method\n }\n }) as HTTPResponse<T>;\n }\n\n getResponse<T>() {\n const { status, statusText, headers, data } = this.#result.response;\n const { fullUrl: url, method } = this.requestState;\n return plainToInstance(\n HTTPResponse,\n {\n status,\n statusText,\n headers,\n data,\n request: {\n url,\n method\n }\n },\n { excludeExtraneousValues: true }\n ) as HTTPResponse<T>;\n }\n}\n"],"mappings":"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","names":["Fixture","INJECTION_SCOPE","AutomationError","AutomationError","AutomationError","AutomationError","AutomationError","_url","_route","_headers","_requireSchema","_schemaMap","_onBeforeSend","_onAfterSend","_allowPlainText","Fixture","INJECTION_SCOPE"]}
|
package/dist/index.js
CHANGED
|
@@ -85,10 +85,9 @@ var DerivedHTTPResponse = class extends HTTPResponse {
|
|
|
85
85
|
};
|
|
86
86
|
|
|
87
87
|
// src/http.ts
|
|
88
|
-
var
|
|
88
|
+
var import_injection2 = require("@autometa/injection");
|
|
89
89
|
|
|
90
90
|
// src/http.builder.ts
|
|
91
|
-
var import_app = require("@autometa/app");
|
|
92
91
|
var import_errors4 = require("@autometa/errors");
|
|
93
92
|
var import_url_join_ts = require("url-join-ts");
|
|
94
93
|
|
|
@@ -312,6 +311,7 @@ ${JSON.stringify(data, null, 2)}`;
|
|
|
312
311
|
_result = new WeakMap();
|
|
313
312
|
|
|
314
313
|
// src/http.builder.ts
|
|
314
|
+
var import_injection = require("@autometa/injection");
|
|
315
315
|
var _headers, _params, _url, _route, _method, _schemaMap, _responseType, _data, _requireSchema, _allowPlainText, _onBeforeSend, _onAfterSend;
|
|
316
316
|
var HTTPRequestBuilder = class {
|
|
317
317
|
constructor(map) {
|
|
@@ -491,7 +491,7 @@ _allowPlainText = new WeakMap();
|
|
|
491
491
|
_onBeforeSend = new WeakMap();
|
|
492
492
|
_onAfterSend = new WeakMap();
|
|
493
493
|
HTTPRequestBuilder = __decorateClass([
|
|
494
|
-
(0,
|
|
494
|
+
(0, import_injection.Fixture)(import_injection.INJECTION_SCOPE.TRANSIENT)
|
|
495
495
|
], HTTPRequestBuilder);
|
|
496
496
|
|
|
497
497
|
// src/http.ts
|
|
@@ -590,7 +590,7 @@ _onBeforeSend2 = new WeakMap();
|
|
|
590
590
|
_onAfterSend2 = new WeakMap();
|
|
591
591
|
_allowPlainText2 = new WeakMap();
|
|
592
592
|
HTTP = __decorateClass([
|
|
593
|
-
(0,
|
|
593
|
+
(0, import_injection2.Fixture)(import_injection2.INJECTION_SCOPE.TRANSIENT)
|
|
594
594
|
], HTTP);
|
|
595
595
|
// Annotate the CommonJS export names for ESM import in node:
|
|
596
596
|
0 && (module.exports = {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/http.response.ts","../src/http.ts","../src/http.builder.ts","../src/schema.map.ts","../src/transform-response.ts","../src/axios-executor.ts"],"sourcesContent":["// export * from \"./http.builder\";\nexport * from \"./http.response\";\nexport * from \"./types\";\n// export * from \"./schema.map\";\nexport * from \"./http\";\n// export * from './axios-executor'\n","import { Method } from \"axios\";\n\nexport class HTTPResponse<T> {\n status: number;\n statusText: string;\n data: T;\n headers: Record<string, string>;\n request: {\n url: string;\n method: Method;\n };\n static derive<TOriginal, TDerived>(\n original: HTTPResponse<TOriginal>,\n data: TDerived\n ): HTTPResponse<TDerived>;\n static derive<TOriginal, TDerived>(\n original: HTTPResponse<TOriginal>,\n data: (original: TOriginal) => TDerived\n ): HTTPResponse<TDerived>;\n static derive<TOriginal, TDerived>(\n original: HTTPResponse<TOriginal>,\n data: TDerived | ((original: TOriginal) => TDerived)\n ) {\n const response = new DerivedHTTPResponse<TDerived, TOriginal>();\n if (typeof data === \"function\") {\n const fn = data as (original: TOriginal) => TDerived;\n response.data = fn(original.data);\n } else {\n response.data = data;\n }\n response.status = original.status;\n response.statusText = original.statusText;\n response.headers = original.headers;\n response.request = original.request;\n response.actual = original as HTTPResponse<TOriginal>;\n return response;\n }\n}\n\nexport class DerivedHTTPResponse<T, K> extends HTTPResponse<T> {\n actual: HTTPResponse<K>;\n}\n","import { Fixture, LIFE_CYCLE } from \"@autometa/app\";\nimport { HTTPRequestBuilder } from \"./http.builder\";\nimport { SchemaMap } from \"./schema.map\";\nimport { RequestHook, ResponseHook, SchemaParser, StatusCode } from \"./types\";\nexport type DynamicHeader = () => string;\n@Fixture(LIFE_CYCLE.Transient)\nexport class HTTP {\n #url: string;\n #route: string[] = [];\n #headers = new Map<string, string | DynamicHeader>();\n #requireSchema = false;\n #schemaMap: SchemaMap = new SchemaMap();\n #onBeforeSend: RequestHook[] = [];\n #onAfterSend: ResponseHook<unknown>[] = [];\n #allowPlainText = false;\n\n allowPlainText(value: boolean) {\n this.#allowPlainText = value;\n return this;\n }\n requireSchema(value: boolean) {\n this.#requireSchema = value;\n return this;\n }\n\n url(url: string) {\n this.#url = url;\n return this;\n }\n\n sharedOnBeforeSend(hook: RequestHook) {\n this.#onBeforeSend.push(hook);\n return this;\n }\n\n sharedOnReceiveResponse(hook: ResponseHook<unknown>) {\n this.#onAfterSend.push(hook);\n return this;\n }\n\n onBeforeSend(hook: RequestHook) {\n return this.builder().onBeforeSend(hook);\n }\n\n onReceiveResponse(hook: ResponseHook<unknown>) {\n return this.builder().onReceivedResponse(hook);\n }\n\n sharedSchema(parser: SchemaParser, ...codes: StatusCode[]): HTTP;\n sharedSchema(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): HTTP;\n sharedSchema(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.#schemaMap.register(parser, ...(args as any));\n return this;\n }\n\n schema(parser: SchemaParser, ...codes: StatusCode[]): HTTPRequestBuilder;\n schema(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): HTTPRequestBuilder;\n schema(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.builder().schema(parser, ...(args as any));\n }\n\n sharedRoute(...route: string[]) {\n this.#route.push(...route);\n return this;\n }\n\n param(name: string, value: string) {\n return this.builder().param(name, value);\n }\n\n params(dict: Record<string, string>) {\n return this.builder().params(dict);\n }\n\n data<T>(data: T) {\n return this.builder().data(data);\n }\n\n sharedHeader(name: string, value: string | DynamicHeader) {\n this.#headers.set(name, value);\n return this;\n }\n\n route(...route: (string | number | boolean)[]) {\n return this.builder().route(...route);\n }\n\n header<T>(name: string, value: T) {\n return this.builder().header(name, value);\n }\n\n headers(dict: Record<string, string>) {\n return this.builder().headers(dict);\n }\n\n get() {\n return this.builder().get();\n }\n\n private builder() {\n const headers = this.convertFactoriesToString();\n return new HTTPRequestBuilder(this.#schemaMap)\n .url(this.#url)\n .route(...this.#route)\n .allowPlainText(this.#allowPlainText)\n .headers(headers)\n .requireSchema(this.#requireSchema)\n .onBeforeSend(...this.#onBeforeSend)\n .onReceivedResponse(...this.#onAfterSend);\n }\n\n private convertFactoriesToString(){\n const dict: Record<string, string> = {};\n for (const [key, value] of this.#headers.entries()) {\n dict[key] = typeof value === \"string\" ? value : value();\n }\n return dict;\n }\n}\n","import { Fixture, LIFE_CYCLE } from \"@autometa/app\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { AxiosRequestConfig, Method, ResponseType } from \"axios\";\nimport { urlJoinP } from \"url-join-ts\";\nimport { HTTPResponse } from \"./http.response\";\nimport { SchemaMap } from \"./schema.map\";\nimport {\n RequestHook,\n RequestState,\n ResponseHook,\n SchemaParser,\n StatusCode\n} from \"./types\";\nimport { transformResponse } from \"./transform-response\";\nimport { AxiosExecutor } from \"./axios-executor\";\n\n@Fixture(LIFE_CYCLE.Transient)\nexport class HTTPRequestBuilder {\n #headers = new Map<string, string>();\n #params = new Map<string, unknown>();\n #url: string;\n #route: string[] = [];\n #method: Method;\n #schemaMap = new SchemaMap();\n #responseType: ResponseType | undefined = \"json\";\n #data: unknown;\n #requireSchema = false;\n #allowPlainText = false;\n #onBeforeSend: RequestHook[] = [];\n #onAfterSend: ResponseHook<unknown>[] = [];\n constructor(map: SchemaMap) {\n this.#schemaMap = new SchemaMap().including(map);\n }\n requireSchema(value: boolean) {\n this.#requireSchema = value;\n return this;\n }\n get currentState(): RequestState {\n const fullUrl = this.currentUrl;\n return {\n headers: Object.fromEntries(this.#headers),\n params: Object.fromEntries(this.#params),\n url: this.#url,\n route: this.#route,\n responseType: this.#responseType,\n data: this.#data,\n method: this.#method,\n fullUrl\n };\n }\n\n get currentUrl() {\n const params = Object.fromEntries(this.#params);\n return urlJoinP(this.#url, this.#route, params);\n }\n\n url(url: string) {\n this.#url = url;\n return this;\n }\n\n allowPlainText(value: boolean) {\n this.#allowPlainText = value;\n return this;\n }\n\n schema(parser: SchemaParser, ...codes: StatusCode[]): HTTPRequestBuilder;\n schema(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): HTTPRequestBuilder;\n\n schema(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n this.#schemaMap.register(parser, ...args);\n return this;\n }\n\n onBeforeSend(...hook: RequestHook[]) {\n this.#onBeforeSend.push(...hook);\n return this;\n }\n\n onReceivedResponse(...hook: ResponseHook<unknown>[]) {\n this.#onAfterSend.push(...hook);\n return this;\n }\n\n route(...route: (string | number | boolean)[]) {\n this.#route.push(...route.map((it) => `${it}`));\n return this;\n }\n\n header<T>(name: string, value: T) {\n const val = Array.isArray(value) ? value.join(\",\") : `${value}`;\n this.#headers.set(name, val);\n return this;\n }\n\n headers(dict: Record<string, string>) {\n Object.entries(dict).forEach(([name, value]) =>\n this.#headers.set(name, value)\n );\n return this;\n }\n\n param<T>(name: string, value: T) {\n this.#params.set(name, value);\n return this;\n }\n\n params(dict: Record<string, unknown>) {\n Object.entries(dict).forEach(([name, value]) => this.param(name, value));\n return this;\n }\n\n data<T>(data: T) {\n this.#data = data;\n return this;\n }\n\n async post<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"POST\");\n }\n\n async get<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"GET\");\n }\n\n async delete<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"DELETE\");\n }\n\n async put<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"PUT\");\n }\n\n async patch<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"PATCH\");\n }\n private async _request<T>(method: Method) {\n this.#method = method;\n\n const options: AxiosRequestConfig = this.constructOptions<T>(method);\n this.tryRunBeforeHooks();\n const executor = new AxiosExecutor(\n options,\n this.#schemaMap,\n this.currentState,\n this.#requireSchema\n );\n await executor.tryRequest<T>();\n if (executor.requestSucceeded && !executor.validationFailed) {\n const response = executor.getValidatedResponse<T>();\n this.tryRunAfterHooks<T>(response);\n return response;\n }\n if (executor.requestSucceeded) {\n const response = executor.getResponse<T>();\n // this.tryOnValidationFailed(response);\n this.tryRunAfterHooks<T>(response);\n }\n throw executor.error;\n }\n\n private constructOptions<T>(method: string): AxiosRequestConfig<T> {\n const url = this.currentUrl;\n const headers = this.#headers && Object.fromEntries(this.#headers);\n const responseType = this.#responseType;\n const data = this.#data as T;\n return {\n method,\n url,\n headers,\n data,\n responseType,\n validateStatus: function (status) {\n return status >= 100 && status < 500;\n },\n transformResponse: transformResponse.bind(null, this.#allowPlainText)\n };\n }\n\n private tryRunBeforeHooks() {\n let index = 0;\n try {\n for (const hook of this.#onBeforeSend) {\n hook(this.currentState);\n index++;\n }\n } catch (e) {\n const error = e as Error;\n const message = `HTTP Client 'onBeforeRequest' experienced an error at listener count ${index}`;\n throw new AutomationError(message, { cause: error });\n }\n }\n private tryRunAfterHooks<T>(response: HTTPResponse<T>) {\n let index = 0;\n try {\n for (const hook of this.#onAfterSend) {\n hook(response);\n index++;\n }\n } catch (e) {\n const error = e as Error;\n const message = `HTTP Client 'onRequestReceived' experienced an error at listener count ${index}`;\n throw new AutomationError(message, { cause: error });\n }\n }\n}\n","import { StatusCode, SchemaParser } from \"./types\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { StatusCodes } from \"@autometa/status-codes\";\n\nexport class SchemaMap {\n #children: SchemaMap[] = [];\n #map: Map<StatusCode, SchemaParser> = new Map();\n register(\n parser: SchemaParser,\n ...codes: StatusCode[]\n ): (typeof parser)[\"parse\"];\n register(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): (typeof parser)[\"parse\"];\n register(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ): (typeof parser)[\"parse\"];\n register(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n args.forEach((arg) => {\n if (typeof arg === \"number\") {\n this.registerSingle(parser, arg);\n } else {\n this.registerRange(parser, arg);\n }\n });\n return parser.parse;\n }\n\n registerSingle(parser: SchemaParser, ...codes: StatusCode[]) {\n codes.forEach((code) => {\n if (this.#map.has(code)) {\n throw new AutomationError(\n `Status code ${code} is already registered with a parser`\n );\n }\n assertIsStatusCode(code);\n this.#map.set(code, parser);\n });\n }\n\n including(map: SchemaMap) {\n this.#children.includes(map);\n return this;\n }\n registerRange(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ) {\n range.forEach(({ from, to }) => {\n assertIsStatusCode(from);\n assertIsStatusCode(to);\n for (let i = from; i <= to; i++) {\n if (!IsStatusCode(i)) {\n continue;\n }\n if (this.#map.has(i)) {\n throw new AutomationError(\n `Status code ${i} is already registered with a parser`\n );\n }\n this.#map.set(i, parser);\n }\n });\n }\n\n get(status: StatusCode): SchemaParser | undefined {\n assertIsStatusCode(status);\n const local = this.#map.get(status);\n if (local) {\n return local;\n }\n const nested = this.#children.find((it) => it.#map.has(status));\n return nested?.get(status);\n }\n\n validate<T>(status: StatusCode, response: T, strict: boolean): T {\n const parser = this.get(status);\n if (!parser) {\n if (!strict) {\n return response;\n }\n throw new AutomationError(\n `No schema parser registered for status code ${status} and 'requireSchema' is set to true`\n );\n }\n return parser.parse(response) as T;\n }\n}\n\nexport function assertIsStatusCode(value: number): asserts value is StatusCode {\n const result = Object.values(StatusCodes)\n .map((it) => it.status as number)\n .includes(value);\n if (!result) {\n throw new AutomationError(\n `Expected status code ${value} to be a valid status code, but it is not a known HTTP codeF`\n );\n }\n}\n\nexport function IsStatusCode(value: number): value is StatusCode {\n return Object.values(StatusCodes)\n .map((it) => it.status as number)\n .includes(value);\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport isJson from \"@stdlib/assert-is-json\";\nimport { highlight } from \"cli-highlight\";\n\nexport function transformResponse(\n allowPlainText: boolean,\n data: string | undefined | null\n) {\n if (data === null) {\n return null;\n }\n if (data === undefined) {\n return undefined;\n }\n if (data === \"\") {\n return data;\n }\n if (isJson(data)) {\n return JSON.parse(data);\n }\n if ([\"true\", \"false\"].includes(data)) {\n return JSON.parse(data);\n }\n if (/^\\d*\\.?\\d+$/.test(data)) {\n return JSON.parse(data);\n }\n\n if (allowPlainText) {\n return data;\n }\n const response = highlight(data, { language: \"html\" });\n const message = [\n `Could not parse a response as json, and this request was not configured to allow plain text responses.`,\n `To allow plain text responses, use the 'allowPlainText' method on the HTTP client.`,\n \" \",\n response\n ];\n throw new AutomationError(message.join(\"\\n\"));\n}\n","import axios, { AxiosRequestConfig, AxiosResponse } from \"axios\";\nimport { SchemaMap } from \"./schema.map\";\nimport type { RequestState, StatusCode } from \"./types\";\nimport { plainToInstance } from \"class-transformer\";\nimport { HTTPResponse } from \"./http.response\";\nimport { AutomationError } from \"@autometa/errors\";\ntype ExecutorState = {\n response: AxiosResponse<unknown>;\n validated: unknown;\n error: Error | undefined;\n};\nexport class AxiosExecutor {\n #result: ExecutorState = {} as ExecutorState;\n constructor(\n private options: AxiosRequestConfig,\n private schemaMap: SchemaMap,\n private requestState: RequestState,\n private requireSchema: boolean\n ) {}\n\n get error() {\n return this.#result.error;\n }\n get requestSucceeded() {\n return this.#result.response !== undefined;\n }\n\n get validationFailed() {\n return this.#result.validated === undefined;\n }\n\n async tryRequest<T>() {\n try {\n this.#result.response = await axios<T>(this.options);\n this.tryValidate();\n } catch (e) {\n if (this.#result.error) {\n return;\n }\n const { method, fullUrl, data, headers } = this.requestState;\n const body = JSON.stringify(data, null, 2);\n const headersString = JSON.stringify(headers, null, 2);\n const message = `Failed to send request to ${method}:${fullUrl}.\nheaders:\n${headersString}\n \nbody: \n${body}`;\n this.#result.error = new AutomationError(message, { cause: e as Error });\n }\n }\n\n async tryValidate() {\n const { status, data } = this.#result.response;\n const { method, fullUrl } = this.requestState;\n try {\n this.#result.validated = this.schemaMap.validate(\n status as StatusCode,\n data,\n this.requireSchema\n );\n } catch (e) {\n const error = e as Error;\n const message = `Failed to validate response from ${method}:${fullUrl}.\n \nProvided body was:\n${JSON.stringify(data, null, 2)}`;\n this.#result.error = new AutomationError(message, { cause: error });\n }\n }\n\n getValidatedResponse<T>() {\n const { status, statusText, headers } = this.#result.response;\n const { validated: data } = this.#result;\n const { fullUrl: url, method } = this.requestState;\n return plainToInstance(HTTPResponse, {\n status,\n statusText,\n headers,\n data,\n request: {\n url,\n method\n }\n }) as HTTPResponse<T>;\n }\n\n getResponse<T>() {\n const { status, statusText, headers, data } = this.#result.response;\n const { fullUrl: url, method } = this.requestState;\n return plainToInstance(\n HTTPResponse,\n {\n status,\n statusText,\n headers,\n data,\n request: {\n url,\n method\n }\n },\n { excludeExtraneousValues: true }\n ) as HTTPResponse<T>;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEO,IAAM,eAAN,MAAsB;AAAA,EAiB3B,OAAO,OACL,UACA,MACA;AACA,UAAM,WAAW,IAAI,oBAAyC;AAC9D,QAAI,OAAO,SAAS,YAAY;AAC9B,YAAM,KAAK;AACX,eAAS,OAAO,GAAG,SAAS,IAAI;AAAA,IAClC,OAAO;AACL,eAAS,OAAO;AAAA,IAClB;AACA,aAAS,SAAS,SAAS;AAC3B,aAAS,aAAa,SAAS;AAC/B,aAAS,UAAU,SAAS;AAC5B,aAAS,UAAU,SAAS;AAC5B,aAAS,SAAS;AAClB,WAAO;AAAA,EACT;AACF;AAEO,IAAM,sBAAN,cAAwC,aAAgB;AAE/D;;;ACzCA,IAAAA,cAAoC;;;ACApC,iBAAoC;AACpC,IAAAC,iBAAgC;AAEhC,yBAAyB;;;ACFzB,oBAAgC;AAChC,0BAA4B;AAF5B;AAIO,IAAM,YAAN,MAAgB;AAAA,EAAhB;AACL,kCAAyB,CAAC;AAC1B,6BAAsC,oBAAI,IAAI;AAAA;AAAA,EAa9C,SACE,WACG,MACH;AACA,SAAK,QAAQ,CAAC,QAAQ;AACpB,UAAI,OAAO,QAAQ,UAAU;AAC3B,aAAK,eAAe,QAAQ,GAAG;AAAA,MACjC,OAAO;AACL,aAAK,cAAc,QAAQ,GAAG;AAAA,MAChC;AAAA,IACF,CAAC;AACD,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,eAAe,WAAyB,OAAqB;AAC3D,UAAM,QAAQ,CAAC,SAAS;AACtB,UAAI,mBAAK,MAAK,IAAI,IAAI,GAAG;AACvB,cAAM,IAAI;AAAA,UACR,eAAe,IAAI;AAAA,QACrB;AAAA,MACF;AACA,yBAAmB,IAAI;AACvB,yBAAK,MAAK,IAAI,MAAM,MAAM;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,KAAgB;AACxB,uBAAK,WAAU,SAAS,GAAG;AAC3B,WAAO;AAAA,EACT;AAAA,EACA,cACE,WACG,OACH;AACA,UAAM,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM;AAC9B,yBAAmB,IAAI;AACvB,yBAAmB,EAAE;AACrB,eAAS,IAAI,MAAM,KAAK,IAAI,KAAK;AAC/B,YAAI,CAAC,aAAa,CAAC,GAAG;AACpB;AAAA,QACF;AACA,YAAI,mBAAK,MAAK,IAAI,CAAC,GAAG;AACpB,gBAAM,IAAI;AAAA,YACR,eAAe,CAAC;AAAA,UAClB;AAAA,QACF;AACA,2BAAK,MAAK,IAAI,GAAG,MAAM;AAAA,MACzB;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,IAAI,QAA8C;AAChD,uBAAmB,MAAM;AACzB,UAAM,QAAQ,mBAAK,MAAK,IAAI,MAAM;AAClC,QAAI,OAAO;AACT,aAAO;AAAA,IACT;AACA,UAAM,SAAS,mBAAK,WAAU,KAAK,CAAC,OAAO,iBAAG,MAAK,IAAI,MAAM,CAAC;AAC9D,WAAO,QAAQ,IAAI,MAAM;AAAA,EAC3B;AAAA,EAEA,SAAY,QAAoB,UAAa,QAAoB;AAC/D,UAAM,SAAS,KAAK,IAAI,MAAM;AAC9B,QAAI,CAAC,QAAQ;AACX,UAAI,CAAC,QAAQ;AACX,eAAO;AAAA,MACT;AACA,YAAM,IAAI;AAAA,QACR,+CAA+C,MAAM;AAAA,MACvD;AAAA,IACF;AACA,WAAO,OAAO,MAAM,QAAQ;AAAA,EAC9B;AACF;AAvFE;AACA;AAwFK,SAAS,mBAAmB,OAA4C;AAC7E,QAAM,SAAS,OAAO,OAAO,+BAAW,EACrC,IAAI,CAAC,OAAO,GAAG,MAAgB,EAC/B,SAAS,KAAK;AACjB,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI;AAAA,MACR,wBAAwB,KAAK;AAAA,IAC/B;AAAA,EACF;AACF;AAEO,SAAS,aAAa,OAAoC;AAC/D,SAAO,OAAO,OAAO,+BAAW,EAC7B,IAAI,CAAC,OAAO,GAAG,MAAgB,EAC/B,SAAS,KAAK;AACnB;;;AC7GA,IAAAC,iBAAgC;AAChC,4BAAmB;AACnB,2BAA0B;AAEnB,SAAS,kBACd,gBACA,MACA;AACA,MAAI,SAAS,MAAM;AACjB,WAAO;AAAA,EACT;AACA,MAAI,SAAS,QAAW;AACtB,WAAO;AAAA,EACT;AACA,MAAI,SAAS,IAAI;AACf,WAAO;AAAA,EACT;AACA,UAAI,sBAAAC,SAAO,IAAI,GAAG;AAChB,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB;AACA,MAAI,CAAC,QAAQ,OAAO,EAAE,SAAS,IAAI,GAAG;AACpC,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB;AACA,MAAI,cAAc,KAAK,IAAI,GAAG;AAC5B,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB;AAEA,MAAI,gBAAgB;AAClB,WAAO;AAAA,EACT;AACA,QAAM,eAAW,gCAAU,MAAM,EAAE,UAAU,OAAO,CAAC;AACrD,QAAM,UAAU;AAAA,IACd;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACA,QAAM,IAAI,+BAAgB,QAAQ,KAAK,IAAI,CAAC;AAC9C;;;ACtCA,mBAAyD;AAGzD,+BAAgC;AAEhC,IAAAC,iBAAgC;AALhC;AAWO,IAAM,gBAAN,MAAoB;AAAA,EAEzB,YACU,SACA,WACA,cACA,eACR;AAJQ;AACA;AACA;AACA;AALV,gCAAyB,CAAC;AAAA,EAMvB;AAAA,EAEH,IAAI,QAAQ;AACV,WAAO,mBAAK,SAAQ;AAAA,EACtB;AAAA,EACA,IAAI,mBAAmB;AACrB,WAAO,mBAAK,SAAQ,aAAa;AAAA,EACnC;AAAA,EAEA,IAAI,mBAAmB;AACrB,WAAO,mBAAK,SAAQ,cAAc;AAAA,EACpC;AAAA,EAEA,MAAM,aAAgB;AACpB,QAAI;AACF,yBAAK,SAAQ,WAAW,UAAM,aAAAC,SAAS,KAAK,OAAO;AACnD,WAAK,YAAY;AAAA,IACnB,SAAS,GAAG;AACV,UAAI,mBAAK,SAAQ,OAAO;AACtB;AAAA,MACF;AACA,YAAM,EAAE,QAAQ,SAAS,MAAM,QAAQ,IAAI,KAAK;AAChD,YAAM,OAAO,KAAK,UAAU,MAAM,MAAM,CAAC;AACzC,YAAM,gBAAgB,KAAK,UAAU,SAAS,MAAM,CAAC;AACrD,YAAM,UAAU,6BAA6B,MAAM,IAAI,OAAO;AAAA;AAAA,EAElE,aAAa;AAAA;AAAA;AAAA,EAGb,IAAI;AACA,yBAAK,SAAQ,QAAQ,IAAI,+BAAgB,SAAS,EAAE,OAAO,EAAW,CAAC;AAAA,IACzE;AAAA,EACF;AAAA,EAEA,MAAM,cAAc;AAClB,UAAM,EAAE,QAAQ,KAAK,IAAI,mBAAK,SAAQ;AACtC,UAAM,EAAE,QAAQ,QAAQ,IAAI,KAAK;AACjC,QAAI;AACF,yBAAK,SAAQ,YAAY,KAAK,UAAU;AAAA,QACtC;AAAA,QACA;AAAA,QACA,KAAK;AAAA,MACP;AAAA,IACF,SAAS,GAAG;AACV,YAAM,QAAQ;AACd,YAAM,UAAU,oCAAoC,MAAM,IAAI,OAAO;AAAA;AAAA;AAAA,EAGzE,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AACzB,yBAAK,SAAQ,QAAQ,IAAI,+BAAgB,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,IACpE;AAAA,EACF;AAAA,EAEA,uBAA0B;AACxB,UAAM,EAAE,QAAQ,YAAY,QAAQ,IAAI,mBAAK,SAAQ;AACrD,UAAM,EAAE,WAAW,KAAK,IAAI,mBAAK;AACjC,UAAM,EAAE,SAAS,KAAK,OAAO,IAAI,KAAK;AACtC,eAAO,0CAAgB,cAAc;AAAA,MACnC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS;AAAA,QACP;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,cAAiB;AACf,UAAM,EAAE,QAAQ,YAAY,SAAS,KAAK,IAAI,mBAAK,SAAQ;AAC3D,UAAM,EAAE,SAAS,KAAK,OAAO,IAAI,KAAK;AACtC,eAAO;AAAA,MACL;AAAA,MACA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS;AAAA,UACP;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,EAAE,yBAAyB,KAAK;AAAA,IAClC;AAAA,EACF;AACF;AA7FE;;;AHZF;AAiBO,IAAM,qBAAN,MAAyB;AAAA,EAa9B,YAAY,KAAgB;AAZ5B,iCAAW,oBAAI,IAAoB;AACnC,gCAAU,oBAAI,IAAqB;AACnC;AACA,+BAAmB,CAAC;AACpB;AACA,mCAAa,IAAI,UAAU;AAC3B,sCAA0C;AAC1C;AACA,uCAAiB;AACjB,wCAAkB;AAClB,sCAA+B,CAAC;AAChC,qCAAwC,CAAC;AAEvC,uBAAK,YAAa,IAAI,UAAU,EAAE,UAAU,GAAG;AAAA,EACjD;AAAA,EACA,cAAc,OAAgB;AAC5B,uBAAK,gBAAiB;AACtB,WAAO;AAAA,EACT;AAAA,EACA,IAAI,eAA6B;AAC/B,UAAM,UAAU,KAAK;AACrB,WAAO;AAAA,MACL,SAAS,OAAO,YAAY,mBAAK,SAAQ;AAAA,MACzC,QAAQ,OAAO,YAAY,mBAAK,QAAO;AAAA,MACvC,KAAK,mBAAK;AAAA,MACV,OAAO,mBAAK;AAAA,MACZ,cAAc,mBAAK;AAAA,MACnB,MAAM,mBAAK;AAAA,MACX,QAAQ,mBAAK;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,aAAa;AACf,UAAM,SAAS,OAAO,YAAY,mBAAK,QAAO;AAC9C,eAAO,6BAAS,mBAAK,OAAM,mBAAK,SAAQ,MAAM;AAAA,EAChD;AAAA,EAEA,IAAI,KAAa;AACf,uBAAK,MAAO;AACZ,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,OAAgB;AAC7B,uBAAK,iBAAkB;AACvB,WAAO;AAAA,EACT;AAAA,EAQA,OACE,WACG,MACH;AACA,uBAAK,YAAW,SAAS,QAAQ,GAAG,IAAI;AACxC,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,MAAqB;AACnC,uBAAK,eAAc,KAAK,GAAG,IAAI;AAC/B,WAAO;AAAA,EACT;AAAA,EAEA,sBAAsB,MAA+B;AACnD,uBAAK,cAAa,KAAK,GAAG,IAAI;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAsC;AAC7C,uBAAK,QAAO,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,GAAG,EAAE,EAAE,CAAC;AAC9C,WAAO;AAAA,EACT;AAAA,EAEA,OAAU,MAAc,OAAU;AAChC,UAAM,MAAM,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,GAAG,IAAI,GAAG,KAAK;AAC7D,uBAAK,UAAS,IAAI,MAAM,GAAG;AAC3B,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,MAA8B;AACpC,WAAO,QAAQ,IAAI,EAAE;AAAA,MAAQ,CAAC,CAAC,MAAM,KAAK,MACxC,mBAAK,UAAS,IAAI,MAAM,KAAK;AAAA,IAC/B;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAS,MAAc,OAAU;AAC/B,uBAAK,SAAQ,IAAI,MAAM,KAAK;AAC5B,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,MAA+B;AACpC,WAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,MAAM,KAAK,MAAM,KAAK,MAAM,MAAM,KAAK,CAAC;AACvE,WAAO;AAAA,EACT;AAAA,EAEA,KAAQ,MAAS;AACf,uBAAK,OAAQ;AACb,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAgD;AACpD,WAAO,KAAK,SAAS,MAAM;AAAA,EAC7B;AAAA,EAEA,MAAM,MAA+C;AACnD,WAAO,KAAK,SAAS,KAAK;AAAA,EAC5B;AAAA,EAEA,MAAM,SAAkD;AACtD,WAAO,KAAK,SAAS,QAAQ;AAAA,EAC/B;AAAA,EAEA,MAAM,MAA+C;AACnD,WAAO,KAAK,SAAS,KAAK;AAAA,EAC5B;AAAA,EAEA,MAAM,QAAiD;AACrD,WAAO,KAAK,SAAS,OAAO;AAAA,EAC9B;AAAA,EACA,MAAc,SAAY,QAAgB;AACxC,uBAAK,SAAU;AAEf,UAAM,UAA8B,KAAK,iBAAoB,MAAM;AACnE,SAAK,kBAAkB;AACvB,UAAM,WAAW,IAAI;AAAA,MACnB;AAAA,MACA,mBAAK;AAAA,MACL,KAAK;AAAA,MACL,mBAAK;AAAA,IACP;AACA,UAAM,SAAS,WAAc;AAC7B,QAAI,SAAS,oBAAoB,CAAC,SAAS,kBAAkB;AAC3D,YAAM,WAAW,SAAS,qBAAwB;AAClD,WAAK,iBAAoB,QAAQ;AACjC,aAAO;AAAA,IACT;AACA,QAAI,SAAS,kBAAkB;AAC7B,YAAM,WAAW,SAAS,YAAe;AAEzC,WAAK,iBAAoB,QAAQ;AAAA,IACnC;AACA,UAAM,SAAS;AAAA,EACjB;AAAA,EAEQ,iBAAoB,QAAuC;AACjE,UAAM,MAAM,KAAK;AACjB,UAAM,UAAU,mBAAK,aAAY,OAAO,YAAY,mBAAK,SAAQ;AACjE,UAAM,eAAe,mBAAK;AAC1B,UAAM,OAAO,mBAAK;AAClB,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,gBAAgB,SAAU,QAAQ;AAChC,eAAO,UAAU,OAAO,SAAS;AAAA,MACnC;AAAA,MACA,mBAAmB,kBAAkB,KAAK,MAAM,mBAAK,gBAAe;AAAA,IACtE;AAAA,EACF;AAAA,EAEQ,oBAAoB;AAC1B,QAAI,QAAQ;AACZ,QAAI;AACF,iBAAW,QAAQ,mBAAK,gBAAe;AACrC,aAAK,KAAK,YAAY;AACtB;AAAA,MACF;AAAA,IACF,SAAS,GAAG;AACV,YAAM,QAAQ;AACd,YAAM,UAAU,wEAAwE,KAAK;AAC7F,YAAM,IAAI,+BAAgB,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,IACrD;AAAA,EACF;AAAA,EACQ,iBAAoB,UAA2B;AACrD,QAAI,QAAQ;AACZ,QAAI;AACF,iBAAW,QAAQ,mBAAK,eAAc;AACpC,aAAK,QAAQ;AACb;AAAA,MACF;AAAA,IACF,SAAS,GAAG;AACV,YAAM,QAAQ;AACd,YAAM,UAAU,0EAA0E,KAAK;AAC/F,YAAM,IAAI,+BAAgB,SAAS,EAAE,OAAO,MAAM,CAAC;AAAA,IACrD;AAAA,EACF;AACF;AAjME;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAZW,qBAAN;AAAA,MADN,oBAAQ,sBAAW,SAAS;AAAA,GAChB;;;ADjBb,IAAAC,OAAAC,SAAAC,WAAAC,iBAAAC,aAAAC,gBAAAC,eAAAC;AAMO,IAAM,OAAN,MAAW;AAAA,EAAX;AACL,uBAAAP,OAAA;AACA,uBAAAC,SAAmB,CAAC;AACpB,uBAAAC,WAAW,oBAAI,IAAoC;AACnD,uBAAAC,iBAAiB;AACjB,uBAAAC,aAAwB,IAAI,UAAU;AACtC,uBAAAC,gBAA+B,CAAC;AAChC,uBAAAC,eAAwC,CAAC;AACzC,uBAAAC,kBAAkB;AAAA;AAAA,EAElB,eAAe,OAAgB;AAC7B,uBAAKA,kBAAkB;AACvB,WAAO;AAAA,EACT;AAAA,EACA,cAAc,OAAgB;AAC5B,uBAAKJ,iBAAiB;AACtB,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,KAAa;AACf,uBAAKH,OAAO;AACZ,WAAO;AAAA,EACT;AAAA,EAEA,mBAAmB,MAAmB;AACpC,uBAAKK,gBAAc,KAAK,IAAI;AAC5B,WAAO;AAAA,EACT;AAAA,EAEA,wBAAwB,MAA6B;AACnD,uBAAKC,eAAa,KAAK,IAAI;AAC3B,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,MAAmB;AAC9B,WAAO,KAAK,QAAQ,EAAE,aAAa,IAAI;AAAA,EACzC;AAAA,EAEA,kBAAkB,MAA6B;AAC7C,WAAO,KAAK,QAAQ,EAAE,mBAAmB,IAAI;AAAA,EAC/C;AAAA,EAOA,aACE,WACG,MACH;AAEA,uBAAKF,aAAW,SAAS,QAAQ,GAAI,IAAY;AACjD,WAAO;AAAA,EACT;AAAA,EAOA,OACE,WACG,MACH;AAEA,WAAO,KAAK,QAAQ,EAAE,OAAO,QAAQ,GAAI,IAAY;AAAA,EACvD;AAAA,EAEA,eAAe,OAAiB;AAC9B,uBAAKH,SAAO,KAAK,GAAG,KAAK;AACzB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,MAAc,OAAe;AACjC,WAAO,KAAK,QAAQ,EAAE,MAAM,MAAM,KAAK;AAAA,EACzC;AAAA,EAEA,OAAO,MAA8B;AACnC,WAAO,KAAK,QAAQ,EAAE,OAAO,IAAI;AAAA,EACnC;AAAA,EAEA,KAAQ,MAAS;AACf,WAAO,KAAK,QAAQ,EAAE,KAAK,IAAI;AAAA,EACjC;AAAA,EAEA,aAAa,MAAc,OAA+B;AACxD,uBAAKC,WAAS,IAAI,MAAM,KAAK;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,OAAsC;AAC7C,WAAO,KAAK,QAAQ,EAAE,MAAM,GAAG,KAAK;AAAA,EACtC;AAAA,EAEA,OAAU,MAAc,OAAU;AAChC,WAAO,KAAK,QAAQ,EAAE,OAAO,MAAM,KAAK;AAAA,EAC1C;AAAA,EAEA,QAAQ,MAA8B;AACpC,WAAO,KAAK,QAAQ,EAAE,QAAQ,IAAI;AAAA,EACpC;AAAA,EAEA,MAAM;AACJ,WAAO,KAAK,QAAQ,EAAE,IAAI;AAAA,EAC5B;AAAA,EAEQ,UAAU;AAChB,UAAM,UAAU,KAAK,yBAAyB;AAC9C,WAAO,IAAI,mBAAmB,mBAAKE,YAAU,EAC1C,IAAI,mBAAKJ,MAAI,EACb,MAAM,GAAG,mBAAKC,QAAM,EACpB,eAAe,mBAAKM,iBAAe,EACnC,QAAQ,OAAO,EACf,cAAc,mBAAKJ,gBAAc,EACjC,aAAa,GAAG,mBAAKE,eAAa,EAClC,mBAAmB,GAAG,mBAAKC,cAAY;AAAA,EAC5C;AAAA,EAEQ,2BAA0B;AAChC,UAAM,OAA+B,CAAC;AACtC,eAAW,CAAC,KAAK,KAAK,KAAK,mBAAKJ,WAAS,QAAQ,GAAG;AAClD,WAAK,GAAG,IAAI,OAAO,UAAU,WAAW,QAAQ,MAAM;AAAA,IACxD;AACA,WAAO;AAAA,EACT;AACF;AA7HEF,QAAA;AACAC,UAAA;AACAC,YAAA;AACAC,kBAAA;AACAC,cAAA;AACAC,iBAAA;AACAC,gBAAA;AACAC,mBAAA;AARW,OAAN;AAAA,MADN,qBAAQ,uBAAW,SAAS;AAAA,GAChB;","names":["import_app","import_errors","import_errors","isJson","import_errors","axios","_url","_route","_headers","_requireSchema","_schemaMap","_onBeforeSend","_onAfterSend","_allowPlainText"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/http.response.ts","../src/http.ts","../src/http.builder.ts","../src/schema.map.ts","../src/transform-response.ts","../src/axios-executor.ts"],"sourcesContent":["// export * from \"./http.builder\";\nexport * from \"./http.response\";\nexport * from \"./types\";\n// export * from \"./schema.map\";\nexport * from \"./http\";\n// export * from './axios-executor'\n","import { Method } from \"axios\";\n\nexport class HTTPResponse<T> {\n status: number;\n statusText: string;\n data: T;\n headers: Record<string, string>;\n request: {\n url: string;\n method: Method;\n };\n static derive<TOriginal, TDerived>(\n original: HTTPResponse<TOriginal>,\n data: TDerived\n ): HTTPResponse<TDerived>;\n static derive<TOriginal, TDerived>(\n original: HTTPResponse<TOriginal>,\n data: (original: TOriginal) => TDerived\n ): HTTPResponse<TDerived>;\n static derive<TOriginal, TDerived>(\n original: HTTPResponse<TOriginal>,\n data: TDerived | ((original: TOriginal) => TDerived)\n ) {\n const response = new DerivedHTTPResponse<TDerived, TOriginal>();\n if (typeof data === \"function\") {\n const fn = data as (original: TOriginal) => TDerived;\n response.data = fn(original.data);\n } else {\n response.data = data;\n }\n response.status = original.status;\n response.statusText = original.statusText;\n response.headers = original.headers;\n response.request = original.request;\n response.actual = original as HTTPResponse<TOriginal>;\n return response;\n }\n}\n\nexport class DerivedHTTPResponse<T, K> extends HTTPResponse<T> {\n actual: HTTPResponse<K>;\n}\n","import { Fixture, INJECTION_SCOPE } from \"@autometa/injection\";\nimport { HTTPRequestBuilder } from \"./http.builder\";\nimport { SchemaMap } from \"./schema.map\";\nimport { RequestHook, ResponseHook, SchemaParser, StatusCode } from \"./types\";\nexport type DynamicHeader = () => string;\n@Fixture(INJECTION_SCOPE.TRANSIENT)\nexport class HTTP {\n #url: string;\n #route: string[] = [];\n #headers = new Map<string, string | DynamicHeader>();\n #requireSchema = false;\n #schemaMap: SchemaMap = new SchemaMap();\n #onBeforeSend: RequestHook[] = [];\n #onAfterSend: ResponseHook<unknown>[] = [];\n #allowPlainText = false;\n\n allowPlainText(value: boolean) {\n this.#allowPlainText = value;\n return this;\n }\n requireSchema(value: boolean) {\n this.#requireSchema = value;\n return this;\n }\n\n url(url: string) {\n this.#url = url;\n return this;\n }\n\n sharedOnBeforeSend(hook: RequestHook) {\n this.#onBeforeSend.push(hook);\n return this;\n }\n\n sharedOnReceiveResponse(hook: ResponseHook<unknown>) {\n this.#onAfterSend.push(hook);\n return this;\n }\n\n onBeforeSend(hook: RequestHook) {\n return this.builder().onBeforeSend(hook);\n }\n\n onReceiveResponse(hook: ResponseHook<unknown>) {\n return this.builder().onReceivedResponse(hook);\n }\n\n sharedSchema(parser: SchemaParser, ...codes: StatusCode[]): HTTP;\n sharedSchema(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): HTTP;\n sharedSchema(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.#schemaMap.register(parser, ...(args as any));\n return this;\n }\n\n schema(parser: SchemaParser, ...codes: StatusCode[]): HTTPRequestBuilder;\n schema(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): HTTPRequestBuilder;\n schema(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return this.builder().schema(parser, ...(args as any));\n }\n\n sharedRoute(...route: string[]) {\n this.#route.push(...route);\n return this;\n }\n\n param(name: string, value: string) {\n return this.builder().param(name, value);\n }\n\n params(dict: Record<string, string>) {\n return this.builder().params(dict);\n }\n\n data<T>(data: T) {\n return this.builder().data(data);\n }\n\n sharedHeader(name: string, value: string | DynamicHeader) {\n this.#headers.set(name, value);\n return this;\n }\n\n route(...route: (string | number | boolean)[]) {\n return this.builder().route(...route);\n }\n\n header<T>(name: string, value: T) {\n return this.builder().header(name, value);\n }\n\n headers(dict: Record<string, string>) {\n return this.builder().headers(dict);\n }\n\n get() {\n return this.builder().get();\n }\n\n private builder() {\n const headers = this.convertFactoriesToString();\n return new HTTPRequestBuilder(this.#schemaMap)\n .url(this.#url)\n .route(...this.#route)\n .allowPlainText(this.#allowPlainText)\n .headers(headers)\n .requireSchema(this.#requireSchema)\n .onBeforeSend(...this.#onBeforeSend)\n .onReceivedResponse(...this.#onAfterSend);\n }\n\n private convertFactoriesToString() {\n const dict: Record<string, string> = {};\n for (const [key, value] of this.#headers.entries()) {\n dict[key] = typeof value === \"string\" ? value : value();\n }\n return dict;\n }\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport { AxiosRequestConfig, Method, ResponseType } from \"axios\";\nimport { urlJoinP } from \"url-join-ts\";\nimport { HTTPResponse } from \"./http.response\";\nimport { SchemaMap } from \"./schema.map\";\nimport {\n RequestHook,\n RequestState,\n ResponseHook,\n SchemaParser,\n StatusCode\n} from \"./types\";\nimport { transformResponse } from \"./transform-response\";\nimport { AxiosExecutor } from \"./axios-executor\";\nimport { Fixture, INJECTION_SCOPE } from \"@autometa/injection\";\n\n@Fixture(INJECTION_SCOPE.TRANSIENT)\nexport class HTTPRequestBuilder {\n #headers = new Map<string, string>();\n #params = new Map<string, unknown>();\n #url: string;\n #route: string[] = [];\n #method: Method;\n #schemaMap = new SchemaMap();\n #responseType: ResponseType | undefined = \"json\";\n #data: unknown;\n #requireSchema = false;\n #allowPlainText = false;\n #onBeforeSend: RequestHook[] = [];\n #onAfterSend: ResponseHook<unknown>[] = [];\n constructor(map: SchemaMap) {\n this.#schemaMap = new SchemaMap().including(map);\n }\n requireSchema(value: boolean) {\n this.#requireSchema = value;\n return this;\n }\n get currentState(): RequestState {\n const fullUrl = this.currentUrl;\n return {\n headers: Object.fromEntries(this.#headers),\n params: Object.fromEntries(this.#params),\n url: this.#url,\n route: this.#route,\n responseType: this.#responseType,\n data: this.#data,\n method: this.#method,\n fullUrl\n };\n }\n\n get currentUrl() {\n const params = Object.fromEntries(this.#params);\n return urlJoinP(this.#url, this.#route, params);\n }\n\n url(url: string) {\n this.#url = url;\n return this;\n }\n\n allowPlainText(value: boolean) {\n this.#allowPlainText = value;\n return this;\n }\n\n schema(parser: SchemaParser, ...codes: StatusCode[]): HTTPRequestBuilder;\n schema(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): HTTPRequestBuilder;\n\n schema(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n this.#schemaMap.register(parser, ...args);\n return this;\n }\n\n onBeforeSend(...hook: RequestHook[]) {\n this.#onBeforeSend.push(...hook);\n return this;\n }\n\n onReceivedResponse(...hook: ResponseHook<unknown>[]) {\n this.#onAfterSend.push(...hook);\n return this;\n }\n\n route(...route: (string | number | boolean)[]) {\n this.#route.push(...route.map((it) => `${it}`));\n return this;\n }\n\n header<T>(name: string, value: T) {\n const val = Array.isArray(value) ? value.join(\",\") : `${value}`;\n this.#headers.set(name, val);\n return this;\n }\n\n headers(dict: Record<string, string>) {\n Object.entries(dict).forEach(([name, value]) =>\n this.#headers.set(name, value)\n );\n return this;\n }\n\n param<T>(name: string, value: T) {\n this.#params.set(name, value);\n return this;\n }\n\n params(dict: Record<string, unknown>) {\n Object.entries(dict).forEach(([name, value]) => this.param(name, value));\n return this;\n }\n\n data<T>(data: T) {\n this.#data = data;\n return this;\n }\n\n async post<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"POST\");\n }\n\n async get<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"GET\");\n }\n\n async delete<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"DELETE\");\n }\n\n async put<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"PUT\");\n }\n\n async patch<TReturn>(): Promise<HTTPResponse<TReturn>> {\n return this._request(\"PATCH\");\n }\n private async _request<T>(method: Method) {\n this.#method = method;\n\n const options: AxiosRequestConfig = this.constructOptions<T>(method);\n this.tryRunBeforeHooks();\n const executor = new AxiosExecutor(\n options,\n this.#schemaMap,\n this.currentState,\n this.#requireSchema\n );\n await executor.tryRequest<T>();\n if (executor.requestSucceeded && !executor.validationFailed) {\n const response = executor.getValidatedResponse<T>();\n this.tryRunAfterHooks<T>(response);\n return response;\n }\n if (executor.requestSucceeded) {\n const response = executor.getResponse<T>();\n // this.tryOnValidationFailed(response);\n this.tryRunAfterHooks<T>(response);\n }\n throw executor.error;\n }\n\n private constructOptions<T>(method: string): AxiosRequestConfig<T> {\n const url = this.currentUrl;\n const headers = this.#headers && Object.fromEntries(this.#headers);\n const responseType = this.#responseType;\n const data = this.#data as T;\n return {\n method,\n url,\n headers,\n data,\n responseType,\n validateStatus: function (status) {\n return status >= 100 && status < 500;\n },\n transformResponse: transformResponse.bind(null, this.#allowPlainText)\n };\n }\n\n private tryRunBeforeHooks() {\n let index = 0;\n try {\n for (const hook of this.#onBeforeSend) {\n hook(this.currentState);\n index++;\n }\n } catch (e) {\n const error = e as Error;\n const message = `HTTP Client 'onBeforeRequest' experienced an error at listener count ${index}`;\n throw new AutomationError(message, { cause: error });\n }\n }\n private tryRunAfterHooks<T>(response: HTTPResponse<T>) {\n let index = 0;\n try {\n for (const hook of this.#onAfterSend) {\n hook(response);\n index++;\n }\n } catch (e) {\n const error = e as Error;\n const message = `HTTP Client 'onRequestReceived' experienced an error at listener count ${index}`;\n throw new AutomationError(message, { cause: error });\n }\n }\n}\n","import { StatusCode, SchemaParser } from \"./types\";\nimport { AutomationError } from \"@autometa/errors\";\nimport { StatusCodes } from \"@autometa/status-codes\";\n\nexport class SchemaMap {\n #children: SchemaMap[] = [];\n #map: Map<StatusCode, SchemaParser> = new Map();\n register(\n parser: SchemaParser,\n ...codes: StatusCode[]\n ): (typeof parser)[\"parse\"];\n register(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ): (typeof parser)[\"parse\"];\n register(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ): (typeof parser)[\"parse\"];\n register(\n parser: SchemaParser,\n ...args: (StatusCode | { from: StatusCode; to: StatusCode })[]\n ) {\n args.forEach((arg) => {\n if (typeof arg === \"number\") {\n this.registerSingle(parser, arg);\n } else {\n this.registerRange(parser, arg);\n }\n });\n return parser.parse;\n }\n\n registerSingle(parser: SchemaParser, ...codes: StatusCode[]) {\n codes.forEach((code) => {\n if (this.#map.has(code)) {\n throw new AutomationError(\n `Status code ${code} is already registered with a parser`\n );\n }\n assertIsStatusCode(code);\n this.#map.set(code, parser);\n });\n }\n\n including(map: SchemaMap) {\n this.#children.includes(map);\n return this;\n }\n registerRange(\n parser: SchemaParser,\n ...range: { from: StatusCode; to: StatusCode }[]\n ) {\n range.forEach(({ from, to }) => {\n assertIsStatusCode(from);\n assertIsStatusCode(to);\n for (let i = from; i <= to; i++) {\n if (!IsStatusCode(i)) {\n continue;\n }\n if (this.#map.has(i)) {\n throw new AutomationError(\n `Status code ${i} is already registered with a parser`\n );\n }\n this.#map.set(i, parser);\n }\n });\n }\n\n get(status: StatusCode): SchemaParser | undefined {\n assertIsStatusCode(status);\n const local = this.#map.get(status);\n if (local) {\n return local;\n }\n const nested = this.#children.find((it) => it.#map.has(status));\n return nested?.get(status);\n }\n\n validate<T>(status: StatusCode, response: T, strict: boolean): T {\n const parser = this.get(status);\n if (!parser) {\n if (!strict) {\n return response;\n }\n throw new AutomationError(\n `No schema parser registered for status code ${status} and 'requireSchema' is set to true`\n );\n }\n return parser.parse(response) as T;\n }\n}\n\nexport function assertIsStatusCode(value: number): asserts value is StatusCode {\n const result = Object.values(StatusCodes)\n .map((it) => it.status as number)\n .includes(value);\n if (!result) {\n throw new AutomationError(\n `Expected status code ${value} to be a valid status code, but it is not a known HTTP codeF`\n );\n }\n}\n\nexport function IsStatusCode(value: number): value is StatusCode {\n return Object.values(StatusCodes)\n .map((it) => it.status as number)\n .includes(value);\n}\n","import { AutomationError } from \"@autometa/errors\";\nimport isJson from \"@stdlib/assert-is-json\";\nimport { highlight } from \"cli-highlight\";\n\nexport function transformResponse(\n allowPlainText: boolean,\n data: string | undefined | null\n) {\n if (data === null) {\n return null;\n }\n if (data === undefined) {\n return undefined;\n }\n if (data === \"\") {\n return data;\n }\n if (isJson(data)) {\n return JSON.parse(data);\n }\n if ([\"true\", \"false\"].includes(data)) {\n return JSON.parse(data);\n }\n if (/^\\d*\\.?\\d+$/.test(data)) {\n return JSON.parse(data);\n }\n\n if (allowPlainText) {\n return data;\n }\n const response = highlight(data, { language: \"html\" });\n const message = [\n `Could not parse a response as json, and this request was not configured to allow plain text responses.`,\n `To allow plain text responses, use the 'allowPlainText' method on the HTTP client.`,\n \" \",\n response\n ];\n throw new AutomationError(message.join(\"\\n\"));\n}\n","import axios, { AxiosRequestConfig, AxiosResponse } from \"axios\";\nimport { SchemaMap } from \"./schema.map\";\nimport type { RequestState, StatusCode } from \"./types\";\nimport { plainToInstance } from \"class-transformer\";\nimport { HTTPResponse } from \"./http.response\";\nimport { AutomationError } from \"@autometa/errors\";\ntype ExecutorState = {\n response: AxiosResponse<unknown>;\n validated: unknown;\n error: Error | undefined;\n};\nexport class AxiosExecutor {\n #result: ExecutorState = {} as ExecutorState;\n constructor(\n private options: AxiosRequestConfig,\n private schemaMap: SchemaMap,\n private requestState: RequestState,\n private requireSchema: boolean\n ) {}\n\n get error() {\n return this.#result.error;\n }\n get requestSucceeded() {\n return this.#result.response !== undefined;\n }\n\n get validationFailed() {\n return this.#result.validated === undefined;\n }\n\n async tryRequest<T>() {\n try {\n this.#result.response = await axios<T>(this.options);\n this.tryValidate();\n } catch (e) {\n if (this.#result.error) {\n return;\n }\n const { method, fullUrl, data, headers } = this.requestState;\n const body = JSON.stringify(data, null, 2);\n const headersString = JSON.stringify(headers, null, 2);\n const message = `Failed to send request to ${method}:${fullUrl}.\nheaders:\n${headersString}\n \nbody: \n${body}`;\n this.#result.error = new AutomationError(message, { cause: e as Error });\n }\n }\n\n async tryValidate() {\n const { status, data } = this.#result.response;\n const { method, fullUrl } = this.requestState;\n try {\n this.#result.validated = this.schemaMap.validate(\n status as StatusCode,\n data,\n this.requireSchema\n );\n } catch (e) {\n const error = e as Error;\n const message = `Failed to validate response from ${method}:${fullUrl}.\n \nProvided body was:\n${JSON.stringify(data, null, 2)}`;\n this.#result.error = new AutomationError(message, { cause: error });\n }\n }\n\n getValidatedResponse<T>() {\n const { status, statusText, headers } = this.#result.response;\n const { validated: data } = this.#result;\n const { fullUrl: url, method } = this.requestState;\n return plainToInstance(HTTPResponse, {\n status,\n statusText,\n headers,\n data,\n request: {\n url,\n method\n }\n }) as HTTPResponse<T>;\n }\n\n getResponse<T>() {\n const { status, statusText, headers, data } = this.#result.response;\n const { fullUrl: url, method } = this.requestState;\n return plainToInstance(\n HTTPResponse,\n {\n status,\n statusText,\n headers,\n data,\n request: {\n url,\n method\n }\n },\n { excludeExtraneousValues: true }\n ) as HTTPResponse<T>;\n }\n}\n"],"mappings":"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","names":["import_injection","import_errors","import_errors","isJson","import_errors","axios","_url","_route","_headers","_requireSchema","_schemaMap","_onBeforeSend","_onAfterSend","_allowPlainText"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autometa/http",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "An Axios Based HTTP Client for Autometa",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -28,8 +28,9 @@
|
|
|
28
28
|
"vitest": "0.34.6"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@autometa/app": "^0.
|
|
31
|
+
"@autometa/app": "^0.3.1",
|
|
32
32
|
"@autometa/errors": "^0.2.2",
|
|
33
|
+
"@autometa/injection": "^0.1.0",
|
|
33
34
|
"@autometa/status-codes": "^0.4.1",
|
|
34
35
|
"@stdlib/assert-is-json": "^0.1.1",
|
|
35
36
|
"axios": "^1.5.1",
|